欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

msckf_mono构建运行方法

程序员文章站 2022-04-18 12:46:09
...

背景

博主是在读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构建运行方法

简评

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