从米级到厘米级只要30分钟:ArduPilot RTK固定解完整配置指南
【免费下载链接】ardupilotArduPlane, ArduCopter, ArduRover, ArduSub source项目地址: https://gitcode.com/GitHub_Trending/ar/ardupilot
一次测绘航线落点偏了两米,整片四十亩地第二天全部重飞——锅全扣在一次"浮点解飞完全程"上。如果你在用 ArduPilot,想把定位从米级拉到厘米级,这篇带你把 ArduPilot RTK 基站和移动站从零配到位。读完你能独立配出一套 RTK 固定解。
RTK 凭什么做到厘米级
一句话原理:基站架在已知坐标上,和你机上的移动站看同一组卫星。卫星轨道误差、大气延迟这些大头,两边"共享"同一份——基站把它算出来,通过 RTCM3 校正数据发给你;移动站从自己的观测值里减掉,剩下的就是厘米级残差。浮点解(5)和固定解(6)的差别在最后一环:载波相位模糊度能不能整定。整定了,从十几厘米跨进厘米级。
ArduPilot 把各级 fix 统一成一个枚举,源码在 libraries/AP_GPS/,压缩成这张小表:
| 值 | 状态 | 含义 |
|---|---|---|
| 0 | NO_GPS | 没检测到 GPS |
| 1 | NONE | 消息正常但未锁定 |
| 2 | FIX_2D | 二维锁定 |
| 3 | FIX_3D | 三维锁定,米级 |
| 4 | DGPS | 差分增强 |
| 5 | RTK_FLOAT | 浮点解,差最后一步 |
| 6 | RTK_FIXED | 固定解,本文目标 |
| 7 | STATIC | 基站自身的静态状态 |
| 8 | PPP | 精密单点,无基站也能到分米级 |
现场只记两个数就行:卡在 5 就差一步,看到 6 才算完。
30分钟搭出你的第一个RTK固定解
① 选接收机:买两块支持 RTK 的 U-blox 板(F9P 级),基站、移动站各一。为什么不能用老款 M8:浮点转固定靠载波相位观测,老芯片没这份数据,怎么调都停在 5。天线配带地面板的,杂波少。
② 接基站:给基站飞控设成基站角色:
GPS_TYPE = 17(UBLOX_RTK_BASE 驱动值)GPS_BASE_LAT / GPS_BASE_LON / GPS_BASE_ALT:填基站已知坐标。差 1 米,所有校正都偏 1 米,这是排障第一站GPS_AUTO_CONFIG = 2:让板子自动配置,省掉手工发 UBX 的一整轮- 基站放开阔处、架稳不动,天线远离金属。为什么:基站一动,RTCM3 数据整条链路作废
③ 配移动站:对称着来:
GPS_TYPE = 18(UBLOX_RTK_ROVER)GPS_AUTO_CONFIG = 2GPS_RATE_MS = 20(50Hz):更新快,EKF 跟得紧- 链路两条路:基站串口直连移动站(波特率 ≥57600bps),或者走 GCS 把校正注入 ArduPilot,再按
GPS_INJECT_TO转发(127 表示发给所有 GPS 实例)。为什么给两个选择:直连延迟低;走 GCS 不用拉线,校正可经无线链路送到
④ 验证固定解:⚠️ 开机后别急着怀疑硬件,先看这条日志。GCS 全状态里盯GPS.Status:5→6 就是固定;收敛时间正常 <30 秒,60 秒内都算及格。如果 5 卡满 5 分钟,回第②步查基站坐标和链路,顺序别反。
从"能飞"到"够准":EKF与融合参数怎么调
调参逻辑就两层:先告诉 EKF"怎么用 GPS",再告诉它"信几分"。RTK 固定解把 GPS 的信噪比从米级抬到厘米级,这两层都得跟着动——否则 EKF 还拿米级待遇对待你的厘米级数据,精度白丢一半。
第 1 步,改"用法":EK2_GPS_TYPE = 3,位置和速度一起喂给滤波器。为什么:RTK 的速度质量同样高,两者联用比只用位置压 IMU 漂移更狠。
第 2 步,压"信任度":噪声参数调小,权重自动升高,固定解后直接减半:
| 参数 | 默认值 | RTK固定解推荐 | 为什么这么调 |
|---|---|---|---|
| EK2_GPS_TYPE | 0 | 3 | 位置+速度联用 |
| EK2_GLITCH_RAD | 25 | 100 | 防弱信号环境下 EKF 误报重对齐 |
| EK2_GPS_POS_X | 0.1 | 0.05 | 位置噪声减半,GPS 权重同步上升 |
| EK2_GPS_VEL_X | 0.2 | 0.1 | 速度通道同理 |
| EK2_ACC_NOISE | 0.5 | 0.3 | GPS 可信后 IMU 漂移被压得更死 |
固定解稳定后,EK2_GPS_POS_X还能压到 0.01–0.02,等于"RTK 固定解时自适应降 GPS 噪声",参数一步到位,不用改代码。
第 3 步,多 GPS 冗余:再挂一块米级 GPS 当备胎:GPS1_TYPE = 18保持主角色,GPS2_TYPE = 1(自动识别)+GPS2_AUTO_CONFIG = 1。为什么必须有它:基站链路一断,RTK 重新收敛要几十秒,备胎 GPS 保住米级位置不让飞机飘;链路恢复后,混合适例(GPS1_BLEND_MASK默认 5 = 位置+速度)按健康度平滑切回。EKF 内置健康检查(卫星数、HDOP、精度、漂移),异常会自动弃用该通道并重新对齐,你不用自己写监控;想双保险就盯三个门槛:卫星 ≥6、HDOP ≤250(单位 0.01)、RTK 数据年龄 ≤2000ms。
现场翻车了?照这张表查
别急着刷固件,日志先交代一大半问题。达标值先背下来:GPS.Status应为 6,HDop<200(即 2.0),HAcc固定解 <0.1m(常见 0.02–0.05)。哪条不达标,对表处理:
| 现象 | 可能原因 | 处置动作 |
|---|---|---|
| 卡在浮点,迟迟不整定 | 基站校正数据延迟、链路波特率不够 | 确认串口 ≥57600bps,再核实基站位置是否真固定 |
| 精度跳变,固定解掉回浮点 | 多路径,反射信号混入 | 天线挪离机身和金属面,加地面板 |
| 收敛超过 1 分钟 | 卫星几何差 | 等天顶视角改善,延长观测时间 |
| 频繁失锁 | 天线视野被挡 | 挪开金属遮挡物,重查天空视野 |
| EKF 反复报 GPS glitch | 链路丢包、校正中断 | 先看日志 HAcc 与 RTK 年龄,再动链路 |
换个平台,参数得重调
同一套 RTK,车不一样,参数要跟工况走。
多旋翼(高动态,要快):EK2_GPS_TYPE=3、EK2_GLITCH_RAD=50、GPS_RATE_MS=20、EK2_GPS_POS_X=0.03。为什么:悬停转机动频繁,50Hz 更新让滤波器滞后最小。
固定翼(长航时,要稳):EK2_GPS_TYPE=0(仅位置)、EK2_GLITCH_RAD=200、GPS_RATE_MS=200。为什么:动态小,位置够用;刷新率低省功耗,容错半径放宽,减少空中反复重对齐。
水下(没信号,靠融合顶):EK2_GPS_TYPE=0、EK2_POSNE_M_NSE=10.0(位置噪声放大),定位交给 DVL 和深度传感器。为什么:水下 GPS 无信号,滤波器必须压向 DVL+深度+IMU,别让水面上的 GPS 残值污染定姿。
上线前验收清单
按顺序过一遍,全勾再放行:
- 基站状态 STATIC(7),坐标已填,开阔且固定
- 移动站
GPS.Status= 6,收敛 <60 秒 - 日志里
HAcc≤0.1m、HDop≤200、卫星数 ≥8 GPS2工作正常,混合掩码已启用- EKF 日志没有连续 GLITCH 重对齐
性能达标线:收敛 <30 秒算优秀,60 秒是红线;定位精度 <2cm 优秀,5cm 红线;HDOP <1.0 优秀,2.0 红线;链路丢包 <5% 红线。
每条达标线都踩住,这套 ArduPilot RTK 固定解就算验收通过;哪条差一口气,回上面那张表逐条对。参数细节查 docs/,驱动实现看 libraries/AP_GPS/。
【免费下载链接】ardupilotArduPlane, ArduCopter, ArduRover, ArduSub source项目地址: https://gitcode.com/GitHub_Trending/ar/ardupilot
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考