目录
内部 API 架构概述
类型特定接口
静态类型支持
静态类型支持与 DDS
动态类型支持
rcl
仓库rmw
仓库rosidl
仓库rcutils
仓库
内部 ROS 接口是公共 C API,旨在供开发人员使用,他们正在创建客户端库或添加新的底层中间件,但不适用于典型的 ROS 用户。ROS 客户端库提供用户界面 API,大多数 ROS 用户都熟悉这些 API,并且可能采用各种编程语言。
内部 API 架构概述
有两个主要的内部接口:
ROS 中间件接口 (
rmw
API)ROS 客户端库接口 (
rcl
API)
rmw
API 是 ROS 2 软件栈与底层中间件实现之间的接口。ROS 2 使用的底层中间件是 DDS 或 RTPS 实现,负责发现、发布和订阅机制、服务的请求-应答机制以及消息类型的序列化。
rcl
API 是一个稍微高级一点的 API,用于实现客户端库,并不直接接触中间件实现,而是通过 ROS 中间件接口( rmw
API)抽象来实现。
如图所示,这些 API 是堆叠的,因此典型的 ROS 用户将使用客户端库 API,例如 rclcpp
,来实现他们的代码(可执行文件或库)。客户端库的实现,例如 rclcpp
,使用 rcl
接口,该接口提供对 ROS 图和图事件的访问。 rcl
实现反过来使用 rmw
API 来访问 ROS 图。 rcl
实现的目的是为更复杂的 ROS 概念和实用程序提供一个通用实现,这些概念和实用程序可能会被各种客户端库使用,同时与所使用的底层中间件无关。 rmw
接口的目的是捕获支持 ROS 客户端库所需的最低限度的中间件功能。最后, rmw
API 的实现由特定于中间件实现的包提供,例如 rmw_fastrtps_cpp
,其库是针对供应商特定的 DDS 接口和类型编译的。
在上图中还有一个标记为 ros_to_dds
的框,该框的目的是表示一类可能的包,这些包允许用户使用 ROS 等效项访问 DDS 供应商特定的对象和设置。这个抽象接口的目标之一是完全将 ROS 用户空间代码与所使用的中间件隔离开来,以便更换 DDS 供应商甚至中间件技术对用户代码的影响最小。然而,我们认识到,有时尽管可能会产生后果,但深入实现并手动调整设置是有用的。通过要求使用这些包之一来访问底层 DDS 供应商的对象,我们可以避免在正常接口