PX4 EKF中的多传感器融合方法

2023-05-16

文章目录

    • 1 滤波方法及状态预测
      • 1.1 EKF 滤波方程
      • 1.2 KF 滤波方程
      • 1.3 PX4中的状态量及其预测
        • 1.3.1 状态量
        • 1.3.2 姿态四元数一步预测
        • 1.3.3 速度、位置一步预测
        • 1.3.4 协方差阵预测
    • 2 磁三轴数据融合
      • 2.1 量测量估计值及量测矩阵
      • 2.2 磁融合滤波方程
      • 2.3 对应代码
      • 2.4 磁偏角融合
    • 3 航向融合
      • 3.1 磁力计航向计算
      • 3.2 航向预测值计算
      • 3.3 航向融合滤波方程
      • 3.4 对应代码
    • 4 空速融合
      • 4.1 空速预测值计算
      • 4.2 空速融合方程
      • 4.3 对应代码
    • 5 位置、速度融合
      • 5.1 位置、速度融合方程
      • 5.2 对应代码
    • 附录

本文首先列出了EKF滤波和卡尔曼滤波公式,其次列出了PX4中姿态四元数、速度、位置的一步预测方程,以及磁传感器、空速传感器、GPS的融合公式,主要参考了Ekf.cpp中的void Ekf::predictState()函数,以及PX4 ECL中的文档 Process and Observatopm Models.pdf。

PX4 ECL库代码及文档Github下载链接:PX4-ECL

1 滤波方法及状态预测

1.1 EKF 滤波方程

系统状态、量测方程如下:
(1)状态方程:
在这里插入图片描述

(2)量测方程:
在这里插入图片描述
其中, u k u_k uk为控制矢量; ω k ω_k ωk为过程噪声, v k v_k vk为量测噪声,均假设为0均值的高斯白噪声,其协方差分别为 Q k Q_k Qk R k R_k Rk

滤波步骤为:

(1)预测:
在这里插入图片描述
(2)更新:
在这里插入图片描述
其中状态转移矩阵量测矩阵定义为如下雅可比矩阵:
在这里插入图片描述

1.2 KF 滤波方程

系统状态、量测方程如下:

(1)状态方程:
在这里插入图片描述
(2)量测方程:
在这里插入图片描述
其中, u k u_k uk为控制矢量; ω k ω_k ωk为过程噪声, v k v_k vk为量测噪声,均假设为0均值的高斯白噪声,其协方差分别为 Q k Q_k Qk R k R_k Rk

滤波步骤为:

(1)预测:
在这里插入图片描述
(2)更新:
在这里插入图片描述

1.3 PX4中的状态量及其预测

1.3.1 状态量

状态量X∈R^(24×1),如下图所示。
在这里插入图片描述

1.3.2 姿态四元数一步预测

四元数的更新方程如图片中(9.3.40)所示(参考《惯性导航第二版 秦永元》):在这里插入图片描述
由于时间较短、非高动态情况下,角度积分值较小,可以用一阶近似,即 c o s Δ θ 2 cos\frac{\Delta\theta}{2} cos2Δθ = 0, s i n Δ θ 2 sin\frac{\Delta\theta}{2} sin2Δθ = Δ θ 2 \frac{\Delta\theta}{2} 2Δθ。所以在PX4的文档中,采用如下公式更新姿态四元数:

计算陀螺积分:
在这里插入图片描述
计算四元数增量:
在这里插入图片描述
计算四元数一步预测值:
在这里插入图片描述

1.3.3 速度、位置一步预测

主要是对陀螺仪和加速度计的量测值进行补偿,通过积分对速度、位置进行计算,比较简单,可参考代码Ekf.cpp中的void Ekf::predictState()函数。

计算加速度积分:
在这里插入图片描述

计算速度一步预测值
在这里插入图片描述
计算位置一步预测值
在这里插入图片描述

1.3.4 协方差阵预测

协方差阵预测相对较为复杂,需要推导雅可比方程,目前暂未进行推导。代码可以参考Covariance.cpp中的void Ekf::predictCovariance()函数。

PX4中使用的协方差预测方程为:

P k ∣ k − 1 = F k P k − 1 ∣ k − 1 F k T + G k Q k G k + Q s P_{k|k-1}=F_k P_{k-1|k-1} F_k^T+G_k Q_k G_k+Q_s Pkk1=FkPk1∣k1FkT+GkQkGk+Qs

其中, P k ∣ k − 1 P_{k|k-1} Pkk1为预测的协方差阵, Q k Q_k Qk为IMU的噪声协方差, Q s Q_s Qs为稳定滤波器所添加的额外过程噪声协方差阵。

2 磁三轴数据融合

2.1 量测量估计值及量测矩阵

EKF滤波中的量测方程为:

z k = h ( x k − 1 ) + v k z_k=h(x_{k-1} )+v_k zk=h(xk1)+vk

