转自:https://zhuanlan.zhihu.com/p/76341809
1. 什么是MSCKF?
MSCKF全称Multi-State Constraint Kalman Filter(多状态约束下的Kalman滤波器),是一种基于滤波的VIO算法,2007年由Mourikis在《A Multi-State Constraint Kalman Filter for Vision-aided Inertial Navigation》中首次提出。MSCKF在EKF框架下融合IMU和视觉信息,相较于单纯的VO算法,MSCKF能够适应更剧烈的运动、一定时间的纹理缺失等,具有更高的鲁棒性;相较于基于优化的VIO算法(VINS,OKVIS),MSCKF精度相当,速度更快,适合在计算资源有限的嵌入式平台运行。在机器人、无人机、AR/VR领域,MSCKF都有较为广泛的运用,如Google Project Tango就用了MSCKF进行位姿估计。
VIO分类
VIO相对于VO的好处:
Mourikis A I, Roumeliotis S I. A Multi-State Constraint Kalman Filter for Vision-aided Inertial Navigationwww-users.cs.umn.edu
Indirect Kalman Filter for 3D Attitude Estimationmars.cs.umn.edu
Quaternion kinematics for the error-state Kalman filterwww.iri.upc.edu
Improving the accuracy of EKF-based visual-inertial odometryciteseerx.ist.psu.edu
Online temporal calibration for camera-IMU systemsintra.ece.ucr.edu
High-precision, consistent EKF-based visual-inertial odometryintra.ece.ucr.edu
Monocular Visual Inertial Odometry on a Mobile Devicevision.in.tum.de
KumarRobotics/msckf_viogithub.comRobust Stereo Visual Inertial Odometry for Fast Autonomous Flightarxiv.org
MSCKF的目标是解决EKF-SLAM的维数爆炸问题。传统EKF-SLAM将特征点加入到状态向量中与IMU状态一起估计,当环境很大时,特征点会非常多,状态向量维数会变得非常大。MSCKF不是将特征点加入到状态向量,而是将不同时刻的相机位姿(位置 和姿态四元数 )加入到状态向量,特征点会被多个相机看到,从而在多个相机状态(Multi-State)之间形成几何约束(Constraint),进而利用几何约束构建观测模型对EKF进行update。由于相机位姿的个数会远小于特征点的个数,MSCKF状态向量的维度相较EKF-SLAM大大降低,历史的相机状态会不断移除,只维持固定个数的的相机位姿(Sliding Window),从而对MSCKF后端的计算量进行限定。
MSCKF本质是一个EKF,介绍MSCKF之前,我们先介绍一下INS(Inertial Navigation System)中的IMU状态EKF估计,INS中IMU的状态向量为
其中
INS的EKF步骤为:
对于MSCKF来说,EKF预测步骤与INS一样,区别在EKF观测更新,需要用视觉信息来构建观测模型,从而对IMU预测的状态进行更新。INS中GPS可以直接给出位置 的观测,而视觉通常只能提供多个相机之间相对位姿关系的约束。那观测模型要怎么构建呢?
视觉中,约束通常都是特征点到相机的重投影误差(空间中一个3D特征点根据相机的姿态和位置投影到相机平面,与实际观测的特征点之间的误差):
我们希望用这个重投影误差的约束等式来作为观测模型,但前提是需要知道特征点的3D坐标,而实际应用中特征点的3D坐标是未知的。
MSCKF算法步骤如下:
MSCKF状态propagation和update的流程如下图所示: