主题

主题是ROS 2提供的三种主要接口样式之一。主题应该用于连续的数据流,如传感器数据、机器人状态等。

如前所述,ROS 2是一个强类型的匿名发布/订阅系统。让我们分解这句话并对其进行更详细的解释。

发布/订阅

发布/订阅系统是一种数据生产者(发布者)和数据消费者(订阅者)共存的系统。发布者和订阅者通过"主题"的概念知道如何联系彼此,主题是一个共同的名称,以便实体能够找到彼此。例如,当您创建一个发布者时,必须为它提供一个主题名称的字符串;订阅者也是如此。在任何特定主题上可能有零个或多个发布者和零个或多个订阅者。当任何一个发布者向主题发布数据时,系统中的所有订阅者都会接收到数据。这个系统也被称为"总线",因为它在某种程度上类似于电气工程中的设备总线。总线的概念是ROS 2成为一个强大而灵活的系统的一部分。发布者和订阅者可以根据需要添加或移除,这意味着调试和内省是系统的自然扩展。例如,如果您想要记录数据,可以使用``ros2 bag record``命令。在内部,``ros2 bag record``会创建一个新的订阅者来订阅您告诉它的任何主题,而不会中断数据流向系统的其他部分。

匿名

介绍中提到的另一个事实是ROS 2是"匿名"的。这意味着当订阅者获取一段数据时,通常不知道或不关心最初是哪个发布者发送的(尽管如果需要,可以找出)。这种架构的好处是可以随时更换发布者和订阅者,而不会影响系统的其余部分。

强类型

最后,介绍中还提到了发布/订阅系统是"强类型"的。在这个上下文中,这有两个含义:

  1. ROS消息中每个字段的类型都是有类型的,并且在各个级别进行了强制执行。例如,如果ROS消息包含以下内容:

    uint32 field1
    string field2
    

    然后代码将确保``field``始终是无符号整数,而``field2``始终是字符串。

  2. 每个字段的语义都是明确定义的。没有自动机制来确保这一点,但所有核心ROS类型都与其关联了强大的语义。例如,IMU消息包含用于测量角速度的三维矢量,每个维度都规定为弧度/秒。不应将其他解释放入消息中。