双目相机计算稠密深度点云
接着上一篇的文章实现利用真实的相机计算3D点云,实验中我们使用的是ZED的相机。
1、ZED相机驱动包
首先我们需要在电脑上安装ZED相机的驱动包,这里我们只安装CPU版本的驱动包,读取出左右目图像即可,驱动包地址 [1]
```
cd catkin_ws/src
git clone https://github.com/transcendrobotics/zed_cpu_ros
cd ..
catkin_make
```
在正确启动ZED相机以后,我们需要对相机的内外参数进行校准,在ZED的官网上也提供有出厂时候的标定值,可以通过相机上的序列号下载对应编号的文件,但是感觉那个不太准,所以最好还是自己标定一下。 注:这里我们使用的时候讲ZED相机设置为了1280*720的这个分辨率(zed_cpu_ros.launch文件中 resolution 参数的值为 2)。
2、校准ZED相机
在zed_cpu_ros包中launch文件夹中新建文件camera_calibration.launch并填入以下内容
<launch>
<include file="$(find zed_cpu_ros)/launch/zed_cpu_ros.launch"/>
<arg name="size" default="8x6"/>
<arg name="square" default="0.108"/>
<arg name="no-service-check" default="true"/>
<node pkg="camera_calibration" type="cameracalibrator.py" name="camera_calibration" output="screen" args="">
<remap from="right" to="/camera/right/image_raw"/>
<remap from="left" to="/camera/left/image_raw"/>
</node>
</launch>
其中size表示棋盘格的长宽尺寸,square 表示是格子的大小,我这里使用的是8×6的棋盘格,每个格子是108mm 接下来启动launch文件开始校准ZED相机
roslaunch zed_cpu_ros camera_calibration.launch
然后移动ZED相机等到右侧的 CALIBRATE 按钮变绿以后点击按钮就可以校准了。 校准完成以后可以看到此次校准的极线误差是多少,如下图:
一般来说 epi<0.2就差不多了,epi<0.15的算是很好的了。 在标定的过程中,建议使用大一点的标定板,然后重复校准几次,比较外参数是否稳定在一个范围。 在获得左右目的内外参数以后,把校准后的参数更新到zed_cpu_ros/config目录下的 left.yaml 和 right.yaml两个文件中。 然后设置zed_cpu_ros.launch文件中 use_zed_config参数的值为 false 让驱动节点使用我们刚刚更新的 left.yaml 和 right.yaml两个文件。
3、运行ELAS
接下来按照上一篇博客中的方法启动elas_ros就可以了,注意检查一下立体矫正以后输出的图像。 启动相机ROS驱动节点以后注意查看 camera_info话题是否有输出,ELAS运行的条件必须是: camera/left/image_raw camera/left/camera_info camera/right/image_raw camera/right/camera_info 下图是使用ZED相机在室外的一个结果,感觉这个相机的标定参数对输出的深度影响还是很大的,其次还有一个问题就是ZED相机左右目图像没有同步触发的,这个也可能造成深度输出效果不好。
参考资料
[1] https://github.com/transcendrobotics/zed_cpu_ros 如果大家觉得文章对你有所帮助,麻烦大家帮忙点个赞。O(∩_∩)O 欢迎大家在评论区交流讨论(cenruping@vip.qq.com) 如果下载代码和数据较慢,可在评论区留下邮箱,可将代码和数据测试包发送到邮箱。