第七篇:RTK + 地图 + 机器人:完整定位系统架构解析

📅 2026/7/13 15:17:51
第七篇:RTK + 地图 + 机器人:完整定位系统架构解析
上一篇我们讲了《Android / IoT 如何接入 RTK 模块——串口、蓝牙、TCP 工程实践》很多人已经知道RTK 模块会输出 NMEA Android / IoT 可以通过串口、蓝牙、TCP 接收数据 上层系统需要解析经纬度、Fix 状态、卫星数量、HDOP但问题来了拿到 RTK 经纬度之后机器人就能正常跑了吗答案是还远远不够因为真实机器人需要的不是单纯的经度 纬度而是我在哪里 我朝哪个方向 我有没有越界 我该往哪里走 我能不能继续运动所以RTK 只是定位系统的入口。真正的机器人定位系统一定是RTK 地图 围栏 路径规划 控制系统共同工作。今天这一篇我们就从工程视角真正讲透RTK 在机器人中的完整系统架构一、先理解一个核心问题很多人第一次做机器人定位时容易把问题想简单。他们以为RTK 输出经纬度 ↓ 地图上显示一个点 ↓ 机器人就能跑但真实工程不是这样。因为机器人真正需要的是可用于控制的位姿也就是x y heading speed status而不仅仅是latitude longitude二、为什么经纬度不能直接给机器人用因为经纬度是地理坐标。例如经度120.123456 纬度31.123456它表示的是地球上的位置但机器人运动控制更关心向前多少米 向左多少米 距离边界多少米 距离目标点多少米这些都是平面坐标问题所以在真实工程中通常需要把经纬度转换成局部地图坐标例如x 12.5m y 8.3m这样机器人才能真正使用。三、机器人最终需要的不是 Location而是 Pose这是一个非常关键的工程认知。普通定位系统关心Location也就是在哪里但机器人系统关心Pose也就是在哪里 朝向哪里通常表示为Pose (x, y, theta)其中x地图坐标 Xy地图坐标 Ytheta机器人朝向角所以RTK 解决的是位置问题但机器人还需要朝向问题这也是为什么 RTK 通常会结合IMU电子罗盘双天线 RTK编码器轮速计一起使用。四、完整定位系统长什么样真实机器人系统中完整链路通常是RTK 模块 ↓ NMEA 定位数据 ↓ 定位数据解析 ↓ 定位质量判断 ↓ 坐标转换 ↓ 地图坐标 ↓ 电子围栏判断 ↓ 路径规划 ↓ 运动控制 ↓ 机器人执行如果有多传感器融合还会加入IMU 编码器 轮速计 SLAM 激光雷达最终输出机器人当前位姿 Pose五、第一层RTK 数据接入层这一层就是前面第六篇讲的内容。RTK 模块通过串口蓝牙USBTCP不断输出NMEA 数据例如$GNGGA,... $GNRMC,...上层系统负责读取数据流 解析 NMEA 提取经纬度 提取 Fix 状态 提取卫星数量 提取 HDOP这一层的目标是拿到原始定位数据六、第二层定位质量判断层拿到经纬度之后不能直接用。必须判断这条定位数据是否可信因为 RTK 会出现无定位普通 GPSFloatFix跳点数据超时卫星数量不足所以系统必须做过滤。常见判断指标通常包括Fix 状态 卫星数量 HDOP 时间戳 位置连续性 速度是否异常例如如果当前状态是RTK_FIX说明可信度高。如果是RTK_FLOAT说明精度下降。如果是GPS NONE就不能作为高精度定位使用。七、第三层坐标转换层这是很多 Android / IoT 开发容易忽略的地方。RTK 输出的是WGS84 经纬度但地图系统和机器人控制通常需要平面坐标例如x y所以需要坐标转换。常见坐标体系工程里经常会遇到WGS84 GCJ-02 BD-09 UTM ENU 局部地图坐标简单理解WGS84卫星定位原始坐标GCJ-02国内地图常用坐标BD-09百度地图坐标ENU / 局部坐标机器人内部使用的平面坐标八、为什么机器人更适合用局部坐标因为机器人运动控制通常关心的是距离 角度 方向 边界 路径例如目标点在前方 3 米 边界在左侧 0.5 米 机器人需要右转 15 度这些都不适合直接用经纬度算。所以真实机器人里通常会定义一个地图原点originLat originLng然后把 RTK 经纬度转换成x y最终机器人内部使用局部地图坐标系九、第四层地图系统定位数据进入地图之后地图系统要负责显示机器人位置 管理边界 管理禁区 管理路径点 管理任务区域比如割草机器人地图中可能包含草坪边界禁区充电桩位置起点路径已完成区域未完成区域所以RTK 只是告诉系统机器人在哪里地图系统还要知道这个位置属于哪里十、第五层电子围栏判断第四篇我们讲过电子围栏的核心是Point-In-Polygon也就是判断机器人当前位置是否在多边形区域内在完整系统中它通常位于定位系统 ↓ 地图系统 ↓ 电子围栏判断 ↓ 运动控制如果机器人当前位置不在允许区域内系统就要停止回退告警重新规划所以RTK 负责定位PIP 负责判断是否越界十一、第六层路径规划当系统知道机器人当前位置后下一步就是规划机器人怎么走比如从当前位置到目标点沿边界行走覆盖整个草坪绕开禁区返回充电桩路径规划需要不断读取当前位姿 目标点 地图边界 障碍物 任务状态然后输出下一步运动方向所以定位数据是路径规划的基础。没有稳定定位路径规划也无法稳定。十二、第七层运动控制路径规划告诉机器人应该往哪里走但真正执行动作的是运动控制系统它会控制电机轮子转向速度刹车例如向前 0.5m 右转 20° 减速 停止 回退这时候定位系统会持续反馈机器人当前是否到达目标点 有没有偏离路径 有没有越界形成一个闭环。十三、完整闭环是什么机器人不是一次性拿到位置就结束。而是一个实时闭环获取当前位置 ↓ 判断定位质量 ↓ 更新地图位置 ↓ 判断是否越界 ↓ 计算下一步路径 ↓ 控制机器人运动 ↓ 再次获取当前位置这个过程会一直循环。所以机器人定位系统是实时系统不是普通 App 里显示一个定位点那么简单。十四、为什么 RTK 地图容易出问题真实工程中很多问题并不是 RTK 单独导致的。而是RTK、地图、坐标系、控制系统之间没对齐常见问题包括1. 坐标系不一致RTK 是WGS84。地图可能是 GCJ-02。机器人内部又是局部坐标。如果没转换对地图上的点就会偏。2. 地图原点错误如果局部坐标原点设置错了所有点都会整体偏移。3. 朝向不准RTK 只能提供位置。如果 heading 不准机器人会出现位置对了 但方向错了最终路径还是会偏。4. 定位延迟如果 RTK 数据延迟机器人看到的是过去的位置而不是真实当前位置。这会导致控制滞后。5. 跳点没有过滤如果 RTK 突然跳出 10 米地图直接使用机器人可能立刻误判越界。所以必须做跳点过滤。十五、为什么需要 RTK IMU 融合RTK 的优点是全局准但缺点是容易受遮挡和网络影响IMU 的优点是短时连续 响应快但缺点是时间长了会累积误差所以二者结合RTK 负责长期校准 IMU 负责短时稳定这就是工程里常说的多传感器融合十六、真实机器人里的定位架构真实工程里完整架构可能是RTK 模块 IMU 编码器 轮速计 ↓ 定位融合模块 ↓ Pose(x, y, theta) ↓ 地图系统 ↓ 电子围栏 ↓ 路径规划 ↓ 运动控制 ↓ 机器人执行这个架构才是机器人真正需要的。不是单纯拿一个经纬度十七、Android / IoT 里怎么设计这套架构如果上层是 Android可以这样分层RtkDataSource ↓ RtkRepository ↓ LocationEngine ↓ MapEngine ↓ FenceEngine ↓ NavigationEngine ↓ RobotControllerRtkDataSource负责串口 / 蓝牙 / TCP 数据读取RtkRepository负责NMEA 解析 状态维护 异常处理LocationEngine负责定位质量判断 跳点过滤 数据超时判断 坐标转换MapEngine负责地图坐标 边界 禁区 路径点FenceEngine负责Point-In-Polygon 判断 越界检测NavigationEngine负责路径规划 目标点计算 任务状态RobotController负责运动控制 停止 转向 速度控制十八、推荐的数据模型上层不应该直接传 NMEA 字符串。而应该传统一模型。例如data class RobotPose( val x: Double, val y: Double, val heading: Double, val speed: Double, val fixType: FixType, val satelliteCount: Int, val hdop: Double?, val timestamp: Long, val isReliable: Boolean )这样地图、围栏、路径规划都可以统一使用。十九、定位状态应该怎么设计真实工程中定位状态必须明确。例如enum class LocationStatus { NONE, GPS, RTK_FLOAT, RTK_FIX, DEGRADED, LOST }这样系统才能根据状态做决策。例如RTK_FIX → 正常运行 RTK_FLOAT → 降速运行 / 提醒风险 LOST → 停止运动 / 等待恢复不能所有状态都当成正常定位。二十、机器人遇到定位异常怎么办这是工程里非常关键的一点。机器人不能盲目相信定位。如果定位异常系统应该有降级策略。常见策略1. RTK Fix 正常机器人正常运行。2. RTK Float可以降速缩小动作范围提醒定位精度下降结合 IMU 短时运行3. 无定位应该停止运动等待恢复告警进入安全模式4. 跳点异常应该丢弃异常点使用上一帧可信位置等待连续稳定数据二十一、为什么这是系统架构问题很多人以为RTK 问题就是模块问题其实不是。真实工程中RTK 定位稳定性取决于整个系统硬件 天线 差分 网络 协议 解析 坐标转换 地图 围栏 规划 控制任何一层出问题机器人都会表现为定位不准 路径偏移 越界 跳点 回充失败所以RTK 不是单点技术而是机器人定位系统工程二十二、面试怎么回答如果面试官问“RTK 在机器人系统里是怎么工作的”推荐回答标准答案面试版RTK 在机器人系统中通常不是单独使用的。它首先通过串口、蓝牙或 TCP 输出 NMEA 定位数据。上层系统解析经纬度、Fix 状态、卫星数量、HDOP 等信息。然后进行定位质量判断过滤跳点和过期数据。接着把 WGS84 经纬度转换成机器人内部使用的局部地图坐标。地图系统根据当前位置更新机器人位置电子围栏通过 Point-In-Polygon 判断是否越界。路径规划模块根据当前位姿和目标点计算下一步路径。运动控制模块再控制机器人执行。真实工程中RTK 通常还会融合 IMU、编码器、轮速计或 SLAM最终输出稳定的机器人位姿Pose(x, y, theta)所以 RTK 只是定位系统的一部分完整机器人定位系统本质上是RTK 传感器融合 地图 围栏 规划 控制二十三、总结一句话总结RTK 负责“知道机器人在哪里”地图负责“知道环境是什么样”电子围栏负责“判断能不能过去”路径规划负责“决定怎么走”控制系统负责“让机器人真正动起来”所以真正的机器人定位系统不是RTK 输出经纬度而是RTK 坐标转换 地图系统 电子围栏 路径规划 运动控制共同组成的工程闭环。二十四、系列最终总结到这里《RTK / GNSS 工程实战系列》基本就形成闭环了。从最开始的为什么机器人能厘米级定位到RTK 为什么比 GPS 准再到为什么 RTK 会漂再到电子围栏 数据链路 Android / IoT 接入 完整系统架构这一整套下来你会发现RTK 并不是一个孤立知识点。它连接的是GNSS 差分定位 数据协议 Android / IoT 地图系统 机器人控制 多传感器融合所以最终目标不是成为GNSS 算法专家而是成为懂 RTK 系统的 Android / IoT / 机器人工程师这才是这个系列真正的定位。《RTK / GNSS 工程实战系列》为什么机器人能厘米级定位——一篇讲透 GPS、北斗 与 RTKRTK 为什么比 GPS 准——差分定位原理详解机器人为什么会“漂”——RTK 漂移问题详解Point-In-Polygon 是什么——机器人电子围栏核心算法NMEA、RTCM、NTRIP 到底是什么——RTK 数据链路详解Android / IoT 如何接入 RTK 模块——串口、蓝牙、TCP 工程实践RTK 地图 机器人完整定位系统架构解析