警告
您正在阅读的 ROS 2 文档版本已达到 EOL(生命周期结束),不再受官方支持。如果您想了解最新信息,请访问 Jazzy.
关于 ROS 2 中间件实施
ROS 中间件实现是一组 套餐 实现一些 ROS 内部接口,例如 rmw
, rcl
和 rosidl
应用程序接口.
DDS 中间件软件包的通用软件包
目前所有的 ROS 中间件实现都基于完整或部分 DDS 实现。例如,有一个中间件实现使用了 RTI 的 Connext DDS,还有一个实现使用了 eProsima 的 Fast-RTPS。因此,有一些共享的 套餐 在大多数基于 DDS 的中间件实现中都是如此。
在 ros2/rosidl_dds 存储库 GitHub有以下情况 包装:
ROSIDL_GENERATOR_DDS_IDL
DDS:提供生成 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 模块和函数,用于查找中间件实现的支持依赖项。在 connext_cmake_module
由于 RTI Connext 本身并不附带 CMake 模块,因此它有 CMake 模块用于在系统的不同位置查找 RTI Connext 的实现。并非所有软件源都有这样的软件包,例如 eProsima 的 Fast-RTPS 就提供了 CMake 模块,因此不需要额外的 CMake 模块。
"(《世界人权宣言》) 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 实施资源库的一个例子,"...... opensplice
ROS 中间件继续实施 GitHub 于 ros2/rmw_opensplice 并有这些 套餐:
opensplice_cmake_module
rmw_opensplice_cpp
ROSIDL_TYPE SUPPORT_OPENSPLICE_C
rosidl_typesupport_opensplice_cpp
除了 opensplice
知识库 套餐有 下一个
实施 GitHub 于 ros2/rmw_connext.它包含的内容大多与 套餐但它还包含一个 包装 来支持使用 DDS X-Types 标准的类型支持自省。
使用 FastRTPS
在 GitHub 于 eProsima/ROS-RMW-Fast-RTPS-cpp.由于 FastRTPS
目前只支持类型支持自省,该资源库中没有供应商特定的类型支持包。
要了解为 ROS 创建新中间件实施所需的更多信息,请参阅此页面:
警告
TODO: 链接到更详细的中间件实施文档和/或教程。