上一期指路:
ROS wiki系列|通过ROS wiki-tutorials学习节点
这一期我们就用ROS wiki中的tutorials来学习ROS中另外一个重要的概念:topic——话题
在前面讲解入门概念的时候我们也讲过了,节点通过将消息发布到给定的主题来发送消息,而对某种类型的数据感兴趣的节点将订阅适当的主题,从逻辑上讲,可以将主题看作强类型消息总线。每个总线都有一个名称,任何人都可以连接到总线来发送或接收消息。
同时在上一节对节点的讲解中,我们也在节点编写的过程中了解到了话题的创建与发布等,因此今天我们主要围绕话题相关的一些工具来看看它们的使用方法。
ROS tutorials中与topic有关的教程有:
Understanding ROS Topics
这个教程介绍了ROS主题以及rostopic和rqt_plot命令行工具的使用。
开始学习之前我们要跑点东西:
1.roscore:
roscore
2.turtlrsim:
rosrun turtlesim turtlesim_node
3.turtle keyboard teleoperation:
rosrun turtlesim turtle_teleop_key
运行以上三个之后就可以用键盘上的方向键来操控小海龟运动啦~
小插曲之小海龟撞墙:
OK,正式开始教程学习
首先前面我们在运行了小海龟节点以及小海龟的键盘控制节点之后,这两个节点之间是靠一个话题来进行通信的,turtle_teleop_key节点在话题上发布键值,而turtlesim节点订阅该话题来获取键值,这里我们可以使用rqt_graph来查看正在运行的节点与话题。
1.Using rqt_graph
rqt_graph创建系统中正在发生的事情的动态图。rqt_graph是rqt包的一部分。
在新终端运行:
rosrun rqt_graph rqt_graph
一开始看到的是没有颜色的,当我们把鼠标移至/turtle1/command_velocity时节点和话题将会高亮(这里是变色),也就是说turtlesim_node和turtle_teleop_key节点是通过话题/turtle1/command_velocity来进行通信的。
2.Introducing rostopic
rostopic工具的作用是获取关于ROS话题的信息。
你可以使用帮助选项来获取rostopic可用的子命令:
rostopic -h
rostopic bw 显示话题使用的带宽
rostopic echo 将消息打印到屏幕
rostopic hz 显示话题的发布速率
rostopic list 打印有关活跃话题的信息
rostopic pub 将数据发布到话题上
rostopic type 打印话题类型
接下来我们就来看看这些命令行工具的使用场景吧~
3.Using rostopic echo
rostopic echo显示发布到话题上的数据
使用方法:
rostopic echo [topic]
依旧使用小海龟为例。运行小海龟节点与小海龟控制节点,然后新终端运行
rostopic echo /turtle1/cmd_vel
,接下来用键盘方向键控制小海龟,我们将会看到终端输出:
4.Using rostopic list
rostopic list返回当前订阅和发布的所有主题的列表
同时它还有一些子命令,我们运行
rostopic list -h
可以查看
可选项:
-h,-help:显示帮助信息并退出
-b BAGFILE, –bag=BAGFILE:在.bag文件中显示话题列表
-v,–verbose:列出每个话题的详细信息
-p:仅列出发布者
-s:仅列出订阅者
我们可以运行一下试试,运行后我们将会看到:
5.Using rostopic type
节点之间的话题通信是通过消息传递来完成的,同一个话题的发布者和订阅者之间发送和接收的消息类型必须是一致的,因此我们也需要了解话题数据的消息类型~
rostopic type返回正在发布的任何主题的消息类型
使用方法:
rostopic type [topic]
在终端输入:
rostopic type /turtle1/cmd_vel
终端将会返回
geometry_msgs/Twist
,也就是这个话题的消息类型,我们也可以用rosmsg来看一下这个消息类型的详细内容,运行
rosmsg show geometry_msgs/Twist
,终端将会返回:
6.Using rostopic pub
rostopic pub可以用来向话题发布数据
使用方法:
rostopic pub [topic] [msg_type] [args]
在终端输入:
rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'
小海龟将会以一个圆形轨迹运动,此时它的线速度为2,角速度为1.8。
-1 将会使话题只发布一次数据
我们会注意到这里小海龟只运动了一下,因为如果需要持续运动我们需要让话题以一定的频率循环发布(这里是1Hz),可使用
rostopic pub -r
指令:
rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, -1.8]'
这下小海龟就会持续运动啦~
7.Using rostopic hz
rostopic hz报告话题数据的发布速率
使用方法:
rostopic hz [topic]
我们同样来尝试一下:
rostopic hz /turtle1/pose
终端将会输出:
我们也可以将rostopic type和rosmsg show结合使用,来深入了解一个话题的信息:
rostopic type /turtle1/cmd_vel | rosmsg show
8.Using rqt_plot
rqt_plot显示在话题上发布的数据的滚动时间图,这里我们将使用rqt_plot来绘制在/turtle1/pose主题上发布的数据,在新终端运行:
rosrun rqt_plot rqt_plot
将会出现一个弹窗,弹窗左上角可以选择添加对应的话题,减号也可以隐藏之前添加的话题,我们可以看一下/turtle/pose
ok,到这里我们就基本讲完话题相关命令行工具的使用方法了,在ROS的使用与开发中,这些同样也是我们经常会使用到的命令行工具,大家也可以多摸索一下它们的使用方法,下课!