一、前言
在上一篇博客ORB-SLAM2 在线构建稠密点云(室内RGBD篇)中介绍了如何通过深度相机和ORB_SLAM2实现稠密点云建图,并转换为octomap在ROS中显示,那么这篇文章将使用双目相机实现室外的稠密点云构建。与深度相机不同,双目相机并不直接提供深度数据来计算点云,因此需要使用双目视差来计算深度数据。

安装过程(和室内RGBD一样的代码)
1、首先需要安装PCL点云库,可以参考博客《Ubuntu18.04安装PCL》。不过安装了ROS之后就已经把PCL安装好了。

2、下载修改后的orb_slam2源码

git clone https://gitee.com/zeende/orb_slam2

下载后源码可以不放在自己的ROS workstation中,具体的编译过程参考之前的博客《ORB_SLAM2配置过程》(应该没有bug了,编译卡死的话改成make -j1,单线程)

3、下载稠密点云构建的ROS功能包 orbslam2_pointcloud_mapping 和双目深度计算功能包

git clone https://gitee.com/zeende/orbslam2_pointcloud_mapping
git clone https://github.com/jeffdelmerico/cyphy-elas-ros.git

Note:下载后把下面代码中点云保存路径改成自己的

~/catkin_ws/src/orbslam2_pointcloud_mapping/src/mappingWithPointCloud.cpp

命名空间也修改为自己数据集发布的话题(我的是kitti)

~/catkin_ws/src/cyphy-elas-ros/elas_ros/launch/elas.launch

二、整体思路
orb_slam2提供位姿,elas_ros提供深度数据,mappingWithPointCloud节点实现三维点云拼接。

具体过程
TODO

三、数据集测试
1、制作数据集的bag文件
参考《使用kitti2bag和RVIZ播放KITTI数据集》

2、修改相机配置文件
在 ORB_SLAM2/Examples/Stereo 目录下新建文件 .yaml ,根据你使用的相机矫正参数,修改左右目相机的内参数,参数含义可以参考Calibration and setting suggestions #89  (使用数据集的话根据数据集提供的校准文件修改)

Note:Camera.bf 中的b指基线baseline(单位:米),f 是焦距fx(x轴和y轴差距不大),bf=b*f,和ThDepth一起决定了深度点的范围:bf * ThDepth / fx,即大致为b * ThDepth。例如,在EuRoC.yaml中 fx为435.2,基线长度是11cm(也就是0.11m),因此的bf为47.9。又因为有效深度=bf * ThDepth / fx = 3.85米,因此计算出ThDepth为35;

3、运行数据集测试
(1) roscore

(2)进入数据集文件夹,启动bag,然后按空格暂停

./bag.sh

(3)进入ORB_SLAM2文件夹,启动Stereo双目节点

rosrun ORB_SLAM2 Stereo Vocabulary/ORBvoc.txt Examples/Stereo/KITTI00-02.yaml false

(4)启动深度计算节点

roslaunch elas_ros elas.launch

(5)启动建图节点

roslaunch pointcloud_mapping kitti.launch

4、运行结果TODO

四、问题TODO