设机体系的磁感值为量测量,磁力计测得的磁感值为[ m x b m_x^b mxb m y b m_y^b myb m z b m_z^b mzb ]。由状态估计值可通过下式,计算得到量测量估计值 z k ∣ k − 1 = h ( x k ∣ k − 1 ) z_{k|k-1} = h(x_{k|k-1}) zkk1=h(xkk1)
在这里插入图片描述
其中:
在这里插入图片描述
将式(1.21)展开后可得:
在这里插入图片描述
以X轴为例,求测量雅可比矩阵则需要用式(1.23)求偏导:
在这里插入图片描述
则X轴的测量雅可比矩阵( H x k H_xk Hxk)为:在这里插入图片描述
Y轴、Z轴的雅可比矩阵求法类似,则三轴量测雅可比矩阵为:
在这里插入图片描述

2.2 磁融合滤波方程

假设 x k ∣ k − 1 x _{k|k-1} xkk1 P k ∣ k − 1 P_{k|k-1} Pkk1已知,仅进行EKF滤波中的更新部分。设磁力计的量测噪声协方差为 R k R_k Rk,则:
在这里插入图片描述

2.3 对应代码

参考PX4 EKF 代码Mag_fusion.cpp中的void Ekf::fuseMag()函数。如果使用的是3轴地磁融合,但是没有外部辅助传感器,还必须融合磁偏角来防止长时间的航向偏移(具体融合代码见void Ekf::fuseDeclination())。而在使用航向融合时,不必融合磁偏角。

2.4 磁偏角融合

量测量磁偏角mag_delination
根据状态量计算磁偏角 atan2f(magE, magN)
y k y _k yk = mag_delination-atan2f(magE,magN)

3 航向融合

3.1 磁力计航向计算

由于磁力计在机体系中测量得到三轴数据,因此须将该测量量首先旋转到水平面,再进行磁航向计算。

(1)旋转计算水平磁强度

机体系到水平面的旋转矩阵为 C b n C_b^n Cbn,但磁力计测量量旋转时,航向旋转角度应设为0。设俯仰角为θ,横滚为∅,则旋转矩阵为:
在这里插入图片描述
(2)航向角测量值计算
设mag_declination为磁北和真北的航偏角,则水平面的磁感值为:
在这里插入图片描述
航向角为:
在这里插入图片描述

3.2 航向预测值计算

状态量如图1.1所示,利用状态量中的四元数计算航向角φ估计值:
在这里插入图片描述
求φ对各状态量偏导,具体求导过程参见附录,量测雅可比矩阵为:
在这里插入图片描述

3.3 航向融合滤波方程

在这里插入图片描述

3.4 对应代码

参考PX4 EKF 代码Mag_fusion.cpp中的void Ekf::fuseHeading()函数。

4 空速融合

4.1 空速预测值计算

状态量如图1.1所示,则由状态量可知空速预测值TAS_pred为:
在这里插入图片描述
求TAS_pred相对于状态量的偏导,则有:
在这里插入图片描述
量测雅可比矩阵为:
在这里插入图片描述

4.2 空速融合方程

在这里插入图片描述

4.3 对应代码

参考PX4 EKF 代码Airspeed_fusion.cpp中的void Ekf::fuseAirspeed()函数

5 位置、速度融合

PX4中的水平位置、速度信息由GPS提供,高度信息由GPS、气压高度计、测距仪或视觉传感器提供。由于位置、速度融合的量测方程为线性,因此可以直接使用KF滤波,不用再求雅可比矩阵。

5.1 位置、速度融合方程

在这里插入图片描述

5.2 对应代码

参考PX4 EKF 代码Vel_pos_fusion.cpp中的void Ekf::fuseVelPosHeight()函数。

