在这一篇博客(我参考了各位大佬的博客)主要在ROS环境下通过读取深度相机的数据,基于ORB-SLAM2这个框架实现在线构建点云地图(稀疏和稠密点云)和八叉树地图的构建(Octomap,未来用于路径规划)。涉及到两个代码,一个是修改后的ORB_SLAM2[1]和ROS节点orbslam2_pointcloud[2],这两部分代码(也包括了双目的部分)我都放在了码云上面了。
ORB_SLAM2代码安装(稠密点云版)
由于ORB-SLAM2在构建的时候只在地图中保留了ORB特征,建立稀疏点云地图,好在ORB-SLAM2这个框架结构比较清晰,只需要单独添加一个线程用于维护点云地图,将ORB-SLAM2生成的关键帧传入点云地图构建线程,利用传入关键帧来生成点云地图,这就是基本思路了。其实这个工作高翔博士(ORB_SLAM2_PointCloud )在早期就已经做过了,并上传到了github中。但是使用这个方法有以下两个问题:
- 编译过程不方便(各种.so文件以及各种.h头文件需要导入ROS工作空间)
- 只支持RGBD模式,我们是希望能够在室外也可以用,这就需要系统对双目相机的支持。
?
那么在本文中,我们对原版的ORB_SLAM2的 ROS 部分做了修改:
- 在节点中增加了关键帧输出接口
- 增加了ROS的位姿发布话题
?
然后将稠密点云的构建放在ROS中,写成独立的功能包 orbslam2_pointcloud_mapping
我的运行环境:Ubuntu18.04 + ROS Melodic + PCL1.8
安装过程
1、首先需要安装PCL点云库,可以参考博客《Ubuntu18.04安装PC》。不过安装了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
Note:下载后把下面代码中点云保存路径改成自己的
路径:orbslam2_pointcloud_mapping/src/PointCloudMapper.cc
4、catkin_make 编译ROS工作空间
整体思路
整个建图过程分为三个部分:第一部分为驱动部分,负责驱动传感器,这里由数据集代替;第二部分为位姿估计,由ORB_SLAM2获取相机数据,输出相机位姿;最后由建图部分实现三维场景恢复,为复杂场景机器人导航提供环境地图。
具体内容:有空再写
数据集测试
我用的数据集
链接: https://pan.baidu.com/s/1awd_quLk_DbrUYtR3PT0Ig 密码: l4r2
--来自百度网盘超级会员V4的分享
首先 roscore ;
进入ORB_SLAM2下,执行
rosrun ORB_SLAM2 astra Vocabulary/ORBvoc.txt Examples/ROS/ORB_SLAM2/TUM1_ROSbag.yaml
启动建图节点
roslaunch pointcloud_mapping tum1.launch
进入数据集bag的目录
rosbag play rgbd_dataset_freiburg1_desk.bag
运行效果如下:
?
TODO
参考链接:ORB-SLAM2 在线构建稠密点云(一)