双目相机计算稠密深度点云

 
  • 1、ZED相机驱动包
 
  • 2、校准ZED相机
 
  • 3、运行ELAS
 
  • 参考资料
 
接着上一篇的文章实现利用真实的相机计算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 表示是格子的大小,我这里使用的是8x6的棋盘格,每个格子是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)   如果下载代码和数据较慢,可在评论区留下邮箱,可将代码和数据测试包发送到邮箱。