# 使用 ECL EKF
本教程回答了有关使用 ECL EKF 算法的常见问题。
TIP
PX4 状态估计概述 (打开新窗口) 视频 2019年PX4开发者峰会 (Paul Riseborough 博士)对估算器进行了概述,并介绍了 2018/2019 年的主要变化以及到 2020 年的预期改进。
# 什么是 ECL EKF?
估计和控制库(ECL)使用扩展卡尔曼滤波器(EKF)算法处理传感器测量值,并提供以下状态的估计值:
- 四元数,定义从北、东、下本地地球框架到 X、Y、Z 机身框架的旋转
- IMU 的速度 - 向北、向东、向下(米/秒)
- IMU 的位置 - 北、东、下(米)
- IMU 三角角偏差估计值 - X、Y、Z(弧度)
- IMU 三角速度偏差估计值 - X、Y、Z(米/秒)
- 地球磁场成分 - 北、东、下(高斯)
- 车身框架磁场偏置 - X、Y、Z(高斯)
- 风速 - 北、东(米/秒)
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 实例
默认行为 是运行 EKF 的单个实例。在这种情况下,传感器选择和故障切换是在 EKF 接收到数据之前进行的。这可以防止传感器出现有限的故障,如数据丢失,但无法防止传感器提供的不准确数据超出 EKF 和控制环路的补偿能力。
运行单个 EKF 实例的参数设置为
- EKF2_MULTI_IMU = 0
- EKF2_MULTI_MAG = 0
- SENS_IMU_MODE = 1
- SENS_MAG_MODE = 1
# 运行多个 EKF 实例
根据 IMU 和磁力计的数量以及自动驾驶仪 CPU 的容量,可以运行多个 EKF 实例。通过每个 EKF 实例使用不同的传感器组合,可以防止出现更大范围的传感器误差。通过比较每个 EKF 实例的内部一致性,EKF 选择器能够确定数据一致性最佳的 EKF 和传感器组合。这样就能检测和隔离故障,如 IMU 偏置的突然变化、饱和或卡住的数据。
EKF 实例的总数是 IMU 数量和磁强计数量的乘积。 EKF2_MULTI_IMU 和 EKF2_MULTI_MAG 计算公式如下
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 实例 1:IMU 1,磁力计 1
- EKF 实例 2:IMU 1,磁力计 2
- EKF 实例 3:IMU 2,磁力计 1
- EKF 实例 4:IMU 2、磁力计 2
可处理的 IMU 或磁力计传感器的最大数量为每个传感器 4 个,理论上最大为 4 x 4 = 16 个 EKF 实例。实际上,这受到可用计算资源的限制。在该功能的开发过程中,使用基于 STM32F7 CPU 的硬件进行的测试表明,4 个 EKF 实例的处理负载和内存利用率均可接受。
警告
飞行前应进行地面测试,检查 CPU 和内存的使用情况。
如果 EKF2_MULTI_IMU = 3,那么大速率陀螺仪误差的故障切换时间将进一步缩短,因为 EKF 选择器能够应用中值选择策略,更快地隔离故障 IMU。
多个 EKF 实例的设置由以下参数控制:
SENS_IMU_MODE:如果运行带有 IMU 传感器分集的多个 EKF 实例,即 EKF2_MULTI_IMU > 1.
设置为 1 时(单 EKF 运行的默认值),传感器模块将选择 EKF 使用的 IMU 数据。这可以防止传感器数据丢失,但不能防止传感器数据出错。设置为 0 时,传感器模块不进行选择。
SENS_MAG_MODE:如果运行具有磁力计传感器分集功能的多个 EKF 实例,即 EKF2_MULTI_MAG > 1.
设置为 1 时(单 EKF 运行的默认值),传感器模块会选择 EKF 使用的磁力计数据。这可以防止传感器数据丢失,但不能防止传感器数据损坏。设置为 0 时,传感器模块不进行选择。
EKF2_MULTI_IMU:该参数指定多个 EKF 使用的 IMU 传感器数量。如果
EKF2_MULTI_IMU
<=1,则只使用第一个 IMU 传感器。当 SENS_IMU_MODE = 1,这将是传感器模块选择的传感器。如果EKF2_MULTI_IMU
>=2,则将为指定数量的 IMU 传感器运行单独的 EKF 实例,最多为 4 个或现有 IMU 数量中较少的一个。EKF2_MULTI_MAG:该参数指定多个 EKF 使用的磁力计传感器数量。如果
EKF2_MULTI_MAG
<=1,则只使用第一个磁力计传感器。当 SENS_MAG_MODE = 1,这将是传感器模块选择的传感器。如果EKF2_MULTI_MAG
>=2,则将为指定数量的磁强计传感器运行单独的 EKF 实例,最多为 4 个或现有磁强计数量中较少的一个。
# 它使用什么传感器测量?
EKF 具有不同的运行模式,可实现不同的传感器测量组合。启动时,滤波器会检查传感器的最小可行组合,并在完成初始倾斜、偏航和高度校准后,进入提供旋转、垂直速度、垂直位置、IMU 三角偏置和 IMU 三角速度偏置估计的模式。
该模式需要 IMU 数据、偏航数据源(磁力计或外部视觉)和高度数据源。所有 EKF 运行模式都需要这一最小数据集。其他传感器数据可用于估计其他状态。
# IMU
- 三轴固定式惯性测量单元三角角和三角速度数据,最小速率为 100Hz。注: 在 EKF 使用 IMU 三角角数据之前,应先对其进行 Coning 校正。
# 磁力计
需要三轴车身固定磁力计数据(或外部视觉系统姿态数据),速率至少为 5Hz。磁强计数据有两种使用方法:
- 磁强计测量值通过倾斜估计值和磁偏角转换为偏航角。然后,偏航角被 EKF 用作观测值。这种方法的精确度较低,而且无法学习机身框架场偏移,但它对磁异常和大的启动陀螺偏差具有更强的鲁棒性。这是启动时和地面上使用的默认方法。
- XYZ 磁强计读数作为单独的观测数据使用。这种方法更加精确,可以学习体框偏移,但假设地球磁场环境变化缓慢,当外部磁场出现明显异常时,这种方法的效果较差。
用于选择这些模式的逻辑由 EKF2_MAG_TYPE 参数。
可以选择在没有磁强计的情况下运行,或者使用 双天线 GPS 的偏航 或使用 IMU 测量值和 GPS 速度数据来 根据载具运动估算偏航.
# 高度
需要一个高度数据源--GPS、气压、测距仪或外部视觉,速率至少为 5Hz。
备注
高度数据的主要来源由 EKF2_HGT_MODE 参数。
如果没有这些测量值,EKF 将不会启动。检测到这些测量数据后,EKF 将初始化状态并完成倾斜和偏航对齐。倾斜和偏航对齐完成后,EKF 就可以过渡到其他运行模式,从而可以使用其他传感器数据:
# 静压位置误差修正
气压高度受载具风相对速度和方向造成的空气动力干扰而产生误差。这在航空学中被称为 静压位置误差.使用 ECL/EKF2 估计器库的 EKF2 模块提供了一种补偿这些误差的方法,前提是风速状态估计处于激活状态。
对于以固定翼模式运行的平台,风速状态估计要求 空速 和/或 合成侧滑 启用融合。
对于多旋翼飞行器,融合 特定阻力 可以启用和调整,以提供所需的风速状态估计值。
EKF2 模块将误差建模为一个体固定椭球体,该椭球体规定了在将误差转换为高度估计值之前,从气压中添加或减去的动态压力分数。
良好的调整方法如下
- 飞一次 位置模式 在静止和最高速度之间反复前进/后退/左转/右转/上行/下行(在静止状态下进行此测试可获得最佳结果)。
- 提取
.ulg
例如,使用 QGroundControl:分析 > 下载日志 (打开新窗口)备注
同一日志文件可用于调整 多旋翼风力估算器.
- 将日志与 baro_static_pressure_compensation_tuning.py (打开新窗口) Python 脚本来获取最佳参数集。
调整参数参数:
# 气压计偏差补偿
由于环境压力的变化或传感器温度的变化,恒定高度的气压计在测量时会出现漂移。为了补偿这种测量误差,EKF2 利用全球导航卫星系统高度(如果有的话)作为不漂移参考来估计偏差。无需调整。
# 全球定位系统
# 位置和速度测量
如果满足以下条件,GPS 测量值将用于位置和速度测量:
- 通过设置 EKF2_AID_MASK 参数。
- 通过 GPS 质量检查。这些检查由 EKF2_GPS_CHECK 和
EKF2_REQ_*
参数 - EKF 可以通过设置 EKF2_HGT_MODE 参数。
# 偏航测量
一些 GPS 接收器,如 Trimble MB-Two RTK GPS 接收机 (打开新窗口) 可用于提供航向测量,取代磁强计数据的使用。当在存在较大磁场异常或地球磁场倾角较大的纬度环境中运行时,这将是一个很大的优势。将 GPS 偏航测量值的第 7 位设置为 1(加 128),就可以使用 GPS 偏航测量值。 EKF2_AID_MASK 参数。
# 偏航来自 GPS 速度
EKF 在内部运行一个额外的多假设滤波器,该滤波器使用多个 3 状态扩展卡尔曼滤波器 (EKF),其状态为 NE 速度和偏航角。然后使用高斯求和滤波器(GSF)将这些单独的偏航角估计值组合起来。单个 3 状态 EKF 使用 IMU 和 GPS 水平速度数据(加上可选的空速数据),不依赖偏航角或磁强计测量的任何先验知识。这为主滤波器的偏航角提供了备份,当起飞后导航失灵表明磁强计的偏航角估计值错误时,可用于重置主 24 状态 EKF 的偏航角。这将导致 紧急偏航复位 - 停止使用磁强计
在全球控制中心发送信息报文。
当启用 ekf2 重放日志时,来自该估算器的数据将被记录,并可在 偏航估计器状态
信息来自单个 3 状态 EKF 偏航估计器的单个偏航估计值位于 打呵欠
领域。全球定位系统综合偏航估计值在 偏航合成
领域。全球定位系统偏航估计值的方差在 偏航方差
领域。所有角度均以弧度为单位。GSF 应用于单个 3 状态 EKF 输出的加权值为重量
领域。
这也使得在没有任何磁强计数据或双天线 GPS 接收机的情况下也可以进行偏航操作,前提是起飞后可以进行一些水平移动,以便能够观测到偏航。要使用此功能,请设置 EKF2_MAG_TYPE 至 无
(5) 禁用磁强计。一旦载具进行了足够的水平运动,可以观测到偏航,主 24 状态 EKF 将根据 GSF 估计值调整偏航,并开始使用 GPS。
# 双接收器
全球定位系统接收机的数据可通过一种算法进行混合,该算法根据所报告的精度对数据进行加权(如果两个接收机以相同的速率输出数据并使用相同的精度,则效果最佳)。如果接收机的数据丢失,该机制还能提供自动故障切换功能(例如,它允许将标准 GPS 用作更精确的 RTK 接收机的备份)。这由 SENS_GPS_MASK 参数。
SENS_GPS_MASK 默认情况下,该参数设置为禁用混合,并始终使用第一个接收器,因此必须设置该参数,以选择使用哪些接收器精度指标来决定每个接收器输出对混合解决方案的贡献程度。在使用不同的接收机模型时,重要的是 SENS_GPS_MASK 参数设置为使用两个接收机都支持的精度指标的值。例如,不要将第 0 位设置为 真
除非两个接收器的驱动程序都在 s_variance_m_s
字段的 载具位置
信息具有可比性。由于精确度的定义方式不同,例如 CEP 与 1-sigma 等,不同制造商生产的接收机很难做到这一点。
设置时应检查以下项目:
- 验证第二个接收器的数据是否存在。记录为
载具_gps_位置_1
在通过 nsh 控制台 使用命令listener vehicle_gps_position -i 1
.......。 GPS_2_CONFIG 参数需要正确设置。 - 检查
s_variance_m_s
,倘若
和epv
从每个接收器获取数据,并决定可以使用哪些精度指标。如果两个接收器都输出合理的s_variance_m_s
和倘若
数据,而且 GPS 垂直位置不直接用于导航,那么设置 SENS_GPS_MASK 至 3。只有倘若
数据,而且两个接收器都不输出s_variance_m_s
数据、集合 SENS_GPS_MASK 只有当 GPS 被选为主要高度源时,才会设置位位置 2。 EKF2_HGT_MODE 参数,两个接收器都会输出可感知的epv
数据 - 混合接收器数据的输出记录为
ekf_gps_position
可以在通过 nsh 终端连接时使用以下命令进行检查监听器 ekf_gps_position
. - 如果接收器以不同速率输出,混合输出将以较慢接收器的速率输出。在可能的情况下,接收器应配置为以相同速率输出。
# 全球导航卫星系统性能要求
要使 ECL 接受全球导航卫星系统数据用于导航,必须在一段时间内满足某些最低要求,具体规定如下 EKF2_REQ_GPS_H (默认为 10 秒)。
最小值在 EKF2_REQ_* 参数,并且可以使用 EKF2_GPS_CHECK 参数。
下表列出了根据全球导航卫星系统数据直接报告或计算得出的不同指标,以及 ECL 使用数据的最低要求值。此外还有 平均值 本栏显示的是标准 GNSS 模块(如 u-blox M8 系列)可合理获得的典型值,即被认为是良好/可接受的值。
公制 | 最低要求 | 平均值 | 单位 | 说明 |
---|---|---|---|---|
倘若 | < 3 (EKF2_REQ_EPH) | 0.8 | m | 水平位置误差的标准偏差 |
epv | < 5 (EKF2_REQ_EPV) | 1.5 | m | 垂直位置误差的标准偏差 |
卫星数量 | ≥6 (EKF2_REQ_NSATS) | 14 | - | |
糖囊 | < 0.5 (EKF2_REQ_SACC) | 0.2 | 米/秒 | 水平速度误差的标准偏差 |
固定式 | ≥ 3 | 4 | - | 0-1: 无固定值,2: 2D 固定值,3: 3D 固定值,4: RTCM 代码差分,5: 实时运动学,浮动,6: 实时运动学,固定,8: 推断 |
PDOP | < 2.5 (EKF2_REQ_PDOP) | 1.0 | - | 位置稀释精度 |
hpos 漂移率 | < 0.1 (ekf2_req_hdrift) | 0.01 | 米/秒 | 根据报告的 GNSS 位置(静止时)计算出的漂移率。 |
vpos 漂移率 | < 0.2 (ekf2_req_vdrift) | 0.02 | 米/秒 | 根据报告的 GNSS 高度(静止时)计算漂移率。 |
hspd | < 0.1 (ekf2_req_hdrift) | 0.01 | 米/秒 | 报告的全球导航卫星系统水平速度的滤波幅度。 |
vspd | < 0.2 (ekf2_req_vdrift) | 0.02 | 米/秒 | 报告的全球导航卫星系统垂直速度的滤波幅度。 |
备注
漂移率
, vpos_drift_rate
和 hspd
在 10 秒钟内计算得出,并在 ekf2_gps_drift
主题。请注意 ekf2_gps_drift
不会被记录!
# 测距仪
测距仪与地面的距离由单态滤波器用于估算地形相对于高度基准的垂直位置。
如果在可用作零高度基准的平坦表面上运行,EKF 还可以直接使用测距仪数据来估算高度,方法是设置 EKF2_HGT_MODE 参数为 2。
# 测距仪障碍物探测
EKF 可通过垂直速度估计值与测距仪数据的数值导数之间的运动学一致性检查,检测测距仪到地面的路径是否受阻(可能是有效载荷)。如果测距仪与 EKF2 在统计上不一致,传感器在剩余的飞行中将被拒绝,除非在垂直速度为 0.5m/s 或更高的情况下至少 1 秒钟再次通过统计测试。
该检查仅在测距仪未用作主要高度源时启用,并且仅在载具未水平移动时有效(因为它假定地面高度是静态的)。
为了有效探测障碍物,需要利用飞行数据对测距仪噪声参数进行严格调整。然后可以调整运动学一致性门参数,以获得所需的故障检测灵敏度。
调整参数参数:
# 空速
等效空速 (EAS) 数据可用于估算风速,并在 GPS 丢失时减少漂移,方法是设置 EKF2_ARSP_THR 为正值。当空速数据超出阈值时,将使用正值的空速数据。 EKF2_ARSP_THR 而且载具类型不是旋转翼。
# 合成侧滑
固定翼平台可以利用假定侧滑观测值为零来改进风速估算,也可以在没有空速传感器的情况下进行风速估算。通过设置 EKF2_FUSE_BETA 参数为 1。
# 利用阻力比力估算多旋翼飞行器风速
多旋翼平台可利用沿 X 和 Y 轴的空速与阻力之间的关系来估算风速的北/东分量。这可以通过设置 EKF2_AID_MASK 参数改为 真
.
沿 X 和 Y 机身轴的空速与比力(IMU 加速度计测量值)之间的关系受控于 EKF2_BCOEF_X, EKF2_BCOEF_Y 和 EKF2_MCOEF 参数分别设定了 X 和 Y 方向飞行的弹道系数以及螺旋桨产生的动量阻力。比力观测噪声的大小由 ekf2_drag_noise 参数。
良好的调整方法如下
- 飞一次 位置模式 在静止和最高速度之间反复前进/后退/左转/右转/上行/下行(在静止状态下进行此测试可获得最佳结果)。
- 提取 .ulg 例如,使用 QGroundControl:分析 > 下载日志 (打开新窗口)
备注
相同 .ulg 日志文件也可用于调整 静压位置误差系数.
- 将日志与 mc_wind_estimator_tuning.py (打开新窗口) Python 脚本来获取最佳参数集。
# 光流
光流 如果满足以下条件,将使用该数据:
- 测距仪数据有效。
- 位中的第 1 位 EKF2_AID_MASK 参数为真。
- 流量传感器返回的质量指标大于系统设定的最低要求。 EKF2_OF_QMIN 参数。
# 外部视觉系统
可使用外部视觉系统(如 Vicon)进行位置、速度或方向测量:
- 如果系统中的第 3 位出现错误,则将使用外部视觉系统的水平位置数据。 EKF2_AID_MASK 参数为真。
- 如果出现以下情况,将使用外部视觉系统的垂直位置数据 EKF2_HGT_MODE 参数设置为 3。
- 如果在 EKF2_AID_MASK 参数为真。
- 如果偏航估算中的第 4 位出现错误,外部视觉系统的方向数据将被用于偏航估算。 EKF2_AID_MASK 参数为真。
- 外部视觉参考帧偏移量将被估算,并用于旋转外部视觉系统数据,前提是 EKF2_AID_MASK 参数为真。
第 4 位 (EV_YAW
)或第 6 位(EV_ROTATE
) 应设置为 true,但不能同时设置为 true。后续 EKF2_AID_MASK 当与外部视觉系统配合使用时,支持该值。
EKF_AID_MASK 值 | 设置位 | 说明 |
---|---|---|
321 | GPS + ev_vel + rotate_ev | 向北 (推荐) |
73 | gps + ev_pos + rotate_ev | 向北 (不推荐使用 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 考虑了视觉姿态估计中的不确定性。这种不确定性信息可通过 MAVLink 中的协方差字段发送。 奥数 (打开新窗口) 或通过参数 EKF2_EVP_NOISE, EKF2_EVV_NOISE 和 EKF2_EVA_NOISE.您可以通过以下方法选择不确定性的来源 ekf2_ev_noise_md.
# 如何使用 EKF 的 "ecl "库?
设置 sys_mc_est_group 参数设置为 2,以使用 ecl EKF。
# ecl EKF 与其他估计器相比有哪些优缺点?
与所有估算器一样,其大部分性能来自于与传感器特性相匹配的调整。调整是准确性和稳健性之间的折衷,尽管我们已尝试提供一种能满足大多数用户需求的调整方法,但在某些应用中仍需要进行调整。
因此,与传统的"...... 态度估计器
+ 本地位置估算器
估算器的最佳选择取决于应用和调整。
# 缺点
- ecl EKF 是一种复杂的算法,需要充分了解扩展卡尔曼滤波器理论及其在导航问题中的应用,才能成功调整。因此,对于效果不佳的用户来说,要知道该如何调整就比较困难了。
- ecl EKF 占用更多的 RAM 和闪存空间。
- ecl EKF 使用的日志空间更大。
# 优势
- 一旦正确设置了时间延迟参数,ecl EKF 就能以数学上一致的方式融合来自不同时间延迟和数据速率的传感器的数据,从而提高动态机动过程中的精确度。
- ecl EKF 能够融合多种不同类型的传感器。
- ecl EKF 可检测并报告传感器数据中统计意义上的不一致性,帮助诊断传感器错误。
- 对于固定翼操作,无论是否使用空速传感器,ecl EKF 都能估算风速,并能将估算的风速与空速测量值和侧滑假设结合使用,以延长 GPS 在飞行中丢失时的死区重定位时间。
- ecl EKF 可估算三轴加速度计偏差,从而提高尾随者和其他飞行阶段之间姿态变化较大的飞行器的精度。
- 联合架构(结合姿态和位置/速度估算)意味着姿态估算可从所有传感器测量中获益。如果调整得当,这将为改进姿态估计提供可能。
# 如何检查 EKF 性能?
EKF 输出、状态和状态数据会发布到许多 uORB 主题中,并在飞行过程中记录到 SD 卡中。以下指南假定数据已使用 .ulog 文件格式.......。 .ulog 格式的数据可以在 python 中使用 PX4 pyulog 库 (打开新窗口).
大部分 EKF 数据可在 估算器创新 (打开新窗口) 和 估计器状态 (打开新窗口) 记录到 .ulog 文件的 uORB 消息。
可以找到自动生成分析图和元数据的 python 脚本 这里 (打开新窗口).要使用此脚本文件,请 cd 到 工具/ecl_ekf
目录,然后输入 python process_logdata_ekf.py <log_file.ulg>;
.这会将性能元数据保存在一个名为 <log_file>.mdat.csv 并在名为 <log_file>.pdf
.
可以使用 batch_process_logdata_ekf.py (打开新窗口) 脚本。完成上述操作后,就可以处理性能元数据文件,利用 batch_process_metadata_ekf.py (打开新窗口) 剧本
# 输出数据
- 姿态输出数据可在 载具姿态 (打开新窗口) 留言
- 本地位置输出数据可在 载具本地位置 (打开新窗口) 留言
- 全球(WGS-84)输出数据可在 载具全球位置 (打开新窗口) 留言
- 风速输出数据见 wind.msg (打开新窗口) 留言
# 国家
请参阅国家[32]中的 估计器状态 (打开新窗口).状态索引图[32]如下:
- [0 ... 3] 四元数
- [4 ... 6] NED 速度(米/秒)
- [7 ... 9] 定位(POSITION) NED (m)
- [10 ... 12] IMU 三角偏置 XYZ(弧度)
- [13 ... 15] IMU 三角速度偏置 XYZ (m/s)
- [16 ... 18] 地球磁场 NED(高斯)
- [19 ... 21] 机身磁场 XYZ(高斯)
- [22 ... 23] NE 风速(米/秒)
- [24 ... 32] 未使用
# 国家差异
请参阅 "共变[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] 未使用
# 观察创新& 创新差异
观察结果 估算器创新
, 估计创新方差
和 估算器创新测试比率
信息字段在 估算器创新 msg (打开新窗口).所有信息都有相同的字段名称/类型(但单位不同)。
备注
这些报文具有相同的字段,因为它们是根据相同的字段定义生成的。字段 # 主题
行(在 文件 (打开新窗口)) 列出了要创建的信息集名称):
# TOPICS estimator_innovations estimator_innovation_variances estimator_innovation_test_ratios
其中一些观察结果是
- 磁力计 XYZ(高斯、高斯^2) :
mag_field[3]
- 偏航角(rad,rad^2) :
标题
- 真实空速(米/秒,(米/秒)^2) :
空速
- 合成侧倾(rad,rad^2) :
测试版
- 光流 XY(rad/sec,(rad/s)^2) :
流动
- 离地高度(米,m^2) :
挂钩
- 拖曳比力((m/s)^2):
累赘
- 速度和位置创新:每个传感器
此外,每个传感器都有自己的水平和垂直位置和/或速度值字段(如适用)。这些字段基本上可以自行记录,现转载如下:
# 浮动 32[2] gps_hvel # 水平 GPS 速度创新值(米/秒)和创新方差((米/秒)**2) float32 gps_vvel # 垂直 GPS 速度创新值(米/秒)和创新方差((米/秒)**2) float32[2] gps_hpos # 水平 GPS 位置创新值(米)和创新方差(米**2) float32 gps_vpos # 垂直 GPS 位置创新值(米)和创新方差(米**2) # 外部视觉浮动 32[2] ev_hvel #水平外部视觉速度创新值(米/秒)和创新方差((米/秒)**2) float32 ev_vvel # 垂直外部视觉速度创新值(米/秒)和创新方差((米/秒)**2) float32[2] ev_hpos # 水平外部视觉位置创新值(米)和创新方差(米**2) float32 ev_vpos # 垂直外部视觉位置创新值(米)和创新方差(米**2) # 假位置和速度float32[2] fake_hvel # 伪造水平速度创新值(米/秒)和创新方差((米/秒)**2) float32 fake_vvel # 伪造垂直速度创新值(米/秒)和创新方差((米/秒)**2) float32[2] fake_hpos # 伪造水平位置创新值(米)和创新方差(米**2) float32 fake_vpos # 伪造垂直位置创新值(米)和创新方差(米**2) # 高度传感器 float32 rng_vpos # 测距传感器高度创新值(米)和创新方差(米**2) float32 baro_vpos # 气压计高度创新值(米)和创新方差(米**2) # 辅助速度 float32[2] aux_hvel # 着陆目标测量的水平辅助速度创新值(米/秒)和创新方差((米/秒)**2) float32 aux_vvel # 着陆目标测量的垂直辅助速度创新值(米/秒)和创新方差((米/秒)**2)
# 输出互补滤波器
输出互补滤波器用于将状态从融合时间范围向前传播到当前时间。要检查在融合时间范围内测得的角度、速度和位置跟踪误差的大小,请参考 输出跟踪错误[3]
在 ekf2_innovations
留言
索引图如下
- [0] 角度跟踪误差幅度(弧度)
- [1] 速度跟踪误差幅度(米/秒)。速度跟踪时间常数可用 EKF2_TAU_VEL 参数。减小该参数可减少稳态误差,但会增加 NED 速度输出的观测噪声量。
- [2] 位置跟踪误差幅度(米)。位置跟踪时间常数可使用 EKF2_TAU_POS 参数。减小该参数可减少稳态误差,但会增加 NED 位置输出的观测噪声量。
# EKF 误差
EKF 包含对条件不良的状态和协方差更新的内部错误检查。请参考 估计器状态 (打开新窗口).
# 观测错误
观测故障分为两类:
- 数据丢失。例如,测距仪无法提供返回值。
- 创新,即状态预测值与传感器观测值之间的差值过大。例如,过度振动会导致较大的垂直位置误差,从而导致气压计高度测量被拒绝。
这两种情况都会导致观测数据被长时间剔除,从而导致 EKF 尝试使用传感器观测数据重置状态。所有观测数据都会对创新值进行统计置信度检查。校验的标准偏差数由 EKF2_*_GATE
参数。
测试级别有 估计器状态 (打开新窗口) 具体如下
磁力测试比率
:最大磁强计创新组件与创新测试极限的比率速度测试比率
:最大速度创新成分与创新测试极限的比率pos_test_ratio
:最大水平位置创新成分与创新测试限值的比率测试比率
:垂直位置创新与创新测试限值的比率测试比率
:真实创新空速与创新测试极限的比率hagl_test_ratio
:地面以上创新高度与创新测试限值的比率
有关每个传感器的二进制通过/未通过汇总,请参阅创新检查标志(innovation_check_flags)。 估计器状态 (打开新窗口).
# GPS 质量检查
在开始 GPS 辅助之前,EKF 会进行一系列 GPS 质量检查。这些检查由 EKF2_GPS_CHECK 和 EKF2_REQ_*
参数。这些检查的通过/失败状态会记录在 估计器状态 (打开新窗口).gps_check_fail_flags 消息。当所有必要的 GPS 检查都通过时,该整数将为零。如果 EKF 没有开始 GPS 对齐,则根据位掩码定义检查该整数的值 gps_check_fail_flags
于 估计器状态 (打开新窗口).
# EKF 数值误差
EKF 的所有计算均使用单精度浮点运算,并在推导协方差预测和更新方程时使用一阶近似值,以降低处理要求。这意味着在重新调整 EKF 时,有可能会遇到协方差矩阵运算条件变差的情况,从而导致状态估计出现偏差或重大误差。
为避免出现这种情况,每个协方差和状态更新步骤都包含以下错误检测和纠正步骤:
- 如果创新方差小于观测方差(这就要求状态方差为负,而这是不可能的),或者协方差更新对任何状态都会产生负方差,那么:
- 跳过状态和协方差更新
- 重置协方差矩阵中的相应行和列
- 故障记录在 估计器状态 (打开新窗口) 过滤器故障标志信息
- 状态方差(协方差矩阵的对角线)必须为非负。
- 国家差异有上限。
- 协方差矩阵必须对称。
重新调整滤波器后,尤其是涉及减少噪声变量的重新调整后,滤波器中的 estimator_status.gps_check_fail_flags
应进行检查,确保其保持为零。
# 如果高度估算出现偏差,我该怎么办?
飞行过程中 EKF 高度偏离 GPS 和高度计测量值的最常见原因是振动导致 IMU 测量值剪切和/或混叠。如果出现这种情况,数据中应明显出现以下迹象
- 估算器创新 (打开新窗口).vel_pos_innov[2]和 估算器创新 (打开新窗口).vel_pos_innov[5]将具有相同的符号。
- 估计器状态 (打开新窗口).hgt_test_ratio 将大于 1.0
建议采取的第一步是使用有效的隔离安装系统确保自动驾驶仪与机身隔离。隔离支架有 6 个自由度,因此有 6 个共振频率。一般来说,隔离支架上的自动驾驶仪的 6 个共振频率应高于 25 赫兹,以避免与自动驾驶仪的动力相互作用,并应低于发动机的频率。
如果共振频率与电机或螺旋桨叶片的通过频率一致,则隔离支架会使振动加剧。
通过修改以下参数,可以使 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 日志数据:
- 绘制速度创新测试比率图 估计器状态 (打开新窗口).vel_test_ratio
- 估计器状态 (打开新窗口).pos_test_ratio
- 绘制高度创新试验比率图 估计器状态 (打开新窗口).hgt_test_ratio
- 绘制磁强计创新测试比率图 估计器状态 (打开新窗口).mag_test_ratio
- 绘制 GPS 接收机报告的速度精度曲线 传感器_gps (打开新窗口).s_variance_m_s
- 绘制 IMU 三角角状态估算图 估计器状态 (打开新窗口).状态[10]、状态[11]和状态[12]
- 绘制 EKF 内部高频振动指标图:
- 三角锥振动 估计器状态 (打开新窗口).vibe[0]
- 高频三角角振动 估计器状态 (打开新窗口).vibe[1]
- 高频三角速度振动 估计器状态 (打开新窗口).vibe[2]
在正常运行期间,所有测试比率都应保持在 0.5 以下,只有偶尔会出现高于 0.5 的峰值,如下图成功飞行的示例所示:
下图显示了具有良好隔离性能的多旋翼飞行器的 EKF 振动指标。可以看到着陆冲击以及起飞和着陆时增加的振动。这些指标收集的数据不足,无法提供有关最大阈值的具体建议。
上述振动指标的价值有限,因为振动频率接近 IMU 采样频率(大多数电路板为 1 kHz)时,数据中会出现偏移,而高频振动指标不会显示出这些偏移。检测混叠误差的唯一方法是看其对惯性导航精度的影响以及创新水平的上升。
除了会产生 > 1.0 的较大位置和速度测试比率外,不同的误差机制还会以不同的方式影响其他测试比率:
# 过度振动的测定
高振动水平通常会影响垂直位置和速度创新以及水平成分。磁强计测试水平只受到很小的影响。
(此处插入显示振动不良的示例图)
# 确定陀螺仪偏差是否过大
陀螺偏置偏差过大通常表现为飞行过程中 delta 角偏置值的变化大于 5E-4(相当于约 3 度/秒),如果偏航轴受到影响,还会导致磁强计测试比大幅增加。除极端情况外,高度通常不受影响。只要在飞行前给滤波器足够的沉降时间,可以容忍高达 5 度/秒的开关偏置值。指挥官进行的飞行前检查应防止在位置偏离的情况下启动。
(此处插入显示陀螺仪偏置不良的示例图)
# 偏航精度差的测定
由于惯性导航计算的速度方向与全球定位系统测量的速度方向不一致,偏航对齐不良会导致速度测试比率在载具开始移动时迅速增加。磁力计的创新会受到轻微影响。高度通常不受影响。
(此处插入显示偏航对齐不良的示例图)
# 确定 GPS 精度差
全球定位系统精度不高通常伴随着接收机报告的速度误差上升和创新的增加。多径、遮挡和干扰造成的瞬时误差是更常见的原因。下面是一个暂时失去 GPS 准确性的例子,多旋翼飞行器开始偏离其停机位置,不得不使用摇杆进行校正。上升的 估计器状态 (打开新窗口).vel_test_ratio 大于 1 表示 GP 速度与其他测量值不一致,已被剔除。
与此同时,GPS 接收机报告的速度精度也有所提高,这表明这很可能是 GPS 误差造成的。
如果我们再看一下 GPS 水平速度创新和创新方差,就会发现伴随这次 GPS "故障 "事件出现的北方速度创新的大幅飙升。
# 确定 GPS 数据丢失
GPS 数据丢失将表现为速度和位置创新测试比率 "平线"。如果出现这种情况,请在 载具位置
如需更多信息,请联系
下图显示了 NED 全球定位系统的速度创新 EKF2_INNOVATION_0.vel_pos_INNOV[0 ... 2]
,GPS NE 定位创新 ekf2_innovations_0.vel_pos_innov[3 ... 4]
和巴罗垂直位置创新 EKF2_INNOVATION_0.vel_pos_INNOV[5]
由使用 SITL Gazebo 进行的模拟 VTOL 飞行生成。
模拟 GPS 在 73 秒时失去锁定。请注意,在 GPS 丢失后,NED 速度创新值和 NE 位置创新值 "持平"。请注意,在没有 GPS 数据的 10 秒钟后,EKF 将使用最后的已知位置恢复到静态位置模式,东北角位置创新值再次开始变化。
# 气压计地面效应补偿
如果飞行器在着陆过程中靠近地面时有爬回空中的趋势,最有可能的原因是气压地面效应。
这是由螺旋桨推下的空气撞击地面并在无人机下方形成高压区造成的。其结果是压力高度读数降低,导致不需要的爬升指令。下图显示了存在地面效应的典型情况。请注意气压计信号在飞行开始和结束时是如何下降的。
您可以启用 地面效应补偿 来解决这个问题:
- 从图中估计起飞或着陆时气压计下降的幅度。在上图中,我们可以读出着陆时气压计下降了约 6 米。
- 然后设置参数 ekf2_gnd_eff_dz 再加上 10% 的余量。因此,在这种情况下,6.6 米是一个很好的起点。
如果可以估算地形(例如载具配备了测距仪),则可以额外指定 EKF2_GND_MAX_HGT,在地面高度以下应启用地效补偿的地面高度。如果没有可用的地形估计值,该参数将不起作用,系统将使用启发式方法决定是否启动地效补偿。
# 更多信息
- PX4 状态估计概述 (打开新窗口), 2019年PX4开发者峰会,Paul Riseborough 博士):估算器概述,2018/19 年度以来的主要变化,以及 2019/20 年度的预期改进。