话题
在ROS 2中,话题(Topic)是一种用于实现发布者(Publisher)和订阅者(Subscriber)之间的通信机制。话题是一种发布-订阅模式,发布者将消息发布到特定的话题上,而订阅者可以通过订阅相同的话题来接收这些消息。
使用ROS 2的话题通信时,需要注意以下几点:
-
定义消息类型:首先需要定义消息类型,即所要发布和订阅的数据结构。可以使用ROS 2提供的接口定义语言(IDL)或者使用ROS 2提供的一些常用消息类型。
-
创建发布者和订阅者:在代码中创建发布者和订阅者对象,并指定要发布和订阅的话题名称和消息类型。
-
发布消息:发布者可以使用
publish()
函数将消息发布到话题上。消息将会发送给所有订阅该话题的订阅者。 -
订阅消息:订阅者可以使用回调函数来处理接收到的消息。当有新消息到达时,ROS 2将自动调用订阅者的回调函数,并将消息作为参数传递给回调函数。
使用ROS 2的话题通信的一般流程如下:
-
创建ROS 2工作空间:使用
colcon
等工具创建ROS 2工作空间,并构建工作空间。 -
定义消息类型:在工作空间中创建一个包,并在包中定义消息类型。可以使用ROS 2提供的接口定义语言(IDL)或者使用ROS 2提供的一些常用消息类型。
-
创建发布者和订阅者:在代码中创建发布者和订阅者对象,并指定要发布和订阅的话题名称和消息类型。
-
发布消息:发布者使用
publish()
函数将消息发布到话题上。 -
订阅消息:订阅者使用回调函数来处理接收到的消息。可以使用
create_subscription()
函数创建订阅者,并指定回调函数。 -
运行ROS 2节点:使用
ros2 run
命令运行ROS 2节点,使其开始发布和订阅消息。
需要注意的是,使用ROS 2的话题通信时,发布者和订阅者需要在同一个ROS 2节点中运行。此外,话题通信是一种异步通信方式,发布者和订阅者之间的消息传递不是实时的。如果需要实时通信,可以考虑使用ROS 2的服务(Service)或者动作(Action)机制。
$ ros2 topic list # 查看话题列表
$ ros2 topic info <topic_name> # 查看话题信息
$ ros2 topic hz <topic_name> # 查看话题发布频率
$ ros2 topic bw <topic_name> # 查看话题传输带宽
$ ros2 topic echo <topic_name> # 查看话题数据
$ ros2 topic pub <topic_name> <msg_type> <msg_data> # 发布话题消息