使用ECL EKF
本教程回答有关使用ECL EKF算法的常见问题。
来自2019年PX4开发者峰会(Paul Riseborough博士)的PX4状态估计概述视频提供了估计器的概述,此外还介绍了2018/2019年的主要变化以及到2020年的预期改进。
什么是ECL EKF?
估计和控制库(ECL)使用扩展卡尔曼滤波器(EKF)算法来处理传感器测量并提供以下状态的估计值:
- 四元数定义了从北,东,下局部土框架到X,Y,Z体框架的旋转
- IMU的速度-北,东,下(m / s)
- 在IMU中的位置-北,东,下(m)
- IMU增量角度偏差估算-X,Y,Z(弧度)
- IMU增量速度偏差估算-X,Y,Z(m / s)
- 地磁场分量-北,东,下(高斯)
- 车身框架磁场偏置-X,Y,Z(高斯)
- 风速-北,东(m / s)
EKF在延迟的“融合时间范围”上运行,以允许每次测量相对于IMU的不同时间延迟。每个传感器的数据都被FIFO缓冲并由EKF从缓冲区中检索出来,以便在正确的时间使用。每个传感器的延迟补偿由EKF2 _ * _ DELAY参数控制。
互补滤波器用于使用缓冲的IMU数据将状态从“融合时间范围”传播到当前时间。该滤波器的时间常数由EKF2_TAU_VEL和EKF2_TAU_POS参数控制。
缓冲区的“融合时间范围”延迟和长度由最大的
EKF2_*_DELAY
参数确定。如果不使用传感器,建议将其时间延迟设置为零。减少“融合时间范围”延迟可减少用于将状态传播到当前时间的互补滤波器的误差。
调整位置和速度状态以解决IMU和车身框架之间的偏移,然后再将其输出到控制回路。IMU相对于车身框架的位置由EKF2_IMU_POS_X,Y,Z
参数设置。
EKF仅将IMU数据用于状态预测。在EKF推导中,未将IMU数据用作观察值。使用Matlab符号工具箱导出了协方差预测,状态更新和协方差更新的代数方程式,可在此处找到:Matlab符号推导。
它使用什么传感器测量?
EKF具有不同的操作模式,可以进行传感器测量的不同组合。启动时,过滤器会检查传感器的最小可行组合,并且在初始倾斜,偏航和高度对齐完成后,进入提供旋转,垂直速度,垂直位置,IMU角度偏差和IMU速度偏差估算的模式。
此模式需要IMU数据,偏航(磁力计或外部视觉)源和高度数据源。所有EKF操作模式都需要此最小数据集。然后,其他传感器数据可用于估计其他状态。
国际货币联盟
- 三轴主体固定式惯性测量单元的增量角度和增量速度数据,最小速率为100Hz。 注意:在EKF使用IMU增量角数据之前,应先对其进行锥度校正。
磁力计
需要至少5Hz的三轴人体固定磁力计数据(或外部视觉系统姿态数据)。磁力计数据可以通过两种方式使用:
- 使用倾斜估计和磁偏角将磁强计测量值转换为偏航角。 然后,该偏航角用作EKF的观测值。 这种方法不太准确,并且不允许学习人体框架的场偏移,但是,对于磁异常和较大的启动陀螺仪偏置,它更可靠。 这是在启动过程中和在地面上使用的默认方法。
- XYZ磁力计读数用作单独的观测值。 这种方法更精确,并且可以了解车身框架的偏移量,但是假设在存在明显的外部磁异常时,地球磁场环境只会缓慢变化并且表现不佳。
用于选择这些模式的逻辑由EKF2_MAG_TYPE参数设置。
通过使用双天线GPS的偏航来替换它,或者使用IMU测量值和GPS速度数据来估计车辆运动的偏航,可以在没有磁力计的情况下使用该选件。
高度
需要高度数据的来源-GPS,气压,测距仪或外部视觉,其最低速率为5Hz。
高度数据的主要来源由EKF2_HGT_MODE参数控制。
如果不存在这些测量,则EKF将不会启动。检测到这些测量值后,EKF将初始化状态并完成倾斜和偏航对齐。倾斜和偏航对齐完成后,EKF可以转换到其他操作模式,从而可以使用其他传感器数据:
静压位置误差的校正
大气压力高度易受因车辆风的相对速度和方向引起的空气动力学干扰而产生的误差的影响。这在航空领域被称为静压位置误差。如果启用了风速状态估计,则使用ECL / EKF2估计器库的EKF2模块提供了一种补偿这些误差的方法。
对于以固定机翼模式运行的平台,风速状态估计需要启用空速和/或合成侧滑融合。
对于多旋翼,可以启用并调整阻力比力融合,以提供所需的风速状态估计值。
EKF2模块将误差建模为主体固定的椭球体,该椭球体指定了在被转换为高度估算值之前添加到大气压力中或从大气压力中减去的动态压力的比例。有关如何使用此功能的信息,请参见以下参数文档:
全球定位系统
位置和速度测量
如果满足以下条件,GPS测量将用于位置和速度:
- 通过设置 EKF2_AID_MASK 参数 启用GPS使用 。
- GPS质量检查已通过。
这些检查由
EKF2_GPS_CHECK
和
EKF2_REQ_*
参数控制。 - EKF可以通过设置 EKF2_HGT_MODE 参数 直接使用GPS高度 。
偏航测量
某些GPS接收器(例如Trimble MB-Two RTK GPS接收器)可用于提供航向测量,从而取代磁力计数据的使用。在存在较大磁异常的环境中或在此处纬度较高的地方,地球磁场具有较高的倾斜度时,这可能是一个重要的优势。通过将EKF2_AID_MASK参数中的位位置7设置为1(加128)来启用GPS偏航测量。
从GPS速度偏航
EKF在内部运行一个附加的多假设滤波器,该滤波器使用状态为NE速度和偏航角的多个三态扩展卡尔曼滤波器(EKF)。然后使用高斯和滤波器(GSF)组合这些单独的偏航角估计。各个三态EKF使用IMU和GPS水平速度数据(加上可选的空速数据),并且不依赖于偏航角或磁力计测量的任何先验知识。这为来自主滤波器的偏航提供了备份,并且当导航的起飞后损失表明磁力计的偏航估计很差时,可用于重置主24状态EKF的偏航。这将在Emergency yaw reset - magnetometer use stopped
GCS上产生一条消息信息消息。
启用ekf2重播日志记录后,将记录来自此估算器的数据,并可以在yaw_estimator_status
消息中查看该数据。来自各个三态EKF偏航估计器的yaw
各个偏航估计在字段中。GSF组合偏航估计值已投入使用yaw_composite
。GSF偏航估计值的方差在yaw_variance
现场。所有角度均为弧度。GSF应用于各个三态EKF输出的权重在weight
字段中。
如果可以在起飞后执行一些水平移动以使偏航变得可观察,则这也使得无需偏航的磁力计数据或双天线GPS接收器就可以进行操作。要使用此功能,请将EKF2_MAG_TYPE设置为none
(5)以禁用磁力计的使用。一旦车辆执行了足够的水平移动以使偏航角可见,则主要的24状态EKF会将其偏航角与GSF估算值对齐,并开始使用GPS。
双接收器
可以使用基于报告的精度对数据加权的算法来混合来自GPS接收器的数据(如果两个接收器以相同的速率输出数据并使用相同的精度,则效果最佳)。如果来自接收器的数据丢失,该机制还提供自动故障转移(例如,它允许将标准GPS用作更精确的RTK接收器的备份)。这由EKF2_GPS_MASK参数控制。
默认情况下,将EKF2_GPS_MASK参数设置为禁用混合并始终使用第一个接收器,因此必须将其设置为选择使用哪些接收器精度指标来确定每个接收器输出对混合解决方案有多大贡献。在使用不同接收器型号的情况下,将EKF2_GPS_MASK参数设置为使用两个接收器都支持的精度指标的值很重要。例如,不要将位位置0设置为,true
除非两个接收者的驱动程序s_variance_m_s
在vehicle_gps_position
消息字段中发布可比较的值。对于来自不同制造商的接收器,由于定义精度的方式不同(例如CEP与1-sigma等),这可能会很困难。
在安装过程中应检查以下各项:
- 验证是否存在第二个接收器的数据。
vehicle_gps_position_1
当 使用 nsh控制台 通过 nsh控制台 连接时, 此日志将记录为 ,也可以进行检查listener vehicle_gps_position -i 1
。 该 GPS_2_CONFIG 参数需要被正确设置。 - 检查
s_variance_m_s
,eph
以及epv
来自每个接收器的数据,并确定可以使用的准确性指标。 如果两个接收器输出明智s_variance_m_s
和eph
数据,以及GPS垂直位置不被直接用于导航,然后设置 EKF2_GPS_MASK 建议3。 如果只有eph
数据可用,并且两个接收器都不输出s_variance_m_s
数据,则将 EKF2_GPS_MASK 设置 为2。仅当使用 EKF2_HGT_MODE 参数 选择GPS作为主要高度源 并且两个接收器都输出有意义的epv
数据时, 才设置位位置2 。 - 混合接收器数据的输出记录为
ekf_gps_position
,并且可以在使用命令通过nsh终端连接时进行检查listener ekf_gps_position
。 - 如果接收器以不同速率输出,则混合输出将以较慢的接收器速率输出。 接收器应尽可能配置为以相同的速率输出。
GPS性能要求
为了使ECL接受GPS数据进行导航,需要在10秒的时间内满足某些最低要求(在EKF2REQ*参数中定义了最小值)
下表显示了直接从GPS数据报告或计算的不同度量,以及ECL使用的数据的最低要求值。此外,“平均值”列显示了可以从标准GNSS模块(例如uBlox M8系列)中合理获得的典型值,即被认为是良好/可接受的值。
公制 | 最低要求 | 平均值 | 单位 | 笔记 |
---|---|---|---|---|
eph | 3(EKF2_REQ_EPH) | 0.8 | 米 | 水平位置误差的标准偏差 |
epv | 5(EKF2_REQ_EPV) | 1.5 | 米 | 垂直位置误差的标准偏差 |
卫星数 | 6(EKF2_REQ_NSATS) | 14 | -- | |
速度变化 | 0.5 | 0.3 | 多发性硬化症 | |
修复类型 | 3 | 4 | -- | |
hpos_drift_rate | 0.1(EKF2_REQ_HDRIFT) | 0.01 | 多发性硬化症 | 根据报告的GPS位置(静止时)计算的漂移率。 |
vpos_drift_rate | 0.2(EKF2_REQ_VDRIFT) | 0.02 | 多发性硬化症 | 根据报告的GPS高度(静止时)计算的漂移率。 |
速度 | 0.1(EKF2_REQ_SACC) | 0.01 | 多发性硬化症 | 报告的GPS水平速度的滤波幅度。 |
的
hpos_drift_rate
,vpos_drift_rate
并且hspd
计算在一段10秒,并发表中ekf2_gps_drift
的主题。请注意,ekf2_gps_drift
未记录!
测距仪
单个状态过滤器使用测距仪到地面的距离来估计地形相对于高度基准的垂直位置。
如果在可用作零高度基准的平坦表面上进行操作,则通过将EKF2_HGT_MODE参数设置为2,EKF也可以直接使用测距仪数据来估计高度。
空速
通过将EKF2_ARSP_THR设置为正值,可以使用等效空速(EAS)数据估算风速并减少GPS丢失时的漂移。当空速数据超过EKF2_ARSP_THR的正值设置的阈值并且车辆类型不是旋翼时,将使用空速数据。
合成侧滑
固定机翼平台可以利用假定的零滑坡观测值来改善风速估计,并且还可以在没有空速传感器的情况下进行风速估计。通过将EKF2_FUSE_BETA参数设置为1启用此功能。
使用阻力比力的多旋翼风估计
多旋翼平台可以利用空速和沿X和Y体轴的阻力之间的关系来估计风速的北/东分量。通过将EKF2_AID_MASK参数中的位位置5设置为true可以启用此功能。空速与沿X和Y体轴的比力(IMU加速度)之间的关系由EKF2_BCOEF_X和EKF2_BCOEF_Y参数控制,这些参数分别设置了沿X和Y方向飞行的弹道系数。比力观察噪声的大小由EKF2_DRAG_NOISE参数设置。
可以通过在“位置”模式下飞行车辆在静止和最大最大速度之间反复向前/向后,调整EKF2_BCOEF_X来进行调整,以使ekf2_innovations_0.drag_innov[0]
日志消息中相应的创新顺序最小化。然后通过调整EKF2_BCOEF_Y对左右移动重复此操作,以最小化ekf2_innovations_0.drag_innov[1]
创新顺序。如果在静态条件下进行此测试,则调试会更容易。
如果您能够使用SDLOG_MODE = 1和SDLOG_PROFILE = 2记录数据而不会从引导中丢失,可以访问开发环境并能够构建代码,那么我们建议您一次飞行并对通过EKF2 Replay生成的日志进行调整飞行数据。
光流
如果满足以下条件,将使用光流数据:
- 有效的测距仪数据可用。
- EKF2_AID_MASK 参数 中的位位置1 为true。
- 流量传感器返回的质量指标大于 EKF2_OF_QMIN 参数 设置的最低要求 。
外部视觉系统
可以使用外部视觉系统(例如Vicon)的位置,速度或方向测量:
- 如果 EKF2_AID_MASK 参数 中的位位置3 为true , 则将 使用外部视觉系统水平位置数据 。
- 如果将 EKF2_HGT_MODE 参数设置为3, 则将使用外部视觉系统垂直位置数据 。
- 如果 EKF2_AID_MASK 参数 中的位位置8 为true , 则将 使用外部视觉系统速度数据 。
- 如果 EKF2_AID_MASK 参数 中的位位置4 为true ,则外部视觉系统方向数据将用于偏航估计 。
- 如果 EKF2_AID_MASK 参数的 位位置6 为true, 则将估算外部视觉参考框架偏移量并将其用于旋转外部视觉系统数据 。
位4(EV_YAW
)或位6(EV_ROTATE
)应该设置为true,但不能同时设置为true。与外部视觉系统一起使用时,支持以下EKF2_AID_MASK值。
EKF_AID_MASK值 | 设置位 | 描述 |
---|---|---|
321 | GPS + EV_VEL + ROTATE_EV | 前往wrt北(推荐) |
73 | GPS + EV_POS + ROTATE_EV | 朝北wrt方向(不建议使用,EV_VEL 改为使用) |
24 | EV_POS + EV_YAW | 航向外部视野框架 |
72 | EV_POS + ROTATE_EV | 向北行驶 |
272 | EV_VEL + EV_YAW | 航向外部视野框架 |
320 | EV_VEL + ROTATE_EV | 向北行驶 |
280 | EV_POS + EV_VEL + EV_YAW | 航向外部视野框架 |
328 | EV_POS + EV_VEL + ROTATE_EV | 向北行驶 |
EKF考虑了视觉姿势估计的不确定性。此不确定性信息可以通过MAVLinkODOMETRY消息中的协方差字段发送,也可以通过参数EKF2_EVP_NOISE,EKF2_EVV_NOISE和EKF2_EVA_NOISE进行设置。您可以使用EKF2_EV_NOISE_MD选择不确定性的来源。
如何使用“ ecl”库EKF?
将SYS_MC_EST_GROUP参数设置为2以使用ecl EKF。
与其他估算器相比,ecl EKF有哪些优缺点?
像所有估算器一样,大部分性能来自于调整以匹配传感器特性。调优是准确性和鲁棒性之间的折衷,尽管我们试图提供一种满足大多数用户需求的调优,但在某些应用中仍需要进行调优更改。
因此,没有人声称与attitude_estimator_q
+的传统组合有关的准确性local_position_estimator
,估计器的最佳选择将取决于应用程序和调整。
缺点
- ecl EKF是一个复杂的算法,需要对扩展的卡尔曼滤波器理论有很好的理解,并将其应用于导航问题以成功进行调谐。 因此,对于未取得良好结果的用户来说,更难知道要进行哪些更改。
- ecl EKF使用更多的RAM和闪存空间。
- ecl EKF使用更多的日志记录空间。
优点
- ecl EKF能够以数学上一致的方式融合来自具有不同时间延迟和数据速率的传感器的数据,一旦正确设置了延迟参数,就可以提高动态操作的准确性。
- ecl EKF能够融合各种不同类型的传感器。
- ecl EKF可以检测并报告传感器数据中统计上显着的不一致情况,从而有助于诊断传感器错误。
- 对于固定翼运行,ecl EKF可在有或没有空速传感器的情况下估算风速,并且能够将估算的风速与空速测量值和侧滑假设结合使用,以延长GPS在飞行中丢失时的停滞时间。
- ecl EKF估计3轴加速度计的偏差,从而提高了在飞行阶段之间姿态发生较大变化的甩尾机和其他车辆的准确性。
- 联合架构(组合的姿态和位置/速度估算)意味着姿态估算可从所有传感器测量中受益。 如果正确调整,这将为改善姿态估计提供潜力。
如何检查EKF性能?
EKF的输出,状态和状态数据已发布到许多uORB主题,这些主题在飞行过程中已记录到SD卡中。以下指南假定已使用.ulog文件格式记录数据。该.ulog格式的数据可以在Python中使用解析PX4 pyulog库。
在记录到.ulog文件的ekf2_innovations和estimator_statusuORB消息中可以找到大多数EKF数据。
可以在此处找到自动生成分析图和元数据的python脚本。要使用此脚本文件,请cd到Tools/ecl_ekf
目录并输入python process_logdata_ekf.py <log_file.ulg>
。这会将性能元数据保存在名为.mdat.csv并在名为的pdf文件中绘图<log_file>.pdf
。
可以使用batch_process_logdata_ekf.py脚本分析目录中的多个日志文件。完成此操作后,可以使用batch_process_metadata_ekf.py脚本处理性能元数据文件,以提供对整个日志群中估算器性能的统计评估。
输出数据
- 在 vehicle_attitude 消息中 找到姿态输出数据 。
- 在 vehicle_local_position 消息中 找到本地位置输出数据 。
- 在 vehicle_global_position 消息中 找到全局(WGS-84)输出数据 。
- 在 wind_estimate 消息中 找到风速输出数据 。
状态
请参阅estimator_status中的states [32]。状态[32]的索引图如下:
- [0 ... 3]四元数
- [4 ... 6]速度NED(m / s)
- [7 ... 9]位置NED(m)
- [10 ... 12] IMU增量角度偏差XYZ(rad)
- [13 ... 15] IMU增量速度偏差XYZ(m / s)
- [16 ... 18]地磁场NED(高斯)
- [19 ... 21]体磁场XYZ(高斯)
- [22 ... 23]风速NE(m / s)
- [24 ... 32]未使用
状态差异
请参阅estimator_status中的协方差[28]。协方差[28]的索引图如下:
- [0 ... 3]四元数
- [4 ... 6]速度NED(m / s)^ 2
- [7 ... 9]位置NED(m ^ 2)
- [10 ... 12] IMU增量角度偏差XYZ(rad ^ 2)
- [13 ... 15] IMU增量速度偏差XYZ(m / s)^ 2
- [16 ... 18]地磁场NED(高斯^ 2)
- [19 ... 21]体磁场XYZ(高斯^ 2)
- [22 ... 23]风速NE(m / s)^ 2
- [24 ... 28]未使用
观察创新与创新差异
观察estimator_innovations
,estimator_innovation_variances
和estimator_innovation_test_ratios
消息字段中定义estimator_innovations.msg。消息均具有相同的字段名称/类型(但单位不同)。
消息具有相同的字段,因为它们是从相同的字段定义生成的。该
# TOPICS
行(在文件末尾)列出了要创建的消息集的名称):# TOPICS estimator_innovations estimator_innovation_variances estimator_innovation_test_ratios
一些观察结果是:
- 磁力仪XYZ(高斯,高斯^ 2):
mag_field[3]
- 偏航角(rad,rad ^ 2):
heading
- 真实空速(m / s,(m / s)^ 2):
airspeed
- 合成侧滑(rad,rad ^ 2):
beta
- XY光通量(rad / sec,(rad / s)^ 2):
flow
- 地上高度(m,m ^ 2):
hagl
- 拖动比力((m / s)^ 2):
drag
- 速度和位置创新:每个传感器
此外,每个传感器都有其自己的水平和垂直位置和/或速度值(适当时)的字段。这些主要是自我记录,并复制如下:
# GPS
float32[2] gps_hvel # horizontal GPS velocity innovation (m/sec) and innovation variance ((m/sec)**2)
float32 gps_vvel # vertical GPS velocity innovation (m/sec) and innovation variance ((m/sec)**2)
float32[2] gps_hpos # horizontal GPS position innovation (m) and innovation variance (m**2)
float32 gps_vpos # vertical GPS position innovation (m) and innovation variance (m**2)
# External Vision
float32[2] ev_hvel # horizontal external vision velocity innovation (m/sec) and innovation variance ((m/sec)**2)
float32 ev_vvel # vertical external vision velocity innovation (m/sec) and innovation variance ((m/sec)**2)
float32[2] ev_hpos # horizontal external vision position innovation (m) and innovation variance (m**2)
float32 ev_vpos # vertical external vision position innovation (m) and innovation variance (m**2)
# Fake Position and Velocity
float32[2] fake_hvel # fake horizontal velocity innovation (m/s) and innovation variance ((m/s)**2)
float32 fake_vvel # fake vertical velocity innovation (m/s) and innovation variance ((m/s)**2)
float32[2] fake_hpos # fake horizontal position innovation (m) and innovation variance (m**2)
float32 fake_vpos # fake vertical position innovation (m) and innovation variance (m**2)
# Height sensors
float32 rng_vpos # range sensor height innovation (m) and innovation variance (m**2)
float32 baro_vpos # barometer height innovation (m) and innovation variance (m**2)
# Auxiliary velocity
float32[2] aux_hvel # horizontal auxiliar velocity innovation from landing target measurement (m/sec) and innovation variance ((m/sec)**2)
float32 aux_vvel # vertical auxiliar velocity innovation from landing target measurement (m/sec) and innovation variance ((m/sec)**2)
输出互补滤波器
输出互补滤波器用于将状态从融合时间范围传播到当前时间。为了检查在融合时间范围测得的角,速度和位置跟踪误差的大小,是指output_tracking_error[3]
将在ekf2_innovations
消息。
索引图如下:
- [0]角度跟踪误差幅度(弧度)
- [1]速度跟踪误差幅度(m / s)。 速度跟踪时间常数可以使用 EKF2_TAU_VEL 参数 进行调整 。 减小此参数可减少稳态误差,但会增加NED速度输出上的观察噪声量。
- [2]位置跟踪误差幅度(m)。 位置跟踪时间常数可以使用 EKF2_TAU_POS 参数 进行调整 。 减小此参数可减少稳态误差,但会增加NED位置输出上的观察噪声量。
EKF错误
EKF包含内部错误检查,用于条件状态和协方差更新不良。请参阅filter_fault_flags在estimator_status。
观察误差
观察故障分为两类:
- 数据丢失。 一个例子是测距仪无法提供回报。
- 状态预测和传感器观察之间的差异过大,这是创新之处。 例如,过度振动会导致较大的垂直位置误差,从而导致气压计高度测量被拒绝。
这两种情况都可能导致观察数据被拒绝足够长时间,从而导致EKF使用传感器观察尝试尝试重置状态。所有观察结果都有适用于创新的统计置信度检查。检查的标准偏差数由EKF2_*_GATE
每种观察类型的参数控制。
estimator_status中的测试级别如下:
mag_test_ratio
:最大磁力计创新组件与创新测试极限之比vel_test_ratio
:最大速度创新分量与创新测试极限的比率pos_test_ratio
:最大水平位置创新组件与创新测试极限的比率hgt_test_ratio
:垂直位置创新与创新测试极限的比率tas_test_ratio
:真正的空速创新与创新测试极限的比率hagl_test_ratio
:地面创新高度与创新测试极限的比率
有关每个传感器的二进制通过/失败摘要,请参阅estimator_status中的innovation_check_flags。
GPS质量检查
EKF在开始进行GPS辅助之前会应用许多GPS质量检查。这些检查由EKF2_GPS_CHECK和EKF2_REQ_*
参数控制。这些检查的通过/失败状态记录在estimator_status.gps_check_fail_flags消息中。通过所有必需的GPS检查后,此整数将为零。如果EKF没有开始GPS定位,检查对位掩码定义的整数值gps_check_fail_flags
在estimator_status。
EKF数值误差
EKF使用单精度浮点运算进行所有计算,并使用一阶近似来推导协方差预测和更新方程式,以减少处理要求。这意味着在重新调整EKF时可能会遇到条件,其中协方差矩阵运算的条件差到足以引起状态估计中的差异或重大错误。
为防止这种情况,每个协方差和状态更新步骤都包含以下错误检测和纠正步骤:
- 如果创新方差小于观察方差(这需要不可能的负状态方差),或者协方差更新将为任何状态产生负方差,则:
- 状态和协方差更新被跳过
- 重置协方差矩阵中的相应行和列
- 该失败记录在 estimator_status filter_fault_flags消息中
- 状态方差(协方差矩阵中的对角线)被约束为非负。
- 将上限应用于状态差异。
- 在协方差矩阵上强制对称。
在重新调整滤波器后,特别是在涉及减少噪声变量的重新调整之后,estimator_status.gps_check_fail_flags
应检查的值以确保其保持为零。
如果高度估算值不一致,该怎么办?
飞行期间EKF高度偏离GPS和高度计测量值的最常见原因是由于振动引起的IMU测量值的削波和/或混叠。如果发生这种情况,则以下迹象应在数据中显而易见
- ekf2_innovations .vel_pos_innov [2]和 ekf2_innovations .vel_pos_innov [5]将具有相同的符号。
- estimator_status .hgt_test_ratio将大于1.0
建议的第一步是确保使用有效的隔离安装系统将自动驾驶仪与机身隔离。隔离支座具有6个自由度,因此具有6个谐振频率。通常,隔离底座上自动驾驶仪的6个共振频率应高于25Hz,以避免与自动驾驶仪动力学发生相互作用并且低于电动机的频率。
如果共振频率与电动机或螺旋桨叶片的通过频率一致,则隔离支架会使振动恶化。
通过更改以下参数,可以使EKF更加抵抗振动引起的高度发散:
- 将主要高度传感器的创新门的价值提高一倍。 如果使用大气高度,则为 EKF2_BARO_GATE 。
- 最初 将 EKF2_ACC_NOISE 的值 增加到 0.5。 如果仍在发散,则进一步增加0.1,但不要超过1.0
请注意,这些变化的影响将使EKF对GPS垂直速度和气压的误差更加敏感。
如果职位估计有差异,该怎么办?
造成职位差异的最常见原因是:
- 高振动水平。
- 通过改善自动驾驶仪的机械隔离进行修复。
- 增大 EKF2_ACC_NOISE 和 EKF2_GYR_NOISE 的值 可以有所帮助,但确实会使EKF更容易受到GPS故障的影响。
- 大的陀螺仪偏置偏移。
- 通过重新校准陀螺仪进行修复。 从冷启动预热期间检查温度灵敏度是否过高( > 3度/秒,偏置变化),如果绝缘受到影响,请更换传感器以减慢温度变化的速度。
- 偏航角对准
- 检查磁力计的校准和对准。
- 检查所显示的航向QGC是否在15度以内
- GPS精度差
- 检查干扰
- 改善分离和屏蔽
- 检查飞行位置是否有GPS信号障碍物和反射器(附近高层建筑)
- GPS丢失
要确定其中哪一个是主要原因,需要采取有条理的方法来分析EKF日志数据:
- 积速度创新测试比率- estimator_status .vel_test_ratio
- 绘制的水平位置创新测试比率- estimator_status .pos_test_ratio
- 绘制高度创新的测试比率- estimator_status .hgt_test_ratio
- 绘制磁力创新试验比- estimator_status .mag_test_ratio
- 绘制接收器报告速度精度的GPS - vehicle_gps_position .s_variance_m_s
- 画出IMU增量角状态估计值- estimator_status .states [10],状态[11]和状态[12]
- 绘制EKF内部高频振动指标:
- 德尔塔角圆锥振动- estimator_status .vibe [0]
- 高频率增量角振动- estimator_status .vibe [1]
- 高频率增量速度振动- estimator_status .vibe [2]
在正常运行期间,所有测试比率均应保持在0.5以下,并且只有偶尔的尖峰高于此比率,如以下示例中成功飞行所显示:
下图显示了具有良好隔离性的多转子的EKF振动指标。可以看到降落冲击和起飞和降落过程中振动的增加。这些度量标准收集的数据不足,无法提供有关最大阈值的特定建议。
上面的振动指标具有有限的价值,因为在接近IMU采样频率(大多数电路板为1 kHz)的频率下存在振动会导致数据中出现偏移,而高频振动指标中没有这些偏移。检测混叠误差的唯一方法是其对惯性导航精度和创新水平的提高的影响。
除了生成大于1.0的较大位置和速度测试比率外,不同的误差机制还以不同方式影响其他测试比率:
确定过度振动
高振动水平通常会影响垂直位置和速度的创新以及水平分量。磁力计测试水平仅在很小的程度上受到影响。
(在此处插入示例图,显示出不良的振动)
过度陀螺仪偏差的确定
大的陀螺仪偏置偏移通常以在飞行过程中大于5E-4的δ角偏置值变化(相当于〜3度/秒)为特征,如果偏航轴为受到影响。除极端情况外,身高通常不受影响。只要在飞行前给定滤波器一定的时间,就可以容许高达5度/秒的开启偏置值。如果位置偏离,则由指挥官进行的飞行前检查应防止武装。
(在此处插入示例图,显示陀螺仪偏置不良)
偏航精度的确定
偏航角对准不良会导致速度测试比率迅速增加,这是由于惯性导航和GPS测量所计算出的速度方向不一致导致车辆开始行驶时。磁力计的创新会受到轻微影响。高度通常不受影响。
(在此处插入示例图,显示偏航角对准不良)
确定GPS精度不佳
GPS精度差通常伴随着报告的接收器速度误差的增加以及创新的增加。由多径,模糊和干扰引起的瞬态错误是更常见的原因。这是GPS精度暂时损失的一个示例,在这种情况下,多旋翼开始偏离其游荡地点,必须使用操纵杆进行校正。在上升estimator_status.vel_test_ratio到大于1表示GPS速度是与其它测量不一致且已被拒绝。
这伴随着GPS接收器报告的速度精度上升,这表明可能是GPS错误。
如果我们还研究GPS水平速度创新和创新方差,我们会发现伴随GPS“小故障”事件的北速度创新出现了大幅度的上升。
确定GPS数据丢失
GPS数据的丢失将通过速度和位置创新测试比率“平坦”来显示。如果发生这种情况,请检查其他GPS状态数据以vehicle_gps_position
获取更多信息。
下图显示了使用SITL Gazebo通过模拟VTOL飞行生成的NED GPS速度创新ekf2_innovations_0.vel_pos_innov[0 ... 2]
,GPS NE位置创新ekf2_innovations_0.vel_pos_innov[3 ... 4]
和Baro垂直位置创新ekf2_innovations_0.vel_pos_innov[5]
。
使模拟GPS在73秒时失锁。请注意,GPS丢失后,NED速度创新和NE位置创新“平线”。请注意,在没有GPS数据的10秒钟后,EKF使用最新的已知位置恢复为静态位置模式,并且NE位置创新开始再次发生变化。
晴雨表地面效应补偿
如果车辆在着陆过程中倾向于在接近地面时爬回空中,则最可能的原因是气压计地面效应。
这是由于螺旋桨向下推动的空气撞击地面并在无人机下方形成高压区域而引起的。结果是压力高度的读数较低,从而导致发出不必要的爬升命令。下图显示了存在地面效应的典型情况。注意气压计信号在飞行开始和结束时如何下降。
您可以启用地面效应补偿来解决此问题:
- 根据该图估算起飞或着陆期间气压计倾角的大小。 在上面的图中,可以看到降落期间大约6米的晴雨表倾角。
- 然后将参数 EKF2_GND_EFF_DZ 设置为该值,并增加10%的余量。 因此,在这种情况下,6.6米的值将是一个很好的起点。
如果可以进行地形估算(例如,车辆配备了测距仪),则可以另外指定EKF2_GND_MAX_HGT,即高于地面的海拔高度,低于该高度时,应激活地面效应补偿。如果没有可用的地形估计,则此参数无效,并且系统将使用试探法确定是否应激活地面效应补偿。