由于ros的导航包需要的是稠密点云图,所以原版的ORB-SLAM2跑出来的结果不符合要求。
环境配置:
ubuntu18.04+ros melodic+vtk7.1.1
外加ros melodic自带的库(无需另外安装):opencv3.2.0、pcl1.8.1
以及配置ORB-SLAM2时已经安装过的库(上篇笔记):pangolin v0.5、eigen 3.3.7
!!!各个库版本一定要对应好,否则后续会出现很多问题。
一、下载源码
https://github.com/xiaobainixi/ORB-SLAM2_RGBD_DENSE_MAP.git
二、编译
编译过程与ORB-SLAM2类似,先是配置环境,在ORB-SLAM2的基础上增加了几个库,参考链接(安装库的过程很详细):
实测 (二)NVIDIA Xavier NX + D435i / 奥比中光Astrapro 相机+ ORB-SLAM 2 + 3 稠密回环建图_全日制一起混的博客-CSDN博客
首先编译非ros下的build.sh
在ORB-SLAM2_RGBD_DENSE_MAP-master文件夹下直接运行
chmod +x build.sh
./build.sh
如果出现错误
make[1]: *** [CMakeFiles/stereo_kitti.dir/all] Error 2
Makefile:90: recipe for target 'all' failed
make: *** [all] Error 2
Converting vocabulary to binary
./build.sh: 行 30: ./tools/bin_vocabulary: 权限不够
就依次编译,这样的话就能通过了,很奇怪不知道为什么。
//ORB-SLAM2_RGBD_DENSE_MAP-master文件夹下
cd Thirdparty/DBoW2
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make
//ORB-SLAM2_RGBD_DENSE_MAP-master文件夹下
cd Thirdparty/g2o
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make
//ORB-SLAM2_RGBD_DENSE_MAP-master文件夹下
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make
ORB-SLAM2_RGBD_DENSE_MAP-master文件夹下
./tools/bin_vocabulary
然后在ORB-SLAM2_RGBD_DENSE_MAP-master文件夹下打开终端,运行:
./bin/rgbd_tum Vocabulary/ORBvoc.bin Examples/RGB-D/TUM1.yaml rgbd_dataset_freiburg1_xyz Examples/RGB-D/associations/fr1_xyz.txt
运行结果:
可能会出现点云图都聚集一起的情况,将配置文件TUM1.yaml中的Viewer.KeyFrameLineWidth的数值设置为1。
viewer画面只有三色坐标轴,不显示点稠密点云图,按下r键即可出现,重新运行,大功告成!!!下图所示。结束后自动保存轨迹和pcd文件。
然后编译ros下的build_ros.sh
在编译过程中由于电脑配置较低,系统容易卡死,把build_ros.sh脚本中的make -j改为make,即可编译成功。
在编译过程最后可能会出现警告
/usr/bin/ld: warning: libboost_system.so.1.65.1., needed by /opt/ros/indigo/lib/libroscpp.so, may conflict with libboost_system.so.1.58.0
是由于最开始配置ORB-SLAM2时安装libboost库是1.65.1版本,而该项目需要的版本是1.58,此处先忽略该警告。
然后开始运行程序:
第一条语句在终端直接运行,
第二条语句在/home/ybl/ORB-SLAM2_RGBD_DENSE_MAP-master文件夹下重新打开终端执行,
第三条语句在/home/ybl/ORB-SLAM2_RGBD_DENSE_MAP-master文件夹下重新打开终端执行,按下空格键后图像显示在可视化窗口中。
roscore
rosrun ORB_SLAM21 RGBD Vocabulary/ORBvoc.bin Examples/ROS/ORB_SLAM21/Asus.yaml
rosbag play --pause rgbd_dataset_freiburg1_rpy.bag
出现错误:
error while loading shared libraries: libboost_system.so.1.58.0: cannot open shared object file
是由于系统中没有libboost_system.so.1.58.0文件,可用
locate libboost_system.so
查看该缺失文件所在地址,输出为
/usr/lib/x86_64-linux-gnu/libboost_system.so.1.65.1
/usr/lib/x86_64-linux-gnu/libboost_system.so
可查看到系统中只有1.65.1版本,libboost_system.so是软连接到libboost_system.so.1.65.1的,所以输入
sudo ln -s /usr/lib/x86_64-linux-gnu/libboost_system.so.1.65.1 /usr/lib/x86_64-linux-gnu/libboost_system.so.1.58.0
问题解决!
可能还会有libboost_filesystem.so.1.58.0和libopencv_core3.so.3.3出现同样的错误,同样是用该方法先找到该文件在系统中的所在位置,然后建立软链接。
sudo ln -s /usr/lib/x86_64-linux-gnu/libboost_filesystem.so.1.65.1 /usr/lib/x86_64-linux-gnu/libboost_filesystem.so.1.58.0
sudo ln -s /usr/lib/x86_64-linux-gnu/libopencv_core.so.3.2.0 /usr/lib/x86_64-linux-gnu/libopencv_core3.so.3.3
然后重新运行程序,可能还会出现稠密点云图只有几个点的情况,修改配置文件Asus.yaml中的
PointCloudMapping.Resolution: 0.000001
可得到稠密点云结果
三、使用gazebo相机模型实时建图
修改话题,并运行,出现段错误的情况,并且点云窗口闪退。参考使用D435i相机跑ORB-SLAM2_RGBD_DENSE_MAP-master稠密建图编译(实时彩色点云地图加回环+保存点云地图)_摆烂女侠的博客-CSDN博客
问题得以解决。
[pcl::VoxelGrid::applyFilter] Leaf size is too small for the input dataset. Integer indices would overflow.