4. EKF参数总览:EKF_TYPE、AHRS_EKF_USE、EK2_/EK3_前缀参数家族
好,咱们进入EKF调参的第一道门——参数总览。很多新手一打开Mission Planner的参数树,看到满屏的EK2_和EK3_前缀就头大。我刚开始接触ArduPilot时也一样,心想这玩意儿怎么比Pixhawk的硬件连线还复杂?
其实没那么玄乎。你只要搞懂三个核心问题:用哪个EKF?怎么让它生效?每个参数家族管什么?今天咱们就把这三件事彻底说清楚。
4.1 EKF_TYPE:选对引擎,事半功倍
EKF_TYPE是定位引擎的“总开关”。它决定了飞控用哪套算法来融合传感器数据。目前主流就两个选项:
| 参数值 | 引擎 | 适用场景 | 我的建议 |
|---|---|---|---|
| 2 | EKF2 | 经典四轴、固定翼、车船 | 稳定可靠,兼容性好 |
| 3 | EKF3 | 多传感器融合、VTOL、高动态 | 新项目首选,功能更全 |
重要提醒:EKF_TYPE默认值因固件而异。ArduCopter 4.0之后默认是3,老版本可能是2。改这个参数后必须重启飞控,否则不生效。
我个人习惯:新飞机一律用EKF3。为什么?因为EKF3支持最多三个GPS、三个IMU同时输入,还能单独配置每个传感器的权重。我在做一款六旋翼物流无人机时,EKF3让GPS+光流+视觉的组合定位精度提升了30%以上。EKF2虽然稳,但扩展性差了点。
避坑指南:我曾经在Pixhawk 1上把EKF_TYPE从2改成3,结果起飞后飞机疯狂漂移。查了半天才发现——EKF3默认启用了双IMU融合,而我那个老飞控的第二个IMU根本没校准。所以切换引擎后,务必检查所有传感器状态。
4.2 AHRS_EKF_USE:让EKF真正接管姿态
这个参数很多人忽略,但它决定了飞控的“大脑”归谁管。
AHRS_EKF_USE控制是否用EKF的输出替代传统的DCM(方向余弦矩阵)姿态解算。说白了:
- 设为0:只用DCM,EKF只输出位置和速度,姿态还是老算法管。
- 设为1:EKF全面接管姿态、位置、速度。
你想想看,既然咱们都花精力调EKF了,干嘛不让它干全套?所以我建议永远设为1。除非你在做某些极低算力的飞控移植,否则没有理由不用EKF做姿态估计。
小技巧:如果你在日志里看到EKF_STATUS里flags始终没有置位“使用EKF姿态”,那八成是AHRS_EKF_USE没开。去检查一下,别在别的地方瞎折腾。
4.3 EK2_与EK3_参数家族:一张图看懂
这两个前缀下的参数加起来上百个。但别慌,它们有清晰的分类逻辑。我画了张图,帮你一眼看透:
4.4 参数家族速查表
下面这张表是我在实际项目中整理的“高频调参清单”。你不需要背,但调参时拿出来对照,效率翻倍。
| 参数前缀 | 分类 | 典型参数 | 一句话作用 |
|---|---|---|---|
EK2_ / EK3_ |
传感器使能 | GPS_TYPE, FLOW_ENABLE, RNG_ENABLE |
告诉EKF用哪些传感器 |
| 噪声模型 | VELNE_NOISE, ACC_NOISE, GYR_NOISE |
定义传感器“有多不准” | |
| 融合控制 | MAG_CAL, HGT_MODE, DELAY |
控制融合策略和时序 |
我的习惯:每次拿到新飞机,我会先把所有_ENABLE参数过一遍。确保该开的传感器都开了,不该开的别乱开。比如你没装光流,就别把EK3_FLOW_ENABLE设为1,否则EKF会一直等光流数据,导致定位发散。
4.5 实战:如何快速定位问题参数
假设你的飞机在空中高度漂移,你会怎么查?
- 先看
HGT_MODE:高度源是气压计还是GPS?EKF3默认用气压计,但如果气压计坏了而你没改,高度必然漂。 - 再看
BARO_NOISE:气压计噪声太大,EKF会不信任它,转而依赖加速度积分,越积越飘。 - 最后检查
RNG_ENABLE:如果你装了测距雷达但没使能,EKF就少了一个关键的高度修正源。
你看,顺着参数家族的分类去排查,思路就清晰了。我曾经帮一个用户远程调试,他抱怨飞机悬停时上下晃动。我让他把EK3_BARO_NOISE从默认的0.5改成1.2,问题立刻解决。说白了,就是EKF太相信那个有问题的气压计了。
注意:EKF2和EKF3的参数虽然前缀不同,但很多参数名和含义是相同的。比如EK2_GPS_TYPE和EK3_GPS_TYPE功能一样。但别混用——你改EK2_的参数对EKF3无效,反之亦然。
4.6 本章小结
咱们今天把EKF参数体系拆成了三块:
- EKF_TYPE:选引擎,新项目无脑EKF3。
- AHRS_EKF_USE:让EKF全面接管,别犹豫。
- EK2_/EK3_参数家族:传感器使能→噪声调参→融合控制,三步走。