无人机 PX4 飞控 | 如何检测状态估计EKF性能

news2024/12/22 23:30:41

无人机 PX4 飞控 | 如何检测状态估计EKF性能

  • 前言
  • 检查EKF性能
    • 缺少pyulog问题解决
    • 脚本崩溃没有输出文件
    • 生成对应文件
  • 结语

在这里插入图片描述

前言

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估计状态的性能好坏和很多因素有关,例如振动、传感器噪声、信号丢失等等,下面介绍如何通过PX4输出的日志数据,来进行EKF性能分析。

检查EKF性能

EKF 输出,状态和状态数据发布到许多 uORB 主题,这些主题在飞行期间记录到 SD 卡上。
以.ulog文件格式保存成飞行日志文件。

该文件可以通过 PX4 pyulog libary 解析

大部分的EKF数据在 EstimatorInnovations 和 EstimateStatus 的uORB消息里,存入.ulog文件

在PX4的文件目录下面有一个Python的脚本,名为process_logdata_ekf.py,具体路径为
PX4-Autopilot/Tools/ecl_ekf/process_logdata_ekf.py

该脚本可以自动生成分析的图形曲线以及metadata文件

使用的话就是cd 到文件的目录下(提前将日志文件拷入),然后输入

python process_logdata_ekf.py <log_file.ulg>

可能会遇到下面两个问题,提供了解决办法

缺少pyulog问题解决

运行报错:

Traceback (most recent call last):
File “process_logdata_ekf.py”, line 11, in
from pyulog import ULog
ModuleNotFoundError: No module named ‘pyulog’
在这里插入图片描述

需要通过pip 进行该模块安装

python process_logdata_ekf.py log_13_2024-8-8-18-27-22.ulg

再次执行,可以正常运行

python process_logdata_ekf.py log_13_2024-8-8-18-27-22.ulg

终端输出

found estimator_selector_status (multi-ekf) data
3 ekf instances
Using test criteria loaded from /home/jk-jone/PX4-Autopilot/Tools/ecl_ekf/check_level_dict.csv
estimator instance: 0
‘reject_mag_x’
在这里插入图片描述

脚本崩溃没有输出文件

没有正常的运行完脚本生成分析文件, 只输出了一个关键信息 reject_mag_x
并没有输出自动分析的图形曲线以及metadata文件

看github上有一样的问题的,有人提出了解决方法,但是没有被官方更新到脚本中。

需要更改Tools/ecl_ekf 路径下的几个脚本文件
在这里插入图片描述

        mean_metric = '{:s}_mean_warn'.format(imu_vibr_metric)
        peak_metric = '{:s}_peak_warn'.format(imu_vibr_metric)
        mean_key = '{:s}_mean'.format(imu_vibr_metric)
        peak_key = '{:s}_peak'.format(imu_vibr_metric)
        if mean_key in imu_metrics and peak_key in imu_metrics:
            if imu_metrics[mean_key] > check_levels[mean_metric] \
                   or imu_metrics[peak_key] > check_levels[peak_metric]:
                imu_status['imu_vibration_check'] = 'Warning'

在这里插入图片描述

                                      ('magx', 'fs_bad_mag_x', 'magx_fail_percentage'),
                                      ('magy', 'fs_bad_mag_y', 'magy_fail_percentage'),
                                      ('magz', 'fs_bad_mag_z', 'magz_fail_percentage'),

