MSCKF系列论文阅读与代码流程

2023-05-16

MSCKF原理与代码总结

    • 算法原理
      • 前端理论(图像的特征提取与跟踪)
      • 后端理论(误差状态卡尔曼滤波模型)
      • 1 IMU状态预测
        • 1.1 IMU状态传播(p,v,q - 4阶Runge-Kutta积分 )
        • 1.2 状态协防差矩阵传播
      • 2 相机状态增广(在IMU Propagation之后,Measurement Update之前)
        • 2.1 相机位姿计算
        • 2.2 扩展协方差矩阵
        • 状态扩增的意义
      • 3 测量更新
        • 3.1 三角化估计特征点3d坐标(最小二乘优化估计)
        • 3.2 观测模型
        • 3.3 观测更新
      • 4 相机状态移除
      • 代码流程
        • 前端:ImageProcessor
        • 后端 :MsckfVio 【后端的融合框架用的error-state EKF】

kumar-双目MSCKF-开源
源码地址:https://link.zhihu.com/?target=https%3A//github.com/KumarRobotics/msckf_vio

算法原理

2007单目 vs 2017双目
MSCKF从单目扩展到双目的改动:

  1. 前端只需要对左相机的特征点跟踪其右相机观测,将跟踪特征观测的维度从2维扩展到4维
  2. 后端框架上把左相机加入到状态向量中,根据双目外参可以算出相机状态对应的右目相机位姿,然后特征残差模型从单目的2维残差变成双目的4维残差。

前端理论(图像的特征提取与跟踪)

前端主要功能:

1、双目特征跟踪
1 ) 左图前后帧跟踪:对上一帧左图特征点,在当前帧左图进行跟踪,获得当前帧左图的跟踪特征点
2 ) 左右图跟踪:对当前帧左图特征点,在当前帧右图进行跟踪,获得当前帧右图的跟踪特征点
3 ) 左右图前后帧RANSAC:分别对左右图,进行前后帧2-points RANSAC,剔除外点。只保留左右目都通过RANSAC的特征点。

2、新双目特征提取
1 ) 提取左图特征:在当前帧左图上,构建mask(记录已有特征在图像上的位置)对图像剩下区域提取FAST角点,将新的角点投射到网格中,如果网格中特征点满了则删除该新角点。
2 ) 左右图跟踪:将当前帧左图新提取的特征点,对应到当前帧右图,获得当前帧右图的跟踪特征点。

3、特征均匀化采样
为使特征点在图像上均匀分布,将图像分成了4*5个网格(grid),每个网格中最多4个特征点,这样避免了特征点集中在图像上的某一小块。

注意:左右图的特征点成对出现,对于在右图中跟踪失败的点,在左图特征点会被删除。
特征跟踪流程中的跟踪主要有两种:前后帧跟踪和左右图跟踪,二者都是调用LK光流。
区别在于:
(1)前后帧跟踪用了IMU估计相机旋转来预测特征点初值
(2)左右图跟踪用的左右相机外参,左右图跟踪还加了极线约束,所以匹配准确性更高。

后端理论(误差状态卡尔曼滤波模型)

(使用IMU和相机位姿以及特征点进行位姿估计)

算法步骤:

  1. **IMU积分:**先利用IMU加速度和角速度对状态向量中的IMU状态进行预测,一般会处理多帧IMU观测数据。
  2. **相机状态扩增:**每来一张图片后,计算当前相机状态并加入到状态向量中, 同时扩充状态协方差。
  3. **特征更新:**利用特征点对多个历史相机状态的约束,来更新状态向量。
    注意:这里不只修正历史相机状态,因为历史相机状态和IMU状态直接也存在关系(相机与IMU的外参),所以也会同时修正IMU状态。
  4. **历史相机状态移除:**如果相机状态个数超过N,则剔除最老或最近的相机状态以及对应的协方差.

其状态向量包括:IMU状态和N个历史相机状态,imu误差状态向量如下:
2007年发表的msckf(15维):
在这里插入图片描述
在这里插入图片描述
2017年发表的msckf(21维):
在这里插入图片描述
在这里插入图片描述
除旋转量以外,其他误差项都是直接相加(真实值=估计值+误差值)

1 IMU状态预测

