使用 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's 和磁力计数量的乘积。 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's 使用的 IMU 传感器数量。如果
EKF2_MULTI_IMU
<=1,则只使用第一个 IMU 传感器。当 SENS_IMU_MODE = 1,这将是传感器模块选择的传感器。如果EKF2_MULTI_IMU
>=2,则将为指定数量的 IMU 传感器运行单独的 EKF 实例,最多可达 4 个或现有 IMU's 数量(以较少者为准)。EKF2_MULTI_MAG:该参数指定多个 EKF's 使用的磁力计传感器的数量。
EKF2_MULTI_MAG
<=1,则只使用第一个磁力计传感器。当 SENS_MAG_MODE = 1,这将是传感器模块选择的传感器。如果EKF2_MULTI_MAG
>=2,则将为指定数量的磁强计传感器运行单独的 EKF 实例,最多为 4 个或现有磁强计数量中较少的一个。
它使用什么传感器测量?
EKF 具有不同的运行模式,可实现不同的传感器测量组合。启动时,滤波器会检查传感器的最小可行组合,并在完成初始倾斜、偏航和高度校准后,进入提供旋转、垂直速度、垂直位置、IMU 三角偏置和 IMU 三角速度偏置估计的模式。
该模式需要 IMU 数据、偏航数据源(磁力计或外部视觉)和高度数据源。所有 EKF 运行模式都需要这一最小数据集。其他传感器数据可用于估计其他状态。
IMU
- 三轴固定式惯性测量单元三角角和三角速度数据,最小速率为 100Hz。注: 在 EKF 使用 IMU 三角角数据之前,应先对其进行 Coning 校正。
磁力计
需要三轴车身固定磁力计数据(或外部视觉系统姿态数据),速率至少为 5 赫兹。
磁强计数据有两种使用方法:
- 磁强计测量值通过倾斜估计值和磁偏角转换为偏航角。然后,偏航角被 EKF 用作观测值。
- 这种方法的精确度较低,而且无法学习体框场偏移,但它对磁异常和大的启动陀螺偏差具有更强的鲁棒性。
- 这是启动时和在地面上使用的默认方法。
- XYZ 磁强计读数作为单独的观测数据使用。
- 这种方法更为精确,但需要正确估计磁强计偏差。
- 在无人机旋转时可观察到偏差,而在飞行器加速(线性加速)时可观察到真实航向。
- 由于偏差会发生变化,而且只有在移动时才能观察到,因此在不移动时切换回航向融合更为安全。
- 它假定地球磁场环境变化缓慢,当外部磁场出现明显异常时,其性能就会下降。
- 这是载具行驶时使用的默认方法。
- 这种方法更为精确,但需要正确估计磁强计偏差。
用于选择这些模式的逻辑由 EKF2_MAG_TYPE 参数。默认的 '自动'模式 (ekf2_mag_type=0
建议使用"'三轴'模式('3-axis'模式),因为它在地面上使用更强大的磁力计偏航,在移动时使用更精确的三轴磁力计。始终设置 '3-axis' 模式 (ekf2_mag_type=2
)更容易出错,需要对所有 IMU 进行良好校准。
可以选择在没有磁强计的情况下运行,或者使用 双天线 GPS 的偏航 或使用 IMU 测量值和 GPS 速度数据来 根据载具运动估算偏航.
高度
需要一个高度数据源--全球定位系统、气压、测距仪、外部视觉或这些数据的组合,速率至少为 5 赫兹。
如果所选测量值都不存在,EKF 将不会启动。检测到这些测量值后,EKF 将初始化状态并完成倾斜和偏航对齐。倾斜和偏航对齐完成后,EKF 就可以过渡到其他运行模式,从而可以使用其他传感器数据:
每个高度源都可以通过其专用控制参数启用/禁用:
- 全球导航卫星系统/全球定位系统: EKF2_GPS_CTRL
- 气压计: EKF2_BARO_CTRL
- 测距仪: EKF2_RNG_CTRL
- 外部愿景:启用时 EKF2_HGT_REF 设置为"Vision";
从长远来看,高度估算遵循高度数据的参考源。该参考源由 EKF2_HGT_REF 参数。
典型配置
EKF2_GPS_CTRL | EKF2_BARO_CTRL | EKF2_RNG_CTRL | EKF2_HGT_REF | |
---|---|---|---|---|
室外(默认) | 7(长/纬/高/平) | 1(已启用) | 1 (条件式) | 1(全球导航卫星系统) |
室内(非平地) | 0(禁用) | 1(已启用) | 1 (条件式) | 2(范围) |
室内(地势平坦) | 0(禁用) | 1(已启用) | 2 (始终启用) | 2(范围) |
外部愿景 | 根据需要 | 根据需要 | 根据需要 | 3(视觉) |
气压计
使用 EKF2_BARO_CTRL 作为 高度 数据
请注意,即使有多个气压计,也只能融合一个气压计的数据。气压最高的气压计 CAL_BAROx_PRIO 如果检测到传感器故障,则首先选择优先级最高的气压计。如果气压计的优先级相同,则使用最先检测到的气压计。通过设置气压计的 CAL_BAROx_PRIO
值为 0
(失能)。
参见 高度 有关高度源配置的更多详情。
静压位置误差修正
气压高度受载具风相对速度和方向造成的空气动力干扰而产生误差。这在航空学中被称为 静压位置误差.使用 ECL/EKF2 估计器库的 EKF2 模块提供了一种补偿这些误差的方法,前提是风速状态估计处于激活状态。
对于以固定翼模式运行的载具,风速状态估计需要 空速 和/或 合成侧滑 启用融合。
对于多旋翼飞行器,融合 特定阻力 可以启用和调整,以提供所需的风速状态估计值。
EKF2 模块将误差建模为一个体固定椭球体,该椭球体规定了在将误差转换为高度估计值之前,从气压中添加或减去的动态压力分数。
良好的调整方法如下
飞一次 位置模式 在静止和最高速度之间反复前进/后退/左转/右转/上行/下行(在静止状态下进行此测试可获得最佳结果)。
提取
.ulg
例如,使用 QGroundControl:分析 > 下载日志信息
同一日志文件可用于调整 多旋翼风力估算器.
将日志与 baro_static_pressure_compensation_tuning.py Python 脚本来获取最佳参数集。
调整参数参数:
气压计偏差补偿
由于环境压力的变化或传感器温度的变化,恒定高度的气压计在测量时会出现漂移。为了补偿这种测量误差,EKF2 利用全球导航卫星系统高度(如果有的话)作为不漂移参考来估计偏差。无需调整。
全球导航卫星系统/全球定位系统
位置和速度测量
如果满足以下条件,GPS 测量值将用于位置和速度测量:
- 通过设置 EKF2_GPS_CTRL 参数。
- 通过 GPS 质量检查。这些检查由 EKF2_GPS_CHECK 和
EKF2_REQ_*
参数
有关高度源配置的更多详情、 点击此处.
偏航测量
一些 GPS 接收器,如 Trimble MB-Two RTK GPS 接收机 可用于提供航向测量,取代磁强计数据的使用。当在存在较大磁场异常或地球磁场倾角较大的纬度环境中运行时,这将是一个重大优势。将 GPS 偏航测量值的第 3 位设置为 1(加 8),就可以使用 GPS 偏航测量值。 EKF2_GPS_CTRL 参数。
偏航来自 GPS 速度
EKF 在内部运行一个额外的多假设滤波器,该滤波器使用多个状态为 NE 速度和偏航角的 3 状态扩展卡尔曼滤波器 (EKF's)。然后使用高斯求和滤波器(GSF)将这些单独的偏航角估计值组合起来。单个 3 状态 EKF's 使用 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_REF 参数,两个接收器都会输出可感知的epv
数据 - 混合接收器数据的输出记录为
ekf_gps_position
可以在通过 nsh 终端连接时使用以下命令进行检查监听器 ekf_gps_position
. - 如果接收器以不同速率输出,混合输出将以较慢接收器的速率输出。在可能的情况下,接收器应配置为以相同速率输出。
全球导航卫星系统性能要求
要使 ECL 接受全球导航卫星系统数据用于导航,必须在一段时间内满足某些最低要求,具体规定如下 EKF2_REQ_GPS_H (默认为 10 秒)。
最小值在 EKF2REQ* 参数,并可使用 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
不会被记录!
测距仪
测距仪 单态滤波器使用地面距离来估算地形相对于高度基准的垂直位置。
融合运行模式由以下方面控制 EKF2_RNG_CTRL:
有关高度源配置的更多详情、 点击此处.
条件范围辅助
条件测距仪融合(又称 条件范围辅助)在低速/低高度运行期间激活测距仪融合进行高度估计(除其他有效高度源外)。如果将测距仪设置为参考高度源(使用 EKF2_HGT_REF),其他有效高度源(如气压和全球导航卫星系统高度)将随时间推移调整其测量值,以匹配测距仪的读数。当不满足启动测距辅助的条件时,会自动选择一个辅助参考。
信息
在高度参考之间切换会导致绝对高度估计值随时间漂移。在定位模式下飞行时,这不是问题,但如果无人机要在特定的 GNSS 高度执行任务,就会出现问题。如果不希望出现绝对高度漂移,建议将 GNSS 高度设置为高度参考,即使在使用条件测距辅助时也是如此。
它主要用于 起落在气压计设置的情况下,转子冲刷干扰过大,会破坏 EKF 状态估计。
当载具静止时,测距仪还可用于改善高度保持。
TIP
地形保持 建议 范围辅助 用于地形保持。这是因为地形保持使用普通的 ECL/EKF 估算器来确定高度,在大多数情况下,这通常比距离传感器更可靠。
条件范围辅助 通过设置 EKF2_RNG_CTRL = "已启用(条件模式)" (1)。
使用 EKF2_RNG_A_
参数
- ekf2_rng_a_vmax:最大水平速度,超过此速度将禁用测距辅助功能。
- ekf2_rng_a_hmax:最大高度,超过此高度将禁用测距辅助功能。
- ekf2_rng_a_igate:测距仪一致性检查 "gate"(测距仪禁用前的误差测量)。
范围高度融合
PX4 允许您将测距仪作为高度源(在任何飞行模式/载具类型下)持续熔断。这对于飞行器在以下情况下的应用可能非常有用 保证 只在接近平坦的表面(如室内)飞行。
使用距离传感器作为高度源时,飞行人员应注意:
飞越障碍物会导致估算器拒绝测距仪数据(由于内部数据一致性检查),这可能会导致估算器在纯粹依赖加速度计估算时无法很好地保持高度。
信息
当载具以接近恒定的离地高度爬坡时,可能会出现这种情况,因为测距仪的高度不会发生变化,而加速度计估计的高度会发生变化。EKF 会执行创新一致性检查,其中会考虑到测量和当前状态之间的误差,以及状态的估计方差和测量本身的方差。如果检查失败,测距仪数据将被拒绝,高度将通过加速度计和其他选定的高度源(GNSS、气压计、视觉)(如果已启用且可用)进行估算。 如果距离传感器是高度数据的有效来源,在出现 5 秒钟的不一致数据后,估算器将重置高度状态,使其与当前的距离传感器数据相匹配。如果一个或多个其他高度数据源处于活动状态,测距仪将被视为故障,估测器将继续使用其他传感器估测高度。例如,如果载具下降,或者如果估计高度偏移以匹配测距仪的测量高度,测量结果也可能再次保持一致。
当地 NED 的原产地将随地面水平上下移动。
测距仪在凹凸不平的表面(如树木)上的性能可能很差,导致数据嘈杂且不一致。这也会导致高度保持不佳。
通过设置 EKF2_RNG_CTRL 为 "已启用" (2)。要使测距仪成为活动时的高度基准,请设置: EKF2_HGT_REF 调至范围传感器。
TIP
若要仅在无人机静止时启用测距仪融合(以便在起飞和着陆时获得更好的高度估计),而在其余时间不融合测距仪,请使用 条件模式 (1)的 EKF2_RNG_CTRL.
测距仪障碍物探测
EKF 可通过垂直速度估计值与测距仪数据的数值导数之间的运动学一致性检查,检测测距仪到地面的路径是否受阻(可能是有效载荷)。如果测距仪与 EKF2 在统计上不一致,传感器在剩余的飞行中将被拒绝,除非在垂直速度为 0.5m/s 或更高的情况下至少 1 秒钟再次通过统计测试。
该检查仅在测距仪未用作主要高度源时启用,并且仅在载具未水平移动时有效(因为它假定地面高度是静态的)。
为了有效探测障碍物,需要利用飞行数据对测距仪噪声参数进行严格调整。然后可以调整运动学一致性门参数,以获得所需的故障检测灵敏度。
调整参数参数:
空速
等效空速 (EAS) 数据可用于估算风速,并在 GPS 丢失时减少漂移,方法是设置 EKF2_ARSP_THR 为正值。当空速数据超出阈值时,将使用正值的空速数据。 EKF2_ARSP_THR 而且载具类型不是旋转翼。
合成侧滑
固定翼平台可以利用假定侧滑观测值为零来改进风速估算,也可以在没有空速传感器的情况下进行风速估算。通过设置 EKF2_FUSE_BETA 参数为 1。
利用阻力比力估算多旋翼飞行器风速
多旋翼平台可以利用沿 X 和 Y 轴的空速与阻力之间的关系来估算风速的北/东分量。可以使用 EKF2_DRAG_CTRL.
沿 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 脚本来获取最佳参数集。
光流
光流 如果满足以下条件,将使用该数据:
- 测距仪数据有效。
- EKF2_OF_CTRL 已设定。
- 流量传感器返回的质量指标大于系统设定的最低要求。 EKF2_OF_QMIN 参数。
外部视觉系统
可使用外部视觉系统(如 Vicon)进行位置、速度或方向测量。
融合的测量值是通过设置 EKF2_EV_CTRL 至 真
:
0
:水平位置数据1
:垂直位置数据。高度源还可通过以下方式进行配置 EKF2_HGT_REF (见第 高度).2
:速度数据3
:偏航数据
请注意,如果使用了偏航数据(第 3 位),则航向相对于外部视觉帧;否则航向相对于北方。
EKF 考虑了视觉姿态估计中的不确定性。这种不确定性信息可通过 MAVLink 中的协方差字段发送。 奥数 或通过参数 EKF2_EVP_NOISE, EKF2_EVV_NOISE 和 EKF2_EVA_NOISE.您可以通过以下方法选择不确定性的来源 ekf2_ev_noise_md.
如何使用 EKF 库?
EKF2 默认已启用(更多信息请参阅 切换状态估计器 和 EKF2_EN).
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 剧本
输出数据
国家
请参阅国家[24]中的 估算器状态.状态索引图[24]如下:
- [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]"。 估算器状态.协方差的索引图[24]如下:
- [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
观察创新& 创新差异
观察结果 估算器创新
, 估计创新方差
和 估算器创新测试比率
信息字段在 EstimatorInnovations.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):
累赘
- 速度和位置创新:每个传感器
此外,每个传感器都有自己的水平和垂直位置和/或速度值字段(如适用)。这些字段基本上可以自行记录,现转载如下:
# GPS
float32[2] gps_hvel # 水平 GPS 速度创新值(米/秒)和创新值方差((米/秒)**2)
float32 gps_vvel # GPS 垂直速度创新值(米/秒)和创新值方差((米/秒)**2)
float32[2] gps_hpos # 水平 GPS 定位创新(米)和创新方差(米**2)
float32 gps_vpos # 垂直 GPS 定位创新(米)和创新方差(米**2)
# 外部愿景
float32[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 测量值剪切和/或混叠。如果出现这种情况,数据中应明显出现以下迹象
建议采取的第一步是使用有效的隔离安装系统确保自动驾驶仪与机身隔离。隔离支架有 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 接收机报告的速度精度曲线 SensorGps.msg.s_variance_m_s
- 绘制 IMU 三角角状态估算图 估算器状态.状态[10]、状态[11]和状态[12]
- 绘制 EKF 内部高频振动指标图:
在正常运行期间,所有测试比率都应保持在 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 数据丢失将表现为速度和位置创新测试比'flat-lining'。如果出现这种情况,请在 载具位置
如需更多信息,请联系
下图显示了 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 年度的预期改进。