这个模组其实是将 2 个 CSI 相机和 1 个 IMU 做到同一块电路板上,但并没有硬件同步。有硬件同步的双目深度相机如 ZED、小觅、INDEMIND 效果更好,但价格都较高。
得益于 GPU 加速,使用廉价的双目模组也能取得很好的效果。相机的读取和解码通过 gscam 包使用了 Gstreamer,尽管没有硬件同步,左右相机间也几乎没有延迟。
在整个流程中,图像获取和处理部分都使用了 GPU。我们目前建议用 Jetson Xavier NX 进行测试。
要跑整套流程,可以参考以下主要步骤:
apt 安装 ROS 非 OpenCV 依赖的部分
编译安装依赖 OpenCV 的 ROS 包
双目相机标定
运行 Pipeline
用这种特殊的方式安装部分 ROS 包是因为 JetPack 4.3 和 4.4 预装的是 OpenCV 4.1,而 ROS Melodic 预编译用的是 OpenCV 3。
用 apt 安装使用相关包一般不会有问题,但会导致我们用到的 gpu_stereo_image_proc 无法编译。
使用 jetson_csi_stereo.launch 即可以启动 2 个相机,其中包含 Gstreamer 的配置字符串。
相机图像消息分别发布到 /stereo/left/image_raw和/stereo/right/image_raw,可以使用 rqt 来查看。这里发布的是原始图像,未经过校准,此时的 camera_info 也是空的或错误的。
建议先检查一下左右图像有没有搞反。如果在 Jetson Xavier NX 开发者套件上,CAM0 和 CAM1 实际反了,需要在 launch 文件修改 Gstreamer 字符串中的 sensor-id。如果相机安装方式不同,导致图像颠倒,flip-method 也要修改。
接下来,为了能顺利进行视差计算,我们需要对双目相机进行标定。标定包括两个相机的内参和外参。这里直接使用 ROS 的相机标定工具,参考 ROS 中的教程即可。