大家在机器人开发过程中肯定会涉及到进程间或者与web端、客户端的通信,当然,通信双方都在ROS环境下可直接使用ROS的publish和subscribe机制来进行通信,那如果其中一方不在ROS环境下有什么好的实现方式呢?

本文介绍几种之前在开发过程中接触到的通信方式,包括MQTT、LCM和Websocket。前两者使用方式与ROS类似,也是发布/订阅的形式,而Websocket因为有配套的浏览器API,主要应用在web开发领域。

下面简单介绍各自原理及特点,至于具体应用时选取哪种方案大家可结合应用场景自行评估。

一、MQTT

1. MQTT介绍:

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议,该协议构建于TCP/IP协议上,属于应用层协议。由IBM在1999年发布,是一种低开销、低带宽占用的即时通讯协议。

2. MQTT特点:

发布/订阅模式

发布/订阅模式是传统客户端 - 服务器架构的替代方案,一般传统的客户端-服务器架构是客户端能够直接和服务器进行通信。

但是发布/订阅模式会将发送消息的发布者 publisher与接收消息的订阅者 subscribers进行分离,publisher 与 subscribers 并不会直接通信,他们甚至都不清楚对方是否存在,他们之间的交流由第三方组件 broker 代理,如下图。

发布/订阅模式最重要的方面是 publisher 与 subscriber 的解耦,这种耦合度有下面三个维度:

空间解耦:publisher 与 subscriber 并不知道对方的存在,例如不会有 IP 地址和端口的交互,也更不会有消息的交互。时间解藕:publisher 与 subscriber 并不一定需要同时运行。同步Synchronization 解耦:两个组件的操作比如 publish 和 subscribe 都不会在发布或者接收过程中产生中断。

可拓展性

发布/订阅模式比传统的客户端-服务器模式有了更好的拓展,这是由于 broker 的高度并行化,并且是基于事件驱动的模式。可拓展性还体现在消息的缓存和消息的智能路由,还可以通过集群代理来实现数百万的连接,使用负载均衡器将负载分配到更多的单个服务器上。

消息过滤

在发布/订阅 的架构模式中,broker 扮演着至关重要的作用,其中非常重要的一点就是 broker 能够对消息进行过滤,使每个订阅者只接收自己感兴趣的消息。可基于话题、内容、类型进行过滤。

QoS

MQTT 还规定了消息的投放级别(QoS),支持至少一次、至多一次和精确投递三种级别,在协议层规定了是否会产生重复投递。

二、LCM

1. LCM介绍:

LCM(Lightweight Communications and Marshalling)是一套用于消息传递和数据编组的库和工具的集合,旨在为实时系统提供高带宽和低延迟的消息传递的能力。其最初由MIT城市挑战赛小组为DARPA消息传递系统设计。它也提供了一个发布/订阅消息传递模型以及为各种编程语言的应用程序自动生成编/解组代码。

LCM允许多个进程以安全和高性能地方式进行消息的交换。消息是LCM通信的基本单元,开发者可将消息定义为与编程语言无关的数据结构,然后使用LCM提供的lcm-gen工具将自定义的数据结构编译为特定语言的代码。lcm-gen支持C、C++、Java、Python等编程语言,关于lcm-gen的使用可以参考官方文档。

LCM是专为通过局域网连接的tightly-coupled类型系统而设计,不适合因特网。LCM研制开发软实时系统它默认允许丢包以减少延时。

LCM官方下载地址为:https://github.com/lcm-proj/lcm

2. LCM特点:

低延时的进程间通信

复用udp多播来实现高效的广播机制

对自动封装的消息自动进行类型检查

非常友好的日志及回放功能

对消息包的大小几乎没有限制

点对点直接通信没有集中的“数据库”或“hub”

无 daemons

支持的语言包括 C, C++, Java, Python, MATLAB, 以及C#

三、Websocket

1. Websocket介绍:

WebSocket 是一种网络传输协议,它着重解决浏览器和服务端不能进行双向通信的问题,可在单个 TCP 连接上进行全双工通信,位于 OSI 模型的应用层。WebSocket 因为有配套的浏览器API,主要应用在 Web 开发领域。

WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接,并进行双向数据传输。与之对比,HTTP 协议做不到服务器主动向客户端推送信息。

2. Websocket特点:

WebSocket更多的是拿来与http作比较,相比之下具有:

较少的控制开销:在连接创建后,服务器和客户端之间交换数据时,用于协议控制的数据包头部相对较小;

更强的实时性:由于协议是全双工的,所以服务器可以随时主动给客户端下发数据。相对于 HTTP 请求需要等待客户端发起请求服务端才能响应,延迟明显更少;

保持连接状态:与 HTTP 不同的是,WebSocket 需要先创建连接,这就使得其成为一种有状态的协议,之后通信时可以省略部分状态信息;

更好的二进制支持:WebSocket 定义了二进制帧,相对 HTTP,可以更轻松地处理二进制内容;

可以支持扩展:WebSocket 定义了扩展,用户可以扩展协议、实现部分自定义的子协议。

 

推荐阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: