使用 ArduCAM ToF Camera 在 Raspberry Pi CM5 上进行深度感测验证

ArduCAM 品牌还销售一种用于 Raspberry Pi 的摄像头模块,有些人可能已经用过了。
这一次,它是同一个摄像头模块,但采用了一种略微特殊的摄像头,称为 ToF,简单地说,这是一种可以分辨被拍摄物体深度的摄像头。

照片显示的是用于工业级 Raspberry Pi(CM5)的 PL-R5 BASE BOARD。也可使用 FPC 电缆连接市售的 Raspberry Pi。
与普通摄像头模块不同的是,摄像头本身也需要电源,因此需要将其连接到 GPIO 引脚上以获得电源。

ToF 与激光雷达的区别

与 ToF 相机类似的还有激光雷达(LiDAR)。
很难区分两者,因为两者都是利用激光的反射。
在某些情况下,两者并无太大区别,但由于它们的特性不同,各有各的适用环境。

一般来说,较小的站点更可能选择 ToF,而较大的站点更可能选择 LiDAR。

不过,根据使用方式的不同,它可以适用于任何一种情况。
例如,根据性能的不同,激光雷达也有中间类别。根据产品的不同,会出现 “小型激光雷达可以适应 “或 “大型激光雷达使用 ToF 即可 “的情况。
最终的决定将基于各种环境条件,例如您希望达到的范围和精度,以及安装和运行成本。

比较项目小型场地(ToFs 易于使用)大型场地(激光雷达易于使用)
距离范围几厘米至几十米范围内几十米到几百米以上
所需的精确度几厘米到几十厘米高精度厘米订单
数据请求单点距离测量、中低分辨率深度图高密度三维点云,大范围测绘
主要制约因素成本低、耗电少、体积小、安装方便安装空间、供电能力、激光安全措施、可维护性
安装费用相对较低相对较高
设备尺寸易于微型化体积往往较大
首选环境室内、短距离、嵌入式应用室外、大面积、高海拔、大空间
典型应用近距离检测、短距离避障、手势识别、货架管理、嵌入式传感器自动驾驶、地形测量、户外监控、仓库整体测绘
与 Raspberry Pi 兼容良好,取决于应用(昂贵且易受高负荷影响)
适合以下情况的决策轴心我想轻松获取距离。我想用高精度 3D 测量仪测量大面积区域。

ArduCAM ToF 摄像机 “产品规格

以下是 ArduCamToF 摄像头的详细信息。
与 Raspberry Pi 摄像头模块终端的连接非常简单,它与基于 V4L2 的视频内核设备兼容,因此你可以立即试用。

目录
产品概览ToF 方法 深度相机模块
主要功能实时点云(点云)和深度图输出
有效像素数240 × 180
传感器尺寸1/6 英寸
树莓派的分辨率/FPS240 × 180 @ 30fps
传感器最大帧频120fps
最大深度帧速率(Raspberry Pi)30fps (4 相)
最大深度帧速率(NVIDIA Jetson)30fps (4 相)
测量距离远摄模式:4 米 / 近摄模式: 2 米
调制频率75MHz / 37.5MHz
视角对角线角度 70°。
光源内置 940nm VCSEL 激光器
室内和室外使用是(无需外部照明)
界面MIPI(双通道)
输出格式四相 RAW/深度帧/灰度振幅帧
Linux 支持基于 V4L2 的视频内核设备
SDKC / C++ / Python
ROS 支持已支持
支持的操作系统树莓派操作系统书虫/牛眼(32 位/64 位),自 2022/01/28 起
支持的硬件Raspberry Pi 5 / 4 / 2 / 3 / CM3 / CM4 / Zero W / Zero 2 W / NVIDIA Jetson
功耗(TDP)3.5W
推荐电源5V / 4A 或以上
基底尺寸38 毫米 x 38 毫米

当时的环境

  • 工业级 Raspberry Pi (CM5)PL-R5 底板
  • ArduCAM ToF 摄像机(需要电源)
  • Raspberry Pi OS Trixie
    – 型号:Raspberry Pi Compute Module 5 Rev 1.0
    – OS:Debian GNU/Linux 13 (trixie)
    – 内核:6.12.54-v8-16k+
    – Python3.13

注:我们尝试过使用最新的 Trixie,但目前书虫或牛眼的早期版本运行得更稳定。

添加到 Config.txt

您需要在 config.txt 中添加摄像机模块的说明。该说明在重启时有效。

sudo nano /boot/firmfare/config.txt
dtoverlay=arducam-pivariety,cam0

试用示例程序(C/C++)

./Install_dependencies.sh
通过 git 克隆并运行 shell 脚本进行安装和构建,即可启动示例应用程序。

C/C++ 示例程序可以正常运行,因为我们找到了 C/C++ 示例程序使用的共享库libArducamDepthCamera.solibArducamDepthCamera4C.so

Trixie 环境,Python 示例程序和 C++ 点云需要额外的支持和代码修改

github: https://github.com/ArduCAM/Arducam_tof_camera/
SDK: https://docs.arducam.com/Raspberry-Pi-Camera/Tof-camera/Arducam-ToF- Camera-SDK/

git clone https://github.com/ArduCAM/Arducam_tof_camera.git
cd Arducam_tof_camera
./Install_dependencies.sh
./compile.sh

示例程序(C/C++)可以单独运行,但运行所有三个程序的命令会在./compile.sh 之后出现在终端中。

/home/$USER/Arducam_tof_camera/build/example/cpp/example

个案:

  cd build/example/cpp
  ./preview_depth
  # or
  ./capture_raw

执行屏幕

执行后,屏幕上会出现三个窗口。

