ROS 2 中间件实施

ROS 中间件实现是一组 套餐 实现一些 ROS 内部接口,例如 rmw, rclrosidl 应用程序接口.

DDS 中间件软件包的通用软件包

目前所有的 ROS 中间件实现都基于完整或部分 DDS 实现。例如,有一个中间件实现使用了 RTI 的 Connext DDS,还有一个实现使用了 eProsima 的 Fast DDS。因此,有一些共享的 套餐 在大多数基于 DDS 的中间件实现中都是如此。

ros2/rosidl_dds 存储库 GitHub有以下情况 包装:

  • ROSIDL_GENERATOR_DDS_IDLDDS:提供生成 DDS 的工具 .idl 文件从 rosidl 文件,例如 .msg 文件 .srv 文件等。

"(《世界人权宣言》) ROSIDL_GENERATOR_DDS_IDL 包装 生成一个 DDS .idl 每个 rosidl 文件,例如 .msg 文件,由 套餐 包含信息。目前,基于 DDS 的 ROS 中间件实现使用了该生成器的输出结果 .idl 文件,以生成针对特定供应商的预编译类型支持。

ROS 中间件实施结构

ROS 中间件的实现通常由以下几个部分组成 套餐 在一个存储库中:

  • <实现名称>_cmake_module包含 CMake 模块,用于发现和公开所需的依赖关系

  • rmw_<implementation_name>_<language>;......:包含 rmw 应用程序接口 语言,通常是 C++

  • rosidl_typesupport_<实现名称>_<语言>;静态类型支持代码生成工具 rosidl 文件,为特定语言(通常是 C 或 C++)的实现量身定做

"(《世界人权宣言》) <实现名称>_cmake_module 包装 包含任何 CMake 模块和函数,用于查找中间件实现的支持依赖项。例如 rti_connext_dds_cmake_module 为 RTI Connext DDS 附带的 CMake 模块提供了封装逻辑,以确保所有依赖于 CMake 模块的软件包都会选择相同的 RTI Connext DDS 安装。类似地 fastrtps_cmake_module 包括一个 CMake 模块,用于查找 eProsima 的快速 DDS 和 gurumdds_cmake_module 包括一个 CMake 模块,用于查找 GurumNetworks GurumDDS。并不是所有的实现都有这样的软件包:例如,Eclipe 的 Cyclone DDS 已经提供了一个 CMake 模块,其 RMW 实现可直接使用该模块,而无需额外的封装器。

"(《世界人权宣言》) rmw_<implementation_name>_<language>; 包装 实现 rmw C 应用程序接口 用某种特定语言实现。实现本身可以是 C++,只是必须将头文件的符号作为 外部 "C"; 这样,C 应用程序就可以对其进行链接。

"(《世界人权宣言》) rosidl_typesupport_<实现名称>_<语言>; 包装 提供了一个生成器,可生成特定语言的 DDS 代码。生成器使用 .idl 生成的文件 ROSIDL_GENERATOR_DDS_IDL 包装 和 DDS 供应商提供的 DDS IDL 代码生成器。它还能生成 ROS 消息结构与 DDS 消息结构之间的转换代码。该生成器还负责为所使用的信息包创建一个共享库,该共享库针对信息包中的信息和所使用的 DDS 供应商。

如上所述 rosidl_typesupport_introspection_<language>; 如果 rmw 实现支持对消息的运行时解释,则可以使用"...... "来代替供应商特定的类型支持包。这种通过主题以编程方式发送和接收类型而无需事先生成代码的功能是通过支持 DDS X-Type 动态数据标准.因此,rmw 实现可以提供对 X-Types 标准的支持,和/或提供一个包,用于在编译时生成特定于其 DDS 实现的类型支持。

作为 rmw 实施资源库的一个例子,"...... 日蚀 旋风 DDS ROS 中间件实现在 GitHubros2/rmw_cyclonedds.

的 rmw 实现。 快速 DDSGitHubros2/rmw_fastrtps_cpp.

的 rmw 实现。 Connext DDSGitHubros2/rmw_connextdds.

的 rmw 实现。 GurumDDSGitHubROS/RMW_GURUMDDS.