无人机 PX4 飞控 | EKF2简介与使用方法

news2024/12/30 1:59:03

无人机 PX4 飞控 | EKF2简介与使用方法

  • PX4 EKF2简介
  • EKF 的启动
  • ecl EKF 的优缺点
    • 缺点
    • 优点
  • 运行单个EKF实例
  • 运行多个EKF实例

在这里插入图片描述

PX4 EKF2简介

PX4是一个流行的开源飞控系统,广泛用于无人机和其他自动驾驶飞行器。EKF2(Extended Kalman Filter 2)是PX4中用于状态估计的一个关键组件,它负责融合来自不同传感器的数据,如GPS、IMU(惯性测量单元)、磁力计、气压计等,以提供精确的飞行器位置、速度、姿态和海拔信息。

ECL (Estimation and Control Library,估计和控制库),其中的状态估计使用扩展卡尔曼滤波算法(EKF)处理传感器的测量信息,是一个很成熟很优秀的状态估计模块。

EKF 提供如下状态量的估计值:

  • 四元数定义从北东地(NED)局部地球坐标系到 X,Y,Z 机体坐标系的旋转
  • IMU 的速度 — 北,东,地 (NED) (m/s)
  • IMU 的位置 — 北,东,地 (NED) (m)
  • IMU 增量角度偏差估计 — X,Y ,Z (rad)
  • IMU 增量速度偏差估计 - X, Y, Z(m/s)
  • 地球磁场分量 — 北,东,地 (NED) (gauss)
  • 飞行器机体坐标系磁场偏差 — X,Y ,Z (gauss)
  • 风速 — 北, 东 (NE) (m/s)

位置及速度状态变量在输出至控制回路之前会根据IMU与机体坐标系之间的偏差量进行修正。 IMU 相对于机体坐标系的位置由 EKF2_IMU_POS_X,Y,Z 参数设置。

EKF 的启动

EKF2 默认是启动的,相关参数为 EKF2_EN,默认为 Enable。

此外PX4还有其他的状态估计器:

  • EKF2 姿态,位置和风状态估计器 (推荐的) - 扩展卡尔曼滤波估计姿态, 3D 位置/速度和风的状态。
  • LPE 位置估计器 (已弃用) - 用于三维位置与速度状态的扩展卡尔曼滤波器。[LPE 已弃用。 (在开发 PX4 v1.14时)它是工作的,但是不再支持或维护。]
  • Q 姿态估计器 - 一个非常简单、基于四元数的互补滤波器。 它不需要 GPS、磁力计或气压计。

如果是希望启动其它状态估计器,那么则需要启用其参数并关闭其它估计器的参数:

  • EKF2_EN - EKF2 (默认/推荐)
  • ATT_EN - Q 估计器 (基于四元数的姿态估计器)
  • LPE_EN - LPE (不支持固定翼)

ecl EKF 的优缺点

缺点

1、ecl EKF 是一种复杂的算法,需要很好地理解扩展卡尔曼滤波器理论及其应用于导航中的问题才能成功调参。 因此,不知道怎么修改,用户就很难得到好结果。

2、ecl EKF 使用更多 RAM 和闪存空间。

3、ecl EKF 使用更多的日志空间。

优点

1、ecl EKF 能够以数学上一致的方式融合来自具有不同时间延迟和数据速率的传感器的数据,一旦正确设置时间延迟参数,就可以提高动态操作期间的准确性。

2、ecl EKF 能够融合各种不同的传感器类型

3、当 ecl EKF 检测并报告传感器数据中统计上显着的不一致性,将帮助诊断传感器错误。

4、对应固定翼而言,ecl EKF 可以在有空速计和没有空速计的情况下,估计风速。如果GPS在飞行中丢失,可以使用估计的风速结合空速测量和侧滑假设来延长可用的航位推算时间。

5、ecl EKF估计3轴加速度计偏差,这提高了尾座式无人机和其它机体在飞行阶段之间经历大的姿态变化时的精度。

运行单个EKF实例

默认的就是运行EKF的单个实例

