一个机器人系统里,端侧计算单元需要把感知结果上传到云端做进一步推理,云端需要把控制指令下发到端侧,工程师的调试终端需要实时查看机器人状态。这些通信需求看起来相似,但对协议的要求其实完全不同。

有没有一种协议能同时满足所有需求?答案是没有。

MQTT、gRPC、WebSocket三种协议,各自解决了一组特定的通信问题。选错了协议,轻则延迟增加、带宽浪费,重则关键指令丢失、系统在弱网下彻底失联。这篇文章从每种协议的核心机制出发,帮你理清机器人端云通信的选型逻辑。

一、MQTT:为不可靠网络设计的轻量级通信

MQTT诞生于1999年,最初是为卫星遥测和工业传感器网络设计的。它的核心设计目标只有一个:在低带宽、不稳定网络环境下,用最小的开销完成可靠通信。

1.1 发布-订阅模型与Broker

MQTT采用发布-订阅模式。发布者(Publisher)把消息发到一个叫Broker的中间服务器,订阅者(Subscriber)从Broker接收消息。发布者和订阅者互不知道对方的存在,它们只通过Topic(主题)来匹配。

这个架构对机器人系统有一个天然优势:设备不需要知道对方在哪里。 机器人A只需要把数据发布到robot/fleet/status这个Topic,云端服务器、其他机器人、调试终端都可以订阅这个Topic。新增一个订阅者时,不需要修改任何发布者的代码。

1.2 QoS等级:可靠性不是一个开关

MQTT最核心的设计是QoS(服务质量)等级,它让开发者可以为不同类型的数据选择不同的可靠性级别。

QoS 0:最多一次。 消息发出后不等待确认,可能丢失。适合高频传感器数据——偶尔丢一帧IMU数据,比延迟一帧IMU数据更容易接受。

QoS 1:至少一次。 消息至少送达一次,但可能重复。适合大多数遥测数据——重复一条温度读数不会有严重后果,但漏掉一条可能影响决策。

QoS 2:恰好一次。 通过四次握手确保消息不丢失、不重复。适合控制指令和事务性操作——一条“打开阀门”的指令如果重复执行两次,后果可能很严重。

对机器人系统来说,QoS的选择直接影响通信开销。QoS 2的握手过程消耗的时间和带宽明显高于QoS 0和1。在实践中,一个常见的做法是:传感器数据用QoS 0或1,控制指令用QoS 1或2。

1.3 Topic通配符:让订阅变灵活

MQTT的Topic采用层级结构,用斜杠分隔,比如robot/A/position和robot/B/position。通配符让订阅者可以一次订阅多个Topic。

单层通配符+ 替代一个层级。robot/+/position可以匹配robot/A/position和robot/B/position,但不能匹配robot/A/sensor/position。

多层通配符# 替代多个层级,且只能放在末尾。robot/#可以匹配所有以robot/开头的Topic。

在多机器人系统中,通配符的价值很明显。一个调度中心可以用robot/+/status订阅所有机器人的状态,同时用robot/A/cmd向特定机器人发送指令。

1.4 MQTT在机器人场景中的适用边界

MQTT适合的场景很明确:低带宽、不可靠网络、多设备、以遥测和控制指令为主。

一个典型的例子是农业机器人。田间网络通常只有4G覆盖,带宽有限且不稳定。机器人需要把位置、电量、作业状态上传到云端,同时接收启停、调速、路径更新等指令。MQTT的轻量级头部(最小2字节)、QoS等级和断线重连机制,正好匹配这类场景。

但MQTT不适合的场景也很明确:需要低延迟、高吞吐量、或者双向流式通信的场景。 MQTT的消息需要经过Broker中转,这增加了一跳延迟。对于需要端到端低延迟的实时控制场景,Broker的中转会成为瓶颈。

二、gRPC:为低延迟微服务通信而生

gRPC来自Google,它的设计目标与MQTT完全不同:在可靠的网络环境下,实现最高效的RPC(远程过程调用)。