IMU Propagation过程:利用两帧图像之间的所有IMU观测数据(加速度 am和角速度wm),对MSCKF的状态向量和协方差进行迭代预测。它相当于EKF中的预测过程。
在这里插入图片描述
不考虑噪声项时,imu测量值为:
在这里插入图片描述
IMU误差状态可表示为:(连续模型微分方程)
在这里插入图片描述
15x15的F,15x12的G表达式如下:
在这里插入图片描述
IMU误差状态转移方程:(离散模型)
在这里插入图片描述
转换关系:
在这里插入图片描述
在这里插入图片描述

1.1 IMU状态传播(p,v,q - 4阶Runge-Kutta积分 )

直接对状态估计量进行迭代预测(而非误差状态向量);
协方差是根据误差状态的运动模型进行迭代;
每一帧的imu数据预测量包括位置、速度、旋转:p,v,q。ba和bg保持不变。

1)姿态预测:
当|w|>1e-5时:
在这里插入图片描述
当|w|<1e-5时:
在这里插入图片描述
2)位置预测:
速度采用的4阶Runge-Kutta积分:
在这里插入图片描述
3)速度预测:
在这里插入图片描述
常用的三种数值积分:Euler积分、Mid-Point积分、Runge-Kutta积分(4阶)。它们的精度依次从低到高、计算量依次从小到大。令 [k2]的权重为1,其他为0,RK4就退化为Mid-Point法;令 [k1]的权重为1,其他为0,RK4就退化为Euler积分。

1.2 状态协防差矩阵传播

s-msckf中IMU状态 协方差Pii(21x21):
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
总状态向量的协方差 P (21 + 6N):
在这里插入图片描述
每一个imu测量值到达时都需进行:imu状态传播、imu状态协方差更新。

2 相机状态增广(在IMU Propagation之后,Measurement Update之前)

MSCKF的状态向量:
包括IMU状态和N个相机状态
在这里插入图片描述
每来一帧图像后,先根据IMU Propogation对IMU状态进行预测,然后根据相机外参计算当前帧的相机位姿,将最新相机状态加入到状态向量中并扩展协方差矩阵,这就是状态扩增(State Augmentation)

2.1 相机位姿计算

通过当前的imu位姿和imu-cam外参,计算当前相机的位置p与姿态q:
在这里插入图片描述
将新的相机状态(新增6维)加入到状态向量中。

2.2 扩展协方差矩阵

原状态协方差矩阵为(21+6N)x(21+6N),现在新增6维;
2017:(imu状态21维)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
新增相机状态对原状态向量之间的Jacobian【6x(21+6N)】,由相机位姿计算公式对 21+6N 维状态量求偏导。
新加入的相机状态与历史相机状态无关,只与IMU状态有关。

2007:(imu状态15维)
在这里插入图片描述
在这里插入图片描述

状态扩增的意义

MSCKF中,IMU Propagation只改变IMU状态向量和其对应的协方差,与相机无关;而Measurement Updata的观测模型是残差相对于相机状态的观测模型,与IMU状态没有直接关联。状态扩增就相当于相机和IMU状态之间的桥梁,通过关联协方差 Pic 描述相机和IMU状态之间的关系,每一个相机状态都与IMU状态形成关联,这样在观测更新相机状态的同时,会间接更新IMU状态。

3 测量更新

MSCKF观测更新的原理:一个静止的特征点被多个相机位姿观测到,从而对观测到该特征点的多个相机产生约束(即多个相机对该特征点的观测射线应该汇聚在一点)。
MSCKF以此为出发点,先根据多个观测三角化特征点的空间坐标,然后定义特征点到各相机的重投影误差(残差 [r])作为观测量,并推导残差与状态向量之间的线性化关系,即残差观测模型:
在这里插入图片描述
其中:H为残差对误差状态向量的jacobian。

3.1 三角化估计特征点3d坐标(最小二乘优化估计)

选取Cn为相机参考位姿,则 fj 在不同图像上的观测值可通过相机的相对位姿关系,转换到其他相机坐标系(在归一化平面的观测):
在这里插入图片描述
设fj在C1,C2,…,Cn相机下的观测分别为 z1,…zn,最小二乘优化问题:
在这里插入图片描述
得到世界坐标系下特征点 f j 的3d坐标:在这里插入图片描述

3.2 观测模型

