您正在阅读的是开发版本的文档。有关最新发布的版本,请访问 Jazzy.

主题

主题是 ROS 2 提供的三种主要界面风格之一。主题应用于连续数据流,如传感器数据、机器人状态等。

如前所述,ROS 2 是一个强类型的匿名发布/订阅系统。让我们把这句话拆开来再解释一下。

发布/订阅

在发布/订阅系统中,有数据生产者(发布者)和数据消费者(订阅者)。发布者和订阅者通过 "主题 "的概念知道如何相互联系,"主题 "是一个共同的名称,这样实体之间就能相互找到。例如,当你创建一个发布者时,你还必须给它一个字符串,这个字符串就是主题的名称;订阅者也是一样。位于同一主题名下的任何发布者和订阅者都可以直接相互通信。任何特定主题上都可能有零个或多个发布者和零个或多个订阅者。当任何一个发布者向主题发布数据时,系统中的所有订阅者都会收到该数据。这个系统也被称为 "总线",因为它有点像电气工程中的设备总线。总线的概念正是 ROS 2 成为一个强大而灵活的系统的原因之一。发布者和订阅者可以根据需要来来去去,这意味着调试和自省是系统的自然延伸。例如,如果你想记录数据,可以使用 玫瑰2 背包 记录 命令。引擎盖下 玫瑰2 背包 记录 在不中断系统其他部分数据流的情况下,为你告诉它的任何主题创建一个新的订阅者。

匿名

简介中提到的另一个事实是,ROS 2 是 "匿名 "的。这意味着,当订阅者收到一条数据时,它一般不会知道或关心最初是哪个发布者发送的(不过如果它愿意,也可以查出来)。这种架构的好处是,发布者和订阅者可以随意调换,而不会影响系统的其他部分。

强类型

最后,导言还提到发布/订阅系统是 "强类型 "的。这在这里有两层含义:

  1. ROS 报文中每个字段的类型都是类型化的,并且该类型会在不同层面上强制执行。例如,如果 ROS 报文包含

    uint32 字段1
    字符串 字段2
    

    然后,代码将确保 字段1 总是一个无符号整数,并且 字段2 总是一个字符串。

  2. 每个字段的语义都是明确定义的。虽然没有自动机制来确保这一点,但所有核心 ROS 类型都有与之相关的强大语义。例如,IMU 报文包含一个测量角速度的三维向量,每个维度的单位都是弧度/秒。信息中不应包含其他解释。