无人驾驶算法学习(六):多传感器融合MSF算法

文章目录

  • 1.引言
  • 2. 算法理论
    • 2.1 MSF基本模型
    • 2.2 预测
    • 2.3 测量与更新
  • 3. 核心代码分析
  • 4. 代码实战

1.引言

本文的多传感器融合是建立在读懂《Quaternion kinematics for the error-state Kalman filter》基础上的 ,是一种相机和IMU融合的理论,里面讲解了IMU的误差状态运动方程构建。误差状态四元数,是有开源的程序的,但是它是集成在rtslam里面的,不方便提取出来使用。
但还有另外一个开源的程序,ETH的MSF,可以比较方便地用在自己的工程里面,并且它的理论与误差状态四元数很接近,稍微有点不同,所以MSF开源程序就成了一个不错的选择。
所以本人研究了ETH的两篇文章:《Vision Based Navigation for Micro Helicopters》和《A Robust and Modular Multi-Sensor Fusion Approach Applied to MAV Navigation》
其核心就是扩展卡尔曼滤波EKF,本人把MSF的核心代码阅读了一遍,推导了论文中的算法,并最后做了实验。

2. 算法理论

MSF关键点:

  • 我们使用IMU含噪声的测量值和bias去计算估计状态量X。并且没有考虑测量值的噪声项和扰动,从而产生了误差。我们把所有不确定性引来的误差放在误差变量δx中考虑,并推导了误差状态运动模型,以此求解Fd状态转移矩阵和P过程协方差矩阵
  • 利用其它来源的数据如GPS,视觉等来作为矫正(使误差可观)。通过估计状态量X计算Hj,利用观测量和估计量计算残差,最后计算K,来更新P和误差变量δx,最后更新状态量X。

2.1 MSF基本模型

基本模型如下图所示。MSF的可扩展性很好,程序里可以接入新的传感器,比如GPS,激光雷达,码盘。

无人驾驶算法学习(六):多传感器融合MSF算法_第1张图片下图是msf的原理示意图:

无人驾驶算法学习(六):多传感器融合MSF算法_第2张图片
下图是eskf中所有变量解释表
无人驾驶算法学习(六):多传感器融合MSF算法_第3张图片

2.2 预测

状态表示:
在这里插入图片描述
理想运动模型:
无人驾驶算法学习(六):多传感器融合MSF算法_第4张图片
实际运动模型:
无人驾驶算法学习(六):多传感器融合MSF算法_第5张图片
误差状态表示:

在这里插入图片描述
误差运动状态模型:
无人驾驶算法学习(六):多传感器融合MSF算法_第6张图片
注意:在eskf中有详细推导和解释
无人驾驶算法学习(六):多传感器融合MSF算法_第7张图片
在这里插入图片描述

误差状态导数的转移矩阵:
在这里插入图片描述
二阶泰勒展开(忽略二阶以上微小量):
在这里插入图片描述
误差状态的转移矩阵:
无人驾驶算法学习(六):多传感器融合MSF算法_第8张图片
预测误差状态和预测误差差协方差矩阵:
在这里插入图片描述

2.3 测量与更新

p测量模型:
无人驾驶算法学习(六):多传感器融合MSF算法_第9张图片

q测量模型:

无人驾驶算法学习(六):多传感器融合MSF算法_第10张图片

测量更新:

无人驾驶算法学习(六):多传感器融合MSF算法_第11张图片

3. 核心代码分析

核心算法的代码分析如下图所示:
无人驾驶算法学习(六):多传感器融合MSF算法_第12张图片
预测与更新算法调用关系图:
无人驾驶算法学习(六):多传感器融合MSF算法_第13张图片

4. 代码实战

msf-ethsal编译及使用
相机IMU融合四部曲(三):MSF详细解读与使用
基本操作

roslaunch msf_updates position_pose_sensor.launch 
roslaunch msf_updates viconpos_sensor.launch
rosrun rqt_reconfigure rqt_reconfigure#初始化卡尔曼滤波器,很重要!!
如下界面,需要点击filter

无人驾驶算法学习(六):多传感器融合MSF算法_第14张图片

你可能感兴趣的:(无人驾驶算法学习)