单个特征点对单个相机有一个残差模型,残差定义为:
在这里插入图片描述
通过上一步,已知:世界坐标系下特征点 fj的3d位置、相机i位置的位姿估计(由imu状态得到)
-> 将特征点 f j 从世界坐标系,转到相机 i 位置的相机坐标系:在这里插入图片描述
-> 特征点 f j 在相机 i 位置的2d投影(归一化平面的像素坐标 )满足下式:
在这里插入图片描述
-> 将所有观测到 特征点f j 的相机的残差聚集起来,i属于1~n
将所有特征点的观测模型合并得到完整的观测模型, j属于1~m

1)单个特征点对单个相机(双目相机)的观测模型
根据残差公式,残差 r(2x1)与3部分有关:
在这里插入图片描述
(1)与相机的状态有关
(2)与特征点的位置误差有关
(3)与图像噪声有关

单相机:残差(2x1)
在这里插入图片描述
双相机:残差(4x1)
在这里插入图片描述
jacobian详细:
在这里插入图片描述
2)单个特征点对所有相机的观测模型合并
将单个特征点对所有相机的观测模型按行堆叠,得到单个特征点的观测模型:

2007 15维imu状态:
有M个相机位置都观测到了特征点 f j;
单相机:残差(2x M x1)
在这里插入图片描述
根据上式,残差 r 除了与状态向量有关,还与 特征点的3d坐标有关,与理想的观测模型不一致。
在这里插入图片描述
所以需要将特征点从观测模型中移除
移除方式是观测模型两边乘以【 Hfj 的左零空间】
左零空间的定义:在这里插入图片描述
观测模型两边同时乘以 [VT],得到只与状态向量相关,与特征点坐标无关的观测模型:在这里插入图片描述
为什么左零空间消除特征项这一步是在将单个特征点的所有重投影模型聚合之后?原因有几点:
单个特征点对单个相机的重投影模型中 [公式]的维度为 [公式],左零空间不存在,因为 [公式]的解不存在,当 [公式]的行数大于 [公式]的列数时,才存在左零空间。所以特征点至少要被两个相机观测到 [公式]才可以用于观测更新。
对于单个特征点来说,到所有相机的残差模型中都包含 [公式]项,所以可以合并后用左零空间消除;而不同特征点的观测模型中 [公式]项不一样,所以要在不同特征点的观测模型合并之间进行消除。

3)所有特征点的观测模型合并
对所有特征点的残差模型进行合并,得到整体残差模型:在这里插入图片描述
当Hx的行数>列数时,进行QR分解,减少Hx的行数:
在这里插入图片描述
所以最终用于EKF更新的观测模型为:
在这里插入图片描述

3.3 观测更新

EKF更新公式:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
与常规EKF更新公式唯一的区别在状态向量更新量直接是 [Kr]
协方差更新公式使用的对称正定式。

协方差更新有三种等价形式:
1 常规,数值稳定性较差,计算出的协方差不能保证是对称正定阵。
在这里插入图片描述
2 对称形式,计算出的协方差仍是对称阵。
在这里插入图片描述
3 对称正定形式,计算出的协方差是仍是对称正定阵。
在这里插入图片描述

4 相机状态移除

  • 移除时机:Measurement Update之后
  • 移除条件:当相机状态个数超过最大限制 N,移除最老的相机状态,但当相机运动较小时也可以移除最近的相机状态。
  • 移除操作:将待移除相机状态从状态向量中删除;删除协方差中对应的行和列。
    在这里插入图片描述
    哪些特征被用到观测更新?何时进行更新? 观测模型的推导中假设特征点坐标已知,因此需要提前计算特征点坐标,MSCKF通过观测三角化来估计特征点坐标,三角化的精度直接影响观测模型的精度。而三角化的精度又与哪些因素有关呢?
    **特征观测的数量:**理论上观测越多,三角化精度越高。为了让三角化获得足够多的观测,MSCKF等到特征被跟丢后再用于观测更新,特征跟丢意味着该特征点的观测不会再继续增加。
    **特征观测的视差:**特征视差越大,三角化精度越高。但是特征点的视差取决于相机的运动方式,而相机运动是算法主动控制不了的,所以只能被动地判断特征点的视差,如果视差不够的话,则将其丢弃掉,不进行三角化和观测更新。
    **相机位姿的精度:**相机位姿的精度会直接影响三角化的精度,MSCKF在特征跟丢后再进行三角化,也是因为历史的相机位姿都经过了EKF更新过程,相对来说比较准。相机位姿和三角化是典型的SLAM中“鸡生蛋蛋生鸡”的关系,只有三角化足够准,才能准确估计相机的位姿,只有相机位姿足够准,才能准确地三角化。这个问题的根源在于MSCKF将特征点估计(Mapping)和位姿估计(Localization)分离开来,像很多SLAM算法都会通过BA来同时优化特征点和位姿,但BA优化的计算量又会很大。MSCKF虽然将二者分开,但实际精度也能做到挺高。
    **还有一个细节值得考虑:**当Slidingwindow满了以后历史相机状态会被移除,假如此时特征点仍未跟丢,就不会触发三角化和观测更新,如果直接丢弃历史相机状态对应的观测会造成信息丢失,这种情况应该如何处理呢?
    参考开源算法S-MSCKF中的做法:移除历史相机状态时,如果特征点尚未三角化,则先进行三角化,再将其对待移除的观测相机(注意不是对全部观测相机)的观测模型用于更新。另外,需要注意的是观测模型约束的是相机之间的相对位姿关系,单个特征点至少需要被两个相机观测到(两个残差模型)才能用于观测更新,所以S-MSCKF中每次移除两个相机状态,如果特征点被两个待移除相机状态观测到,则计算特征点对两个待移除相机状态的残差模型进行更新,剩下的观测待到特征点跟丢后再进行更新。

