6. 协议综述

本文范围:Bridge 协议谱系、业界方案、选型依据与 Autonomy 能力边界。
架构与实现见 §2;契约见 §3;插件见 §4 gRPC · §5 MQTT


6.1 综述定位

维度

本文

其他文档

分层、数据流、Handler 接线

不展开

§2 架构

Proto 字段、Topic 对照

摘要 + 链接

§3 · rpcs/ · mqtt/04

async_grpc / Mosquitto 实现

摘要 + 链接

grpc/ · mqtt/

协议分类、业界对比、选型

本文

建议阅读顺序

角色

路径

选型 / 集成

§6.2 → §6.7 决策树

协议设计

§6.3 → §6.5 设计原则 → §6.6 工程约束

背景调研

§6.4 → §6.8 参考


6.2 Autonomy 能力边界

Bridge 位于机载栈(Localization / Planning / Control / Navigator)与场外系统(App、云平台、调度)之间,对标 rosbridge_suitefoxglove_bridge 及 Apollo / Autoware 的对外 API 层。

Offboard ── gRPC / MQTT ──► autonomy/bridge ──► Navigator / Exploration
Onboard  ◄── autolink / commsg ────────────────────────────────────────┘

能力

状态

说明

gRPC + Protobuf 契约

AutonomyService 13 RPC 已定义

async_grpc 服务端骨架

2 Handler 已注册(Nav / Expl)

其余 Command / Query / System

Proto 有,未 RegisterHandler

BotStates / BotEvents Stream

vehicle_msgs 已定义,Handler 未注册

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

Send*Command(Nav/Expl/Follow/Dock/Map)

Bidirectional Streaming

SendTeleopCommand

Empty → Stream

ReceiveBotStates / ReceiveBotEvents

Unary

Get* / EmergencyStop / CancelAllTasks

6.3.3 序列化

格式

Bridge 使用

Protobuf

gRPC 主格式

JSON

MQTT 载荷备选

commsg / ROS msg

机载内部,不经 Bridge 暴露


6.4 业界方案

方案

传输

特点

与 Autonomy 差异

rosbridge_suite

WebSocket + JSON

浏览器友好

弱类型、性能一般

foxglove_bridge

WebSocket + Protobuf

可视化集成

偏 Foxglove 生态

Apollo Cyber RT

gRPC / HTTP Gateway

多模块 DAG

async_grpc 同源参考

Autoware AD API

REST / WebSocket

标准化对外 API

ROS 2 绑定

Nav2 simple_commander

进程内 Python

非网络 Bridge

无跨网契约

Autonomy 选型:gRPC 强类型 RPC 为主,MQTT Pub/Sub 为辅;与 Navigator 解耦,独立 autonomy/bridge 模块。


6.5 设计原则

命令 vs 推送:外部接口区分有副作用的 CommandNAV_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)

安全

默认 127.0.0.1;生产 mTLS + 反向代理;timestamp + nonce 防重放

可观测

bridge_rpc_total / bridge_rpc_latency_ms / bridge_active_streams / bridge_fsm_reject_total

配置与安全实践见 mqtt/02 · §4 gRPC


6.7 选型决策树

需要浏览器直连?
├── 是 → WebSocket(rosbridge)或 gRPC-Web
└── 否 → 强类型 RPC?
         ├── 是 → gRPC + Protobuf ✅(Autonomy 默认)
         └── 否 → IoT 广播 / 弱网?
                  ├── 是 → MQTT ✅(规划)
                  └── 否 → REST / 自定义 TCP

场景

推荐

备注

局域网移动端

gRPC + TLS

host:0.0.0.0:5005

云端调度

gRPC Stream

uplink_server_address

多机监控

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

接入 system::Autonomy

参考

与 Bridge 关系

rosbridge (IROS 2017)

WebSocket 互操作架构

gRPC on HTTP/2

线程池与多路复用

Cartographer Cloud

async_grpc / uplink

Apollo Cyber RT

高性能中间件 + Gateway


导航← §5 MQTT · §0 指南