一、PX4关于GPS质量检测的相关参数
PX4官方参数树:参数参照表 | PX4 Guide (main)
1、EKF2_GPS_CHECK(INT32):
Integer bitmask controlling GPS checks
Comment:Each threshold value is defined by the parameter indicated next to the check. Drift and offset checks only run when the vehicle is on ground and stationary.
Bitmask:
- 0:Sat count (EKF2_REQ_NSATS)
- 1:PDOP (EKF2_REQ_PDOP)
- 2:EPH (EKF2_REQ_EPH)
- 3:EPV (EKF2_REQ_EPV)
- 4:Speed accuracy (EKF2_REQ_SACC)
- 5:Horizontal position drift (EKF2_REQ_HDRIFT)
- 6:Vertical position drift (EKF2_REQ_VDRIFT)
- 7:Horizontal speed offset (EKF2_REQ_HDRIFT)
- 8:Vertical speed offset (EKF2_REQ_VDRIFT)
- 9:Spoofing
2、EKF2_GPS_CTRL(INT32)
GNSS sensor aiding
Comment:Set bits in the following positions to enable:
0 : Longitude and latitude fusion
1 : Altitude fusion
2 : 3D velocity fusion
3 : Dual antenna heading fusion
Bitmask:
- 0:Lon/lat
- 1:Altitude
- 2:3D velocity
- 3:Dual antenna heading
3、EKF2_GPS_DELAY(FLOAT)
GPS measurement delay relative to IMU measurements
4、EKF2_REQ_GPS_H(FLOAT)
Required GPS health time on startup
Comment:Minimum continuous period without GPS failure required to mark a healthy GPS status. It can be reduced to speed up initialization, but it’s recommended to keep this unchanged for a vehicle.
Reboot required:True
5、EKF2_REQ_HDRIFT(FLOAT)
Maximum horizontal drift speed to use GPS
6、EKF2_REQ_NSATS(INT32)
Required satellite count to use GPS
7、EKF2_REQ_PDOP(FLOAT)
Maximum PDOP to use GPS
8、EKF2_REQ_SACC(FLOAT)
Required speed accuracy to use GPS
9、EKF2_REQ_VDRIFT(FLOAT)
Maximum vertical drift speed to use GPS
二、PX4关于辅助定位的相关参数
1、EKF2_OF_CTRL(INT32)
Optical flow aiding
Comment:Enable optical flow fusion.
2、EKF2_OF_DELAY(FLOAT)
Optical flow measurement delay relative to IMU measurements
Comment:Assumes measurement is timestamped at trailing edge of integration period
Reboot required:True
3、EKF2_OF_QMIN(INT32)
In air optical flow minimum quality
Comment:Optical Flow data will only be used in air if the sensor reports a quality metric >= EKF2_OF_QMIN
4、EKF2_OF_QMIN_GND(INT32)
On ground optical flow minimum quality
Comment:Optical Flow data will only be used on the ground if the sensor reports a quality metric >= EKF2_OF_QMIN_GND
5、
三、使用PX4的导航滤波器
参考网页:使用 PX4 的导航滤波器(EKF2) | PX4 Guide (main)
此模式需要 IMU 数据、偏航源(磁力计或外部视觉)和高度数据源。 所有 EKF 操作模式都需要此最小数据集。 然后可以使用其他传感器数据来估计额外的状态。
1、IMU
三轴机体固定惯性测量单元 (IMU) 的角度增量和速度增量数据,最小速率为 100Hz。 注意:在 EKF 使用 IMU 角度增量数据之前,应先对其应用圆锥效应校正。
2、磁力计
磁力计数据融合可以使用 EKF2_MAG_TYPE 进行配置:
5:永不使用磁力计数据。 当数据完全不可信时(例如:传感器附近有大电流、外部异常),这很有用。
估计器将使用其他航向源:GPS 航向 或外部视觉。
当使用 GPS 测量而没有其他航向源时,航向只能在充分的水平加速后才能初始化。 参见下文的 从载具运动估计偏航。
6:仅初始化 (Init only):
磁力计数据仅用于初始化航向估计。 当数据可以在解锁前使用但解锁后不能使用(例如:载具解锁后有大电流)时,这很有用。
初始化后,航向使用其他观测值进行约束。
与None模式不同,当与 GPS 测量结合使用时,此方法允许位置控制模式在起飞期间直接运行。
3、高度
需要高度数据源 - GPS、气压计、测距仪、外部视觉或这些源的组合,最小速率为 5Hz。
4、GNSS/GPS
位置和速度测量
如果满足以下条件,将使用 GPS 测量进行位置和速度估计:
- 通过设置 EKF2_GPS_CTRL 参数启用 GPS 使用。
- GPS 质量检查已通过。 这些检查由 EKF2_GPS_CHECK 和
EKF2_REQ_*参数控制。
有关高度源配置的更多详细信息,请 点击这里。
偏航角测量
某些 GPS 接收机,例如 Trimble MB-Two RTK GPS 接收机,可用于提供航向测量,以替代磁力计数据的使用。 当在存在大型磁异常的环境中或在地球磁场倾角较大的纬度地区运行时,这可能是一个显著的优势。通过将 EKF2_GPS_CTRL 参数中的第 3 位设置为 1(加 8)来启用 GPS 偏航测量。
双 GPS 接收器
可以使用一种算法混合来自 GPS 接收机的数据,该算法根据报告的精度对数据进行加权(如果两个接收机以相同的速率输出数据并使用相同的精度,效果最佳)。如果来自接收机的数据丢失,该机制还提供自动故障转移(例如,它允许使用标准 GPS 作为更精确的 RTK 接收机的备份)。这由 SENS_GPS_MASK 参数控制。
SENS_GPS_MASK 参数默认设置为禁用混合并始终使用第一个接收机,因此必须设置它以选择使用哪些接收机精度指标来决定每个接收机输出对混合解算的贡献程度。 当使用不同的接收机型号时,重要的是将 SENS_GPS_MASK 参数设置为两个接收机都支持的精度指标值。 例如,除非两个接收机的驱动程序都在vehicle_gps_position消息的s_variance_m_s字段中发布可比较的值,否则不要将第 0 位设置为true。 由于不同制造商定义精度的方式不同(例如 CEP 与 1-sigma 等),这对于来自不同制造商的接收机可能很困难。
设置期间应检查以下项目:
- 验证第二个接收机的数据是否存在。 这将记录为
vehicle_gps_position_1,也可以在连接nsh console时使用命令listener vehicle_gps_position -i 1进行检查。 GPS_2_CONFIG 参数需要正确设置。 - 检查来自每个接收机的
s_variance_m_s、eph和epv数据,并决定可以使用哪些精度指标。 如果两个接收机都输出合理的s_variance_m_s和eph数据,并且 GPS 垂直位置未直接用于导航,则建议将 SENS_GPS_MASK 设置为 3。 如果只有eph数据可用,且两个接收机都不输出s_variance_m_s数据,则将 SENS_GPS_MASK 设置为 2。 只有当 GPS 已通过 EKF2_HGT_REF 参数被选为参考高度源,且两个接收机都输出合理的epv数据时,才会设置第 2 位。 - 混合接收机数据的输出记录为
ekf_gps_position,可以在连接 nsh 终端时使用命令listener ekf_gps_position进行检查。 - 如果接收机以不同的速率输出,则混合输出将采用较慢接收机的速率。 在可能的情况下,接收机应配置为以相同的速率输出。
GNSS 性能要求
为了让 ECL 接受 GNSS 数据进行导航,需要在一段时间内满足某些最低要求,该时间由 EKF2_REQ_GPS_H 定义(默认为 10 秒)。
最小值在 EKF2_REQ_* 参数中定义,并且可以使用 EKF2_GPS_CHECK 参数启用/禁用每个检查。
下表显示了直接报告或从 GNSS 数据计算出的不同指标,以及 ECL 使用数据所需的最小值。 此外,平均值 (Average Value)列显示了可能从标准 GNSS 模块(例如 u-blox M8 系列)合理获得的典型值 - 即被认为良好/可接受的值。
| 指标 (Metric) | 最低要求 | 平均值 (Average Value) | 单位 (Units) | 备注 |
|---|---|---|---|---|
| eph | < 3 (EKF2_REQ_EPH) | 0.8 | 米 | 水平位置误差的标准偏差 |
| epv | < 5 (EKF2_REQ_EPH) | 1.5 | 米 | 垂直位置误差的标准偏差 |
| 卫星数量 | ≥ 6 (EKF2_REQ_EPH) | 14 | - | |
| sacc | < 0.5 (EKF2_REQ_EPH) | 0.2 | 米/秒 | 水平速度误差的标准偏差 |
| 定位类型 (fix type) | ≥ 3 | 4 | - | 0-1: 无定位, 2: 2D 定位, 3: 3D 定位, 4: RTCM 码差分, 5: 实时动态 (RTK) 浮点解, 6: 实时动态 (RTK) 固定解, 8: 外推值 |
| 位置精度衰減因子(PDOP) | < 2.5 (EKF2_REQ_EPH) | 1.0 | - | 位置精度衰减 |
| hpos 漂移率 | < 0.1 (EKF2_REQ_EPH) | 0.01 | 米/秒 | 静止时基于 GNSS 位置计算的漂移率 |
| vpos 漂移率 | < 0.2 (EKF2_REQ_EPH) | 0.02 | 米/秒 | 静止时基于 GNSS 高度计算的漂移率。 |
| hspd | < 0.1 (EKF2_REQ_EPH) | 0.01 | 米/秒 | 报告的 GNSS 水平速度的滤波幅值。 |
| 报告的 GNSS 垂直速度的滤波幅值。 | < 0.2 (EKF2_REQ_EPH) | 0.02 | 米/秒 | 所报告的全球导航卫星系统垂直速度的滤波量级。 |
INFO
hpos_drift_rate、vpos_drift_rate和hspd是在 10 秒的时间段内计算的,并在ekf2_gps_drift主题中发布。 注意ekf2_gps_drift不会被记录!
GNSS 故障检测
PX4 的 GNSS 故障检测使用基于测量验证的选择性融合控制来防止恶意或错误的 GNSS 信号。
故障检测逻辑取决于 GPS 模式,并且对于水平位置和高度测量的操作也有所不同。该模式使用 EKF2_GPS_MODE 参数设置:
- 自动 (
0)(默认): 假设 GNSS 通常是可靠的,并且很可能会恢复。 如果此时没有其他位置源可用,EKF2 会在融合超时时重置。 - 航位推算 (
1): 假设 GNSS 可能会无限期丢失,因此当我们有其他位置数据估计时应避免重置。 如果没有其他位置或速度源可用,EKF2 可能会重置。 如果 GNSS 高度或水平位置数据漂移,系统将同时禁用这两个测量值的融合(即使其中一个仍能通过验证),并避免执行重置。
检测逻辑
水平位置:
- 自动模式: 如果当前没有融合其他水平位置源(例如:辅助全局位置 - AGP),水平位置将重置为 GNSS 数据。
- 航位推算模式: 仅当当前没有融合其他水平位置或速度源(例如:AGP、空速、光流)时,水平位置才会重置为 GNSS 数据。
高度:
- 由于高度参考传感器 (EKF2_HGT_REF) 参数(在无 GNSS 场景中通常设置为 GNSS 或气压计),高度逻辑更加复杂。
- 如果高度参考设置为气压计,则防止基于 GNSS 的高度重置(除非气压计融合完全失败且高度参考自动切换到 GNSS)。
- 当高度参考设置为 GNSS 时:
- 自动模式: 在 GNSS 高度测量值漂移时发生重置。
- 航位推算模式: 当验证开始失败时,系统会阻止 GNSS 高度重置并将 GNSS 数据标记为故障。
启动期间的错误 GNSS 数据
系统无法在载具启动期间自动检测错误的 GNSS 数据,因为不存在基线比较。
如果启用了 GNSS 融合 (EKF2_GPS_CTRL),操作员将在地图上观察到不正确的位置,并应禁用 GNSS 融合,然后通过地面站手动设置正确的位置。 全局位置得到修正,如果启用了 SENS_BAR_AUTOCAL,气压计偏移量会自动调整(通过零偏校正,而不是参数更改)。
飞行中启用 GNSS 融合
存在错误 GNSS 数据时:
- 自动模式: 载具将重置到错误位置 - 具有潜在危险。
- 航位推算模式: 大的测量差异会导致 GNSS 被拒绝并激活故障检测。
存在有效 GNSS 数据时:
- 自动模式: 载具将重置到 GNSS 测量值。
- 航位推算模式: 如果估计位置/高度与测量值足够接近,则恢复融合;如果相距太远,数据将被标记为故障。
备注
- 双重检测: 水平和高度检查完全分开运行,但在触发时都会导致相同的结果 - 所有 GNSS 融合被禁用。
- 恢复: 只有将数据标记为无效的特定检查才能重新启用融合。
- 替代来源: 航位推算模式通过在允许重置之前要求没有替代导航源,提供了增强的保护。
- 启动漏洞: 初始错误 GNSS 数据无法自动检测;需要操作员干预和手动位置校正。
外部视觉系统
可以使用来自外部视觉系统(例如 Vicon)的位置、速度或方向测量值。
通过将 EKF2_EV_CTRL 的相应位设置为true来配置融合的测量值:
0: 水平位置数据1: 垂直位置数据。 垂直位置数据。 高度源还可以使用 EKF2_HGT_REF 进行配置(参见 高度 部分)。2:速度数据3:偏航角数据
注意,如果使用偏航数据(第 3 位),则航向是相对于外部视觉坐标系的;否则航向是相对于北方的。
EKF 会考虑视觉位姿估计中的不确定性。 此不确定性信息可以通过 MAVLink ODOMETRY 消息中的协方差字段发送,也可以通过参数 EKF2_EVP_NOISE、EKF2_EVV_NOISE 和 EKF2_EVA_NOISE 进行设置。 您可以使用 EKF2_EV_NOISE_MD 选择不确定性的来源。
四、检查 EKF 性能
EKF 错误
EKF 包含针对严重条件状态和协方差更新的内部错误检查。 请参考 EstimatorStatus 中的filter_fault_flags。
观测错误
观测故障分为两类:
- 数据丢失。 一个例子是测距仪无法提供返回数据。
- 新息,即状态预测和传感器观测之间的差异过度。 这种情况的一个例子是过度振动导致大的垂直位置误差,导致气压计高度测量被拒绝。
这两者都可能导致观测数据被拒绝,如果时间足够长,使得 EKF 尝试重置状态以使用传感器观测数据。 所有观测结果均对新息进行了统计置信度检查。 各观测类型的检查标准差数由对应的EKF2_*_GATE参数控制。
测试指标可在 EstimatorStatus 中查看:
mag_test_ratio:磁力计新息最大分量与测试限值的比值vel_test_ratio:速度新息最大分量与测试限值的比值pos_test_ratio:水平位置新息最大分量与测试限值的比值hgt_test_ratio:垂直位置新息与测试限值的比值tas_test_ratio:真空速新息与测试限值的比值hagl_test_ratio:离地高度新息与测试限值的比值
若需查看每个传感器的二值通过/失败汇总,请参考 EstimatorStatus 中的innovation_check_flags。
GPS 数据质量检查
EKF 在开始 GPS 辅助前会执行一系列 GPS 质量检查。 这些检查由 EKF2_GPS_CHECK 和EKF2_REQ_*参数控制。 这些检查的通过/失败状态记录在 EstimatorStatus 的gps_check_fail_flags字段中。 当所有所需的 GPS 检查通过后,此整数将为零。 如果 EKF 未开始 GPS 对齐,请将该整数与 EstimatorStatus 中gps_check_fail_flags的位掩码定义进行对比。
EKF 数值误差
EKF 对其所有计算使用单精度浮点运算,并使用一阶近似来推导协方差预测和更新方程,以降低处理要求。 这意味着,当重新调整 EKF 时,可能遇到协方差矩阵运算条件恶劣,足以导致状态估计中的发散或显著错误的情况。
为防止这种情况,每个协方差和状态更新步骤都包含以下错误检测和更正步骤:
- 如果新息方差小于观测方差(这需要一个不可能的负值状态方差)或协方差更新将为任何一个状态产生负值方差,那么:
- 跳过状态和协方差更新
- 重置协方差矩阵对应行与列
- 在 EstimatorStatus 的
filter_fault_flags中记录该故障
- 状态方差(协方差矩阵中的对角线)被限制为非负。
- 状态方差应用数值上限。
- 协方差矩阵强制对称。
重新调参后,尤其是降低噪声变量的调参,应检查estimator_status.gps_check_fail_flags是否保持为零。
如何应对位置估计的发散?
位置发散的最常见原因是:
- 高振动级别。
- 通过改进无人机的机械隔离来解决。
- 增大 EKF2_ACC_NOISE 和 EKF2_GYR_NOISE 也有帮助,但会让 EKF 更容易受 GPS 突变影响。
- 过大的陀螺仪偏差偏移。
- 通过重新校准陀螺仪来修复。 检查过度温度灵敏度(> 3 deg/sec 偏差在从冷机开始热启动时发生变化,如果受隔热影响以减缓温度变化的速度,则替换传感器。
- 不好的偏航对齐
- 检查磁力计校准和对齐。
- 检查显示的航向 QGC 是否在 15 度以内
- GPS 精度差
- 检查是否有干扰
- 改善隔离和屏蔽
- 检查飞行位置是否有 GPS 信号障碍物和反射器(附近的高层建筑)
- GPS 数据丢失
确定其中哪一个是主要原因需要对 EKF 日志数据进行系统分析:
- 绘制速度创新测试比值 - EstimatorStatus.vel_test_ratio
- 绘制水平位置创新测试比值 - EstimatorStatus.pos_test_ratio
- 绘制高度创新测试比值 - EstimatorStatus.hgt_test_ratio
- 绘制磁力计创新测试比值 - EstimatorStatus.mag_test_ratio
- 绘制 GPS 接收机报告的速度精度 - SensorGps.msg.s_variance_m_s
- 绘制 IMU 增量角状态估计 - EstimatorStatus.states[10]、states[11] 和 states[12]
- 绘制 EKF 内部高频振动指标:
- 增量角锥形振动 - EstimatorStatus.vibe[0]
- 高频增量角振动 - EstimatorStatus.vibe[1]
- 高频增量速度振动 - EstimatorStatus.vibe[2]
正常情况下,所有测试比值应保持在 0.5 以下,仅偶尔出现短暂尖峰,如下成功飞行示例所示:
下图显示了具有良好隔离的多旋翼飞行器的 EKF 振动指标。 可以看到着陆冲击和起飞和着陆期间增加的振动。 目前尚无足够数据给出最大阈值的具体建议。
上述振动指标的数值有限值,因为在接近 IMU 采样频率的频率下存在的振动(大多数电路板为 1kHz)将导致在高频振动指标中未显示的数据中出现偏移。 检测混叠误差的唯一方法是它们对惯性导航精度和新息水平的提高。
除了产生较大的位置与速度测试比值( > 1.0)外,不同误差机制对其他测试比值的影响也不同:
确定过度振动
高振动通常会影响垂直位置与速度新息以及水平分量。 磁力计测试级别仅受到很小程度的影响。
(在此插入示例绘图显示不好振动)
确定过度的陀螺偏差
陀螺零偏过大通常表现为飞行中增量角偏置变化超过 5E-4(约 3 deg/sec),若影响航向轴,还会导致磁力计测试比值显著上升。 除极端情况外,高度通常不受影响。 如果滤波器在飞行前给定时间稳定,则可以容忍接通最高 5 度/秒的偏差值。 若位置发散,指挥器(commander)的预飞检查应阻止解锁。
(在此插入示例图表显示不好的陀螺偏差)
确定较差的偏航精度
由于惯性导航和 GPS 测量计算出的速度方向不一致,因此不良偏航对准导致无人机开始移动时速度测试比率迅速增加。 磁强计的新息受到轻微影响。 高度通常不受影响。
(在此插入示例绘图显示不好的偏航对齐)
确定较差的GPS 数据精度
GPS 数据精度差通常伴随着接收器报告的速度误差的增加以及新息的增加。 由多路径,遮蔽和干扰引起的瞬态误差是更常见的原因。 以下为 GPS 精度暂时下降的示例:多旋翼开始偏离悬停点,需要使用摇杆修正。 EstimatorStatus.vel_test_ratio 上升到 1 以上,说明 GPS 速度与其他测量不一致并已被拒绝。
同时 GPS 接收机报告的速度精度也上升,表明可能是 GPS 错误。
如果我们还看一下 GPS 水平速度新息和新息差异,我们可以看到北向速度新息伴随着这次 GPS “故障”事件的大幅增长。
确定 GPS 数据的丢失
GPS 数据丢失会表现为速度与位置创新测试比值“贴平(flat-lining)”。 出现该情况时,请检查vehicle_gps_position中的其他 GPS 状态数据。
下图显示了使用 SITL Gazebo 模拟 VTOL 飞行生成的 NED GPS 速度新息ekf2_innovations_0.vel_pos_innov[0 ... 2]、GPS NE 位置新息ekf2_innovations_0.vel_pos_innov[3 ... 4]以及气压垂直位置新息ekf2_innovations_0.vel_pos_innov[5]。
模拟的 GPS 在 73 秒时失锁。 注意 GPS 丢失后 NED 速度新息与 NE 位置新息“贴平(flat-line)”。 注意 GPS 丢失 10 秒后,EKF 会回退到使用最后已知位置的静态位置模式,NE 位置新息开始再次变化。
气压计地面效应补偿
如果飞行器在降落接近地面时倾向于再次上升,最可能的原因是气压计地面效应。
这种情况是在推进器向地面推进并在无人机下空形成高压区时造成的。 其结果是降低了对压力高度的解读,从而导致了不必要的爬升。 下图显示了存在地面效应的典型情况。 注意气压信号在飞行开始与结束时的下探。
可启用地面效应补偿修复该问题:
- 从绘图中估算出气压计在起飞或着陆期间的跌落程度。 上图中可读出降落时约 6 米的气压下探。
- 将 EKF2_GND_EFF_DZ 设为该值并加 10% 裕量。 因此,在这种情况下,6.6 米是合适的起始值。
如果有地形估计(例如配备测距仪),还可设置 EKF2_GND_MAX_HGT 来指定启用地面效应补偿的离地高度上限。 若没有地形估计,该参数无效,系统会使用启发式方法判断是否启用地面效应补偿。 若没有地形估计,该参数无效,系统会使用启发式方法判断是否启用地面效应补偿。