ROS机器人项目开发11例(原书第2版)
上QQ阅读APP看书,第一时间看更新

2.3.2 DDS的实现

由于不同的DDS供应商提供具有不同功能的DDS实现,因此ROS-2支持多种DDS实现。例如,RTI的Connext是专门用于微控制器或需要安全认证的应用程序的DDS实现。所有的DDS实现都是通过一个称为ROS中间件层(rmw)的特殊层实现的,如图2.3所示。

图2.3 ROS-2中间件层

用户代码是最上面的块,包含用户逻辑或算法。在ROS-1中,用户代码通常位于ROS客户端库(如roscpp或rospy)的顶部,这些库帮助用户将其代码与ROS中的其他组件(如节点、话题或服务)连接起来。与ROS-1中的ROS客户端库不同,ROS-2中的ROS客户端库分为两层:

·一是对应于特定编程语言客户端库(如rclcpp、rclpy或rcljava)的功能层,用于处理诸如rosspin之类的线程处理和诸如内存管理之类的进程内通信。

·二是名为rcl的公共层,用C语言实现,用来处理名称、服务、参数、时间和控制台日志记录。

ROS中间件层rmw也是用C语言实现的,它与位于硬件层顶部的DDS实现相连接。该层负责服务调用、节点发现、图形事件和具有服务质量(Quality of Services,QoS)的发布/订阅调用。ROS-2中的QoS是网络中跨节点性能的度量。默认情况下,ROS-2遵循eProsima的快速RTPS实现,因为快速RTPS是开源的。