在这种情况下,EKF收到数据之前执行传感器选择和故障切换。这为防止有限数量的传感器故障,如数据丢失等,提供了保护。但不能防止传感器提供的不准确数据超过EKF和控制循环的补偿能力(传感器的数据不准还是没有办法)。

运行单个EKF实例的参数设置为:

  • EKF2_MULTI_IMU = 0 | Multi-EKF使用的最大imu数。设置0为禁用(即运行单个EKF)。
  • EKF2_MULTI_MAG = 0 | Multi-EKF使用的最大磁力计数。设置0为禁用(即运行单个EKF)。
  • SENS_IMU_MODE = 1 | 传感器hub IMU 的模式。0为发布所以imu数据 (即有几个imu发布几个imu数据);1为发布主IMU选择(即仅发布1个imu数据)
  • SENS_MAG_MODE = 1 | 传感器hub 磁力计 的模式。0为发布所以磁力计 数据 (即有几个磁力计 发布几个imu磁力计 );1为发布主磁力计 选择(即仅发布1个磁力计 数据)

运行多个EKF实例

为了冗余,飞行器上一般不会仅有一个IMU,如果传感器出现故障,那么则无法恢复。一般会有两个IMU,一个磁力计,甚至两个磁力计。

例如 CUAV 的 X7+ 飞控 , 有三组IMU ,和一个磁力计 ,两个气压计
在这里插入图片描述
其中ICM-42688-P 的 性能要比后两个ICM-20689的性能要好,与传统的消费类IMU相比,噪声系数降低了40%,且温度稳定性提高了2倍。

在之前的PX4版本中,是一个工作,另一个作为备份,这个实际上是一种浪费。

通过运行多个EKF实例的方法,可以根据 IMU 和磁力计的数量以及自动驾驶仪的 CPU 能力,运行多个 EKF 实例,将 IMU 和磁力计的数据交叉输入以计算估计值。通过每个 EKF 实例使用不同的传感器组合,提供了一系列更广泛的传感器错误的保护。

过比较每个 EKF 实例的内部一致性,EKF 选择器能够确定具有最佳数据一致性的 EKF 和传感器组合。

这样可以检测和隔离IMU偏差、饱和或数据卡住等故障。

EKF实例总数是由 EKF2_MULTI_IMU 和 EKF2_MULTI_MAG 所选择的IMU数量和磁强计数量的乘积,由以下公式给出:
N_instances = MAX(EKF2_MULTI_IMU , 1) x MAX(EKF2_MULTI_MAG , 1)

例如,一个带有 2 个IMU和 2 个磁强计的自动化驾驶仪可以在 EKF2_MULTI_IMU = 2 和 EKF2_MULTI_MAG = 2 的情况下运行,总共 4 个EKF实例,其中每个实例使用以下传感器组合:

  • EKF instance 1 : IMU 1, magnetometer 1
  • EKF instance 2 : IMU 1, magnetometer 2
  • EKF instance 3 : IMU 2, magnetometer 1
  • EKF instance 4 : IMU 2, magnetometer 2

可处理的IMU或磁强计传感器的最大数量为每种传感器有4个,因此理论上最大有 4 x 4 = 16 个EKF实例。
实际上,这种做法受到现有计算资源的限制。 实测,使用基于STM32F7的硬件的CPU进行测试,结果显示 4 个EKF实例具有可接受的处理负载和内存利用率裕度。

那么根据上面举的cuav x7+ 的例子,使用多EKF实例,需要进行如下配置:

  • EKF2_MULTI_IMU =3
  • EKF2_MULTI_MAG = 1 (SENS_MAG_MODE 需要被设置为0,才会有这个参数,如果SENS_MAG_MODE为1 ,则搜不到EKF2_MULTI_MAG,其值也就是ECL (Estimation and Control Library,估计和控制库),其中的状态估计使用扩展卡尔曼滤波算法(EKF)处理传感器的测量信息,是一个很成熟很优秀的状态估计模块。

EKF 提供如下状态量的估计值:

  • 四元数定义从北东地(NED)局部地球坐标系到 X,Y,Z 机体坐标系的旋转
  • IMU 的速度 — 北,东,地 (NED) (m/s)
  • IMU 的位置 — 北,东,地 (NED) (m)
  • IMU 增量角度偏差估计 — X,Y ,Z (rad)
  • IMU 增量速度偏差估计 - X, Y, Z(m/s)
  • 地球磁场分量 — 北,东,地 (NED) (gauss)
  • 飞行器机体坐标系磁场偏差 — X,Y ,Z (gauss)
  • 风速 — 北, 东 (NE) (m/s)

位置及速度状态变量在输出至控制回路之前会根据IMU与机体坐标系之间的偏差量进行修正。 IMU 相对于机体坐标系的位置由 EKF2_IMU_POS_X,Y,Z 参数设置。1)

  • SENS_IMU_MODE = 0
  • SENS_MAG_MODE = 1

