DS-SLAM 编译安装运行全程记录 RTX2060+CUDA10+CUDNN7

2023-11-02 05:50

本文主要是介绍DS-SLAM 编译安装运行全程记录 RTX2060+CUDA10+CUDNN7,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 我自己的DS-SLAM安装记录
    • 系统版本&硬件
    • CUDA & cudnn
    • ROS Kinetic
      • 遇到的问题
    • opencv + caffe
      • 如果你安装的是caffe-segnet-cudnn7的版本
      • 如果你安装的是caffe-segnet-cudnn5的版本,你可能会遇到如下问题,caffe 与cudnn版本不匹配
      • make runtest 可能出现的问题
      • 其他我遇到的问题
    • OctoMap and RVIZ
      • 遇到的问题
    • ORB-SLAM2 & DS-SLAM
      • 遇到的其它问题
    • 参考资料

我自己的DS-SLAM安装记录

前言:我自己第一次装得时候,编译完成后,roslaunch xx.lauch运行的时候ros总是意外崩溃,使用的是作者的源代码,考虑到可能是环境的问题,也许我之前某些步骤使用了make install,把某些库直接装在的系统中,导致ds找不到与其对应正确的版本,直接读到系统中的库。所以重新装了一次系统,从头开始,从周日下午到周二,总共花费了两天多,在刘阳学弟和黄凯学长的大力帮助下,终于是跑通了原始DS-SLAM,研究学习的第一步复现,算是完成了,下面我将详细的叙述一下这次环境配置过程。再次感谢刘阳和黄凯学长!!
大体流程 nvidia显卡驱动->CUDA10+cudnn7->ros(包含opencv)->caffe-segnet-cudnn7->octomap_mapping+octomao_rviz->DS_SLAM源码

系统版本&硬件

ubuntu 16.04
Intel® Core™ i7-8700 CPU @ 3.20GHz × 12
GeForce RTX 2060/PCIe/SSE2

CUDA & cudnn

一开始我安装的是CUDA9.0,后面编译caffe的时候提示我 cuda9.0不支持compute_75,然后我又重新安装CUDA10.0 以及配套的Cudnn7.3.0 这些安装教程网上比较多,只要注意与自己的显卡算力版本对应即可。
安装完成后,可以输入以下指令,确认自己安装的版本。

1、查看cuda版本

cat /usr/local/cuda/version.txt
#output:
CUDA Version 10.0.130

2、查看cudnn版本

cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
#output:
MAJOR -A 2
#define CUDNN_MAJOR 7
#define CUDNN_MINOR 3
#define CUDNN_PATCHLEVEL 0
--
#define CUDNN_VERSION (CUDNN_MAJOR * 1000 + CUDNN_MINOR * 100 + CUDNN_PATCHLEVEL)#include "driver_types.h"nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2018 NVIDIA Corporation
Built on Sat_Aug_25_21:08:01_CDT_2018
Cuda compilation tools, release 10.0, V10.0.130

ROS Kinetic

按照官方网站教程,网址在这:http://wiki.ros.org/kinetic/Installation/Ubuntu
还需要安装这个catkin,http://wiki.ros.org/catkin ,记得选kinetic选项
装好之后 http://wiki.ros.org/ROS/Tutorials/CreatingPackage

遇到的问题

问题1:在执行到这两步的时候

# With the following, you can initialize rosdep.
sudo rosdep init
rosdep update

出现的问题

sudo rosdep init ERROR: cannot download default sources list

解决方法

#打开hosts文件
sudo gedit /etc/hosts
#在文件末尾添加
151.101.84.133  raw.githubusercontent.com
#保存后退出再尝试

问题2 catkin_make时出现

The imported target “xxx” references the file “/usr/lib/x86_64-linux-gnu/libEGL.so” but this file does not exist. 

解决办法:https://askubuntu.com/questions/616065/the-imported-target-qt5gui-references-the-file-usr-lib-x86-64-linux-gnu-li

opencv + caffe

这里采用的黄凯学长的方法,不单独安装opencv,使用ros里面自带的opencv。
https://blog.csdn.net/abc039510/article/details/103032120

原版DS推荐下载caffe-segnet-cudnn5,我考虑到我自己安装的cudnn版本,我下载的是 https://github.com/navganti/caffe-segnet-cudnn7,
安装在/home/xxx/catkin_ws/src/DS-SLAM/Examples/ROS/ORB_SLAM2_PointMap_SegNetM/目录下
需要注意的是,安装caffe的时候 要用cmake,我当初使用make的时候一堆报错,
不知道如何解决,但是使用cmake的时候就不出错了,在caffe-segnet-cudnn7目录下