如果将手放在镜头前,就能通过颜色分辨出深度的不同。

需要支持 Python 示例程序

Python 示例程序 (preview_depth.py) 在此环境下无法正常运行。

错误:

ModuleNotFoundError: No module named 'ArducamDepthCamera'
# or
ModuleNotFoundError: No module named 'cv2'

Python 示例import ArducamDepthCamera 需要一个为 Python 构建的扩展模块。
使用 Python 3.13 的 Raspberry Pi OS Trixie 没有为 Python 提供或安装该模块,这就是为什么ModuleNotFoundError 没有提供或安装该 Python 模块的原因。

我检查了一下,发现 PyPI 中有一个名为 arducamdepthcamera 的 Python 软件包,截至 2026 年 3 月的最新版本是 0.1.24 (https://pypi.org/project/arducamdepthcamera/)

即使是 Python 3.13,我也能通过--system-site-packages 创建虚拟环境,将 Python 绑定与 apt 版本的 OpenCV 和 pip 版本的 ArduCAM 一起使用。
由于 pip 版本的 opencv-python 在 Raspberry Pi 上可能比较笨重且不稳定,因此可以在虚拟环境中使用系统的 apt 版本。

pip install --upgrade pip
python3 -m venv --system-site-packages ~/venv-arducam # Create only once (initial setup)
source ~/venv-arducam/bin/activate # Run every time, or add an alias to .bashrc
pip install arducamdepthcamera # Install only once

我会检查的。

python3 -c "import numpy; print(numpy.__version__, numpy.__file__)"
python3 -c "import cv2; print(cv2.__version__)"
python3 -c "import ArducamDepthCamera as ac; print(ac)"

因此,numpy 在 venv 内使用,cv2 在 4.10.0 和系统端使用,最后一个 ArducamDepthCamera 也在 venv 内使用。

1.26.4 /home/pi/venv-arducam/lib/python3.13/site-packages/numpy/__init__.py
4.10.0
<module 'ArducamDepthCamera' from '/home/pi/venv-arducam/lib/python3.13/site-packages/ArducamDepthCamera/__init__.py'>

运行 Python 示例程序

重建后,我运行了 Python 示例程序并成功启动。

python3 ~/Arducam_tof_camera/example/python/preview_depth.py

arducamdepthcamera 安装在虚拟环境中,必须在运行 Python 示例之前激活。

source ~/venv-arducam/bin/activate

如果不在这种状态下运行,系统侧 Python 将无法找到ArducamDepthCamera ,并将再次ModuleNotFoundError

点云


经过调查,我们发现 Raspberry Pi OS Trixie 中的 Open3D API 规范发生了变化,通过修改示例代码端的描述以符合当前的 Open3D,问题得以解决。

需要纠正的问题

在发生错误的~/Arducam_tof_camera/open3d_preview/preview_pointcloud.cpp第 159~ 行的 case 语句中,需要替换第 160 行起的六行。

        case 's': {
            open3d::io::WritePointCloudToPCD( //
                "pointcloud.pcd", pcd,
                {
                    open3d::io::WritePointCloudOption::IsAscii::Ascii,
                    open3d::io::WritePointCloudOption::Compressed::Uncompressed,
                });
        } break;
        case 's': {
            open3d::io::WritePointCloudOption option(
                "pcd",
                true,   // write_ascii
                false,  // compressed
                false   // print_progress
            );

            open3d::io::WritePointCloudToPCD(
                "pointcloud.pcd",
                pcd,
                option);
        } break;

再次建设。

./compile_pointcloud.sh


/home/$USER/Arducam_tof_camera/build/open3d_preview/preview_pointcloud下面是一个程序的示例,该程序可以使用

[ 50%] Building CXX object open3d_preview/CMakeFiles/preview_pointcloud.dir/preview_pointcloud.cpp.o
[100%] Linking CXX executable preview_pointcloud
[100%] Built target preview_pointcloud
== Build success
== Run /home/pi/Arducam_tof_camera/build/open3d_preview/preview_pointcloud

深度图像

在深度图像中,物体的距离用颜色表示。


最大范围的默认值为 4,000/6,000。

对比三张并排图像(分别为 1,378、2,082 和 4,000),我们可以发现,最大值越高,红色调越多,而值越低,黑色和蓝色调越多。
将一只手放在眼前,当最大范围为 4000 时,距离透视不是那么清晰,但当最大范围为 1378 左右时,前后的颜色差异就清晰可见了。透视就是这么简单。


观看滑动条的操作视频。

另外,你能从视频中看到手由近到远的颜色变化吗?

ToF 相机的工业应用

ToF 相机可在中近距离空间提供低功耗和实时深度测量。

在工业应用中,它适用于 “希望轻松获取 3D 信息的场所”。

例如,可以假设以下情况

  • 确定输送线(传送带)上的物体(有无和位置)
  • 简单的对象-对象对齐
  • 简单的库存控制(如空货架检测)
  • AGV 和机器人避障
  • 监测人与人之间的距离,以了解何时人多拥挤

它适用于需要节省空间、低成本和易于集成的设施和设备。

与传统相机(RGB)不同的是,人体检测是基于距离信息(颜色)而不是脸部或衣服,因此可以轻松确定人数和位置,同时保持隐私

虽然激光雷达在大范围、高精度测量方面具有优势,但作为一种可集成到野外设备中的实用传感器,简单的 ToF 相机也是一种可行的选择。


文章由拉斯必达提供

非工程师也能愉快使用的 Raspberry Pi 信息网站 raspida.com一个非工程师也能享受和使用的 Raspberry Pi 信息网站。他还为 PiLink 网站提供有关工业用 Raspberry Pi 的技术博客文章