代码流程

前端:ImageProcessor

  1. 数据入口
  • imuCallback:接收IMU数据,将IMU数据存到imu_msg_buffer中,这里并不处理数据。
  • stereoCallback:接收双目图像,进行双目特征跟踪,先光流跟踪上一帧的特征点,然后提取新的特征点。将跟踪到的特征点publish出去,供后端接收使用。
  1. 关键函数 stereoCallback
    在这里插入图片描述
  2. 双目特征跟踪 trackFeatures()
    (1)积分imu数据,得到粗略的旋转估计
    (前后两帧之间所有的IMU数据,计算平均角速度,通过外参分别转到左右相机系,再乘以时间得到相对旋转)在这里插入图片描述
    (2)predictFeatureTracking 使用积分估计的位姿,
    得到上帧左图像上的特征点在当前帧左图的初始位置;
    在这里插入图片描述
    (3)前后帧左图进行LK光流跟踪,calcOpticalFlowPyrLK(),得到当前帧左图上的特征点。
    前后帧跟踪用IMU积分的相对旋转预测特征点在当前帧的位置作为初值(integrateImuData, predictFeatureTracking);
    (4)左右图进行双目匹配,同样使用LK光流跟踪,将左图上的特征点对应到右图上的特征点。
    左右帧的匹配使用相机外参预测右图特征点位置作为初值:
    R_cam0_cam1 = R_cam1_imu.t() * R_cam0_imu;

    (5)左右图分别做前后帧RANSAC剔除外点。【twoPointRansac()
剔除离群点包含上述(3)(4)(5)三个步骤:在上一帧与当前帧的cam0、cam1之间不断循环。
 prev frames cam0 ----------> cam1
              |                |
              |ransac          |ransac
              |   stereo match |
 curr frames cam0 ----------> cam1

 1) 当前图像 cam0 与 cam1 进行双目匹配.
 2) 上一帧图像与当前图像的 cam0 进行RANSAC .
 3) 上一帧图像与当前图像的 cam1 进行RANSAC .

对于步骤3,不再需要图像间的跟踪,将双目匹配结果直接用于RANSAC。

通过以上步骤,特征跟踪得到了当前左右两图像的特征点。

4. 当前图像提取新特征点addNewFeatures()
(1)在左图上提取新特征:
detect(cur_img, new_features)
mask:避免提取已经存在的特征
(2)双目匹配,获取右图像上的新特征