2.1 HTTP/2多路复用:消除队头阻塞

gRPC基于HTTP/2构建,这是它与传统REST API最大的区别。

HTTP/1.1中,同一个TCP连接上,请求必须串行处理——一个请求的响应返回之前,下一个请求不能发出。这叫“队头阻塞”(Head-of-Line Blocking)。对于需要同时发送多个指令的机器人系统来说,这是致命的。

HTTP/2允许在单个TCP连接上同时传输多个请求和响应流。这意味着机器人可以同时发送“更新目标位置”和“查询电池状态”两个请求,而不需要等待第一个请求完成。在云机器人场景中,这个特性让多个机器人的数据流可以共享同一条连接,减少了连接建立和维护的开销。

2.2 Protobuf:比JSON小10倍的序列化

gRPC默认使用Protocol Buffers(Protobuf)作为序列化格式。与JSON相比,Protobuf是二进制格式,编码更紧凑。

一个具体的对比数据:在物理AI推理场景中,一个200KB的JSON观测数据,用Protobuf编码后只有约20KB,体积压缩了约10倍。对于需要传输图像特征向量或传感器数组的机器人系统来说,这个压缩比意味着带宽需求的直接降低和传输延迟的缩短。

Protobuf还有另一个优势:强类型接口定义。 开发者用.proto文件定义消息格式,gRPC自动生成客户端和服务端代码。这意味着接口的错误在编译期就能被发现,而不是在运行时才暴露。

2.3 gRPC在机器人场景中的适用边界

gRPC适合的场景:可靠网络环境下的低延迟、高吞吐量、强类型接口通信。

在云端机器人推理服务中,gRPC是天然的选择。机器人把传感器数据通过gRPC流式发送到云端的推理服务,推理服务返回动作指令。整个链路的延迟可以控制在毫秒级。gRPC的延迟通常比JSON over REST低2到10倍。

gRPC支持双向流式通信——客户端和服务端可以同时发送和接收数据流。这对机器人遥操作场景很有价值:操作员的控制指令可以持续流式发送到机器人,机器人的状态反馈也可以持续流式返回。

但gRPC在弱网环境下表现不佳。HTTP/2的流式通信需要稳定的TCP连接,当网络频繁断线时,连接重建的开销和状态恢复的复杂度都很高。

三、WebSocket:为实时双向交互设计的全双工通道

WebSocket的设计目标与MQTT和gRPC都不同:在浏览器和服务器之间,建立一条低延迟的全双工通信通道。

3.1 全双工通信:没有请求-响应模式的束缚

WebSocket的核心是“全双工”。连接建立后,客户端和服务器可以随时向对方发送数据,不需要等待对方先发起请求。这与HTTP的“请求-响应”模式完全不同。

在机器人远程操控场景中,这个特性直接决定了交互体验。操作员通过浏览器查看机器人的实时画面,同时通过摇杆发送控制指令。WebSocket让机器人可以持续推送状态数据(位置、姿态、传感器读数),同时接收操作员的控制指令,两者互不阻塞。

一项关于Pepper人形机器人遥操作的研究采用了WebSocket作为核心通信协议,通过全双工通信链路实现了操作员和机器人之间的精确双向数据交换,在动态环境中保持了低延迟响应。

3.2 WebSocket在机器人场景中的适用边界

WebSocket适合的场景:需要实时双向交互、浏览器端直接接入、中等延迟容忍度的场景。

远程操控面板、实时状态监控、Web端的机器人调试界面——这些场景中,WebSocket是比MQTT和gRPC更自然的选择,因为它可以直接在浏览器中使用,不需要额外的客户端库。

有研究构建了基于WebSocket的ROS 2 over WAN方案,在真实广域网环境下实现了比DDS Router和Zenoh更低的延迟和更高的连接稳定性,100Hz话题传输下平均端到端延迟降低了37%,72小时连续运行无中断。

