该库的编译与caffe一样,其中的Makefile.config文件和Makefile文件都需要进行配置
参考教程
caffe-segnet-cudnn5的编译安装,其需要cuda8.0和cudnn5,且需要gpu需要支持compute_20
在cuda9.0和cudnn7.0.5的环境下也可以成功编译,不过需要在Makefile.config中再做相关调整
首先将USE_CUDNN :=1注释掉
其次修改CUDA_ARCH的参数
CUDA_ARCH := -gencode arch=compute_20,code=sm_20 \
-gencode arch=compute_20,code=sm_21 \
-gencode arch=compute_30,code=sm_30 \
-gencode arch=compute_35,code=sm_35 \
-gencode arch=compute_50,code=sm_50 \
-gencode arch=compute_50,code=compute_50
这里需要删除
-gencode arch=compute_20,code=sm_20 \
-gencode arch=compute_20,code=sm_21 \
编译时会出现以下错误
fatal error: caffe/proto/caffe.pb.h: No such file or directory
如果真的找不到,则用protoc从caffe/src/caffe/proto/caffe.proto生成caffe.pb.h和caffe.pb.cc,命令如下:
protoc --cpp_out=PATH/caffe/include/caffe/ caffe.proto
# 一般输入一下指令即可
protoc --cpp_out=../../../include/caffe/ caffe.proto
PATH应该替换为该项目所在目录下
注意,最后运行测试时
需要执行如下命令
sudo make runtest -j8
一定要加sudo,否则会报错,原因不知
需要在octomap_mapping/octomap_server/include/octomap_server目录下的OctomapServer.h文件中添加宏定义
#define COLOR_OCTOMAP_SERVER
先安装ros包
#官方只安装了前两个
sudo apt-get install ros-kinetic-octomap ros-kinetic-octomap-mapping ros-kinetic-octomap-msgs ros-kinetic-octomap-ros ros-kinetic-octomap-rviz-plugins ros-kinetic-octomap-server
下载DS-slam所需要的OctoMap和RVIZ
在ros工作空间目录下输入
catkin_make
则编译安装成功
可使用该TemplatedVocabulary.h或者TemplatedVocabulary.h(高翔)替换第三方库中的DBoW2库中相对应的文件
因为DS-SLAM给的第三方库中的该文件下定义的类中没有对应的loadFromBinaryFile(strVocFile)成员函数
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:PATH/DS-SLAM/Examples/ROS/ORB_SLAM2_PointMap_SegNetM
PATH需要修改为ROS工作空间src目录的路径
修改DS-SLAM路径下的CMakeLists.txt文件,需要将如下代码取消注释:
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/lib)
否则会出现编译时找不到相应库的情况
模型下载,密码是fpa3
模型需要放在ORB_SLAM2_PointMap_SegNetM目录下
在编译DS-SLAM前
即执行以下命令
cd DS-SLAM
chmod +x DS_SLAM_BUILD.sh
./DS_SLAM_BUILD.sh
需要检查DS_SLAM_BUILD.sh文件
make -j12
# 改为,根据自己的处理器
make -j4
执行roslaunch DS_SLAM_TUM.launch 时出现
E0509 14:38:52.222496 22357 common.cpp:113] Cannot create Cublas handle. Cublas won't be available.
解决方法
在/home目录下打开终端,输入:
sudo rm -rf .nv/
个人感觉只是装cuda和cudnn的问题,因为我并没有在字符界面中安装,并且没有以管理员权限安装,所以在执行很多cuda和cudnn应用时需要管理员权限。
采用上面方法后,在运行cuda和cudnn的应用时不再需要管理员权限,原因未知。