mkdir build
cd build
cmake ..
# -jx根据自己电脑性能选择,我这台主机可以跑 make all -j12
make all -j12
#测试caffe安装的时候,会跑蛮久
make runtest -j12

如果你安装的是caffe-segnet-cudnn7的版本

记得改一下这几个cmakelists.txt里面的路经,所有跟cudnn5相关的都改成cudnn7

1./home/xxx/catkin_ws/src/DS-SLAM/Examples/ROS/ORB_SLAM2_PointMap_SegNetM/CMakeLists.txt 
2./home/xxx/catkin_ws/src/DS-SLAM/Examples/ROS/ORB_SLAM2_PointMap_SegNetM/libsegmentation/CMakeLists.txt
3./home/xxx/catkin_ws/src/DS-SLAM/CMakeLists.txt#举个例子 ./home/xxx/catkin_ws/src/DS-SLAM/Examples/ROS/ORB_SLAM2_PointMap_SegNetM/CMakeLists.txt
#54行左右 
${PROJECT_SOURCE_DIR}/../../../Examples/ROS/ORB_SLAM2_PointMap_SegNetM/caffe-segnet-cudnn5/include 
${PROJECT_SOURCE_DIR}/../../../Examples/ROS/ORB_SLAM2_PointMap_SegNetM/caffe-segnet-cudnn5/build/include
#更改为
${PROJECT_SOURCE_DIR}/../../../Examples/ROS/ORB_SLAM2_PointMap_SegNetM/caffe-segnet-cudnn7/include 
${PROJECT_SOURCE_DIR}/../../../Examples/ROS/ORB_SLAM2_PointMap_SegNetM/caffe-segnet-cudnn7/build/include
#也就是把5改成7即可。

如果你安装的是caffe-segnet-cudnn5的版本,你可能会遇到如下问题,caffe 与cudnn版本不匹配

报错信息如下

 ./include/caffe/util/cudnn.hpp:127:41: error: too few arguments to function

解决办法:

 1.将./include/caffe/util/cudnn.hpp 换成最新版的caffe里的cudnn的实现,即相应的cudnn.hpp.2将./include/caffe/layers里的,所有以cudnn开头的文件,例如cudnn_conv_layer.hpp。   都替换成最新版的caffe里的相应的同名文件。3.将./src/caffe/layer里的,所有以cudnn开头的文件,例如cudnn_lrn_layer.cu,cudnn_pooling_layer.cpp,cudnn_sigmoid_layer.cu。都替换成最新版的caffe里的相应的同名文件。

详细的caffe安装步骤可以参考
https://blog.csdn.net/yhaolpz/article/details/71375762
中的第9步安装 caffe。

make runtest 可能出现的问题

F0608 21:45:54.079473  3250 cudnn_softmax_layer.cu:20] Check failed: status == CUDNN_STATUS_SUCCESS (32 vs. 0)  CUDNN_STATUS_EXECUTION_FAILED
Aborted (core dumped)
src/caffe/test/CMakeFiles/runtest.dir/build.make:57: recipe for target 'src/caffe/test/CMakeFiles/runtest' failed
make[3]: *** [src/caffe/test/CMakeFiles/runtest] Error 134
CMakeFiles/Makefile2:328: recipe for target 'src/caffe/test/CMakeFiles/runtest.dir/all' failed
make[2]: *** [src/caffe/test/CMakeFiles/runtest.dir/all] Error 2
CMakeFiles/Makefile2:335: recipe for target 'src/caffe/test/CMakeFiles/runtest.dir/rule' failed
make[1]: *** [src/caffe/test/CMakeFiles/runtest.dir/rule] Error 2
Makefile:240: recipe for target 'runtest' failed
make: *** [runtest] Error 2

解决办法

我一开始安装cunn7.6.4遇到的,修改cudnn 从7.6.4 改成7.5解决,我第二次装得是cudnn7.3.6,也没遇到过这个问题

其他我遇到的问题

问题1

/usr/bin/ld: .build_release/lib/libcaffe.so: undefined reference to symbol '_ZNK2cv9Exception4whatEv'
/usr/lib/x86_64-linux-gnu/libopencv_core.so: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
Makefile:637: recipe for target '.build_release/tools/upgrade_net_proto_binary.bin' failed
make: *** [.build_release/tools/upgrade_net_proto_binary.bin] Error 1

