msckf_mono构建运行方法

背景

博主是在读Davide Scaramuzza投稿到ICRA
2018的VIO综述文章《A Benchmark Comparison of Monocular Visual-Odometry Algorithms for Flying Robots》时,发现论文给出了单目版msckf算法参考实现的github链接地址,此前,这份参考实现并没有开放源代码。

构建过程及运行

1. 依赖项

  • ROS Kinetic(应该主要是为了用到rviz的可视化)
  • OpenCV
    • 直接用系统默认的,没有的话,运行如下命令:

      $ sudo apt-get install libopencv-dev
  • Boost
    • 直接用系统的,没有的话,运行如下命令:

      $ sudo apt-get install libboost-dev
  • Eigen
    • 直接用系统的,没有的话,运行如下命令:

      $ sudo apt-get install libeigen3
  • fast
    • 这是唯一一个需要自行编译的第三方依赖库,源码来自uzh-rpg,构建指令如下:

      $ cd ANY_PATH
      $ git clone https://github.com/uzh-rpg/fast
      $ cd fast
      $ mdkir build
      $ cd build
      $ cmake ..
      $ make

2. 构建msckf_mono

  • 先建立ROS工作空间,指令序列如下:
$ cd ANY_PATH
$ mkdir catkin_ws
$ cd catkin_ws
$ mkdir src
  • 接下来就是拉取msckf_mono的源码到工作空间的src路径下,指令是:
$ cd src  ## 延续上一步
$ git clone https://github.com/daniilidis-group/msckf_mono
  • 在正式构建之前,稍微修改一下目录msckf_mono下的CMakeLists.txt文件,使之能找得到刚刚自行编译的fast库,方法如下:
    • 将find_package(fast REQUIRED)一行注释掉
    • 在其下添加如下两行指令:

      set(fast_INCLUDE_DIRS ${ANY_PATH}/fast/include)
      set(fast_LIBRARIES ${ANY_PATH}/fast/build/libfast.a)

      注:这里之所以要这么做,是因为我没有将fast安装到系统的标准位置,而是手动指定了一下。为了方便,就偷个懒,请见谅。
  • 构建msckf,指令如下:
$ cd ANY_PATH/catkin_ws
$ catkin_make
$ source devel/setup.bash

3. 运行

运行的方法就是README中的那一条指令了,以MH_01_easy数据集为例,如下:

$ roslaunch msckf_mono asl_msckf.launch data_set_path:=YOUR_DATASET_PATH/MH_01_easy/mav0 stand_still_end:=1403636625413555456.

这里,要注意的地方有两点
第一,源码对EuRoC的数据集有一个小要求,就是所有的.yaml文件,都要在首行添加一句%YAML:1.0,这样做,仅仅是为了满足代码中OpenCV函数能顺利读取.yaml文件。
第二,也是最重要的一点,就是stand_still_end参数,要设置成数据集里飞机起飞时刻的时间戳。建议感兴趣的读者,利用二分法试验各个数据集,找到起飞点的时间戳。

下面,给出一个运行截图:
msckf_mono构建运行方法_第1张图片

简评

  • 算法对初始化的运动模式要求很苛刻,对于EuRoC数据集来说,一定要在飞行器起飞的瞬间开始运行程序。以MH_01_easy为例,博主是在试验了不同的起始时间戳之后,才使初始化位姿不发散。直接从数据序列的起点开始运行,初始化的效果很差,轨迹甚至会直接飞掉。
  • 从MH_01_easy数据集的运行结果直观看,轨迹的精度不算差。一方面,真值曲线(绿色)和估计的轨迹曲线全程的重合度相对较高,另一方面,轨迹最终以较小的偏差延伸到了飞行器出发位置。但根据前述文章的评测,其精度相较于OKVIS等算法,要逊一些。
  • 当然,根据论文作者的评测,这个版本的实现在鲁棒性、实时性方面还是很好的,见论文的DISCUSSION部分及相关的数据表格。

你可能感兴趣的:(VIO,AR)