购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.2 ROS2.0框架

2.2.1 ROS2.0简介

由于ROS已经存在了较长时间,已采用其开发机器人系统的开发者希望ROS仍然能保持现在的应用状态,而不会被ROS的不断发展所影响,所以ROS2.0是独立于ROS并行的包集,可以单独安装并且可以与ROS进行交互。

ROS2.0是一个与ROS类似的中间件系统,它使用的也是现成的开源库,这样开发者可以维护更少的代码,尤其是非机器人特定代码;充分利用超过开发者能力范围的现有库;受益于其他开发者未来对这些库的改进。ROS与ROS2.0的设计架构如图2-5所示。

图2-5 ROS与ROS2.0设计架构

ROS2.0的改进主要是为了让ROS更符合工业级的运行标准,采用了DDS(数据分发服务)这个工业级的中间件来负责可靠通信、通信节点动态发现,并用共享内存的方式使得通信效率更高。通过使用DDS,所有节点的通信拓扑结构都依赖于动态点对点的自发现模式,从而去掉了ROS Master这个中心节点。

ROS2.0改变了API。目前ROS代码中大量的API是在2009年发布的,虽然很稳定,但未必是最好的,所以ROS2.0设计了新的API,同时尽最大能力与第一代API结合。所以ROS2.0的关键概念(分布式处理、匿名的发布/订阅消息、带有反馈的RPC、语言无关性等)仍然是与ROS相同的,但ROS2.0API与现有的ROS代码并不兼容,好在目前已有开发者实现了ROS2.0与ROS之间的兼容,并在ROS2.0的软件包集下发布了一个ros1_bridge包,用于实现ROS与ROS2.0之间的双向通信。

目前,ROS2.0已经发布了一部分功能包,世界各地的ROS开发者还在不断地为它作贡献,将新开发的功能包集发布到这个系统中。

ROS2.0是ROS的功能扩展和性能优化,其设计目标主要体现在以下5个方面。

·支持多机器人系统,包括不可靠的网络。

·消除原型系统和最终产品之间的差距。

·可以运行在小型嵌入式平台上。

·支持实时控制。

·支持交叉平台。

2.2.2 ROS与ROS2.0之间的主要区别

1. 发布/订阅

图2-6是ROS2.0实现发布/订阅的结构,ROS2.0将ROS中原来的通信协议TCPROS和UDPROS替换为DDSI-RTPS。此外,API也做了相应的改变,例如,节点的名字没有传递给全局的init()函数,而是传递给节点的构造函数;spin()函数不再是全局的,而是通过节点调用等。

图2-6 ROS2.0发布/订阅

2. 进程内通信

ROS2.0与ROS的进程内通信具有相同的功能,但是ROS2.0采用了更加安全的模式。

ROS2.0的进程内通信具有如下特点。

·避免了序列化和逆序列化。

·避免了网络栈、将数据分成包。

·通过提供基于API的unique_ptr可安全避免复制。

·进程内和进程间的通信更加一致。

3. 网络通信

表2-1列出了ROS和ROS2.0的一些QoS设置对比。

表2-1 ROS与ROS2.0的一些QoS设置对比

ROS消息传递采用尽量到达,尽最大可能丢失最少的消息,而ROS2.0会保证所有的消息都会到达另一端;ROS采用队列存储消息,队列的长度可以指定,而ROS2.0会存储所有的消息;ROS数据没有持久性,ROS2.0的数据会被发送者持续保存。此外,ROS2.0中的DDS也提供了一些已被工业应用证明有效的QoS:使用UDP(代替TCP)实现多播,这样发布者就不需要为每一个订阅者都复制一份数据了;支持不可靠网络,如蜂窝网络、IoT、高延时的连接等。

4. ROS和ROS2.0之间的软件桥(见图2-7)

图2-7 ROS与ROS2.0之间的软件桥

ROS和ROS2.0通过软件桥(bridge)进行数据通信,其实现的技术背景具体如下。

·目前bridge是使用C++实现的。

·消息定义:ROS使用rosmsg API,ROS2.0使用ament资源索引。

·在ROS和ROS2.0类型间采用自动的映射规则;也可以选择指定通用的规则(在.yaml文件中进行定义);对于任意的类型对,可以注册一个函数,用于产生ROS和ROS2.0之间的转换函数。

·建立一个软件桥:ROS使用roscpp,通过pkg-config实现;而ROS2.0使用rclcpp,通过CMake find_package()实现。

·具体实现要求所有的头函数必须没有冲突。

5. 基本开发环境的区别

1)ROS:Linux(Ubuntu);OS X。

2)ROS2.0:Linux(Ubuntu);OS X;Windows。

从上述所列开发环境可以看出,ROS2.0扩展了Windows基础平台,使其具有更广泛的适应性。 VA+uVuo2HH1dJv8eF7wXepRIpOK68y+oqhYRhvVmnRymgCk6uYcSUidh9vFEmAuN

点击中间区域
呼出菜单
上一章
目录
下一章
×