硬件条件如题
cuda+cudnn安装见上一遍博文。
DS-SLAM的配置步骤
0. 在自己的工作目录下/home/jerry/ 新建文件夹/catkin_ws/src
进入新建的src目录下 安装ORB_SLAM 配置ROS 参考之前的博文。
1. 根据作者的github
cd catkin_ws/src
git clone https://github.com/zoeyuchao/DS-SLAM.git
git clone https://github.com/OctoMap/octomap_mapping.git
git clone https://github.com/OctoMap/octomap_rviz_plugins.git
cd /home/jerry/catkin_ws/src/DS-SLAM/Examples/ROS/ORB_SLAM2_PointMap_SegNetM
git clone https://github.com/navganti/caffe-segnet-cudnn7.git #原作者给的是https://github.com/TimoSaemann/caffe-segnet-cudnn5 但是这里我们根据自己的cudnn版本调整
2. 编译编译caffe-segnet-cudnn7
注意:网上很多教程这里没描述清楚,我以为要先编译caffe,在编译caffe-segnet-cudnn7,不过可能也是因为我对caffe没什么了解所以误解了。总之这里直接编译caffe-segnet-cudnn7就行。
具体步骤如下:
mkdir cmake_build
cd cmake_build
cmake ..
make
make runtest
sudo make install
cmake的时候会报错Could NOT find LMDB (missing: LMDB_INCLUDE_DIR LMDB_LIBRARIES)
解决办法
sudo apt install libgflags-dev libgoogle-glog-dev liblmdb-dev -y
然后仍然报错Could NOT find LevelDB (missing: LevelDB_INCLUDE LevelDB_LIBRARY)
sudo apt install libgflags-dev libgoogle-glog-dev libleveldb-dev -y
然后仍然报错Could NOT find Snappy
sudo apt-get install libsnappy-dev
仍然报错Could NOT find Atlas
sudo apt-get install libopenblas-dev
如果还不行的话在编译的时候使用 cmake -DBLAS=open ..进行编译
报错Error: CUDA_cublas_device_LIBRARY (ADVANCED) not found
参考issues,原因是我的cmake版本太低,需要升级cmake版本到3.12.2以上
附:通过cmake --version可以查看cmake版本
apt remove cmake
cd /usr/src
wget https://github.com/Kitware/CMake/releases/download/v3.16.0/cmake-3.16.0.tar.gz
tar -zxvf cmake-3.16.0.tar.gz
cd cmake-3.16.0
apt install libssl-dev build-essential
sudo ./bootstrap
sudo make
sudo make install
通过以上方式可以升级cmake,但是在remove旧版本的cmake的时候,ros也被remove了,参考这篇文章,在安装完新版本的cmake后需要重新安装ros,从官方教程1.4开始安装就行
其次wget下载总是不成功,可能是版本3.16.0版本也已经很旧了 ,我直接上github在release里下载的3.18.1版本
最后在make install之后要cmake --version会报错"CMake Error: Could not find CMAKE_ROOT !!!"
hash -r
通过以上命令清楚缓存即可
接下来caffe-segnet-cudnn7编译过程应该一路畅通。
3. 编译安装OtcoMao和RVIZ
安装ros的一些包(注意ros版本要对上)
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
修改环境变量(我用到是shell是zsh,如果用到是bash就修改~/.bashrc)
sudo vim ~/.zshrc
#在最后一行添加
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/jerry/catkin_ws/src/DS-SLAM/Examples/ROS/ORB_SLAM2_PointMap_SegNetM
#保存退出后再执行命令使修改生效
source ~/.zshrc
#为了确保成功可执行一下命令查看
echo $ROS_PACKAGE_PATH
4. 修改CMakeLists
将所有CMakeLists.txt文件中的cudnn5修改成cudnn7,包括如下三个路径:
/home/jerry/catkin_ws/src/DS-SLAM
/home/jerry/catkin_ws/src/DS-SLAM/Examples/ROS/ORB_SLAM2_PointMap_SegNetM
/home/jerry/catkin_ws/src/DS-SLAM/Examples/ROS/ORB_SLAM2_PointMap_SegNetM/libsegmentation
同时将DS-SLAM目录下的CMakeLists.txt中的如下代码取消注释
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/lib)
5. 拷贝Thirdparty and Vocabulary,替换TemplatedVocabulary.h
作者的github中提供了第三方库和词典,通过如下百度网盘下载后拷贝到DS-SLAM目录下
provided at https://pan.baidu.com/s/1-zWXlzOn-X0tjoEF9XI6qA, extract code: 8t7x)
TemplatedVocabulary.h文件如何不替换 据说编译时会出现词典错误,因为我是直接就替换了才编译的,所以不确定这一点。
6. 添加segnet模型
作者github中有提供There is the folder of models(provided at https://pan.baidu.com/s/1gkI7nAvijF5Fjj0DTR0rEg extract code: fpa3), please download and place the folder in the same path with the folder of prototxts and tools.
在第5项的something about Folders里
下载下来拷贝到如下目录
/home/jerry/catkin_ws/src/DS-SLAM/Examples/ROS/ORB_SLAM2_PointMap_SegNetM
到此就能正确编译了。
cd DS-SLAM
chmod +x DS_SLAM_BUILD.sh
./DS_SLAM_BUILD.sh #注意根据自己的处理器修改脚本文件中的make -j12 我第一次运行的时候直接卡死了,后来修改为make -j4就正常了
编译过程中的输出信息比较多,建议输出到日志文件中查看error信息
./DS_SLAM_BUILD.sh >log.log 2>&1