MSCKF_vio是一种基于多状态约束卡尔曼滤波器的双目视觉里程计。其中多状态约束是指将多帧图像的相机位姿加入卡尔曼状态向量中,在进行卡尔曼增益之前通过多帧图像之间的约束进行最小二乘优化来估计特征点的空间位置,然后根据优化后的特征点空间位置来约束状态向量。其中,多帧图像保存在一个按时间排序的滑动窗口序列中,跟踪多个特征点在多帧图像中的坐标,从而建立各帧图像位姿之间的约束。另一个约束是:同一时刻的相机位姿与IMU位姿之间是一个已知的约束,这个约束用在状态增广中。在这两种约束下,卡尔曼滤波能够获得一个较好的估计。该方法的优点在于鲁棒性高,计算复杂度低,而缺点是由于其后端是卡尔曼滤波,无法用到全局的信息进行全局的优化,没有回环检测。
代码中主要有三个文件比较重要:src/msckf_vio.cpp, src/image_processor.cpp ,include/msckf_vio/feature.hpp。其中src/msckf_vio.cpp是系统的主体,滤波器的所有步骤都在此文件中进行,包括状态预测,状态增广,测量更新等,是后端优化部分。src/image_processor.cpp是视觉前端,主要作用是跟踪特征点,去除outliers,其中用了三种方法去跟踪特征点:LK光流跟踪,双目匹配,two-point RANSAC。include/msckf_vio/feature.hpp主要是通过多帧图像之间的约束进行最小二乘优化计算各个特征点的空间位置,这个空间位置在msckf测量更新的时候要用到(计算测量雅可比矩阵H,计算残差)。
---------------------
作者:被酱油打
来源:CSDN
原文:https://blog.csdn.net/u014491623/article/details/84712862
版权声明:本文为博主原创文章,转载请附上博文链接!
https://github.com/KumarRobotics/msckf_vio
阅读README.md,按照过程安装。
在此过程中出现了cv_bridge的错误,修改。
## Compling编译
cd /home/wj/Downloads/msckf_vio_workspace/(your_work_space) catkin_make --pkg msckf_vio --cmake-args -DCMAKE_BUILD_TYPE=Release
## Calibration校准
准确的校准对于成功地运行软件是至关重要的。为了获得最佳的软件性能,立体相机和IMU应该是硬件同步的。注意立体标定,包括摄像机内置函数,失真,和两个摄像机之间的非本征,
你必须使用校准软件,手动设置这些参数将不够准确。
[Kalibr](https://github.com/ethz-asl/kalibr)可用于立体标定,也可用于立体相机与IMU之间的转换,所产生的kalibr YAML文件可以直接使用该软件。详情请参见“config”
文件夹中的校准文件。在“config”文件夹下的两个校准文件应与the EuRoC and [fast flight](https://github.com/KumarRobotics/msckf_vio/wiki)dataset直接工作。
校准文件的约定如下:
`camx/T_cam_imu`: takes a vector from the IMU frame to the camx frame.
`cam1/T_cn_cnm1`: takes a vector from the cam0 frame to the cam1 frame.
## Example Usage
分别为EuRoC and fast flight dataset准备了启动文件。启动 `msckf_vio_*.launch`,有两个ros node被创建:
* `image_processor` takes the stereo images to detect and track features. * `vio` takes the feature measurements and tightly fuses them with the IMU messages to estimate pose.
用ros跑下载好的EuRoC数据
- 下载bag包:EuRoC
- 在一个终端,首先运行: roscore
-
再打开一个终端 :
$ cd /home/wj/Downloads/msckf_vio_workspace/ --- <path_to_catkin_ws> $ source devel/setup.bash $ roslaunch msckf_vio msckf_vio_euroc.launch
- 再打开一个终端,打开rviz: rosrun rviz rviz -d /home/wj/Downloads/msckf_vio_workspace/src/msckf_vio/rviz/rviz_euroc_config.rviz //rviz显示模型
- 再打开一个终端,载入数据: rosbag play /home/wj/Downloads/dataset/EuRoC/ROS_bag/MH_05_difficult.bag