DS-SLAM编译

第一步:下载源码

放在自己建立的工作空间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

  1. 先手动下载DS-slam所需要的OctoMapRVIZ, 放在工作空间的src下,与DS-SLAM同级目录。
  2. 通过命令行安装其他需要的包(这里注意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 
  1. 打开头文件开关#define COLOR_OCTOMAP_SERVER,文件路径(catkin_ws/src/octomap_mapping/octomap_server/include/octomap_server/octomapServer.h)
  2. 回到工作空间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

  1. 修改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'。 停止
  1. !!!如果使用的是caffe-segnet-cudnn7的话,一定要记得把所有CMakeLists.txt文件里的caffe-segnet-cudnn5改成7,否则会出现找不到 #include <caffe/caffe.h>的情况

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,会发现路径是我们自己下载的那个包的位置。

开启颜色支持,本身需要两步:

  1. 打开COLOR_OCTOMAP_SERVER 宏的注释,然后重新编译源码 catkin_make
  2. 是在使用时,在 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中,注意要修改成自己的路径。
  • 6
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 19
    评论
DS-SLAM的使用教程可以分为以下几个步骤: 1. 安装pangolin:在装DS-SLAM之前,需要先安装pangolin。确保不要把pangolin装在catkin_ws/src目录下,否则每次安装时都需要运行catkin_make_isolated命令,这会产生大量的编译输出。安装完成后,可以运行以下命令: cd DS-SLAM chmod x DS_SLAM_BUILD.sh ./DS_SLAM_BUILD.sh 2. TUM数据集的生成和配置:在生成TUM数据集之后,需要修改DS_SLAM_TUM.launch文件中的PATH_TO_SEQUENCE和PATH_TO_SEQUENCE/associate.txt路径。修改完成后,可以运行以下命令: cd DS-SLAM roslaunch DS_SLAM_TUM.launch 3. 环境配置:在第一次安装时,可能会遇到编译完成后运行roslaunch命令时意外崩溃的问题。这可能是由于环境配置问题导致的。可以尝试重新安装系统,并按照以下流程进行环境配置: - 安装nvidia显卡驱动 - 安装CUDA10和cudnn7 - 安装ROS(包含OpenCV) - 安装caffe-segnet-cudnn7 - 安装octomap_mapping和octomap_rviz - 安装DS-SLAM源码 以上是DS-SLAM的使用教程,希望对你有帮助!<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [DS-SLAM 编译安装运行全程记录 RTX2060+CUDA10+CUDNN7](https://blog.csdn.net/qq_34131212/article/details/106803808)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值