ArduPilot RTK 厘米级定位:第一次固定解配置教程
【免费下载链接】ardupilotArduPlane, ArduCopter, ArduRover, ArduSub source项目地址: https://gitcode.com/GitHub_Trending/ar/ardupilot
位置保持模式悬停,飞机却慢慢漂出 2 米,精度作业直接报废。ArduPilot RTK 高精度定位能把水平误差从米级压到厘米级。这篇教程带你配出第一次 RTK 固定解,并告诉你出问题先查哪里。
这个方案能帮你解决什么
- 位置误差 <5 cm:RTK 固定解下,悬停位置从米级漂动变为厘米级稳定
- 航向更可靠:移动基线方案下,天线基线可直接提供航向,降低对罗盘的依赖
- IMU 漂移被实时纠正:EKF 每 100 ms 用一次干净的位置解拉回滤波状态
- 免手动拨参:
GPS1_AUTO_CONFIG=2自动完成协议、数据率配置,串口接线后重启即可
动手前 10 分钟自查
先查硬件和链路,再碰参数。90% 的「RTK 不固定」是接线或链路问题,不是滤波问题。
| 类别 | 检查项 | 合格标准 |
|---|---|---|
| 硬件 | 基站与移动站接收器型号 | 同厂商支持 RTCM3,如 u-blox M9N/M10P |
| 硬件 | 基站天线位置 | 开阔、无遮挡,距 rover 建议 <20 km |
| 链路 | 校正值传输串口波特率 | ≥57600,链路稳定无丢包 |
| 链路 | 接收器接在飞控 GPS 串口 | TX/RX 交叉,供电独立于电调 |
| 参数 | GPS1_TYPE角色设置 | 基站 =17,移动站 =18,不要混 |
| 参数 | AHRS_EKF_TYPE | 必须为 3(EKF3) |
第一次固定解的最小配置步骤
按下面 6 步走完,正常情况下 5~15 分钟内应出现固定解(GPS.Status = 6)。
- 接线:基站接收器接基站主机 GPS 串口,移动站接收器接飞控 GPS 串口,校正值链路(串口或电台)打通
- 配基站端:按下方参数块设置基站参数,重启等待基站自身出固定解
- 配移动站端:设置
GPS1_TYPE=18,确认 EKF3 已启用 - 看状态:地面站中
GPS.Status从 5(浮点)变 6(固定),HAcc降到 <0.1 m - 看融合:EKF 报告 GPS 观测被接受(日志
NAV消息无 GPS reject) - 看收敛:记录从开机到固定的秒数,>60 秒按故障表排查
参数最小集(两个机载端各一份):
# 移动站端(你的飞机/车) GPS1_TYPE=18 # u-blox RTK 移动站 GPS1_AUTO_CONFIG=2 # 自动配置协议与波特率 GPS1_RATE_MS=100 # 10Hz 位置输出 # 基站端(基站那台飞控) GPS1_TYPE=17 # u-blox RTK 基站 GPS1_AUTO_CONFIG=2ArduPilot EKF 参数调优:先调这 5 个
别一次改一堆。固定解出现后,按这张表从大到小逐个调,每改一个飞一次确认。
| 参数 | 默认值 | 建议值 | 为什么调 |
|---|---|---|---|
GPS1_TYPE | 0 (AUTO) | 18 / 17 | 显式声明角色,自动识别可能判错 |
GPS1_AUTO_CONFIG | 2 | 2 | 保持自动配置,手动拨协议易漏项 |
GPS1_RATE_MS | 200 | 100 | 10Hz 让 EKF 更及时纠偏,RTK 链路带宽够 |
EK3_GLITCH_RAD | 25 | 10 | 固定解很干净,收紧异常半径,IMU 漂移更快被拉回 |
EK3_POSNE_M_NSE | 0.5 | 0.1 | 这是 GPS 位置噪声下限,固定解精度 <5 cm 就让它更信 GPS |
注意:EK3_POSNE_M_NSE只在你确认长期固定解时才下调。若经常掉回浮点解,保持 0.5,否则浮点阶段(精度退化到 0.5~1 m)反而会被过度信任。
不同载体的配置差异
同一套 RTK 链路,三类载体的滤波参数侧重不同:
| 载体 | 关键差异 | 理由 |
|---|---|---|
| 多旋翼 | EK3_GLITCH_RAD设 10,GPS1_RATE_MS100 | 悬停场景静止误差明显,收紧纠偏收益最大 |
| 固定翼 | EK3_GLITCH_RAD保持 25,速率 10Hz~20Hz | 速度高,过小的 glitch 半径会被机动误触发重置 |
| 水下 | 浮出水面前 GPS 不可用,EKF 依赖 DVL + 深度 | 只在潜航器上浮段融合 GPS,EK3_GLITCH_RAD从 25 起 |
收敛慢、漂位置?先查这里
| 现象 | 可能原因 | 处理动作 |
|---|---|---|
| 固定解等待 >10 分钟 | 基站还没出固定解,或校正值没到移动站 | 先确认基站Status=6,再查校正值链路是否通 |
| 浮点解精度卡在 0.5~1 m 不收敛 | 基站与 rover 距离过远或基线超过 10 km | 换更近的基站;>10 km 需改 PPP 模式 |
| 固定后位置仍有 10~20 cm 抖 | 多路径反射,天线贴在金属壳上 | 天线加支架抬高,远离机臂与电池仓 |
| 固定解反复掉到浮点 | 校正值链路丢包,电台距离/遮挡 | 提高电台功率或天线高度,检查串口波特率 |
HAcc显示 0.05 但 EKF 仍报 GPS reject | 位置噪声下限或 glitch 半径不匹配 | 按上一节调EK3_POSNE_M_NSE和EK3_GLITCH_RAD |
| 完全无定位 | GPS1_TYPE设为 0 且自动识别失败 | 手动指定型号;检查该串口是否被其他设备占用 |
排查顺序建议:基站状态 → 校正值链路 → 移动站状态 → EKF 融合,一层通了再查下一层。日志中重点看GPS的Status、HAcc、NSats三条曲线。
继续深入
- GPS 模块源码目录:接收器驱动、状态机与多接收器融合逻辑都在
libraries/AP_GPS/ - RTCM3 解析器:校正值如何被拆包、匹配,读它比看文档更直接
- EKF3 源码:
EK3_GLITCH_RAD、EK3_POSNE_M_NSE等参数在AP_NavEKF3.cpp中有逐条说明
第一次固定解出现时,先别飞——停在原地看 5 分钟,确认HAcc稳定在 0.1 m 以内、位置曲线不画圆。然后做第二次:换一块起飞点重复以上流程。稳定复现两次,这套 ArduPilot RTK 配置才算真正落地。
【免费下载链接】ardupilotArduPlane, ArduCopter, ArduRover, ArduSub source项目地址: https://gitcode.com/GitHub_Trending/ar/ardupilot
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考