4、EKF2参数详解:核心参数与调优实战
EKF2,说白了就是飞控的「大脑」。它把GPS、IMU、视觉这些传感器的数据揉在一起,算出一个最靠谱的位置和姿态。我见过不少飞手,硬件堆得挺猛,但EKF2参数没调好,飞出来精度就是上不去。嗯,这一章咱们就把EKF2的核心参数掰开揉碎讲清楚。
4.1 EKF2核心参数一览
EKF2的参数很多,但真正影响测绘精度的,其实就那么十几个。我习惯把它们分成三组:GPS相关、IMU相关、视觉融合相关。下面这张图能帮你快速建立整体认知。
4.2 GPS参数:位置与速度的信任度
GPS参数决定了EKF2有多「相信」GPS的数据。你想想看,如果GPS信号不好,你还给它很高的权重,那定位肯定飘。
4.2.1 安装位置补偿:EKF2_GPS_POS_X/Y/Z
这三个参数是GPS天线相对于飞控重心的物理偏移。单位是米。我见过太多人忽略这个,结果飞机悬停时位置一直在漂。说白了,GPS天线装在机尾,飞控在中心,你不告诉EKF2这个偏移,它算出来的位置就是错的。
实测案例: 我去年帮一个客户调测绘机,他用的机架GPS天线在机尾后方30cm。默认参数是0,结果RTK定位精度始终在10cm以上。我把EKF2_GPS_POS_Y设为-0.3(假设Y轴朝后),精度直接进到3cm。
4.2.2 噪声参数:EKF2_GPS_POS_NOISE 与 EKF2_GPS_VEL_NOISE
这两个参数控制EKF2对GPS位置和速度的信任程度。数值越小,EKF2越信任GPS。
| 参数 | 默认值 | 测绘推荐值 | 说明 |
|---|---|---|---|
| EKF2_GPS_POS_NOISE | 1.0 m | 0.5 - 1.0 m | RTK模式下可设0.3-0.5 |
| EKF2_GPS_VEL_NOISE | 0.5 m/s | 0.3 - 0.5 m/s | 动态飞行时建议保持0.5 |
注意: 不要为了追求精度把噪声设得太低。我曾经在一个电磁干扰强的工地试过,把POS_NOISE设到0.2,结果EKF2直接发散,飞机差点飘走。建议从默认值开始,每次降20%,观察log里的innovation值。
4.3 IMU参数:加速度计与陀螺仪的信任度
IMU是EKF2的「内耳」。它更新频率高,但会漂。调IMU参数,本质上是平衡「短期精度」和「长期稳定性」。
4.3.1 IMU安装位置:EKF2_IMU_POS_X/Y/Z
和GPS一样,IMU也有物理偏移。虽然大多数飞控的IMU就在板子中心,但如果你用了外置IMU或者减震结构,这个值必须改。
4.3.2 加速度计噪声:EKF2_ACC_NOISE
这个参数影响EKF2对加速度计数据的信任度。数值越小,EKF2越依赖加速度计来估计姿态和位置。
- 默认值: 0.01 m/s²
- 测绘场景: 建议 0.008 - 0.015 m/s²
- 高振动环境: 可以放宽到 0.02,防止振动导致估计发散
4.3.3 陀螺仪噪声:EKF2_GYR_NOISE
陀螺仪噪声决定了EKF2对角速度的信任度。我个人的习惯是,如果飞机在悬停时航向有缓慢漂移,先检查这个参数。
调参技巧: 在QGC的Mavlink Console里运行 ekf2 status,观察innovation值。如果GPS innovation大于1.0,说明EKF2不太信任GPS,可以适当降低GPS_NOISE。如果ACC innovation偏大,说明振动太大,应该先做减震,而不是硬调参数。
4.4 视觉融合参数:视觉定位的信任度
视觉融合是测绘精度的「倍增器」。但前提是你得把参数调对。我见过不少团队,视觉里程计跑得挺好,但EKF2就是不认,问题就出在延迟和噪声上。
4.4.1 视觉传感器位置:EKF2_EV_POS_X/Y/Z
视觉传感器(比如双目相机或视觉里程计模块)相对于飞控重心的偏移。这个必须精确测量,误差超过1cm就会影响融合效果。
4.4.2 视觉噪声:EKF2_EV_NOISE
视觉位置估计的噪声标准差。单位是米。不同视觉方案差异很大:
| 视觉方案 | 推荐EKF2_EV_NOISE | 说明 |
|---|---|---|
| Intel T265 | 0.05 - 0.10 m | 室内效果较好,室外易受光照影响 |
| VISLAM(如RTAB-Map) | 0.10 - 0.20 m | 取决于特征点质量 |
| 光流+声纳 | 0.30 - 0.50 m | 精度有限,主要用于辅助 |
4.4.3 视觉延迟:EKF2_EV_DELAY
这是最容易踩坑的参数。视觉处理有延迟,从图像采集到位置输出,通常有20-100ms的延迟。EKF2需要知道这个延迟,才能正确对齐时间戳。
我曾经踩过的坑: 有一次用T265做室内测绘,定位总是跳变。查了两天log,发现EKF2_EV_DELAY设的是0(默认值),但实际T265的延迟在40ms左右。设成0.04之后,定位瞬间稳了。所以,一定要用log里的delay estimator工具去实测延迟,不要靠猜。
4.5 EKF2参数对定位精度的影响
参数调得好不好,直接体现在三个指标上:
- 位置精度: 水平位置误差(cm级 vs dm级)
- 姿态精度: 横滚俯仰误差(0.1° vs 0.5°)
- 航向精度: 偏航角漂移(°/min)
我习惯用下面这个表格来快速定位问题:
| 现象 | 可能原因 | 优先调整参数 |
|---|---|---|
| 悬停时位置漂移 | GPS噪声过大或安装偏移未补偿 | EKF2_GPS_POS_X/Y/Z, EKF2_GPS_POS_NOISE |
| 飞行中高度跳动 | 气压计受气流干扰或ACC噪声过小 | EKF2_ACC_NOISE, EKF2_BARO_NOISE |
| 航向缓慢漂移 | 磁力计干扰或GYR噪声过大 | EKF2_GYR_NOISE, EKF2_MAG_NOISE |
| 视觉融合后位置跳变 | 视觉延迟设置错误或噪声不匹配 | EKF2_EV_DELAY, EKF2_EV_NOISE |
4.6 EKF2调优实战流程
下面是我自己总结的一套调优流程,按这个顺序走,基本不会出大问题。
- 第一步:硬件校准
- 测量GPS、IMU、视觉传感器的物理偏移,写入EKF2_*_POS_X/Y/Z
- 校准加速度计、陀螺仪、磁力计
- 第二步:飞行日志采集
- 在典型测绘场景下飞一次,采集ulog文件
- 确保包含悬停、直线飞行、转弯等动作
- 第三步:分析innovation
- 用FlightPlot或PX4的ekf2_status模块查看各传感器的innovation值
- 理想值应在±1.0以内,超过±2.0说明参数有问题
- 第四步:逐参数微调
- 每次只改一个参数,改完飞一次看效果
- 先调噪声参数,再调延迟参数
- 第五步:验证精度
- 用RTK基站或已知控制点验证定位精度
- 记录调参前后的误差对比
我的经验: 调参最忌讳「一次改一堆」。你想想看,如果同时改了GPS_NOISE和ACC_NOISE,飞出来精度变好了,你根本不知道是哪个参数起了作用。每次只改一个,改完飞一次,这是最笨但最有效的方法。
4.7 实战案例:从10cm到3cm
最后分享一个实际案例。上个月帮一个做电力巡检的团队调机,他们的测绘无人机用RTK+视觉融合,但定位精度一直在8-10cm徘徊。
我拿到log一看,发现两个问题:
- EKF2_GPS_POS_Y设的是0,但GPS天线装在机头前方15cm处
- EKF2_EV_DELAY设的是0.02,但实际视觉延迟是0.045
改完这两个参数,精度直接降到3cm以内。嗯,有时候问题就是这么简单,但你不看log根本发现不了。