第1章:EKF2参数总览与分类

大家好,我是你们的飞控算法讲师。今天咱们来聊聊EKF2的参数体系。

说实话,我刚接触PX4那会儿,看到EKF2_*开头的参数,头都大了。几十个参数,每个都有默认值,改一个不知道会影响什么。后来踩了不少坑,才慢慢摸清门道。

这一章,我就把EKF2的参数体系给你拆开揉碎。咱们不急着调参数,先搞清楚这些参数到底分几类,各自管什么。

1.1 EKF2参数的整体架构

EKF2的参数,说白了就是一套“传感器融合的配置表”。它告诉飞控:你用哪些传感器?信谁多一点?噪声多大?

我习惯把EKF2参数分成四大类:

  • 核心参数:决定融合算法基本行为的参数。比如启用哪些传感器、融合模式。
  • 辅助参数:传感器噪声、初始方差、时间常数等。这些决定了融合的“软硬程度”。
  • 调试参数:用于排查问题、记录日志、输出诊断信息。平时不动,出问题时救命用的。
  • 其他参数:一些特殊场景下的开关,比如地形跟随、光学流等。

你想想看,这就像调一台发动机。核心参数决定用汽油还是柴油,辅助参数决定喷油量,调试参数就是仪表盘上的故障灯。

重要提醒:EKF2参数全部以 EKF2_ 开头。你在QGC参数列表里搜“EKF2”就能看到全部。别去改那些不带EKF2_前缀的参数,那是别的模块管的。

1.2 核心参数(Core Parameters)

核心参数,我称之为“骨架”。它们决定了EKF2的基本工作模式。

我个人最常用的几个核心参数:

参数名 默认值 说明
EKF2_EN 1 EKF2总开关。0=禁用,1=启用。你如果切到EKF3,记得关掉这个。
EKF2_IMU_CTRL 0 IMU融合控制位。位掩码,控制是否融合加速度计、陀螺仪、磁力计等。
EKF2_GNSS_CTRL 0 GNSS融合控制。位掩码,控制GPS、GLONASS、北斗等。
EKF2_AID_MASK 0 辅助传感器掩码。控制是否使用光流、视觉、激光雷达等。
EKF2_MULTI_IMU 1 多IMU支持。1=启用,0=只用主IMU。

嗯,这里要注意:EKF2_IMU_CTRLEKF2_GNSS_CTRL 是位掩码参数。什么意思呢?就是每个bit代表一个开关。比如bit0代表加速度计,bit1代表陀螺仪。你设成3(二进制11)就是两个都开。

我在项目中遇到过一位朋友,他把 EKF2_IMU_CTRL 设成了0,结果飞控完全不融合IMU数据,飞机一解锁就翻。后来查了半天才发现是这里的问题。

我的习惯:每次改核心参数后,一定要重启飞控。EKF2在初始化时读取这些参数,运行时不会重新加载。不改重启等于白改。

1.3 辅助参数(Auxiliary Parameters)

辅助参数,我称之为“血肉”。它们决定了EKF2对传感器的信任程度。

说白了,就是告诉EKF2:这个传感器噪声多大?那个传感器漂移多快?

常见的辅助参数:

  • 噪声参数EKF2_GPS_V_NOISE(GPS速度噪声)、EKF2_BARO_NOISE(气压计噪声)等。数值越大,EKF越不信任该传感器。
  • 初始方差EKF2_INIT_VEL(初始速度方差)、EKF2_INIT_POS(初始位置方差)。起飞前的不确定度。
  • 时间常数EKF2_ACC_NOISE(加速度计噪声时间常数)、EKF2_GYR_NOISE(陀螺仪噪声时间常数)。控制滤波器的响应速度。

你可能会问:这些参数怎么调?

我的经验是:先保持默认。如果发现位置漂移大,适当增大GPS噪声;如果高度震荡,减小气压计噪声。每次只改一个参数,观察效果。