在这里插入图片描述

                                       ['fs_bad_mag_x', 'fs_bad_mag_y', 'fs_bad_mag_z',

再次运行则成功生成了对应文件

生成对应文件

成功运行脚本后,会在脚本路径下面生成几个文件,分别是EKF实例数的对应的csv文件和plots pdf文件。

estimator instance: 0
here
flow sensor check failure.
Using test description loaded from /home/jk-jone/PX4-Autopilot/Tools/ecl_ekf/check_table.csv
Test results written to log_13_2024-8-8-18-27-22.ulg-0.mdat.csv
found innovation data (merged estimator_innovations + estimator_innovation_variances) instance 0
posx and posy should be finite values
Plots saved to log_13_2024-8-8-18-27-22.ulg-0.pdf
在这里插入图片描述

运行的日志,是用光流在室内飞行的,在pdf中可以看到 Optical Flow Innovations
在这里插入图片描述

在生成的pdf中,有很多的innovations

innovations 在 EKF 中什么意思
Innovations在EKF(Extended Kalman Filter,扩展卡尔曼滤波器)中是一个关键概念,它代表了预测步骤后的残差或创新量。在滤波过程中,EKF首先通过数学模型对系统状态进行预测,然后将当前观测值与这个预测进行比较。创新(Innovation)就是观测值减去预测值的结果,它可以用来评估预测的准确度,并用于估计状态更新中的协方差矩阵变化。

当创新较小或者接近零时,说明预测与实际观测吻合得较好;如果创新较大,则可能意味着模型需要调整或者噪声影响较大,这时会利用创新来校正系统的状态估计。简而言之,Innovations是衡量传感器数据对系统动态估计贡献的重要工具。

结语

生成的PDF中,还有很多其它数据曲线,可以用来分析EKF的状态和性能

例如 test ratio
Test Ratio:这是一个统计测试的比值,用于确定创新是否在预期的统计分布内。通常,这个比值是通过将创新值除以其标准差来计算的。
这个比率用于以下目的:

  • 1、检测异常:如果测试比率超过了某个阈值(通常是2.0或3.0),这可能表明速度测量存在异常,可能是由于传感器故障、外部干扰或其他问题。
  • 2、数据质量评估:一个较低的测试比率表明EKF的速度估计与实际测量值非常接近,这意味着数据质量良好。相反,一个较高的测试比率可能表明EKF对速度的估计不准确。
  • 3、故障检测:在PX4中,EKF会使用这个比率来检测可能的传感器故障。如果测试比率连续超过阈值,EKF可能会标记相应的传感器为故障,并可能切换到备用传感器或模式

在这里插入图片描述

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

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

相关文章

图像检测【YOLOv5】——深度学习

Anaconda的安装配置&#xff1a;&#xff08;Anaconda是一个开源的Python发行版本&#xff0c;包括Conda、Python以及很多安装好的工具包&#xff0c;比如&#xff1a;numpy&#xff0c;pandas等&#xff0c;其中conda是一个开源包和环境管理器&#xff0c;可以用于在同一个电脑…

计算机网络基本概述

欢迎大家订阅【计算机网络】学习专栏&#xff0c;开启你的计算机网络学习之旅&#xff01; 文章目录 前言一、网络的基本概念二、集线器、交换机和路由器三、互连网与互联网四、网络的类型五、互连网的组成1. 边缘部分2. 核心部分 六、网络协议 前言 计算机网络是现代信息社会…

安装node 报错需要:glibc >= 2.28

--> 解决依赖关系完成 错误&#xff1a;软件包&#xff1a;2:nodejs-18.20.4-1nodesource.x86_64 (nodesource-nodejs) 需要&#xff1a;libm.so.6(GLIBC_2.27)(64bit) 错误&#xff1a;软件包&#xff1a;2:nodejs-18.20.4-1nodesource.x86_64 (nodesource-nodej…

【数据结构篇】~排序(1)之插入排序

排序~插入排序 前言插入排序1.直接插入排序&#xff08;时间复杂度&#xff1a;O(N^2)&#xff09;1.思想2.代码 2.希尔排序(时间复杂度&#xff1a;O(N∙))1.思路简易证明希尔排序的复杂度 2.代码 前言 四大排序&#xff0c;今天解决插入排序 堆排序和冒泡排序已经写过了&am…

C++笔记---继承(上)

1. 继承的简单介绍 1.1 继承的概念 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段&#xff0c;它允许我们在保持原有类特性的基础上进行扩展&#xff0c;增加方法(成员函数)和属性(成员变量)&#xff0c;这样产生新的类&#xff0c;称派生类。 继承呈…

如何利用 Smarter Balanced 塑造教育领域的 AI 治理

目录 定义挑战 以人为本的设计引领 融入多样性 探索以学生为中心的价值观 探索效果的层次和不同的影响 部位于加利福尼亚州的Smarter Balanced Assessment Consortium 是一个由会员主导的公共组织&#xff0c;为 K-12 和高等教育领域的教育工作者提供评估系统。该组织成立…

09_Tensorflow2图像处理大赏:让你的图片笑出AI感,惊艳朋友圈!

1. 图像处理案例 1.1 逆时针旋转90度 import tensorflow as tf import matplotlib.pyplot as plt import matplotlib.cm as cm import numpy import osdef show_pic(pic,name,cmapNone):显示图像plt.imshow(pic,cmapcmap) plt.axis(off) # 打开坐标轴为 on # 设置图像标题…

C语言数据类型、变量及数据类型的长度、取值范围

文章目录 一、数据类型介绍1.字符型2.整型3.浮点型4.布尔类型 二、变量1.变量的创建2.变量的分类 三、数据类型的长度(字节)1.sizeof 操作符2.各种数据类型的长度3.sizeof中表达式不计算 四、各种类型的取值范围1.signed和unsigned2.数据类型的取值范围 五、整型提升练习1练习2…

【Obsidian】当笔记接入AI,Copilot插件推荐

当笔记接入AI&#xff0c;Copilot插件推荐 自己的知识库笔记如果增加AI功能会怎样&#xff1f;AI的回答完全基于你自己的知识库余料&#xff0c;是不是很有趣。在插件库中有Copilot插件这款插件&#xff0c;可以实现这个梦想。 一、什么是Copilot&#xff1f; 我们知道githu…

el-input-number设置了min值,希望默认值展示为空

data() {return {editForm: {num: undefined, //input}} } <el-input-number v-model.trim"editForm.num" controls-position"right" :min"1" placeholder"请输入" clearable /> 展示效果如下:

C++中的左值(Lvalue)和右值(Rvalue)详解

C中的左值&#xff08;Lvalue&#xff09;和右值&#xff08;Rvalue&#xff09;详解 在C中&#xff0c;左值&#xff08;Lvalue&#xff09;和右值&#xff08;Rvalue&#xff09;的概念是理解表达式和变量的重要基础。为了提高C的性能和灵活性&#xff0c;C11引入了一些新的…

F1C100S/F1C200S的资料来源说明

文章目录 常用板子开源创客荔枝派榴莲派 我想说是的官网啥资料都没有。但是它的资料又很多&#xff0c;从淘宝或者其他地方能都搜到很多。 http://wiki.lcmaker.com/index.php?titleLC-PI-200S https://github.com/peng-zhihui/Planck-Pi?tabreadme-ov-file#head4 http://do…

时序必读论文04|Non-stationary Transformers:序列平稳性优化【NeurIPS 2022】

我们在先前的一篇文章中已经总结了直接把Transformer应用到时间序列数据存在的问题&#xff0c;其中序列平稳化是transformer也是其他很多模型都未解决好的一个不足。实际上&#xff0c;序列平稳和非平稳是矛盾的存在&#xff0c;这篇文章探索了&#xff1a;原始数据-->平稳…

python基础知识(四)--if语句,for\while循环

目录 if语句 if-else语句 if...elif...else...语句的语法 if嵌套语句语法 while循环 死循环 for循环 例题&#xff1a; 1.请使用*代替&#xff0c;并输出一个正方形的显示效果。 2.逢7必过的游戏 3.九九乘法表 4.案例: 逢七必过游戏 [0, 999] 碰到特殊天气, 150 就…

停车位检测-停车场车位识别

YOLO Parking Spot 概述 停车场获取的图像训练了四个YOLO模型来检测车辆。目标是收集信息&#xff0c;并可能开发一种停车解决方案以改善交通流量并优化空间利用率。通过识别汽车&#xff0c;我们生成了一份报告&#xff0c;其中包含图像细节&#xff0c;如可用停车位的数量、…

Ai+若依(智能售货机运营管理系统---帝可得)--工单管理【08篇---0005:工单管理】

工单管理 需求说明 工单是一种专业名词,是指用于记录、处理、跟踪一项工作的完成情况。 管理人员登录后台系统选择创建工单,在工单类型里选择合适的工单类型,在设备编号里输入正确的设备编号。 工作人员在运营管理App可以看到分配给自己的工单,根据实际情况选择接收工单并…

复现PointNext代码

一、首先第一步&#xff0c;我们就需要下载代码&#xff1a;guochengqian/PointNeXt: [NeurIPS22] PointNeXt: Revisiting PointNet with Improved Training and Scaling Strategies (github.com) 二、然后下载好了之后&#xff0c;然后最关键的一点&#xff0c;这个点进去也要…

【LeetCode每日一题】2024年9月第二周(上)

2024.9.9 中等 难度评分 1333 链接&#xff1a;2181. 合并零之间的节点 &#xff08;1&#xff09;题目描述&#xff1a; &#xff08;2&#xff09;示例 &#xff08;3&#xff09;分析 整体来说&#xff0c;描述还算清晰的题目&#xff0c;找到0节点所框定的区域&#xff0c…

起重机检测系统源码分享

起重机检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Visio…

@Valid @NotBlank @NotEmpty @NotNull不生效问题

Spring Boot2.3版本将不再内部依赖validator了 所以导致校验的注解不生效 解决方案&#xff1a;加入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId> </dependency&…