后端 :MsckfVio 【后端的融合框架用的error-state EKF】

  1. msckf_vio中两个回调函数作为数据入口:
  • imuCallback:接收IMU数据,将IMU数据存到imu_msg_buffer中
    (利用开头200帧IMU数据进行静止初始化)
  • featureCallback:接收双目特征,进行后端处理。利用IMU进行EKF Propagation,利用双目特征进行EKF Update。
  • 注意: 因此MSCKF要求前200帧IMU静止不动,静止初始化(initializeGravityAndBias)将前200帧imu加速度和角速度求平均, 平均加速度的模值g作为重力加速度, 平均角速度作为陀螺仪的bias, 计算重力向量(0,0,-g)和平均加速度之间的夹角(旋转四元数), 标定初始时刻IMU系与world系之间的夹角。
    在这里插入图片描述
    featureCallback{输入当前图像}触发后端:
    1. batchImuProcessing():对两帧观测之间所有IMU数据做积分。预测imu状态以及协方差矩阵。
    2. stateAugmentation():对MSCKF的估计状态进行扩充, 通过imu-cam外参关系,计算出新图像状态cam_states,将新的相机状态加入到状态向量中,并扩充6*6的协方差矩阵(新相机自身的协方差以及对 imu的协方差)
    3. addFeatureObservations: 将特征添加到map_server, 将特征添加到对应feature.id的observations(std::map)中, 并计算跟踪已有特征的比例.
      4.removeLostFeatures: 对于那些lost(当前帧未track)的特征, 剔除掉观测小于3个的特征, 如果没有初始化尝试进行初始化, 剔除掉初始化失败的特征.
      对于剩下的特征进行观测更新(measurementUpdate), 然后从map_server中移除.也就是说只有跟丢后的特征才会用于观测更新
      5.pruneCamStateBuffer: 当state_server中cam_states超过最大个数时, 需要移除冗余的states(一次移除2个),也会调用measurementUpdate。

measurementUpdate在两种情况下触发:
1 特征跟丢了需要移除特征时(removeLostFeatures)
2 相机状态数量达到最大限制需要剔除掉相机状态时(pruneCamStateBuffer)

使用误差状态的优点

  • 朝向(姿态)的误差状态是最小参数描述, 避免了冗余参数化导致协方差矩阵奇异;
  • 误差状态系统通常在原点附近, 参数远离奇异点或万向节锁等问题, 从而确保EKF线性化一直有效;
  • 误差状态通常很小, 意味着二阶项可以忽略. 这使得Jacobian能够快速容易计算;
  • 误差状态的动态变化较慢, 这是因为大的信号动态性被积分到了额定状态. 这意味着EKF更新频率可以比预测频率低.(VIO中通常IMU数据频率为100-500HZ, 而图像频率只有20-30HZ左右)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MSCKF系列论文阅读与代码流程 的相关文章

