第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_CTRL 和 EKF2_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参数体系,我画了一张结构图。你可以把它当作调参时的“地图”。
1.6 参数调优的通用原则
讲了这么多分类,最后分享几条我总结的调参原则:
- 一次只改一个参数。改完飞一次,看效果。同时改多个参数,你根本不知道是哪个起了作用。
- 从默认值开始。PX4的默认参数是经过大量测试的。除非你有明确的问题,否则别乱动。
- 记录每次修改。我习惯在飞控的SD卡里放一个params.txt文件,记录每次改了什么、为什么改、效果如何。时间长了你会发现这个习惯救过你很多次。
- 用日志说话。别凭感觉调参。打开日志,看EKF的innovation、variance、status flags。数据不会骗人。
最后提醒:EKF2参数改完后,一定要做地面测试。把飞机拿在手里晃动,看QGC里的EKF状态是否正常。别一上来就解锁起飞。我曾经因为改了一个噪声参数,导致EKF在起飞时直接发散,飞机侧翻。还好是在草地上测试的,没摔坏。
好了,这一章的内容就到这里。EKF2的参数体系就像一张地图,你知道了分类,就知道该去哪里找答案。下一章咱们会深入每个参数的具体含义和调优方法。