Advertisement

大三小学期进阶课程第二十五课:ROS原理2

阅读量:

第25课、ROS原理2

Apollo ROS对ROS进行了重要改进,并去除了原有的中心化网络拓扑结构

如图所示

在这里插入图片描述

当订阅节点启动时,它会将启动信息发送给该域内的所有节点,并表示一个新的订阅节点开始运行

在这里插入图片描述

当所有节点接收新节点引入引发的拓扑变化时,在接收到该变化后会与新加入的节点各自建立相互连接关系。 ③、向新增的节点传递它们已有的拓扑信息。

在这里插入图片描述

现有节点将向新加入的节点传递它们已掌握的拓扑信息。这相当于在新节点加入前每个现有节点都维护了一个与其它所有现有节点之间的连接关系。这些连接关系被发送给接收方,并帮助接收方更新其网络拓扑结构。
④、双方开始通过建立连接进行通信。

在这里插入图片描述

当新加入的节点一旦接收到所有现有节点发送的历史拓扑数据后(如上图所示),该节点将根据自身的实际消息内容来确定与哪些其他节点之间存在真实的通信连接关系。从图中可以看出,新加入的节点仅与其右下角的一个邻居存在拓扑关联关系。为了实现这一功能,在不改变原有网络结构的前提下(即除了保存并传播所有发送方提供的网络拓扑信息外),同时还与这些发送方进行直接的点对点通信连接。
采用RTPS(Relation Topology Discovery)的方式后( Apollo ROS系统完全摆脱了 Rosmaster 单点服务的束缚),这项改动完全针对ROS底层架构设计。因此对于基于原生ROS代码编写的节点程序而言( 即开发者无需改动任何接口即可完成迁移 ),这种新的关系建立机制实现了更高的系统可靠性。

Apollo ROS对ROS的改进,数据兼容性拓展
(1)数据兼容性扩展的原因
①原生ROS基于Message的订阅发布消息模型。发送者和接收者在进行实际通讯之前需要进行消息格式定义,其包含字段:基础的数据类型或者复杂的数据类型。在它们进行消息通信的时候,才可以有选择性的去建立通信连接和数据实际发送。如果有一个节点订阅的消息类型不是Channel预先指定的消息类型,这种通信连接是建立不起来的。或是强制指定一个节点去订阅某一种类型的Channel信息,但是它的实际回调函数里却写的是另外一种消息类型,这种编译可能在实际运行的时候就会报相关的一些错误。
②Message是两个节点进行消息通信的抽象描述文件。这个描述文件提前定义好两个节点之间进行消息通信的基本数据类型。ROS采用这种方式是因为能比较大概率地对两个节点之间进行解耦合,同时两个节点之间也是跨语言的,即不需要关注两个节点是用什么语言写的,都可以通过这种描述文件去进行实际的消息通信。通过Message通信的时候接、收节点在接受到信息之后,会进行MD5的校验、验证这个消息是否符合它的预先订阅,或者是在使用消息之后才会去进行消息的回调处理。
③但是ROS基于Message这种通讯方式有很多的缺点。它最大限度解放两个点之点的一个耦合关系也带来了一些问题。比如Message接口升级,不同版本之间的兼容是需要做大量的适配工作。再如某个模块进行升级,之前所录制的一些实验数据,在进行回放的时候就会产生不匹配的现象。
(2)深度整合Protobuf功能,实现数据兼容性扩展
Apollo ROS实践里面引入了一种新的消息描述的格式去实现很好的向后兼容即Protobuf。只需要在使用的过程中,定义好必须的字段或者是一些新增的字段,新增的字段我们可以使用Optional属性去描述。在进行模块升级或者是模块之间的消息接口升级的时候,下游模块其实不需要关注新增字段对它来说会造成什么样的影响。如果它要去使用这个字段的话才需要去进行一定程度的适配。如果它的程序不使用这个新增的字段,就不需要做任何的修改。

在这里插入图片描述

上图展示了基于ROS平台的两种解决方案对数据兼容性支持的对比分析结果

全部评论 (0)

还没有任何评论哟~