附录

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PX4 EKF中的多传感器融合方法 的相关文章

  • pixhawk: px4代码初学分析:追溯电机控制--pwm输出

    追溯电机控制 pwm输出 正常工作状态下pwm输出过程简述 xff1a 其他状态下pwm输出 xff1a 正常工作状态下pwm输出过程简述 xff1a 姿态解算部分得出姿态控制量通过px4io cpp把姿态控制量发送给IOIO串口读取姿态控
  • PX4与TX2通信

    PX4与TX2通信以及相关数据的获取 目录 1 PX4硬件接口 2 TELEM1 2接口线序 3 PX4与TX2通信 PX4 IO口定义 xff1a PX4硬件 xff1a 4 通信测试 5 RTPS 43 ROS Jetson TX2终端
  • PX4通过I2C方式添加自定义传感器(2)

    PX4 I2C通信方式传感器驱动分析 xff08 以ets airspeed为例 xff09 1 说明 这篇文章我们就来看看I2C传感器的驱动过程 xff0c 当然里面也有很多东西我不是很理解 xff0c 所以仅谈我领悟的一些东西 我就以e
  • PX4 Offboard Control with MAVROS--Takeoff(一键起飞)

    警告 xff1a 请先在仿真环境下进行测试 xff0c 能达到预期效果后在进行实际飞行测试 xff0c 以免发生意外 本篇文章只是用作学习交流 xff0c 实际飞行时如出现意外情况作者不予以负责 所需材料 1 PIXhawk或者Pixrac
  • CKF MCSCKF UKF EKF滤波性能对比

    CKF MCSCKF UKF EKF滤波性能对比 在非线性滤波中 比较了CKF MCSCKF UKF EKF 几种非线性滤波的性能 用MATLAB进行仿真 八维非线性滤波中 CKF MCSCKF 比较稳定 EKF UKF 表现不好 MATL
  • 飞行机器人(七)仿真平台XTDrone + PX4编译

    0 编译PX4固件 参考仿真平台基础配置教程 xff08 中文详细教程 xff09 仿真平台基础配置 语雀 yuque com https www yuque com xtdrone manual cn basic config 按照教程
  • 关于PX4中的高度若干问题

    飞行的高度是如何测量的 xff1f 地面的高度和海平面的高度差别很大 xff0c 飞控又是如何有效判别进行降落的 xff1f 这是我脑子里的疑问 搜索的一圈发现很少有人讨论这方面的问题 xff0c 于是本次我就直接看一下源代码 xff0c
  • PX4 GAZEBO无人机添加相机并进行图像识别

    PX4 GAZEBO无人机添加摄像头并进行图像识别 在之前完成了ROS的安装和PX4的安装 xff0c 并可以通过roslaunch启动软件仿真 接下来为无人及添加相机 xff0c 并将图像用python函数读取 xff0c 用于后续操作
  • 从Simulink到PX4——Simulink-PX4插件安装与环境搭建

    从Simulink到PX4 Simulink PX4插件安装与环境搭建 前言0 准备工作1 安装WSL2 Setting up the PX4 Toolchain on Windows3 Setting up the PX4 Tool Ch
  • PX4模块设计之十三:WorkQueue设计

    PX4模块设计之十三 xff1a WorkQueue设计 1 WorkQueue启动2 WorkQueue接口2 1 基本接口2 2 辅助接口2 3 WorkQueue任务函数2 3 1 Flat Build2 3 2 Protected
  • PX4模块设计之三十一:ManualControl模块

    PX4模块设计之三十一 xff1a ManualControl模块 1 ManualControl模块简介2 模块入口函数2 1 主入口manual control main2 2 自定义子命令custom command 3 Manual
  • PX4模块设计之三十六:MulticopterPositionControl模块

    PX4模块设计之三十六 xff1a MulticopterPositionControl模块 1 MulticopterPositionControl模块简介2 模块入口函数2 1 主入口mc pos control main2 2 自定义
  • PX4模块设计之三十九:Commander模块

    PX4模块设计之三十九 xff1a Commander模块 1 Commander模块简介2 模块入口函数2 1 主入口commander main2 2 自定义子命令custom command 3 Commander模块重要函数3 1
  • PX4模块设计之四十六:dataman模块

    PX4模块设计之四十六 xff1a dataman模块 1 dataman模块简介2 模块入口函数dataman main3 dataman模块重要函数3 1 start3 2 stop3 3 status3 4 task main 4 A
  • 关于github px4 gps 驱动的开发的总结

    源码编译上边已经写过文章了 遇到的几个问题 1 解决虚拟机不能共享文件夹的问题 一开始虚拟机的更新 vmware tools 是灰色的 xff0c 不能点 xff0c 然后通过关掉虚拟机 xff0c 然后再开启的时候 xff0c 在没有启动
  • px4下载指定版本的固件、git用法

    https hub fastgit org PX4 PX4 Autopilot git describe tag 查看当前版本号 git tag l 查看所有版本 xff0c 也就是打个tag git checkout v1 9 1 跳转到
  • robot_pose_ekf 使用说明

    协方差参数的设置 主要确定mpu6050和odom编码器协方差参数的设置 参考 xff1a turtlebot node协方差的设置 mpu605参数的设置 参考 xff1a https github com Arkapravo turtl
  • EKF的通俗理解

    导 xff1a ekf xff0c 扩展卡尔曼滤波简称 xff0c 应用非常广泛 xff1b 1 五个黄金公式 2 应用场合 1 xff09 找清楚模型 2 xff09 对准五个公式的公式 3 xff09 实现 xff1a 求革新值 xff
  • 步骤三:PX4,Mavros的下载安装及代码测试

    1 安装Mavros sudo apt install ros melodic mavros ros melodic mavros extras 2 安装Mavros相关的 geographiclib dataset 此处已经加了ghpro
  • 大神浅谈无人机飞控软件设计 系统性总结

    写在前面 深感自己对飞控软件 算法的知识点过于杂乱 很久没有进行系统的总结了 因此决定写几篇文章记录一些飞控开发过程的知识点 主要是针对一些软件 算法部分进行讨论 如内容有错误 欢迎指出 1 飞控软件的基本模块 无人机能够飞行主要是依靠传感

随机推荐