首先大部分工作是参考网上资源,毕竟这玩意一个小白难搞。
由于orbslam2只开源了稀疏点云的构建,但如果要用于机器人导航,那么还需要从稀疏点云发展成稠密点云,构建出真实环境的风貌,但考虑到点云的数据量是庞大的,所以更好的方法是构造类似激光建图的二维平面地图,目前我知识浅薄,只能想到构造3D点云,然后降维成二维地图,以便导航之用。【本文章只成功走通3d点云的实时构建与保存,任重而道远阿slamer们~】
简单记录如下:
1------PCL点云库。这个需要自行百度了。但如果安装的ROS full版本,理论上pcl也安装好了,我的是pcl1.8,好像是;
2------oorbslam2(修改版本),感谢这个团队做出的工作,具体下载方式如下:
git clone https://gitee.com/zeende/orb_slam2
具体的编译过程,可以参考ORBSLAM2源码编译,见https://github.com/raulmur/ORB_SLAM2
3.------下载点云构建的ROS功能包orbslam2_pointcloud_mapping 和双目深度计算功能包cyphy-elas-ros,下载如下:
git clone https://gitee.com/zeende/orbslam2_pointcloud_mapping
git clone https://github.com/jeffdelmerico/cyphy-elas-ros.git
下载完成后,触发的都是launch文件,因此需要按照自己需求进行更改:
- 点云的保存路径(~/catkin_ws/src/orbslam2_pointcloud_mapping/src/mappingWithPointCloud.cpp)
465行的string save_path = "xxx/resultPointCloudFile_KITTI.pcd";xxx代表自己想设置的路径
- elas订阅节点修改(~/catkin_ws/src/cyphy-elas-ros/elas_ros/launch/elas.launch)
(1)<arg name="stereo" default="zed/zed_node"/> 名称空间改为自己相机下的名称
(2)如果用的是相机输出的矫正后的图像,那么注释掉下面这一块
<!-- <group ns="$(arg stereo)/left">
<node name="left_rect" pkg="image_proc" type="image_proc"/>
</group>
<group ns="$(arg stereo)/right">
<node name="right_rect" pkg="image_proc" type="image_proc"/>
</group> 这一块注释掉了-->
(3)这一块最后一行的话题由原来的image_rect改为image_rect_color(与zed相机话题对应)
<node name="$(arg elas_ns)" pkg="elas_ros" type="elas_ros" output="screen">
<remap from="stereo" to="$(arg stereo)"/>
<remap from="image" to="image_rect_color"/>
4-------最后一步,依次启动各个节点
roscore //启动ros master
roslaunch zed_wrapper zed.launch //启动自己的相机
rosrun ORB_SLAM2 Stereo ~/catkin_ws/src/orb_slam2/Vocabulary/ORBvoc.txt path_to_yaml false //启动orbslam2的ros节点
roslaunch elas_ros elas.launch //启动elas计算视差
roslaunch pointcloud_mapping kitti.launch //启动点云稠密重建
---至此,就可以成功看到点云图像,后续可以研究:
(1)3d点云的研究,提取相关数据(但数据量太大,而且本文章所建立的应该没有回环,所以还要继续探索点云可靠性等);
(2)3d点云构建八叉树地图(一种立体概率占据地图),内存消耗少,且能够实现三维无人机导航需求;
(3)3d点云映射为2d扫描图(类似激光平面建图那种),实现二维车辆导航。
参考下面的文章以及与作者沟通所得:
https://blog.csdn.net/qq_36754438/article/details/113833019?spm=1001.2014.3001.5501