# MSCKF
**Repository Path**: zx_f/msckf
## Basic Information
- **Project Name**: MSCKF
- **Description**: mono版本有点问题。
vio版本可以参考
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 3
- **Forks**: 0
- **Created**: 2022-11-10
- **Last Updated**: 2026-02-02
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
**这是一个MSCKF的项目,包括了单目和双目版本的实现。**
我的**WORK**:
**1、**MSCKF的位姿表示形式为**JPL**四元数,而类似VINS中的为**Hamilton**形式,两者最主要的区别是:旋转系的不同,**JPL为左手系,Hamilton为右手系,所以,当只用右手系时,两者其实互为共轭**。
其次旋转方向的表示:
$$
q_{wb} --(1)
$$
表示的是b系到w系的旋转,MSCKF的论文也是这么表示的,但是MSCKF的代码中却反过来写,导致我前期看的头大,晕呼呼的,所以本项目中均采用公式1的表示方法和读法。注意:求解雅可比时,也需要注意使用的是JPL四元数,所以:
$$
exp(\theta^\times) = I_{3*3} - \theta^\times
$$
**2、**本项目中的MSCKF-MONO部分,是我自己复现的。但是出来的效果却不是很好。调了好久也不对。但收获巨大,等我继续学习MSCKF-VIO时,速度就加快了很多。
此外,我在学习MONO版本的过程中,发现MSCKF-MONO的代码中有一些错误。
(1)、imu解算的错误:难道P_k+1 = P_k + V_k * dt ???????
$$
P_{k+1} = P_k + V_k * dt + 0.5 * acc * dt * dt
$$
(2)、相机位姿求导的错误:
**3、**我在复现MSCKF-MONO中将其依赖的一个fast角点的库替换成OpenCV自带的提取器,但是发现效果不是很好。
**4、**原始的双目版本的MSCKF-VIO是强依赖ROS的,比如:NodeLet。这就导致我们无法debug代码。
所以对于双目版本的代码内容我没有作太多的修改。而是对其进行了重构,使其弱依赖ROS。
主要的结构分为前端+后端的形式,
前端:负责进行图像的处理,提取角点。
大致流程为:回调函数负责接受数据到buf内,开辟另一个线程,从buf内进行数据的时间戳同步提取+图像的处理。仿VINS。
后端:负责进行msckf,求解位姿。这部分没有做过多修改,感觉作者已经在mono上优化了很多了。
看这个代码确实学到了很多,除了卡尔曼的知识,还有RANSAC去除外点+手写高斯牛顿迭代等等。
下一阶段内容,挤时间看一下ORB-SLAM2的论文+源码。