最近在研究动态SLAM,发现一个少有的不基于语义信息的动态SLAM系统(修正,也是基于语义信息的,语义信息在数据库中),且功能相对完整,所以码一下。
论文地址:https://arxiv.org/pdf/2005.11052v2.pdf
代码地址:https://github.com/halajun/vdo_slam
1.编译
如果之前有编译成功ORB-SLAM的朋友,编译这个应该不会有太大问题。我踩了一个上午的坑(哭),终于编译成功了
1.依赖库
在作者的githut上要求:
gcc、g++:第9版本以上(这里有问题)
Eigen3:3.1.0 以上
OpenCV:3.0以上
g2o :这里用的是作者代码包里提供的g2o模型,而不是自己的。
这个库会在我们运行 build.sh 文件时候帮我们自动编译。
编译前需要修改主目录下的CmakeList.txt文件的76-78行,把76行注释掉,改为78行(ubuntu系统下)
# for mac os (default)
#${PROJECT_SOURCE_DIR}/dependencies/g2o/lib/libg2o.dylib
# for linux (ubuntu)
${PROJECT_SOURCE_DIR}/dependencies/g2o/lib/libg2o.so
然后就可以直接编译了
chmod +x build.sh
./build.sh
2.g2o出错
当然,怎么可能这么顺利。我遇到的情况是dependencies/g2o里面的编译会报出一大堆错误,起初的时候在别的博客里面看到Eigen3必须安装3.1.0的版本,而且g2o的报错也确实是一些矩阵语句的错误,于是我又捣鼓了半天,在ubuntu里面装了两个版本的Eigen(心疼我的电脑)。后来再次编译,发现还是这些错误。
这时候,我学聪明了,在编译报错的时候立即按下ctril+C,关闭编译,查看最开始的报错,发现错误其实出现在C++的标准上:
This file requires compiler and library support for the ISO C++ 2011 standar
才发现我的g++和gcc一直是第5版本…
locate gcc | grep -E "/usr/bin/gcc-[0-9]" # 检查gcc现有版本
locate g++ | grep -E "/usr/bin/g\+\+-[0-9]" # 检查g++现有版本
找到问题所在,但我并不想升级(担心以前的程序会全部作废),就直接在VDO_SLAM-master/dependencies/g2o/CMakeLists.txt里加入:
SET( CMAKE_CXX_FLAGS "-std=c++11 -O3")
然后再编译一次:
chmod +x build.sh
./build.sh
这回编译成功了。
2.运行
在作者的说明里给出了两个demo,我用的是 demo-kitti 的版本,下载完成后直接解压到和master文件的同一个目录下,运行:
./example/vdo_slam example/kitti-0000-0013.yaml ../demo-kitti
成功,终于可以吃饭了,明天论文代码看起~