【ROS2】概念:高级-ROS 2 中间件实现

ROS 2 中间件实现 

 目录

  • DDS 中间件包的常用包

  • ROS 中间件实现的结构

ROS 中间件实现是一组实现某些内部 ROS 接口的包,例如 rmw 、 rcl 和 rosidl API。

DDS 中间件包的常用包 

当前所有的 ROS 中间件实现都基于完整或部分 DDS 实现。例如,有一个使用 RTI 的 Connext DDS 的中间件实现和一个使用 eProsima 的 Fast DDS 的实现。因此,大多数基于 DDS 的中间件实现之间有一些共享的包

在 GitHub 的 ros2/rosidl_dds 仓库中,有以下包:

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

该 rosidl_generator_dds_idl 包为每个 rosidl 文件生成一个 DDS .idl 文件,例如 .msg 文件,由包含消息的包定义。目前,基于 DDS 的 ROS 中间件实现使用此生成器的输出 .idl 文件生成特定供应商的预编译类型支持

ROS 中间件实现的结构 

一个 ROS 中间件实现通常由单个存储库中的几个包组成

  • <implementation_name>_cmake_module : 包含用于发现和公开所需依赖项的 CMake 模块

  • rmw_<implementation_name>_<language> : 包含特定语言(通常是 C++)中 rmw API 的实现

  • rosidl_typesupport_<implementation_name>_<language> : 包含用于生成 rosidl 文件的静态类型支持代码的工具,针对特定语言(通常是 C 或 C++)的实现进行了定制

<implementation_name>_cmake_module 包含了实现中间件所需的所有 CMake 模块和函数,以便找到支持的依赖项。例如, rti_connext_dds_cmake_module 提供了围绕 RTI Connext DDS 附带的 CMake 模块的包装逻辑,以确保所有依赖它的包都将选择相同的 RTI Connext DDS 安装。同样, fastrtps_cmake_module 包含了一个 CMake 模块,用于查找 eProsima 的 Fast DDS,而 gurumdds_cmake_module 包含了一个 CMake 模块,用于查找 GurumNetworks 的 GurumDDS。并非所有实现都会有这样的包:例如,Eclipe 的 Cyclone DDS 已经提供了一个 CMake 模块,RMW 实现直接使用该模块,而无需额外的包装。

rmw_<implementation_name>_<language> 包在特定语言中实现了 rmw C API。实现本身可以是 C++,只需将头文件的符号暴露为 extern "C" ,以便 C 应用程序可以链接到它。

rosidl_typesupport_<implementation_name>_<language> 包提供了一个生成器,用于生成特定语言的 DDS 代码。这是通过 rosidl_generator_dds_idl 包生成的 .idl 文件和 DDS 供应商提供的 DDS IDL 代码生成器来完成的。它还生成用于在 ROS 消息结构和 DDS 消息结构之间进行转换的代码。该生成器还负责为其所使用的消息包创建一个共享库,该库特定于消息包中的消息和所使用的 DDS 供应商。

如上所述,如果 rmw 实现支持消息的运行时解释,则可以使用 rosidl_typesupport_introspection_<language> 代替供应商特定的类型支持包。通过支持 DDS X-Types 动态数据标准,可以在不预先生成代码的情况下,编程地发送和接收主题上的类型。因此,rmw 实现可以提供对 X-Types 标准的支持,和/或提供一个在编译时生成的特定于其 DDS 实现的类型支持包。

作为 rmw 实现库的一个示例, Eclipse Cyclone DDS ROS 中间件实现位于 GitHub 上的 ros2/rmw_cyclonedds。 https://github.com/ros2/rmw_cyclonedds

Fast DDS 的 rmw 实现在 GitHub 上,位于 ros2/rmw_fastrtps_cpp。 https://github.com/ros2/rmw_fastrtps_cpp

Connext DDS 的 rmw 实现在 GitHub 上,位于 ros2/rmw_connextdds。 https://github.com/ros2/rmw_connextdds

GurumDDS 的 rmw 实现在 GitHub 上,位于 ros/rmw_gurumdds。https://github.com/ros2/rmw_gurumdds 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值