但WebSocket不适合高吞吐量数据传输。它的帧头开销比MQTT大(2到14字节 vs 2字节),且在大量并发连接时的服务器资源消耗较高。

四、三种协议的横向对比

维度MQTTgRPCWebSocket
通信模型发布-订阅(经Broker)RPC(客户端-服务端)全双工(点对点)
传输层TCPHTTP/2TCP(HTTP升级)
延迟1-50ms1-10ms1-10ms
消息开销2字节(最小)Protobuf二进制2-14字节帧头
弱网适应性强(断线重连、QoS)弱(依赖稳定TCP)中(需心跳维护)
浏览器支持需桥接需gRPC-Web原生支持
典型场景IoT、遥测、控制指令微服务、云端推理远程操控、实时监控

从延迟数据来看,gRPC和WebSocket的典型延迟在1到10ms,MQTT在1到50ms,但MQTT的优势在于弱网环境下的连接稳定性和消息可靠性。

五、弱网环境下的选型逻辑

机器人系统最常见的部署环境不是理想的有线网络,而是Wi-Fi或4G/5G。网络波动是常态。

一项关于ROS 2在边缘到云端通信的研究给出了有价值的结论:在以太网环境下CycloneDDS表现最佳,而在Wi-Fi和4G环境下Zenoh表现更好。这说明了同一个关键点:协议的性能表现与网络环境强相关,没有“永远最优”的方案。

在弱网环境下,选型逻辑可以简化为三个问题:

第一个问题是:数据丢失和延迟,哪个更不能接受? 如果丢失传感器数据比延迟更不可接受,MQTT的QoS 1或2是安全的选择。如果延迟才是主要矛盾(比如实时控制),gRPC或WebSocket的低延迟更有优势。

第二个问题是:是否需要断线重连和状态恢复? MQTT的Broker架构天然支持这个能力——客户端重连后可以继续接收消息,保留消息(Retained Message)机制还能让新订阅者立即获得最新状态。gRPC和WebSocket需要自行实现重连逻辑。

第三个问题是:通信的拓扑结构是什么? 多对多(多机器人+云端+调试终端)适合MQTT的发布-订阅;一对多(一个云端服务响应多个机器人请求)适合gRPC;一对一(操作员操控单台机器人)适合WebSocket。

六、一个真实的机器人系统,往往需要多种协议

回到开头的场景:端侧计算单元需要把感知结果上传到云端,云端需要下发控制指令,工程师需要实时查看状态。

一个合理的方案是组合使用:

  • 感知结果上传用MQTT。感知结果的数据量中等,对实时性要求不是极端苛刻,MQTT的轻量级头部和QoS 1能在弱网下保持可靠传输。

  • 云端推理请求用gRPC。推理请求需要低延迟和强类型接口,gRPC的HTTP/2多路复用和Protobuf压缩能显著降低传输开销。以VLX-Flow的流式视频理解为例,持续的视频特征向量通过gRPC流式发送到云端推理服务,可以充分利用HTTP/2的多路复用能力,避免视频流和状态数据相互阻塞。

  • 工程师调试面板用WebSocket。浏览器原生的WebSocket支持让调试工具的开发变得简单,机器人状态可以实时推送到面板,操作员的指令可以即时下发。

VLX-Seek的细粒度视觉定位结果需要被下游模块低延迟消费,它的输出更适合通过MQTT的Topic发布——定位结果需要被多个订阅者(规划模块、控制模块、调试面板)同时接收,发布-订阅模式比点对点RPC更合适。而VLX-Go输出的短时航点指令则需要可靠送达,MQTT的QoS 2或gRPC的强类型接口都是可选方案,取决于系统对延迟和可靠性的优先级排序。

选型的本质不是“哪个协议最好”,而是“哪种通信特性最匹配当前的场景需求”。理解了MQTT的QoS体系、gRPC的HTTP/2多路复用、WebSocket的全双工通道,你就能根据机器人的实际部署环境做出有依据的决策,而不是凭感觉选一个“看起来差不多”的方案。

Logo

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

更多推荐