解决办法,使用cmake即可。

问题2

In file included from /home/xxx/ds-slam/DS-SLAM/Examples/ROS/ORB_SLAM2_PointMap_SegNetM/libsegmentation/libsegmentation.cpp:34:0:
/home/xxx/ds-slam/DS-SLAM/Examples/ROS/ORB_SLAM2_PointMap_SegNetM/libsegmentation/libsegmentation.hpp:37:27: fatal error: caffe/caffe.hpp: No such file or directory
compilation terminated.
CMakeFiles/segmentation.dir/build.make:62: recipe for target 'CMakeFiles/segmentation.dir/libsegmentation.cpp.o' failed

解决办法:https://blog.csdn.net/yinghuaxuan/article/details/89969197

OctoMap and RVIZ

安装官方要求,先下载 https://github.com/OctoMap/octomap_mapping and https://github.com/OctoMap/octomap_rviz_plugins.
下载到 catkin_ws/src下,
然后

sudo apt-get install ros-kinetic-octomap  ros-kinetic-octomap-msgs ros-kinetic-octomap-ros ros-kinetic-octomap-rviz-plugins 
#注意,有两个包不用装,ros-kinetic-octomap-mapping 和ros-kinetic-octomap-server,这两个包我们已经手动下载到,catkin_ws/src下

然后参考黄凯学长的方法,(原作者没写2)

1.打开头文件开关#define COLOR_OCTOMAP_SERVER,文件路径(catkin_ws/src/octomap_mapping/octomap_server/include/octomap_server/octomapServer.h)
2.彩色八叉地图参数设置:<param name="colored_map" type="bool" value="True" />,文件路径
(/catkin_ws/src/DS-SLAM/Examples/ROS/ORB_SLAM2_PointMap_SegNetM/launch/Octomap.launch)

然后catkin_make即可

遇到的问题

问题1
运行ds的时候报错

Error:cannot launch node of type [map_server/map_server]: can't locate node [map_server]  类似的错误

解决办法,切换工作空间

source ~/catkin_ws/devel/setup.bash 

问题2
运行ds如果报错

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 this is line 127"

解决办法,要么是忘记打开头文件开关#define COLOR_OCTOMAP_SERVER,要么是使用sudo apt-get install ros-kinetic-octomap-server,导致ros找到了系统里的 octomap-server, 卸载掉 sudo apt-get remove ros-kinetic-octomap-server。 让ros找到我们装在catkin_ws/src下的octomap_mapping包。

ORB-SLAM2 & DS-SLAM

需按照github提供的链接下载Thirdparty and Vocabulary(provided at https://pan.baidu.com/s/1-zWXlzOn-X0tjoEF9XI6qA, extract code: 8t7x)。如果用自己的,可能会出现后缀名不同的情况。这里直接编译会出现orb词典错误,需按照TemplatedVocabulary.h或者TemplatedVocabulary.h(高翔)替换第三方库中的DBoW2库中相对应的文件,因为DS-SLAM给的第三方库中的该文件下定义的类中没有对应的loadFromBinaryFile(strVocFile)成员函数。
原文链接:https://blog.csdn.net/weixin_43823054/java/article/details/104611324

我在装DS-slam 之前,忘记安装pangolin ,记得不要把这个装在catkin_ws/src 里,不然每次安装的时候就需要 catkin_make_isolated,虽然不影响,但是编译输出挺多的。
这部分就是在上面的安装步骤都完成之后,运行

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,就可以复现成功啦。
结果长这样
在这里插入图片描述

遇到的其它问题

  1. Anaconda与ROS不兼容问题解决办法
    https://www.cnblogs.com/hgl0417/p/11562580.html
  2. 问题如下
  [rosbuild] Building package ORB_SLAM2_PointMap_SegNetM
Failed to invoke /opt/ros/kinetic/bin/rospack deps-manifests ORB_SLAM2_PointMap_SegNetM
ImportError: No module named rosdep2.rospack
[rospack] Error: could not find python module 'rosdep2.rospack'. is rosdep up-to-date (at least 0.10.4)?CMake Error at /opt/ros/kinetic/share/ros/core/rosbuild/public.cmake:129 (message):Failed to invoke rospack to get compile flags for package'ORB_SLAM2_PointMap_SegNetM'.  Look above for errors from rospack itself.Aborting.  Please fix the broken dependency!Call Stack (most recent call first):/opt/ros/kinetic/share/ros/core/rosbuild/public.cmake:207 (rosbuild_invoke_rospack)CMakeLists.txt:4 (rosbuild_init)

使用批处理 DS_SLAM_BUILD.sh 可解决。

Traceback (most recent call last):File "/opt/ros/kinetic/share/ros/core/rosbuild/bin/check_same_directories.py", line 46, in <module>raise Exception
Exception
CMake Error at /opt/ros/kinetic/share/ros/core/rosbuild/private.cmake:102 (message):[rosbuild] rospack found package "ORB_SLAM2_PointMap_SegNetM" at "", butthe current directory is"/home/xxx/catkin_ws/src/DS-SLAM/Examples/ROS/ORB_SLAM2_PointMap_SegNetM".You should double-check your ROS_PACKAGE_PATH to ensure that packages arefound in the correct precedence order.

解决办法:export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:PATH/DS-SLAM/Examples/ROS/ORB_SLAM2_PointMap_SegNetM
PATH为catkin_ws/src的路经。

写的还是有点乱的,希望能对大家有所帮助,有问题可以问我,如果我还记得:)。20200617

