ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

PX4无人机RTK厘米级定位配置全攻略:从硬件选型到EKF2调参避坑

PX4无人机RTK厘米级定位配置全攻略:从硬件选型到EKF2调参避坑 1. 为什么厘米级定位是无人机作业的分水岭搞无人机飞控这几年我最大的感受就是定位精度决定了你能接什么活。普通GPS模块在开阔环境下水平精度大概在1.5到3米之间漂移垂直方向更差有时候能到5米以上。这个精度拿来航拍娱乐没问题但一旦涉及测绘、电力巡检、农业植保的精准喷洒、或者建筑工地的土方量计算米级误差就是灾难——测绘出图对不上、喷洒重喷漏喷、巡检拍不到绝缘子串的细节。RTKReal-Time Kinematic实时动态差分就是把定位从米级拉到厘米级的核心技术。它的原理说白了不复杂地面基准站知道自己精确坐标同时接收卫星信号算出当前卫星信号的误差修正量通过数据链路把修正量发给无人机上的移动站移动站用修正量校正自己的观测值从而实现厘米级解算。这里面的关键是“共视卫星”和“差分龄期”——基准站和移动站必须看到同一批卫星修正量才有意义差分龄期则是修正量从基准站算出来到移动站用上之间的时间差龄期越大精度越差。PX4作为目前开源飞控里生态最完整的方案对RTK的支持已经相当成熟但“支持”和“配好”之间隔着大量细节。固件版本选错、EKF2参数没调对、串口映射搞混、QGroundControl版本不匹配任何一个环节出问题都会导致RTK无法进入固定解Fixed Solution只能停在浮点解Float Solution甚至单点定位。我见过太多人卡在“RTK模块买了、线接了、参数设了但就是不变绿”的状态。这篇内容面向的是已经有一定PX4基础、准备上RTK做实际作业的飞手和开发者。我会从硬件选型、固件版本、参数配置、EKF2融合逻辑、QGC设置、差分龄期排查这几个维度把整套流程拆开讲清楚。新手也能看懂原理部分老手可以直接跳到参数配置和避坑章节抄作业。2. 硬件选型与接线别在第一步埋雷2.1 RTK模块怎么选才不踩坑市面上RTK模块大致分三类单频、双频、双频多系统。单频模块比如早期的一些基于u-blox M8P的方案只能跟踪L1频段初始化时间长在遮挡环境下容易失锁现在基本不推荐新项目用了。双频模块u-blox F9P是典型代表同时跟踪L1和L2/L5频段能更快固定、更抗多路径干扰是目前PX4搭配的主流选择。选模块的时候重点看几个参数支持星座数量GPS、GLONASS、Galileo、北斗越多越好、更新率至少5Hz测绘建议10Hz以上、接口类型UART还是USBPX4走UART、以及是否支持外接天线馈电。F9P方案在国内用得最多性价比高社区资料也全。注意有些便宜模块标称“RTK”但实际只支持基站模式或者需要额外付费解锁移动站功能。买之前确认清楚是否支持移动站Rover模式以及是否自带RTK解算引擎。2.2 接线串口映射是第一个大坑PX4飞控上通常有多个UART口RTK模块一般接到GPS口或者TELEM口。以Pixhawk系列为例GPS口对应的是GPS1通常映射为/dev/ttyS3或者/dev/ttyS0具体取决于飞控型号和固件版本。接线就四根VCC5V、GND、TX、RX。注意TX和RX要交叉——模块的TX接飞控的RX模块的RX接飞控的TX。我遇到过最常见的问题就是线接对了但参数没配对。PX4里需要设置两个参数GPS_1_CONFIG指定GPS1对应的串口SER_GPS1_BAUD设置波特率。F9P默认波特率是38400但很多模块出厂固件可能设成了115200或者9600。如果你发现GPS灯不亮或者QGC里看不到GPS信息先查波特率。# 在QGC的MAVLink Console里检查GPS状态 gps status # 查看串口配置 param show GPS_1_CONFIG param show SER_GPS1_BAUD如果用的是TELEM口接RTK那就需要把GPS_1_CONFIG改成对应的TELEM口同时注意TELEM口默认可能被MAVLink占用需要先禁用该口的MAVLink功能。2.3 天线安装的讲究RTK天线分基准站天线和移动站天线移动站天线要装在无人机上。安装位置有几个原则尽量远离电磁干扰源电调、图传、数传天线尽量高尽量保证天线地面平面Ground Plane完整。F9P的陶瓷天线需要至少70mm×70mm的金属地面平面才能发挥最佳性能很多小机架直接贴碳纤维板上效果会打折扣。基准站天线要架高、视野开阔周围不要有建筑物或金属遮挡。基准站和移动站之间的距离理论上没有硬性上限但实际使用中建议控制在10公里以内超过这个距离共视卫星数量会下降固定解会变难。3. 固件版本选择1.14和1.12的差异比你想的大3.1 PX4固件版本对RTK支持的影响PX4的RTK支持在1.12到1.14之间有几个关键变化。1.12.x是很多老飞控的稳定版本RTK基本功能没问题但EKF2对RTK观测值的融合逻辑相对保守固定解收敛速度偏慢。1.13开始引入了改进的GPS融合策略1.14.3进一步优化了RTK失锁后的恢复逻辑。我实测下来1.14.3在RTK固定解收敛速度上比1.12.3快大概30%到40%尤其是在部分遮挡环境下差异明显。但1.14.x对飞控硬件资源要求更高一些F4处理器的老飞控刷1.14后可能出现CPU负载过高的问题。所以选版本要看硬件H7系列飞控直接上1.14.3F4系列如果资源紧张可以留在1.12.3。提示不要用1.13.0到1.13.2这几个版本RTK相关有几个已知bug具体表现在EKF2偶尔会把RTK观测值标记为无效导致定位跳变。1.13.3修复了但既然有1.14.3没必要停在1.13。3.2 固件编译与烧录的实操细节如果你用的是官方发布的稳定版固件QGC里直接刷就行。但如果你需要改参数默认值或者做二次开发就得自己编译。编译环境推荐Ubuntu 22.04WSL2也可以但USB设备直通偶尔会有问题。# 克隆PX4源码指定1.14.3分支 git clone https://github.com/PX4/PX4-Autopilot.git --recursive cd PX4-Autopilot git checkout v1.14.3 git submodule update --init --recursive # 安装依赖 bash Tools/setup/ubuntu.sh # 编译Pixhawk 6C目标 make px4_fmu-v6c_default编译完成后用QGC的自定义固件烧录功能刷入。注意烧录前备份参数刷完固件后参数会重置。3.3 固件版本与QGC版本的匹配QGC的版本也要注意。4.2.x系列对PX4 1.14的RTK状态显示支持最好4.3.x有一些界面变化但功能没问题。我遇到过用QGC 4.1.x连接PX4 1.14.3时RTK状态栏不显示差分龄期的问题升级QGC就好了。PX4固件版本推荐QGC版本RTK支持状态1.12.34.1.7以上基本可用收敛慢1.13.34.2.0以上稳定修复了跳变bug1.14.34.2.4以上最优收敛快恢复逻辑好4. EKF2参数配置RTK融合的核心逻辑4.1 EKF2怎么用RTK数据EKF2是PX4的状态估计器它把IMU、气压计、磁力计、GPS、光流、视觉等传感器的数据融合在一起输出无人机的位置、速度、姿态估计。RTK数据进入EKF2后不是直接替换GPS位置而是作为位置观测值参与融合。这里有个关键参数EKF2_GPS_CTRL。这个参数决定了EKF2如何使用GPS数据。默认值是3使用3D速度2D位置对于RTK应用建议设为7使用3D速度3D位置偏航。但注意偏航观测需要双天线RTK才能提供单天线模块不要开偏航。EKF2_GPS_P_NOISE控制GPS位置观测的噪声方差。RTK固定解时位置精度高这个值可以设小一点比如0.1让EKF2更信任RTK数据。浮点解时可以适当放大到0.5到1.0避免错误观测值污染状态估计。4.2 关键参数逐项拆解# GPS控制模式 param set EKF2_GPS_CTRL 7 # GPS位置观测噪声米 param set EKF2_GPS_P_NOISE 0.1 # GPS速度观测噪声米/秒 param set EKF2_GPS_V_NOISE 0.3 # GPS高度观测噪声米 param set EKF2_GPS_P_GATE 5.0 # 是否使用GPS高度 param set EKF2_GPS_P_NOISE 0.1 # 差分龄期超时阈值毫秒 param set EKF2_GPS_DELAY 0EKF2_GPS_DELAY这个参数容易被忽略。它表示GPS数据从测量到进入EKF2的延迟。RTK模块的差分龄期会引入额外延迟如果这个值设得不准EKF2的位置估计会出现滞后振荡。一般F9P模块设0到10毫秒具体值可以通过日志分析确定。4.3 RTK固定解与浮点解的切换策略EKF2内部会根据RTK的固定状态自动调整观测噪声。固定解时使用EKF2_GPS_P_NOISE浮点解时会自动放大噪声。但如果你发现浮点解时定位漂移严重可以手动设置EKF2_GPS_P_NOISE为一个较大的值等固定解后再通过参数调整。实操心得我通常会在起飞前等RTK进入固定解后再解锁。如果一直停在浮点解先检查差分龄期和共视卫星数不要强行起飞。浮点解下水平误差可能到分米级垂直误差更大对于精准作业来说不够用。5. QGroundControl里的RTK状态监控与设置5.1 在哪里看RTK状态QGC连接飞控后在“GPS状态”页面可以看到当前定位类型。RTK固定解显示为“RTK Fixed”浮点解显示为“RTK Float”单点定位显示为“3D Fix”。同时可以看到卫星数、差分龄期、水平/垂直精度估计。差分龄期Age of Differential是重点关注的指标。它表示最近一次收到基准站修正数据到现在的时间。龄期越小越好一般要求小于2秒最好在1秒以内。如果龄期持续增大说明数据链路有问题——可能是数传延迟、丢包或者基准站和移动站之间的通信中断。5.2 数据链路配置RTK修正数据的传输方式有几种数传电台、4G网络、WiFi。数传电台延迟低但距离受限4G网络覆盖广但延迟不稳定。我常用的是数传电台方案基准站通过电台广播修正数据移动站接收。在QGC里需要设置MAVLink消息转发把RTK修正数据从地面站转发到飞控。具体在“应用设置”-“MAVLink”里勾选“转发RTCM消息”。如果你用的是串口直连的RTK模块模块自己接收基准站数据那就不需要QGC转发。5.3 用QGC控制台排查RTK问题QGC的MAVLink Console是个好东西可以直接在飞控上执行命令查看状态。# 查看GPS原始信息 gps status # 查看EKF2状态 ekf2 status # 查看传感器融合详情 listener sensor_gps # 查看RTK状态 listener rtk_statuslistener rtk_status会输出当前RTK的固定状态、差分龄期、基线长度等信息。如果差分龄期一直很大检查基准站数据是否正常发送。6. 差分龄期计算与常见故障排查6.1 差分龄期到底怎么算的差分龄期 当前时间 - 基准站观测时间。基准站每秒或更高频率计算一次修正量打上时间戳发给移动站。移动站收到后用当前时间减去时间戳就是龄期。这个过程中涉及基准站处理延迟、传输延迟、移动站处理延迟。如果龄期突然跳变或者持续增大可能的原因有基准站数据中断、传输链路拥塞、移动站处理不过来。我遇到过数传电台波特率设太低导致RTK数据排队的情况把波特率从57600提到115200后龄期从3秒降到0.5秒。6.2 常见问题速查表现象可能原因排查方法解决措施RTK一直浮点解共视卫星不足查看卫星数调整天线位置等待更长时间差分龄期持续增大数据链路中断检查数传状态重启数传检查波特率固定解后频繁失锁多路径干扰查看环境远离建筑物更换天线位置EKF2位置跳变GPS观测噪声设太小查看日志增大EKF2_GPS_P_NOISEQGC不显示RTK状态QGC版本不匹配检查版本升级QGC到4.2.4以上串口无数据波特率不匹配用示波器或串口助手统一模块和飞控波特率6.3 日志分析定位RTK问题PX4的飞行日志里记录了GPS和EKF2的详细数据。用Flight Review或者PlotJuggler打开ulog文件重点看几个话题sensor_gps里的fix_type和differential_ageekf2_innovations里的位置新息。如果fix_type在3和4之间频繁跳变3是3D Fix4是RTK Float5是RTK Fixed说明RTK解算不稳定。如果differential_age经常超过2000毫秒说明数据链路有问题。如果ekf2_innovations里的位置新息很大说明EKF2对GPS观测值不信任需要检查噪声参数。避坑技巧日志分析时注意时间同步问题。如果飞控没有接GPS的PPS信号日志时间戳可能和实际时间有偏差分析差分龄期时要注意。7. 实操全流程从零到固定解7.1 基准站架设与配置基准站有两种模式已知坐标模式和自架站模式。已知坐标模式需要输入基准站的精确坐标通过静态测量获得自架站模式则让基准站自己估算坐标精度稍差但方便。架设步骤选开阔位置架高三脚架安装天线连接RTK模块和数传电台供电。基准站模块通过串口配置为基站模式设置输出RTCM消息。常见RTCM消息类型有1005基站坐标、1074GPS观测值、1084GLONASS观测值、1094Galileo观测值、1124北斗观测值。确保这些消息都开启。7.2 移动站配置与飞控连接移动站模块配置为Rover模式波特率与飞控GPS口一致。接线确认TX/RX交叉。上电后在QGC里检查GPS状态等待固定解。首次固定可能需要30秒到2分钟取决于卫星环境和基线长度。7.3 飞行验证与精度检查固定解后不要急着飞任务先做地面验证。把无人机放在已知点上对比QGC显示的位置和实际坐标。水平误差应该在2厘米以内垂直误差在5厘米以内。如果误差偏大检查天线相位中心偏移参数是否设置正确。飞行验证时先做简单航线观察日志里的位置精度估计。RTK固定解下EKF2的水平位置标准差应该在0.05米以下。8. 我踩过的那些坑和最后的小技巧第一个大坑是固件版本。我最开始用1.12.3配F9P固定解要等将近两分钟换了1.14.3之后缩短到40秒左右。但1.14.3在F4飞控上CPU负载确实高后来换了H7飞控才彻底舒服。第二个坑是串口映射。PX4的串口编号和物理接口的对应关系在不同飞控上不一样我对着文档查了半天才发现GPS1在某个飞控上映射的是/dev/ttyS0而不是/dev/ttyS3。最靠谱的方法是在QGC控制台里用dmesg看启动日志找到GPS对应的串口设备。第三个坑是差分龄期。有次数传电台天线没拧紧差分龄期一直在2到3秒之间跳固定解时有时无。后来换了根好天线龄期稳定在0.3秒固定解再也没掉过。最后分享一个小技巧如果你经常在同一个区域作业可以把基准站坐标固定下来用已知坐标模式。这样每次架站不需要等待自解算开机就能输出修正数据移动站固定解速度会快很多。基准站坐标可以通过长时间静态观测加后处理获得精度能到毫米级。另外EKF2的EKF2_GPS_P_NOISE不要设得太激进。我试过设0.05结果RTK偶尔的异常观测值直接把EKF2带偏了飞机在空中画了个大圈。后来改回0.1稳定多了。RTK虽然准但也不是百分百可靠给EKF2留一点容错空间是必要的。
返回列表