ROS2官网学习笔记 理解ROS2话题篇
学习目标:使用rqt_graph和命令行工具查看ROS2的话题.
背景
ROS2将一个复杂的系统分解为由许多模块化的节点组成。话题是ROS网络的重要元素,它充当节点交换消息的总线。一个节点可以将数据发布到任意数量的话题,同时也可以订阅任意数量的话题。同ros1一样话题是数据在节点之间传递的重要方式之一。
要准备的条件
需要完成前面的所有教程。
学习内容
1. 启动节点
打开一个终端启动一个节点
ros2 run turtlesim turtlesim_node
启动另一个节点
ros2 run turtlesim turtle_teleop_key
2. rqt_graph
在之前的教程中我们把rqt的所有工具都装了,和ros1一样rqt_graph用于显示话题和节点的连接关系
rqt_graph
运行过后我们得到下面的连接图
我们也可以先运行rqt
然后依次点击Plugins > Introspection > Nodes Graph也可以打开rqt_graph
3. ros2 topic list
和ros1类似运行ros2 topic list
会返回当前的所有话题列表
/parameter_events
/rosout
/turtle1/cmd_vel
/turtle1/color_sensor
/turtle1/pose
使用ros2 topic list -t
命令会同时返回节点列表和话题的消息类型
/parameter_events [rcl_interfaces/msg/ParameterEvent]
/rosout [rcl_interfaces/msg/Log]
/turtle1/cmd_vel [geometry_msgs/msg/Twist]
/turtle1/color_sensor [turtlesim/msg/Color]
/turtle1/pose [turtlesim/msg/Pose]
4. ros2 topic echo
和ros1一样这是一个比较重要的命令,可以查看ros话题中当前的发布的消息内容
ros2 topic echo <topic_name>
5. ros2 topic info
和ros1一样节点不是点对点,可以多对多,也可以多对一,一对多
通过下面的命令我们可以查看当前话题的订阅发布节点的数量
ros2 topic info <topic_name>
6. ros2 interface show
这个操作和ros1一样用于查看消息话题的消息结构
ros2 interface show <msg_name>.msg
例如
ros2 interface show geometry_msgs/msg/Twist.msg
我们得到如下的结果
# This expresses velocity in free space broken into its linear and angular parts.
Vector3 linear
Vector3 angular
7. ros2 topic pub
在我们知道了消息类型的结构过后可以通过命令行向指定话题发送消息。
args
为消息的内容,值得注意的是需要按照YAML格式进行输入
ros2 topic pub <topic_name> <msg_type> '<args>'
例如运行下面的命令乌龟就会移动一段距离,--once
是可选选项,代表发布一次消息过后退出
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}}'
我们还可以使用--rate 1
参数设置为一直发布,发布频率为1Hz
ros2 topic pub --rate 1 /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}}'
8. ros2 topic hz
我们可以用下面命令查看话题的发布速率
ros2 topic hz <topic_name>
例如
ros2 topic hz /turtle1/pose
终端输出发布频率
average rate: 63.594
min: 0.001s max: 0.017s std dev: 0.00193s window: 64
average rate: 63.050
min: 0.001s max: 0.017s std dev: 0.00142s window: 127
average rate: 62.858
9. 关闭节点
Ctrl + C关闭所有节点
总结
总的来说和ros1差不多