【分享】microROS 和 rosserial 对比

大家好,我是努力Work 的小鱼,最近在探索 ROS 2 在 IOT 上的可能行,分享几篇来自 micro-ROS 相关的文章。

microROS 和 rosserial 对比

在ROS中,有一个包在通过串行通信发送ROS消息时非常突出。这个包就是rosserial。

rosserial允许基于微控制器的平台与普通计算机通信,代表它们与ROS网络通信。
rosserial提供了设置这种通信的协议,采用了客户端-服务器架构方法。
rosserial客户端将数据序列化到串行链接中,然后串行化的数据被rosserial服务器接收,并转发到常规的ROS网络。
从ROS网络向微控制器转发数据也是类似的过程。
这个rosserial服务器可以用C++或Python编写;而rosserial客户端有一系列支持的微处理器可用。

这个解决方案通常用于将硬件组件集成到使用ROS的机器人中。
在这些情况下,rosserial充当了硬件通信协议与ROS网络之间的桥梁。

Micro XRCE-DDS

Micro XRCE-DDS的一个功能是在微控制器和支持DDS/ROS 2的计算机之间使用串行连接。
这种连接得益于使用OMG的DDS-XRCE标准和一个串行传输层。
这个解决方案采用了与rosserial相同的客户端-服务器架构,这是在微控制器通信方面最合适的方法之一。

负责实现这种架构的库是Client和Agent。
客户端在代理中生成实体,这些实体将代表客户端在DDS网络上进行操作。

正如你所见,这种用法类似于rosserial所使用的用法,但它们在实现上有微妙的差别,我们将在本文中详细说明。

Micro XRCE-DDS vs rosserial

现在我们对rosserial和Micro XRCE-DDS有了基本的了解,接下来我们将对它们进行比较。

Micro XRCE-DDS的串行传输

Micro XRCE-DDS在使用串行传输时(它也允许使用其他传输方式,如UDP、TCP等),采用了预定义格式的串行协议。
该格式在以下帧解析中进行了说明:

0        8        16       24                40                 X                 X+16
+--------+--------+--------+--------+--------+--------//--------+--------+--------+
| FLAG   |  SADD  |  RADD  |       LEN       |     PAYLOAD      |       CRC       |
+--------+--------+--------+--------+--------+--------//--------|--------+--------+
  • FLAG: 同步标志 (0xFF)。
  • SADD: 源地址。
  • RADD: 远程地址。
  • LEN: 未进行帧处理的有效载荷长度(小尾端的2字节)。
  • PAYLOAD: 带有XRCE头的序列化消息。
  • CRC: 经过填充后的消息CRC。

这是在链路层上进行串行化的消息。
这个消息通过发布和订阅两种不同的操作,从微控制器到计算机以及反向传输。

Micro XRCE-DDS vs rosserial

rosserial

相比之下,这是rosserial的帧结构:

0       8       16              32              40      56               X             X+16
+-------+-------+-------+-------+-------+-------+-------+-------//-------+------+------+
| FLAG  | PROT  |      LEN      |      LCRC     | TOPID |     PAYLOAD    |     MCRC    |
+-------+-------+-------+-------+-------+-------+-------+-------//-------|------+------+
  • FLAG: 同步标志 (0xFF).
  • PROT: 协议版本.
  • LEN: 载荷长度 (2 bytes,小端序).
  • LCRC: 长度 CRC.
  • TOPID: 主题 ID.
  • PAYLOAD: 序列化消息.
  • MCRC: 消息 CRC.

与Micro XRCE-DDS串行帧进行比较,可以看到它使用了完全不同的帧结构。

比较

以下表格总结了两种实现的关键方面:

Micro XRCE-DDS 串行rosserial
APIC/C++C++
完整性HDLC 帧格式
安全性CRC-16-CCITT模糊的 CRC (% 256)
内存拷贝uxr_stream —> serial_buffer —> hardware_bufferserialization_buffer —> hardware_buffer
内存使用uxr_stream + (2 * aux-buffer[42 B])2 * serialization_buffer
消息大小限制uxr_stream 大小hardware_buffer 大小
可靠性
路由
开销7 B + 12 B*9 B
架构客户端-服务器客户端-服务器

* 开销分为帧格式 7 B 和 DDS-XRCE 协议增加的 12 B.

正如表中所述,Micro XRCE-DDS 串行增加了内存操作次数,但极大地减少了串行通信所需的内存,因为硬件缓冲区不需要与序列化缓冲区大小相同。
这种缓冲区的使用减少了内存占用。
此外,Micro XRCE-DDS 串行提供了路由和可靠性功能,而rosserial则不提供。
DDS-XRCE 协议在某些部分采用了标准,如使用标准 CRC 或标准帧格式。

小鱼补充:HDLC

高级数据链路控制(High-Level Data Link Control或简称HDLC),是一个在同步网上传输数据、面向比特的协议的数据链路层协议,它是由国际标准化组织制订的。

国际电信联盟已把HDLC规程引入到X.25协议栈。HDLC是修改自IBM的SDLC,后者作为数据链路层协议用于IBM自己开发的系统网络架构(SNA)。现在HDLC作为同步点对点协议(PPP)的基础已经被用于很多服务中来接入广域网,通常最常见的是因特网。

HDLC的帧格式规定以01111110(十六进制7E)的位组合作为它的起始和结束的标志,这种位组合也被称为帧界定符。

在HDLC的帧格式中,在起始标志后的是地址字段和控制字段,然后是长度在0到5000八位位组(octet)的数据字段和帧检验序列字段(FCS),最后是作为结束标志的帧界定符。一点需要指出的是,当暂时没有信息传送时,帧界定符被连续地发送直到下一次数据发送为止,产生如下图的连续比特流:

01111110011111100111111001111110
 ______  ______  ______  ______ 
_      __      __      __      _

这种方法被用于调制解调器,通过锁相环(phase-locked loop)来训练时钟同步。

  • 11
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值