随机推荐

  • 树莓派在上电后一直重启进入不了系统桌面

    问题描述 树莓派在上电后一直重启进入不了系统桌面 xff0c 在检查了各种接口没问题后解决办法 原因分析与解决方案 xff1a 用了键盘 鼠标 显示器后5v 1A的插头不行 xff0c 换了ipad用的5V 2A的充电器后就可以开启了 xf
  • 树莓派连接“手机热点“或“WiFi“ 后无法上网,以及连接“手机热点“或“WiFi“时VNC连接失败问题

    问题描述 之前一直在开热点 xff0c 通过电脑端VNC控制树莓派拍摄照片 xff0c 今天突然发现树莓派上不去网 xff0c 所以就试着尝试解决了一下 xff0c 心路历程如下 xff1a 要么就是树莓派连不上网 xff0c 要么就是连上
  • 相机标定和双目相机标定标定原理推导及效果展示

    文章目录 前言一 相机标定1 相机的四个坐标系2 相机的畸变 二 张正友标定法1 求解内参矩阵与外参矩阵的积2 求解内参矩阵3 求解外参矩阵4 标定相机的畸变参数5 双目标定6 极线矫正 xff08 立体校正 xff09 三 视差图与深度图
  • keras:tensor从全连接层输出到卷积层

    一 tensor从卷积层输出到全连接层 用过keras的都知道 xff0c 想从卷积层输出tensor到全连接层 xff0c 只需加一层 xff1a model add Flatten shape就不会出现错误 二 但是如果从全连接层输出t
  • 保研面试复习之数据结构篇

    数据项 数据元素和数据结构的概念 数据项是组成数据元素的 xff0c 有独立含义的 xff0c 不可分割的最小单位 数据元素是数据的基本单位 数据结构是带结构的数据元素的集合 数据结构包括逻辑结构和存储结构两个层次 数据结构的三要素是逻辑结
  • 视觉里程计的重定位问题1——SVO的重定位部分

    SVO的重定位部分代码解析与分析 SVO的重定位功能体现在 xff1a 运动跟踪丢失后通过与上一关键帧匹配以及地图点投影 xff0c 找回当前相机位姿 由于没有后端和回环 xff0c SVO的重定位并不是回环校正后的重定位 代码部分被放在运
  • 组合导航(一):定位技术分类与介绍

    组合导航 xff08 一 xff09 xff1a 导航定位技术分类与介绍 一 定位技术分类1 1 基于相对测量的定位 xff08 航位推算 xff09 1 2 基于绝对测量的定位1 3 组合定位 一 定位技术分类 1 1 基于相对测量的定位
  • git bash可以正常commit,但是 VSCode 里不能正常commit使用的解决方法

    问题描述 同一路径下的源码 xff0c 使用git bash可以正常commit xff0c 但是使用vscode提交commit就会一直卡住 xff0c 转圈圈 参考方案链接 xff1a VS CODE GIT 500 问题处理 pudn
  • 组合导航(四):惯性导航系统

    1 惯性导航系统的物理平台2 惯性测量单元IMU3 惯性传感器的测量值3 1静止状态下的加速度测量3 2静止与运动状态下的角速度测量 4 惯性传感器误差4 1 系统误差 xff08 可通过实验进行校正 xff09 4 2 随机误差4 3 惯
  • 组合导航(七):卡尔曼滤波

    Kalman滤波1 离散卡尔曼滤波2 卡尔曼滤波的流程2 1 预测与时间更新2 2 测量更新与校正 3 卡尔曼滤波 算法步骤4 非线性卡尔曼滤波4 1 线性化kalman滤波4 2 扩展kalman滤波 5 卡尔曼滤波发散控制5 1 KF过
  • 组合导航(八):INS/GPS组合导航

    INS GPS组合导航1 误差反馈1 1 开环INS GPS架构1 2 闭环INS GPS架构 2 组合导航的类型2 1 松耦合 的INS GPS组合导航2 2 紧耦合 的INS GPS组合导航2 3 深度耦合的 INS GPS组合导航 3
  • 组合导航(九):三维简化的INS/GPS组合导航系统

    简化INS与GPS组合系统在三维路面上的导航1 MEMS级IMU的三维定位的性能分析2 解决MEMS级IMU在路面导航中存在的问题3 三维简化的惯性传感器系统3 1 3D RISS概述3 2 xff08 轮式车辆 xff09 采用3D RI
  • PX4安装与编译

    第一步 xff1a 下载源码 下载方式一 xff1a git clone https github com PX4 Firmware git recursive 默认下载版本为master 下载时间比较长 xff0c 包含各种包以及依赖工具
  • PX4:【系统架构】

    PX4系统架构 由两个层组成 xff1a 一是飞行控制栈 xff08 flight stack xff09 二是中间件 xff08 middleware xff09 flight stack xff1a 集成了各种自主无人机的制导 导航以及
  • PX4:【uORB通讯机制】

    uORB xff1a Micro Object Request Broker PX4进程间的通讯机制 xff1a 多对多的信息发布与订阅方式 发布消息 xff1a 1 公告 advertise xff1a 相当于初始化 xff0c 在发布消
  • PX4:【传感器校准】

    sensor的校准校准步骤 xff1a 文件目录 xff1a 代码入口 xff1a 求解模型计算公式 sensor的校准 校准步骤 xff1a 首先通过地面站QGC进行校准 xff0c QGC将校准参数设置到sh文件中 此后再基于QGC的校
  • PX4:【sensor_combined】

    功能介绍消息内容sensor combined 产生机制 amp 代码流程 功能介绍 sensor combined 是一个冗余传感器集合的消息 xff0c 通过订阅多个传感器的数据 xff0c 将冗余的数据经过VoteSensorsUpd
  • PX4:【地面站传感器数据校准】

    上电 gt rsC 运行 sensor start commander start 入口函数 xff1a 位于commander文件夹中 Commader cpp Commander run xff08 xff09 commander lo
  • Windows和Linux双系统安装教程

    最近刚刚完成了Windows和Linux双系统 xff08 这里以Ubuntu安装为例 xff09 的安装 xff0c 应某奔同学要求 xff0c 这里简单记录下安装过程 系统启动盘准备Windows系统安装分出给Linux系统的磁盘空间安
  • MSCKF系列论文阅读与代码流程

    MSCKF原理与代码总结 算法原理前端理论 xff08 图像的特征提取与跟踪 xff09 后端理论 xff08 误差状态卡尔曼滤波模型 xff09 1 IMU状态预测1 1 IMU状态传播 xff08 p v q 4阶Runge Kutta