资讯动态

ArduPilot RTK 配置实录:从浮点解到厘米级固定的完整链路

发布时间:2026/9/11 15:34:24 来源:尧图企业网站定制
ArduPilot RTK 配置实录从浮点解到厘米级固定的完整链路【免费下载链接】ardupilotArduPlane, ArduCopter, ArduRover, ArduSub source项目地址: https://gitcode.com/GitHub_Trending/ar/ardupilot一个具体的痛点楼群之间你的无人机还信得过 GPS 吗想象这样一个画面四旋翼在楼顶之间执行精准作业普通单点定位的水平误差动辄 1~2 米落点完全没法保证。这时 RTK实时动态定位本质是用基站差分校准单点误差就派上用场了——配合 ArduPilot 的 GPS 驱动和 EKF 融合可以把位置误差压到厘米量级。ArduPilot 的 GPS 子系统libraries/AP_GPS/从 U-blox、SBP 到 SBF 都做了原生 RTK 支持读完这篇你能独立完成基站 移动站的接线、参数配置并看懂飞控日志里那个5或6到底意味着什么。先把两个概念说清楚解的类型和矫正眼镜普通 GPS 拿到卫星信号后能算出一个位置但误差以米计。RTK 的思路是在旁边立一个位置已知的基站它和移动站同时看同一批卫星两边收到的误差几乎是相同的同一片电离层、同样的多路径倾向。把基站的实测误差算出来广播给移动站移动站一减剩下的就是厘米级残差。你可以把它理解成给 GPS 配了一副矫正眼镜——镜片本身不变但度数刚好抵消了当天的系统性偏差。飞控内部用 libraries/AP_GPS/AP_GPS_FixType.h 里的一套枚举记录解的质量这也是你看日志时最重要的参照系解状态枚举值含义FIX_3D3普通单点定位米级误差DGPS4差分改进亚米级RTK_FLOAT5浮点解误差仍偏大在收敛中RTK_FIXED6固定解厘米级精度目标状态⚠️ 记住这个规律状态 5 是在路上状态 6 才是到了。很多排障问题都出在把浮点解当成可用精度上。硬件准备、参数配置、上电验证三段式跑通第一段硬件。你需要两台 U-blox 系列 RTK 模块如 ZED-F9P 或 NEO-M9N分别装到基站和飞行器上各配一根对的天空视野天线。基站选开阔地与移动站距离建议控制在 20~30 公里内基线越长浮点转固定越难。两者之间用串口直连、UDP 或 CAN 传 RTCM3 校正数据——注意传输波特率或带宽要够基站广播量不小。第二段参数。两端的角色由GPS_TYPE决定源码里的定义是GPS_TYPE_UBLOX_RTK_BASE 17、GPS_TYPE_UBLOX_RTK_ROVER 18见 libraries/AP_GPS/AP_GPS.h。两端核心参数对比如下参数基站固定端移动站飞行器端GPS_TYPE17UBLOX_RTK_BASE18UBLOX_RTK_ROVERGPS_AUTO_CONFIG2自动配置全部2自动配置全部GPS_RATE_MS100100GPS_COM_PORT接天线模块的串口接天线模块的串口角色行为持续广播 RTCM3接收 RTCM3解算固定解GPS_AUTO_CONFIG的四个取值0 关闭 / 1 仅串口 / 2 全部 / 3 清除后配置串口定义在 libraries/AP_GPS/AP_GPS.h 的GPS_AUTO_CONFIG枚举里选 2 时 ArduPilot 上电会自动把 U-blox 模块写成 RTK 角色省去手工下发配置串# 移动站最小核心参数完整参数列表见官方文档 GPS_TYPE 18 # U-blox RTK 移动站 GPS_AUTO_CONFIG 2 # 上电自动配置模块 GPS_RATE_MS 100 # 100ms 出一次定位第三段上电验证。上电后在 MAVLink 调试界面观察三个字段STATUS从 3 走到 5 再走到 6 的轨迹、RTK.AGE最近一次基站校正的年龄毫秒应稳定在 100~500 之间、RTK.NSATS基站与移动站应使用足够重叠的卫星。看到 STATUS6 且 AGE 稳定链路就算通了。 易错提醒两端的 GPS 模块必须都支持 RTK且固件版本匹配只用一台 RTK 模块加一台普通 GPS 是组不成基线的。幕后原理一字节 RTCM3 是怎么变成厘米级坐标的用一条线把数据流串起来基站模块把原始观测量算成 RTCM3 报文经数据链路串口/CAN/UDP送到飞控飞控的 GPS 驱动收到后一方面自己解析模块上报的定位消息另一方面把收到的 RTCM3 原样注射给移动站模块libraries/AP_GPS/AP_GPS.cpp 里有handle_gps_rtcm_fragment负责处理可能分片的注入数据模块完成整周模糊度解算后把带质量等级的解报回飞控。到这一步定位还不是最终答案。飞控把 GPS 的位置和速度当作观测量喂给 EKF扩展卡尔曼滤波位置估计的核心——EKF 同时盯着 IMU、气压计等所有传感器按各自的噪声协方差加权融合输出平滑且抗单帧跳变的位置/速度/姿态。GPS 报 6 的时候 EKF 会压低 GPS 噪声权重报 3 的时候自动回升所以你看到 RTK 掉回浮点解时飞控并不会立刻乱飘。// AP_GPS_FixType.h —— 驱动解析后的解状态贯穿整条链路 RTK_FLOAT 5, /// 3D RTK 浮点解收敛中精度未达标 RTK_FIXED 6, /// 3D RTK 固定解厘米级EKF 会提高 GPS 权重EKF 侧的代码在 libraries/AP_NavEKF3/其中AP_NavEKF3_Measurements.cpp负责把 GPS 观测量转成滤波输入。说白了GPS 决定你在哪EKF 决定你多确定你在哪。调优手册遇到什么现象往哪儿拧场景一高动态快速机动、悬停精度要求高。现象是机动时位置跟踪滞后。思路是降低 GPS 输出延迟、提高刷新率把GPS_RATE_MS压到 50~100同时确认 EKF 的 GPS 速度融合已启用EKF 相关参数在EK3_前缀下具体清单查官方文档。预期改善跟手性明显提升悬停抖动减小。场景二弱信号/多路径城市峡谷、树冠下。现象是状态频繁在 5 和 6 之间跳。这种时候别急着加大融合权重先治天线加地面板、把天线从机架金属片上垫高。参数侧适当放宽 EKF 对 GPS 跳变的容差glitch 检测类参数预期改善固定解保持率上升代价是极端跳变时收敛稍慢。场景三长航时固定翼。现象是长时间飞行中固定解稳定但担心单天线故障。思路是加第二台普通 GPS 做冗余让 ArduPilot 的自动切换逻辑在 RTK 模块掉线时平滑降级到单点定位而不是直接失去位置源。性能验收可以对照这张表指标优秀及格需改进浮点转固定收敛时间 1 分钟1~3 分钟 5 分钟固定解下水平精度 2 cm2~5 cm 5 cmRTK 校正年龄 200 ms200~1000 ms 2 s使用卫星数≥ 129~11 8最重要的两条原则先保数据链路再调滤波参数——90% 的精度不行其实是 RTCM 丢了包或延迟太大任何参数改动后都要重飞一遍验证EKF 参数是耦合的单改一个值可能顾此失彼。踩坑实录我们排查过的三个问题坑一浮点解永远差一口气。现象是 STATUS 长时间停在 5收敛时间远超预期。我们先是怀疑卫星几何看了整晚星历都没毛病。最终根因基站模块和飞行器模块之间走的是共享串口波特率设低了RTCM3 流被丢包RTK.AGE隔几秒才刷新一次。解法把链路提到 115200 以上或改 CANAGE 稳定到 100ms 出头四分钟后转固定。教训先看 AGE再看星。坑二转固定了落点还是偏。状态明明是 6HAcc 也小于 0.1但实际落点偏移十几厘米且方向固定。排查动作对比 GPS 位置日志和 IMU 推算轨迹发现偏差是常值而不是随机抖动。根因GPS1_ANTENNA_OFFSET没设对EKF 按错误的位置基准在融合。解法实测天线相对机体原点的距离把偏移参数填准重飞后落点收进 5 厘米内。坑三飞控提示 GPS 不健康但地面站看着一切正常。现象是预检不通过、无法解锁。排查时发现飞控日志里 GPS 更新率只有 3Hz 上下而健康检查要求高于 4Hzis_healthy的判定逻辑就在 libraries/AP_GPS/AP_GPS.cpp。根因是模块上电初期出数慢加上我们把它挂在了一个高负载串口上。解法单独给 GPS 一个串口并等上电收敛后再做预检。延伸方向与收束两个值得继续挖的方向。多平台适配ArduCopter、ArduPlane、ArduSub 共用同一套 libraries/AP_GPS/ 驱动但水下平台出舱前是 GPS 静默期EKF 需要依赖 DVL 和深度计过渡参数取向与空中完全不同可以针对 ArduSub/ 单独做一套。长期维护RTK 链路随环境季节变化会漂移建议定期记录收敛时间和 AGE 分布把链路健康当常规巡检项而不是出事才查。更多细节以官方文档为准入口在 docs/ 和 README.md源码想深读的话从 libraries/AP_GPS/ 的驱动层到 libraries/AP_NavEKF3/ 的融合层代码路径是完整的。一句话收束RTK 给你厘米级的答案EKF 决定这个答案在飞控里有多可信——两环都调对了精度才真正落地。【免费下载链接】ardupilotArduPlane, ArduCopter, ArduRover, ArduSub source项目地址: https://gitcode.com/GitHub_Trending/ar/ardupilot创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价