话题
主题是 ROS 2 提供的三种主要接口样式之一。 主题应该用于连续数据流,如传感器数据、机器人状态等。
如前所述,ROS 2 是一种强类型的匿名发布/订阅系统。 让我们分解这句话并进一步解释一下。
发布/订阅
发布/订阅系统是指数据生产者(发布者)和数据消费者(订阅者)的系统。 发布者和订阅者知道如何通过“主题”的概念相互联系,这是一个通用名称,以便实体可以找到彼此。 例如,当您创建发布者时,您还必须为其提供一个字符串,即主题的名称;订阅者也是如此。 任何具有相同主题名称的发布者和订阅者都可以直接相互通信。 任何特定主题上可能有零个或多个发布者和零个或多个订阅者。 当任何发布者将数据发布到主题时,系统中的所有订阅者都将收到数据。 该系统也称为“总线”,因为它有点类似于电气工程中的设备总线。 总线的概念是使 ROS 2 成为强大而灵活的系统的一部分。 发布者和订阅者可以根据需要来来去去,这意味着调试和自省是系统的自然扩展。 例如,如果您想记录数据,可以使用“ros2 bag record”命令。 在底层,“ros2 bag record”会为您告诉它的任何主题创建一个新的订阅者,而不会中断数据流向系统的其他部分。
匿名
简介中提到的另一个事实是 ROS 2 是“匿名的”。 这意味着当订阅者获得一段数据时,它通常不知道或不关心哪个发布者最初发送了它(尽管它可以找出它是否想要)。 这种架构的好处是,发布者和订阅者可以随意交换,而不会影响系统的其余部分。
强类型
最后,介绍中还提到发布/订阅系统是“强类型的”。 在这种情况下,这有两层含义:
ROS 消息中每个字段的类型都是类型化的,并且该类型在各个级别上都是强制执行的。 例如,如果 ROS 消息包含:
uint32 field1 string field2
然后代码将确保“field1”始终是无符号整数,而“field2”始终是字符串。
每个字段的语义都定义明确。没有自动机制来确保这一点,但所有核心 ROS 类型都具有与之相关的强语义。例如,IMU 消息包含用于测量角速度的三维矢量,并且每个维度都指定为弧度/秒。不应将其他解释放入消息中。