如果使用的是上面这个型号飞控,则建议进行如下设置
在这里插入图片描述
在这里插入图片描述

判断和选择当前工作的 EKF 实例的方法:
为每一个实例维护两个信息测试率

  • 组合测试率(combined_test_ratio) , 是速度和位置平均测试率和高度测试率的最大值,通过这个可以知道各个EKF实例的质量情况
  • 相对测试率 (relative_test_ratio) ,是在多实例 EKF 中与当前实例的组合测试率有最大差值的测试率,通过这个可以知道最佳候选实例

最佳候选实例超过 10 s 稳定好于当前工作实例,则将其切换为当前工作实例。
这样,外部用户就可以得到连续且稳定的最佳估计值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2129764.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IEEE 802.11a OFDM系统的仿真(续)

(内容源自详解MATLAB/SIMULINK 通信系统建模与仿真 刘学勇编著第九章内容,有兴趣的读者请阅读原书) clear all %%%%%%%参数设计部分%%%%%%%Nsp52;%系统子载波数(不包括直流载波) Nfft64;%FFT长度 Ncp16;…

ppt文档怎么转换成pdf?快来试试这几种转换方法!

ppt文档怎么转换成pdf?在日常工作与学习的广阔舞台上,PPT,这一演示文稿的常青树,无疑是表达创意、传递信息的重要工具,然而,正如每枚硬币都有其两面,PPT在带来便捷的同时,也显露出一…

js | TypeError: Cannot read properties of null (reading ‘indexOf’) 【解决】

js | TypeError: Cannot read properties of null (reading ‘indexOf’) 【解决】 描述 概述 在前端开发中,遇到TypeError: Cannot read properties of null (reading indexOf)这类错误并不罕见。这个错误通常表明你试图在一个null值上调用indexOf方法&#xff0c…

Linux基础---05输入输出重定向

一.输出重定向符号> 操作1 > 文件 :将操作1的结果覆盖到文件里,并且此文件之前的数据全部清空。 操作2 >>文件:将操作2的结果追加到文件里,原文件的内容不会被清空。 操作3 1>right.txt 2>wrong.txt:操作3的返…

C 盘突然爆满,罪魁祸首竟然是 ...... !

今天打开电脑的时候突然发现 C 盘进度条变红了,这很不正常! 做软件开发的应该都会经常在各种磁盘中查找文件和资料,也就会频繁打开 此电脑 窗口,因此即使不是刻意去观察各个磁盘的容量,也会时不时瞟一眼每个盘的占用条…

Java特殊文件xml—利用Dom4J解析xml文件(完整详解,附有代码+案例)

文章目录 三十.特殊文件30.1 xml概述30.1 xml文件30.2 Dom4J解析xml30.2.1 案列130.2.2 案例2 三十.特殊文件 30.1 xml概述 可扩展标记语言 可扩展:标签名字可以自己定义 优点:易于阅读,可以配置成组出现的数据 缺点:解析比较复…

对称矩阵的压缩存储

1.给自己出题:自己动手创造,画一个5行5列的对称矩阵 2.画图:按“行优先”压缩存储上述矩阵,画出一维数组的样子 3.简答:写出元素 i,j 与 数组下标之间的对应关系 4.画图:按“列优先”压缩存储上述矩阵&a…

盐湖卤水中提取铷、铯

