MSCKF: A Multi-State Constraint Kalman Filter for Vision-aided Inertial Navigation
Created 2021.05.19 by William Yu; Last modified: 2022.08.09-V1.2.2
Contact: windmillyucong@163.com
Copyleft! 2022 William Yu. Some rights reserved.
MSCKF && S-MSCKF
A Multi-State Constraint Kalman Filter for Vision-aided Inertial Navigation 2007.
Robust Stereo Visual Inertial Odometry for Fast Autonomous Flight 2018.
refitem:
- MSCKF
- paper: MSCKF A Multi-State Constraint Kalman Filter for Vision-aided Inertial Navigation,2007,Mourikis
- paper: 2006预印版 https://intra.ece.ucr.edu/~mourikis/tech_reports/TR_MSCKF.pdf
- code: msckf_mono https://github.com/daniilidis-group/msckf_mono
- S-MSCKF
- paper: S-MSCKF https://arxiv.org/pdf/1712.00036.pdf
- code: msckf_vio https://github.com/KumarRobotics/msckf_vio
- report: https://apps.dtic.mil/sti/pdfs/AD1126850.pdf
- blog: https://zhuanlan.zhihu.com/p/76341809
- blog: https://zhuanlan.zhihu.com/p/76347723
Basic Introduction
-
MSCKF的目标是解决EKF-SLAM的维数爆炸问题
-
传统EKF-SLAM 的状态向量定义为 \(x = [R \ M]^T \tag1\) 其中
-
R 为机体状态向量,即 当前时刻的(x,y,z,yaw,pitch,roll)
-
M 为地图状态向量,即 路标集合,或者理解为特征点构成的稀疏点云
-
-
EKF-SLAM 的弊端:当环境很大时,特征点会非常多,状态向量维数会变得非常大。
-
MSCKF 不将特征点加入到状态向量
-
MSCKF 会缓存历史机体状态位姿 (位置 和姿态四元数 )加入到状态向量,相当于 \(x = [I_{mu} \ R_{k-n} \ ...R_{k-1} \ \ R_{k}]^T\tag 2\)
-
相机位姿的个数会远小于特征点的个数,MSCKF状态向量的维度相较EKF-SLAM大大降低
-
且历史的相机状态会不断移除,只维持固定个数的的相机位姿(Sliding Window),以降低后端的计算量 -> 维护一个pose的FIFO, 而EKF-SLAM 始终只保存最新pose。
-
特征点会被多个相机看到,从而在多个相机状态(Multi-State)之间形成几何约束(Constraint),进而利用几何约束构建观测模型对EKF进行update
-
MSCKF使用的Kalman Filter壳子是 ES-KF,建议先了解ES-KF
Model
1.state vector
// todo(congyu)