上一篇我们讲了:

《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:地图坐标 X
  • y:地图坐标 Y
  • theta:机器人朝向角

所以:

RTK 解决的是位置问题

但:机器人还需要朝向问题

这也是为什么 RTK 通常会结合:

  • IMU
  • 电子罗盘
  • 双天线 RTK
  • 编码器
  • 轮速计

一起使用。


四、完整定位系统长什么样?

真实机器人系统中,

完整链路通常是:

RTK 模块
↓
NMEA 定位数据
↓
定位数据解析
↓
定位质量判断
↓
坐标转换
↓
地图坐标
↓
电子围栏判断
↓
路径规划
↓
运动控制
↓
机器人执行

如果有多传感器融合,

还会加入:

IMU
编码器
轮速计
SLAM
激光雷达

最终输出:

机器人当前位姿 Pose

五、第一层:RTK 数据接入层

这一层就是前面第六篇讲的内容。

RTK 模块通过:

  • 串口
  • 蓝牙
  • USB
  • TCP

不断输出:

NMEA 数据

例如:

$GNGGA,...
$GNRMC,...

上层系统负责:

读取数据流
解析 NMEA
提取经纬度
提取 Fix 状态
提取卫星数量
提取 HDOP

这一层的目标是:

拿到原始定位数据


六、第二层:定位质量判断层

拿到经纬度之后,不能直接用。

必须判断:

这条定位数据是否可信

因为 RTK 会出现:

  • 无定位
  • 普通 GPS
  • Float
  • Fix
  • 跳点
  • 数据超时
  • 卫星数量不足

所以系统必须做过滤。


常见判断指标

通常包括:

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
↓
RobotController

RtkDataSource

负责:

串口 / 蓝牙 / 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 工程实战系列》

  1. 为什么机器人能厘米级定位?——一篇讲透 GPS、北斗 与 RTK
  2. RTK 为什么比 GPS 准?——差分定位原理详解
  3. 机器人为什么会“漂”?——RTK 漂移问题详解
  4. Point-In-Polygon 是什么?——机器人电子围栏核心算法
  5. NMEA、RTCM、NTRIP 到底是什么?——RTK 数据链路详解
  6. Android / IoT 如何接入 RTK 模块?——串口、蓝牙、TCP 工程实践
  7. RTK + 地图 + 机器人:完整定位系统架构解析
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