参考资料

有些我已经在上面列过了,下面是我主要的参考资料。

  1. https://blog.csdn.net/yinghuaxuan/article/details/89969197
  2. https://blog.csdn.net/yhaolpz/article/details/71375762
  3. https://blog.csdn.net/abc039510/article/details/103032120
  4. https://blog.csdn.net/weixin_43823054/java/article/details/104611324
  5. https://blog.csdn.net/u013468614/article/details/102917569

这篇关于DS-SLAM 编译安装运行全程记录 RTX2060+CUDA10+CUDNN7的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/328555

相关文章

如何解决mmcv无法安装或安装之后报错问题

《如何解决mmcv无法安装或安装之后报错问题》:本文主要介绍如何解决mmcv无法安装或安装之后报错问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mmcv无法安装或安装之后报错问题1.当我们运行YOwww.chinasem.cnLO时遇到2.找到下图所示这里3.

Python 安装和配置flask, flask_cors的图文教程

《Python安装和配置flask,flask_cors的图文教程》:本文主要介绍Python安装和配置flask,flask_cors的图文教程,本文通过图文并茂的形式给大家介绍的非常详细,... 目录一.python安装:二,配置环境变量,三:检查Python安装和环境变量,四:安装flask和flas

Win11安装PostgreSQL数据库的两种方式详细步骤

《Win11安装PostgreSQL数据库的两种方式详细步骤》PostgreSQL是备受业界青睐的关系型数据库,尤其是在地理空间和移动领域,:本文主要介绍Win11安装PostgreSQL数据库的... 目录一、exe文件安装 (推荐)下载安装包1. 选择操作系统2. 跳转到EDB(PostgreSQL 的

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1

Spring Boot 配置文件之类型、加载顺序与最佳实践记录

《SpringBoot配置文件之类型、加载顺序与最佳实践记录》SpringBoot的配置文件是灵活且强大的工具,通过合理的配置管理,可以让应用开发和部署更加高效,无论是简单的属性配置,还是复杂... 目录Spring Boot 配置文件详解一、Spring Boot 配置文件类型1.1 applicatio

Linux卸载自带jdk并安装新jdk版本的图文教程

《Linux卸载自带jdk并安装新jdk版本的图文教程》在Linux系统中,有时需要卸载预装的OpenJDK并安装特定版本的JDK,例如JDK1.8,所以本文给大家详细介绍了Linux卸载自带jdk并... 目录Ⅰ、卸载自带jdkⅡ、安装新版jdkⅠ、卸载自带jdk1、输入命令查看旧jdkrpm -qa

MySQL INSERT语句实现当记录不存在时插入的几种方法

《MySQLINSERT语句实现当记录不存在时插入的几种方法》MySQL的INSERT语句是用于向数据库表中插入新记录的关键命令,下面:本文主要介绍MySQLINSERT语句实现当记录不存在时... 目录使用 INSERT IGNORE使用 ON DUPLICATE KEY UPDATE使用 REPLACE

MySQL Workbench 安装教程(保姆级)

《MySQLWorkbench安装教程(保姆级)》MySQLWorkbench是一款强大的数据库设计和管理工具,本文主要介绍了MySQLWorkbench安装教程,文中通过图文介绍的非常详细,对大... 目录前言:详细步骤:一、检查安装的数据库版本二、在官网下载对应的mysql Workbench版本,要是