topic简介

ROS 2 将复杂系统分解为许多模块化节点。topic是 ROS 的重要元素,它充当节点交换消息的总线。
Topic-SinglePublisherandSingleSubscriber.gif
一个节点可以向任意数量的主题发布数据,同时订阅任意数量的主题。
Topic-MultiplePublisherandMultipleSubscriber.gif
主题是数据在节点之间移动的主要方式之一,因此在系统的不同部分之间移动。

topic任务

1. 打开2个节点

  1. ros2 run turtlesim turtlesim_node
  2. ros2 run turtlesim turtle_teleop_key

2. 打开rqt_graph

rqt_graph是可视化工具,可以查看节点间的topic关系.

要运行 rqt_graph,请打开一个新终端并输入命令:

  1. rqt_graph

也可以通过rqt打开,选择Plugins > Introspection > Node Graph.
rqt_graph.png

该图描述了/turtlesim节点和/teleop_turtle节点如何通过主题相互通信

3. ros2 topic列表

  1. ros2 topic list

4. topic回显

  1. ros2 topic echo <topic_name>

5. topic详情

  1. ros2 topic info /turtle1/cmd_vel

6. topic数据类型

  1. ros2 topic type (topic名称)/turtle1/cmd_vel

7.显示消息数据结构

  1. ros2 interface show <topic消息>

8. 发布topic消息

知道了消息结构,可以使用以下命令直接从命令行将数据发布到主题:

  1. ros2 topic pub <topic_name> <msg_type> '<args>'
  1. ros2 topic pub --once /turtle1/cmd_vel geometry_msgs/msg/Twist "{linear: {x: 2.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.8}}"