# 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 ??????? Screenshot from 2022-11-10 17-23-47 $$ P_{k+1} = P_k + V_k * dt + 0.5 * acc * dt * dt $$ (2)、相机位姿求导的错误:![Screenshot from 2022-11-10 17-26-37](./README.assets/2.png) Screenshot from 2022-11-10 17-23-47 **3、**我在复现MSCKF-MONO中将其依赖的一个fast角点的库替换成OpenCV自带的提取器,但是发现效果不是很好。 **4、**原始的双目版本的MSCKF-VIO是强依赖ROS的,比如:NodeLet。这就导致我们无法debug代码。 所以对于双目版本的代码内容我没有作太多的修改。而是对其进行了重构,使其弱依赖ROS。 主要的结构分为前端+后端的形式, 前端:负责进行图像的处理,提取角点。 ​ 大致流程为:回调函数负责接受数据到buf内,开辟另一个线程,从buf内进行数据的时间戳同步提取+图像的处理。仿VINS。 后端:负责进行msckf,求解位姿。这部分没有做过多修改,感觉作者已经在mono上优化了很多了。 看这个代码确实学到了很多,除了卡尔曼的知识,还有RANSAC去除外点+手写高斯牛顿迭代等等。 下一阶段内容,挤时间看一下ORB-SLAM2的论文+源码。