盐湖卤水中提取铷、铯是一个复杂但具有重要意义的过程,因为铷、铯是稀有的金属元素,在高科技、航空航天、新能源等领域有广泛应用。以下是从盐湖卤水中提取铷、铯的详细分析:我国盐湖资源丰富,盐类资源总量约12000亿吨&#xff0c…

2024.9.12(k8s环境搭建2)

一、接9.11 19、部署calico的pod 4. 查看容器和节点状态 异常处理: 出现Init:0/3,查看node节点 /var/log/messages是否有除网络异常之外的报错信息 三台机器执行:(更新版本) yum list kernel yum update kernel reb…

i++与++i在for循环中效果一样?

首先说结果 是的,在Visual Studio 2022中,不同于直接printf,在for循环中的i与i是同样的效果(都当作了i) 这是编译器干的好事。 如图比对 i i 原因探寻 | i i的底层原理 找到一篇博客,我目前还看不太明…

关于Spring Cloud 表达式注入漏洞——分析复现

更多漏洞分析复现,可前往无问社区查看http://www.wwlib.cn/index.php/artread/artid/5175.html 一、漏洞成因 近期,Spring Cloud官方发布了一则安全公告,修复了一个Spring Cloud Function中的 SPEL表达式注入漏洞。该漏洞是由于Spring Clou…

123.rk3399 uboot(2017.09) 源码分析3(2024-09-12)

啃了几天initf_dm,发现啃不动啊,但是后面的函数比这个简单,要不先把简单的做了吧。 本文接上一篇https://blog.csdn.net/zhaozhi0810/article/details/142050827 一、c的入口 board_init_f 1.3.12 arch_cpu_init_dm(common/board_f.c&#…

AWS账号申请指南:必须绑定银行卡吗?

小伙伴们,大家好!今天九河云来和大家聊一聊一个常见的问题:申请AWS账号时,是否必须要绑定银行卡呢?相信很多小伙伴在注册AWS账号时都会遇到这个问题。为了帮助大家更好地了解这个过程,小编特意整理了一些信…

SprinBoot+Vue旅游景点管理系统设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍:CSDN认证博客专家,CSDN平台Java领域优质…

模 板

导引: 模板是为了解决函数类型不同所重载,带来的麻烦简化。利用一个模板(示列)代码,让编译器编写出不同类型的代码,满足所需。 int swap(int &p1,int &p2) {int pp1;p1p2;p2p; } char swap(char …

优化安防视频监控的关键体验:视频质量诊断技术如何应用在监控系统中?

随着科技的不断进步,视频监控平台在公安、司法、教育、基础设施等众多领域得到了广泛应用。然而,视频图像的质量直接关系到监控系统的应用效果,是反映监控系统运维效果的重要指标之一。因此,视频监控平台需要配备一系列先进的视频…

基于剂型改良的复杂注射剂分析!

改良型新药在医药领域的重要性日益凸显,其中脂质体注射剂作为一类重要的改良型新药,因其独特的临床优势和技术创新,正受到行业的高度关注。本文基于药融咨询团队的深度分析报告,探讨脂质体注射剂的技术创新、市场前景以及在中国的…

动手学深度学习(三)深度学习计算

一、模型构造 1、继承Module类来构造模型来构造模型 class MLP(nn.Module):# 声明带有模型参数的层,这里声明了两个全连接层def __init__(self, **kwargs):# 调用MLP父类Block的构造函数来进行必要的初始化。这样在构造实例时还可以指定其他函数# 参数&#xff0c…

利用CubeMX复现正点原子TFTLCD驱动例程

来源:正点原子 FMC的工作原理暂时先欠着,先记录一下CRUD的过程。 第一步准备一个us级别延时函数,不会的参考拙作:STM32的定时器简介-CSDN博客 第二部开启FMC外设: ①进入 Pinout->FMC 配置栏,配置 …

【隐私计算】Paillier半同态加密算法

一、何为同态加密(HE)? HE是一种特殊的加密方法,它允许直接对加密数据执行计算,如加法和乘法,而计算过程不会泄露原文的任何信息。计算的结果仍然是加密的,拥有密钥的用户对处理过的密文数据进…