第162篇 GPS/RTK定位原理——室外机器人的定位方案
上篇讲了力/力矩传感器——机器人触觉的实现方案从应变片原理到六维力传感器解耦再到力控策略和ROS2集成。今天从室内转到室外讲GPS和RTK定位原理——这是室外移动机器人无人车、农业机器人、物流AGV实现精确定位的核心技术。面试时候被问室外机器人怎么定位很多人会说用GPS。但面试官想听的是更工程化的内容GPS定位精度到底是多少RTK是怎么把精度从米级提升到厘米级的NMEA协议怎么解析在ROS2中怎么集成GPS模块GPS信号丢失了怎么办GPS定位原理GPSGlobal Positioning System的基本原理是距离交会。每颗GPS卫星不断广播自己的位置和时间信息接收器通过测量信号传播时间计算出到每颗卫星的距离然后用三球交会确定自己的三维位置。关键公式很简单距离 光速 × 传播时间。但实际中传播时间的测量受到很多因素影响——卫星钟差、接收器钟差、电离层延迟、对流层延迟、多径效应。这些误差叠加在一起导致标准GPS的定位精度只有3-10米。import numpy as np def gps_pseudorange_position(satellite_positions, pseudoranges): GPS伪距定位最小二乘法 satellite_positions: Nx3数组每颗卫星的ECEF坐标 pseudoranges: N维向量到每颗卫星的伪距 至少需要4颗卫星3个位置未知数1个钟差未知数 n_sats len(pseudoranges) if n_sats 4: raise ValueError(至少需要4颗卫星) # 初始估计地球中心 x np.array([0.0, 0.0, 0.0, 0.0]) # [x, y, z, dt] for iteration in range(10): H np.zeros((n_sats, 4)) # 设计矩阵 residual np.zeros(n_sats) for i in range(n_sats): dx satellite_positions[i] - x[:3] geometric_range np.linalg.norm(dx) predicted_range geometric_range x[3] # 加上钟差 residual[i] pseudoranges[i] - predicted_range # 几何距离对位置的偏导数 H[i, :3] -dx / geometric_range H[i, 3] 1.0 # 对钟差的偏导 # 最小二乘更新 delta_x np.linalg.lstsq(H, residual, rcondNone)[0] x delta_x if np.linalg.norm(delta_x) 1e-6: break return x[:3], x[3] # 位置(ECEF), 钟差标准GPS的误差来源需要了解一下。电离层延迟2-8米是最大的误差源因为GPS信号穿过电离层时速度会变慢。对流层延迟0.5-2米次之。卫星轨道误差1-2米和卫星钟差1-2米也贡献了不少误差。多径效应信号被建筑物反射后到达接收器在城市环境中尤其严重可能导致几米甚至十几米的误差。还有一个很多人忽略的误差源卫星几何分布。DOPDilution of Precision精度衰减因子反映了卫星几何分布对定位精度的影响。如果可见卫星都集中在天空的一侧定位精度会很差HDOP可能到5-10。如果卫星均匀分布在天空各处精度就好HDOP接近1。选型GPS模块时要关注HDOP值——HDOP大于3的时候定位结果就不可靠了。GPS使用的坐标系是WGS84World Geodetic System 1984输出的位置是经纬度海拔。但机器人系统通常用的是局部平面坐标系比如UTM投影所以GPS数据需要经过坐标转换才能在导航中使用。这个转换在ROS2的navsat_transform_node中已经实现了但面试时候经常被问到原理。实际选型GPS模块时除了关注定位精度还要看更新频率5Hz/10Hz/20Hz、冷启动时间、天线增益这些参数。农业机器人一般用5Hz就够了但无人配送车至少需要10Hz才能保证高速运动时的定位平滑度。天线安装位置也有讲究——天线正上方不能有金属遮挡否则会影响卫星信号接收。工程上通常会把GPS天线装在机器人最高点并且使用有源天线来增强信号接收能力。这就是为什么标准GPS对机器人来说不够用。一辆自动驾驶车如果定位精度只有5米它根本不知道自己在哪条车道上。RTK基站部署实践RTK系统由基准站Base Station和流动站Rover组成。基准站固定在已知坐标的点上接收GPS信号后计算误差修正量通过无线电或网络发送给流动站。流动站用这些修正量来校正自己的定位结果从而实现厘米级精度。基准站的选址很重要。基准站天线要架设在开阔位置上方无遮挡远离反射面建筑物、水面。基准站的坐标精度直接影响流动站的精度所以基准站坐标要通过长时间静态观测或者已知控制点来确定。通信链路方面基准站和流动站之间需要实时传输修正数据。短距离几公里内可以用UHF电台延迟低、稳定。长距离可以用4G/5G网络通过NTRIP协议传输修正数据。但网络延迟不稳定时RTK初始化时间会变长甚至无法维持固定解。实际项目中建议用有线网络或者专用数传电台比公网更可靠。面试中怎么聊面试官问GPS/RTK定位按这个顺序回答先说GPS基本原理距离交会和误差来源电离层、对流层、多径再说RTK差分定位的原理基准站校正载波相位模糊度解算然后说NMEA协议解析和ROS2集成最后说GPS信号丢失的应对策略。如果面试官追问RTK的固定解和浮点解有什么区别你可以说载波相位模糊度是整数如果能正确解算出这个整数固定解定位精度就是厘米级。如果解算不出来只能用浮点数近似浮点解精度下降到分米级。固定解需要至少连续跟踪几秒的信号如果信号被遮挡导致卫星数不够就会退化到浮点解甚至失去定位。如果面试官追问GPS坐标怎么转换到机器人局部坐标系你可以说GPS输出的是WGS84经纬度需要投影到平面坐标系。常用的是UTM投影Universal Transverse Mercator把经纬度转换成米为单位的平面坐标。在ROS2中robot_localization包的navsat_transform_node可以自动完成这个转换——它接收NavSatFix消息输出UTM坐标系下的里程计。如果面试官追问有没有比RTK更好的方案你可以说RTK在开阔环境下精度最高厘米级但在城市环境中因为多径和信号遮挡表现会下降。这时候可以考虑RTK视觉定位融合——用视觉SLAM在GPS信号好的区域建图在GPS信号差的区域用视觉定位。这种方案在无人配送车领域用得越来越多。另外PPPPrecise Point Positioning技术也在发展它不需要基准站通过卫星播发的精密星历和钟差产品实现分米级定位适合大范围作业的场景。补充一个RTK调试的实用建议在正式部署之前先用RTK的原始数据做离线精度评估。记录一天的定位数据和已知坐标的参考点对比计算水平和垂直精度的统计值。很多厂家标称的精度是在理想条件下的实际在你的使用环境中可能差不少。提前做离线评估能帮你判断RTK方案是否满足需求避免上线后才发现精度不够。下一篇讲超声波与红外传感器——近距离避障的低成本方案。GPS解决的是我在哪的问题超声波和红外解决的是前面有没有障碍物的问题。如果这篇文章对你有帮助欢迎点赞、在看、转发三连。 你的支持是我持续更新的最大动力。「机器人软件开发面试·从入门到精通」连载系列上一篇第161篇 力/力矩传感器——机器人触觉的实现方案下一篇预告第163篇 超声波与红外传感器——近距离避障的低成本方案有任何问题欢迎评论区留言我会尽量回复。