关于编译VIORBSLAM算法的若干问题
主要目的是想与VINSmono算法进行结果上的对比,VINS-mono主要是前端基于光流法,而VIORB是基于特征点法。大多数SLAM问题想要提高精度一般要从前端入手,后端优化结果上其实没有多大提升。
代码作者没有开源,网上这一版是王京大佬实现的。
Visual-Inertial Monocular SLAM with Map Reuse
论文
代码
作者已经写好了脚本,可以直接到build.sh
文件夹下执行脚本
sh build.sh
遇到以下错误
CMake Error at CMakeLists.txt:33 (find_package):
Could not find a configuration file for package "OpenCV" that is compatible
with requested version "2.4.3".
The following configuration files were considered but not accepted:
/opt/ros/kinetic/share/OpenCV-3.2.0-dev/OpenCVConfig.cmake, version: 3.2.0
/usr/local/share/OpenCV/OpenCVConfig.cmake, version: 3.2.0
原因:opencv版本符合,代码中要的是opencv2.0版本,电脑上安装的是opencv3.0版本,在CmakeLists把下面内容
find_package(OpenCV 2.4.3 REQUIRED)
修改为
find_package(OpenCV 3.0 QUIET)
错误2:
这个是Eigen3的bug,可以对比ORB_SLAM2修改
把Thirdparty/g2o/g2o/solvers/linear_solver_eigen.h文件中的
typedef Eigen::PermutationMatrix<Eigen::Dynamic, Eigen::Dynamic,SparseMatrix::Index> PermutationMatrix;
修改为:
typedef Eigen::PermutationMatrix<Eigen::Dynamic, Eigen::Dynamic,int> PermutationMatrix;
错误3:
修改下图文件中的CmakeLists,按照上面把opencv的版本改成3.0的。
错误4:
主要问题是没有把ros路径添加到bashrc中,可以使用在当前终端下生效或者在bashrc中修改在所有终端下生效
1、采用在当前终端生效的办法
source devel/setup.bash
这个需要建立ros工作空间然后执行
catkin_make
2、在所有终端生效的方法
打开bashrc文件,
sudo gedit ~/.bashrc
在最下添加路径
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:/home/sunshine/catkin_VIOORB/src/LearnVIORB/Examples/ROS/ORB_VIO
然后执行
source ~/.bashrc
终于解决完bug了,头苦!!!!!!
执行下面的命令
roslaunch src/LearnVIORB/Examples/ROS/ORB_VIO/launch/testeuroc.launch
播放bag数据
rosbag play MH_02_easy.bag
运行结果:
保存轨迹文件
修改config/euroc.yaml
/home/sunshine/catkin_VIOORB/
保存得到的txt文件,后期用evo评估一下与vins-mono的对比。
evo遇到问题
[ERROR] TUM trajectory files must have 8 entries per row and no trailing delimiter at the end of the rows (space)
解决办法
https://github.com/MichaelGrupp/evo/issues/70
cut --delimiter " " --fields 1-8 msckf_traj.txt > clean.tum