第一步:下载源码
放在自己建立的工作空间catkin_ws下的src中
第二步:下载并编译caffe-segnet-cudnn7-master
注意这一步,原文推荐的是下载caffe-segnet-cudnn5-master,但是由于之前编译caffe用的是cudnn7.6.0,所以这里选择下载caffe-segnet-cudnn7-master
下载好了之后放在/home/y/SLAM/ROS/catkin_ws/src/DS-SLAM-master/Examples/ROS/ORB_SLAM2_PointMap_SegNetM
这个目录下,进去这个文件夹,修改Makefile文件和Makefile.config文件,修改方法见我的另一篇博客caffe编译,修改之后,建议采用cmake编译,而不是直接make。
mkdir build
cd build
camke ..
make all -j8
sudo make runtest -j8
Clock rate: 1515000
Total constant memory: 65536
Texture alignment: 512
Concurrent copy and execution: Yes
Number of multiprocessors: 14
Kernel execution timeout: Yes
Unified virtual addressing: Yes
[ OK ] PlatformTest.TestInitialization (0 ms)
[----------] 1 test from PlatformTest (0 ms total)
[----------] Global test environment tear-down
[==========] 2093 tests from 277 test cases ran. (300037 ms total)
[ PASSED ] 2093 tests.
[100%] Built target runtest
应该没什么问题,有问题的话还是看看caffe编译那篇博客。
第三步:编译DS-SLAM
3.1 编译安装OctoMap和RVIZ
- 先手动下载DS-slam所需要的OctoMap和RVIZ, 放在工作空间的src下,与DS-SLAM同级目录。
- 通过命令行安装其他需要的包(这里注意ros版本,如果用的是kinetic版的,需要把下边的melodic修改为kinetic)
sudo apt-get install ros-melodic-octomap ros-melodic-octomap-mapping
sudo apt-get install ros-melodic-octomap-msgs ros-melodic-octomap-ros ros-melodic-octomap-rviz-plugins
- 打开头文件开关
#define COLOR_OCTOMAP_SERVER
,文件路径(catkin_ws/src/octomap_mapping/octomap_server/include/octomap_server/octomapServer.h) - 回到工作空间catkin_ws下,输入
catkin_make
, 编译成功。
3.2 修改环境变量
sudo gedit ~/.bashrc
添加至最后一行(根据自己的路径作修改)
eexport ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/y/SLAM/ROS/catkin_ws_02/src/DS-SLAM-master/Examples/ROS/ORB_SLAM2_PointMap_SegNetM
保存关闭,再执行
source ~/.bashrc
3.3 处理Thirdparty和Vocabulary
查看DS_SLAM_BUILD.sh,里面时需要在Thirdparty目录下编译DBow2和g2o的,但是源码中并没有这个文件,所以需要从ORB-SLAM2中复制过来,同样,vocabulary也需要复制,放在DS-SLAM-master/ 即可。
除此之外,还需要使用TemplatedVocabulary.h替换DS-SLAM-master/Thirdparty/DBoW2/DBoW2/目录下的同名文件。否则在编译时会出现如下错误:
/home/y/SLAM/ROS/catkin_ws_02/src/DS-SLAM-master/include/Frame.h:59:10: fatal error: Thirdparty/DBoW2/DBoW2/BowVector.h: 没有那个文件或目录
#include "Thirdparty/DBoW2/DBoW2/BowVector.h"
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
CMakeFiles/ORB_SLAM2_PointMap_SegNetM.dir/build.make:107: recipe for target 'CMakeFiles/ORB_SLAM2_PointMap_SegNetM.dir/src/Tracking.cc.o' failed
compilation terminated.
compilation terminated.
3.4 修改CMakeLists.txt
- 修改DS-SLAM路径下的CMakeLists.txt文件,需要将如下代码取消注释:
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/lib)
否则可能会遇到这样的问题:
*** No rule to make target '../../../../lib/libORB_SLAM2_PointMap_SegNetM.so', needed by '../TUM'。 停止
3.5 添加segnet模型
此博客中有链接可用于下载模型https://blog.csdn.net/yinghuaxuan/article/details/89969197#caffesegnetcudnn5_2
j将下载好的模型放在ORB_SLAM2_PointMap_SegNetM目录下即可。
3.6 编译DS-SLAM
这里根据源码中的Readme.md文件中来
cd DS-SLAM
chmod +x DS_SLAM_BUILD.sh
./DS_SLAM_BUILD.sh
如果之前都按步骤修改过了,这里应该没什么问题。
TUM生成之后,修改 PATH_TO_SEQUENCE & PATH_TO_SEQUENCE/associate.txt in the DS_SLAM_TUM.launch,然后运行
cd DS-SLAM
roslaunch DS_SLAM_TUM.launch
会有一个RVIz的程序运行,选择左下角的add,选择by
topic,选择occupied_cells_vis_array下的MarkerArray,就可以复现成功啦。
这步有几个问题
ERROR: cannot launch node of type [octomap_server/octomap_server]: can't locate node [octomap_server] in package [octomap_server]
排查一:检查launch文件关于octomap_server的部分,这里应该是没什么问题
排查二:用roscd命令进行octomap_server包的定位,看看是否在指定位置
------在存放DS-SLAM的这个工作空间下打开终端,输入roscd octomap_server
,回车
------然后我发现路径指向了另一个工作空间的同名文件(起初我把下载的那两个包都放在另一个工作空间里,后来复制到现在的工作空间,但是之前那个工作空间下的库包的并没有删除),所以先把之前的删掉。
------再次查看,发现路径指向了系统安装的路径(也就是运行了 sudo apt-get install ros-melodic-octomap-server),其实是不需要这句命令行安装的,因为我们已经下载好放在目录下了。
(但此时…我并没有发觉指向/opt/ros/melodiv/share/map_server有什么不对。 然后再次运行那个launch文件,于是有了下面的报错)
[ERROR] [1602378872.391575113]: Colored map requested in launch file - node not running/compiled to support colors, please define COLOR_OCTOMAP_SERVER and recompile or launch the octomap_color_server node
首先检查3.1的第3小步有没有修改,这是因为默认编译的 octomap 不能显示颜色,要开启颜色的支持
如果已经有了这个宏定义,还是报错,可以会看到上一个报错最后指向的octomap_server路径,当时是指向系统安装的路径的,可是我们需要它指向之前我们自己下载的那个包,毕竟我们修改的也是在这个包下修改的。所以执行sudo apt-get remove ros-melodic-octomap-server
,删掉通过命令行所安装的即可。
此时再输入roscd octomap_server
,会发现路径是我们自己下载的那个包的位置。
开启颜色支持,本身需要两步:
- 打开COLOR_OCTOMAP_SERVER 宏的注释,然后重新编译源码 catkin_make
- 是在使用时,在 launch 文件中禁用 height_map,启用 colored_map(但是ds-Slam里边直接就是colored_map,所以这一步就不需要了)
- 问题3(终端关掉了,借用一下木顶思上的图,报错类似于下图)
原因是在3.1步编译运行catkin_make
之后,没有添加source devel/setup.bash,为避免每次运行前都要在终端先source一下,可以直接把source /home/y/SLAM/ROS/catkin_ws_02/devel/setup.bash
加入bashrc中,注意要修改成自己的路径。