6. 协议综述
6.1 综述定位
维度 |
本文 |
其他文档 |
|---|---|---|
分层、数据流、Handler 接线 |
不展开 |
|
Proto 字段、Topic 对照 |
摘要 + 链接 |
|
async_grpc / Mosquitto 实现 |
摘要 + 链接 |
|
协议分类、业界对比、选型 |
本文 |
— |
建议阅读顺序
角色 |
路径 |
|---|---|
选型 / 集成 |
§6.2 → §6.7 决策树 |
协议设计 |
§6.3 → §6.5 设计原则 → §6.6 工程约束 |
背景调研 |
§6.4 → §6.8 参考 |
6.2 Autonomy 能力边界
Bridge 位于机载栈(Localization / Planning / Control / Navigator)与场外系统(App、云平台、调度)之间,对标 rosbridge_suite、foxglove_bridge 及 Apollo / Autoware 的对外 API 层。
Offboard ── gRPC / MQTT ──► autonomy/bridge ──► Navigator / Exploration
Onboard ◄── autolink / commsg ────────────────────────────────────────┘
能力 |
状态 |
说明 |
|---|---|---|
gRPC + Protobuf 契约 |
✅ |
|
async_grpc 服务端骨架 |
✅ |
2 Handler 已注册(Nav / Expl) |
其余 Command / Query / System |
❌ |
Proto 有,未 RegisterHandler |
BotStates / BotEvents Stream |
❌ |
|
MQTT(libmosquitto 客户端) |
❌ |
空壳 |
TLS / 认证 / uplink |
⏳ |
Proto 预留字段 |
实现明细见 grpc/07 §7.1(上表为能力边界摘要)。
6.3 协议谱系
6.3.1 按层次
层次 |
代表 |
Autonomy |
|---|---|---|
应用 RPC |
gRPC, REST, WebSocket |
✅ gRPC |
消息中间件 |
MQTT, AMQP, Kafka |
⏳ MQTT |
机器人中间件 |
DDS (ROS 2), Cyber RT |
内部 autolink |
传输 |
TCP / HTTP/2 / QUIC |
gRPC → HTTP/2 → TCP |
6.3.2 按交互模式
模式 |
Bridge 映射 |
|---|---|
Server Streaming |
|
Bidirectional Streaming |
|
Empty → Stream |
|
Unary |
|
6.3.3 序列化
格式 |
Bridge 使用 |
|---|---|
Protobuf |
gRPC 主格式 |
JSON |
MQTT 载荷备选 |
commsg / ROS msg |
机载内部,不经 Bridge 暴露 |
6.4 业界方案
方案 |
传输 |
特点 |
与 Autonomy 差异 |
|---|---|---|---|
|
WebSocket + JSON |
浏览器友好 |
弱类型、性能一般 |
|
WebSocket + Protobuf |
可视化集成 |
偏 Foxglove 生态 |
Apollo Cyber RT |
gRPC / HTTP Gateway |
多模块 DAG |
async_grpc 同源参考 |
Autoware AD API |
REST / WebSocket |
标准化对外 API |
ROS 2 绑定 |
Nav2 |
进程内 Python |
非网络 Bridge |
无跨网契约 |
Autonomy 选型:gRPC 强类型 RPC 为主,MQTT Pub/Sub 为辅;与 Navigator 解耦,独立 autonomy/bridge 模块。
6.5 设计原则
命令 vs 推送:外部接口区分有副作用的 Command(NAV_CMD_*,须 FSM)、无副作用的 Query(可重试)、单向 Event(Stream 推送)。当前 Proto 以命令 + Stream 为主,近似 CQRS。
幂等:弱网重发时建议 cmd_id + 服务端滑动窗口去重(建议保留 60 s)。
多点导航:repeated PoseStamped goals + NavigationMode(单点 / 多点巡航);执行由 Navigator 封装,Bridge 透传。
6.6 工程约束
主题 |
要点 |
|---|---|
延迟 |
遥控端到端 < 200 ms;导航启动 < 2 s(含 RTT + FSM + Navigator) |
背压 |
Stream 推送速率超过客户端消费时降采样或断开慢连接,防 OOM |
重连 |
gRPC 客户端指数退避(\(T_0 \cdot 2^k\),上限约 30 s) |
安全 |
默认 |
可观测 |
|
6.7 选型决策树
需要浏览器直连?
├── 是 → WebSocket(rosbridge)或 gRPC-Web
└── 否 → 强类型 RPC?
├── 是 → gRPC + Protobuf ✅(Autonomy 默认)
└── 否 → IoT 广播 / 弱网?
├── 是 → MQTT ✅(规划)
└── 否 → REST / 自定义 TCP
场景 |
推荐 |
备注 |
|---|---|---|
局域网移动端 |
gRPC + TLS |
|
云端调度 |
gRPC Stream |
|
多机监控 |
MQTT |
QoS 0 状态 + QoS 1 事件 |
调试原型 |
gRPC localhost |
当前默认硬编码待修复 |
弱网 |
MQTT |
低频 + 差分状态 |
6.8 路线与参考
阶段 |
目标 |
|---|---|
v0.1 |
gRPC 骨架 + Proto |
v0.2 |
Handler 接线 Navigator |
v0.3 |
BotStates Stream |
v0.4 |
MQTT 插件 |
v0.5 |
TLS / 认证 / uplink |
v1.0 |
接入 |
参考 |
与 Bridge 关系 |
|---|---|
WebSocket 互操作架构 |
|
线程池与多路复用 |
|
async_grpc / uplink |
|
高性能中间件 + Gateway |