我曾经在调试一架大载重六轴时,发现高度一直有低频振荡。折腾了两天,最后把 EKF2_BARO_NOISE 从默认的0.5改到0.3,问题就解决了。原因是那架飞机的气压计安装位置靠近电机,气流扰动大,默认噪声值不够。

避坑指南:辅助参数不要改得太极端。比如把GPS噪声设成100,EKF会完全忽略GPS,飞机就会飘走。我曾经见过有人把 EKF2_GPS_V_NOISE 设成0,结果EKF过于信任GPS,在GPS信号差的地方直接炸机。

1.4 调试参数(Debug Parameters)

调试参数,我称之为“听诊器”。平时用不上,出问题时就靠它了。

这些参数主要控制日志输出、诊断信息、以及一些调试模式。

参数名 默认值 说明
EKF2_LOG_LEVEL 0 日志详细程度。0=最小,1=标准,2=详细。调试时设成2,但注意日志会很大。
EKF2_DIAG_INTERVAL 100 诊断信息输出间隔(ms)。设小一点可以更快发现问题。
EKF2_DEBUG 0 调试模式开关。1=启用,会输出更多内部状态。
EKF2_RNG_DEBUG 0 激光雷达/超声波调试输出。用于排查测距传感器问题。

我个人建议:日常飞行时 EKF2_LOG_LEVEL 保持0或1。只有在排查问题时才开详细日志。否则飞一次下来,日志文件几百兆,分析起来也麻烦。

我记得有一次,一架飞机在GPS信号好的地方也出现位置跳变。我开了 EKF2_DEBUG 和详细日志,发现是磁力计受到机臂电流干扰,导致EKF的航向估计震荡。后来通过日志里的创新序列(innovation sequence)定位到了问题。

小技巧:调试参数改完后,不需要重启飞控。它们可以在运行时动态调整。你可以在飞行中打开详细日志,发现问题后再关掉,非常方便。

1.5 参数分类的思维导图

为了让你更直观地理解EKF2参数体系,我画了一张结构图。你可以把它当作调参时的“地图”。

EKF2参数分类体系 核心参数 辅助参数 调试参数 其他参数 EKF2_EN, EKF2_IMU_CTRL EKF2_GNSS_CTRL, EKF2_AID_MASK EKF2_MULTI_IMU 噪声参数(GPS/气压计/磁力计) 初始方差(位置/速度/姿态) 时间常数(加速度/陀螺仪) EKF2_LOG_LEVEL EKF2_DIAG_INTERVAL EKF2_DEBUG, EKF2_RNG_DEBUG 地形跟随相关 光学流相关 视觉/激光雷达相关 调参原则 1. 先调核心参数,确定传感器组合 2. 再调辅助参数,优化融合效果 3. 最后用调试参数定位问题

1.6 参数调优的通用原则

讲了这么多分类,最后分享几条我总结的调参原则:

  1. 一次只改一个参数。改完飞一次,看效果。同时改多个参数,你根本不知道是哪个起了作用。
  2. 从默认值开始。PX4的默认参数是经过大量测试的。除非你有明确的问题,否则别乱动。
  3. 记录每次修改。我习惯在飞控的SD卡里放一个params.txt文件,记录每次改了什么、为什么改、效果如何。时间长了你会发现这个习惯救过你很多次。
  4. 用日志说话。别凭感觉调参。打开日志,看EKF的innovation、variance、status flags。数据不会骗人。

最后提醒:EKF2参数改完后,一定要做地面测试。把飞机拿在手里晃动,看QGC里的EKF状态是否正常。别一上来就解锁起飞。我曾经因为改了一个噪声参数,导致EKF在起飞时直接发散,飞机侧翻。还好是在草地上测试的,没摔坏。

好了,这一章的内容就到这里。EKF2的参数体系就像一张地图,你知道了分类,就知道该去哪里找答案。下一章咱们会深入每个参数的具体含义和调优方法。


专注资料整理