Understanding ROS Topics
Last updated
Last updated
/ /
描述:介绍 ROS 话题(Topics),以及 和 命令行工具使用。
下一节:
打开新窗口,启动roscore
:
如果roscore
已经启动,将提示以下错误信息:
这是正常的,因为有且仅需要一个roscore
。
在这一部分,我们将用到turtlesim
功能包(包含在ros_tutorials
元功能包中)。开启新命令窗口输入以下命令启动turtlesim gui
:
为了控制乌龟运动,在新窗口运行:
现在就可以通过方向键控制乌龟移动。如果乌龟没有移动,请先确保当前鼠标焦点在turtle_teleop_key
所在的窗口。
下面将讲述其背后的原理和实现。
turtlesim_node
和turtle_teleop_key
通过ROS Topic进行通信。turtle_teleop_key
在话题中发布当前按下的方向键信息,turtlesim_node
订阅相同的话题以获得当前按键信息。使用rqt_graph
可以展示当前节点和话题的关系。
Note: 如果使用的是electric
会更早版本,rqt
是不可用的。可以使用rxgraph
代替。
rqt_graph
会创建当前系统运行的节点和话题的动态图。rqt_graph
是rqt
功能包的一部分。如果尚未安装,可以输入:
打开新窗口,输入:
将会弹出以下类似窗口:
如果将鼠标悬停在/turtle1/com_vel
,图形将会高亮,节点显示为蓝色和绿色,话题显示为红色。正如图片表示的那样, turtlesim_node
和 turtle_teleop_key
通过 /turtle1/com_vel
话题通信。
使用 rostopic
命令行工具可以获取ROS 话题(topics) 相关信息。
可以使用帮助选项-h
获取可用的子命令:
或者在rostopic
后面按下tab
键,打印可能的子命令:
rostopic echo
能够展示话题发布的数据。
Usage:
查看turtle_teleop_key
节点发布的数据。
对于 ROS Hydro 以及之后的版本,数据发布在 /turtle1/cmd_vel
话题。打开新窗口,输入:
对于 ROS Groovy 以及之前的版本,数据发布在 /turtle1/command_velocity
话题。打开新窗口,输入:
你可能不会看到任何信息,因为当前话题未发布任何信息。此时,为了看到turtle_teleop_key
发布的信息需要继续按下方向键。如果乌龟没有移动,请先重新选择turtle_teleop_key
窗口。
对于 ROS Hydro 以及之后的版本,在按下按键后将看到以下信息:
对于 ROS Groovy 以及之前的版本,在按下按键后将看到以下信息:
打开rqt_graph
图形窗口,点击左上角的刷新按钮。图中红色的节点现在也订阅了 /turtle1/cmd_vel
话题。
rostopic list
返回当前订阅和发布的所有话题。
查看rostopic list
子命令,打开新窗口,运行:
使用rostopic list
下的verbose选项:
将展示当前订阅和发布的话题以及他们的消息类型。
对于 ROS Hydro 以及之后的版本:
ROS节点间的话题通信,通过发送ROS messages完成。对于发布者(turtle_teleop_key
) 和订阅者(turtlesim_node
) 之间的通信,发布者和订阅者必须发布和订阅相同的数据类型。这就意味着话题类型被定义为发布的消息类型。使用rostopic type
可以获取指定话题所发送的消息类型。
rostopic type
返回获取任意正在发布的话题的消息类型。
Usage:
对于 ROS Hydro 以及之后的版本:
打开新窗口,输入:
使用rosmsg
查看消息的详细定义:
在已知turtlesim
接受的消息类型后,我们可以发布相应的消息内容给我们的乌龟。
使用rostopic pub
发布/turtle1/cmd_vel
话题所需要的数据。
Usage:
对于 ROS Hydro 以及之后的版本,输入:
这一指令将发布一次消息给turtlesim
,指引乌龟以2.0的线速度和1.8的角速度运动。
这是一条较为复杂的指令,下面将给出详细的解释.
对于 ROS Hydro 以及之后的版本,这一命令将发布消息给特定的话题:
-1
这一选项表示,仅发布一次消息然后退出:
以下是本次发布消息的话题名称:
以下是该话题的消息类型:
这里的双破折号--
选项告诉解析器,后面的参数不是可选项。如果您的参数具有前导破折号“-”(如负数),那么就会出现双破折号的情况。
值得注意的是,乌龟运动一会后会自动停下来。为了使乌龟持续的运动下去,需要通过 rostopic pub -r
持续发布稳定的消息流。
对于 ROS Hydro 以及之后的版本:
这一条速度发布指令的速率是1Hz。
在rqt_graph
的图形界面中,我们可以清楚看到各节点以及话题之间的关系。这里的红色节点,即为当前发布速度消息的节点。
在turtlesim
的图形界面中,能清楚的看到小乌龟沿着一个连续的圆运动。打开一个新窗口,使用rostopic echo
来查看乌龟的位姿信息:
rostopic hz
命令可以监控消息发布的频率。
Usage:
查看turtlesim_node
正在发布/turtle1/pose
的频率:
可以得到以下信息:
可以看出,当前turtlesim
发布位姿消息的频率大概为62 Hz。同样的,我们可以使用rostopic type
和 rosmsg show
联合的方式获取消息的详细定义:
对于 ROS Hydro 以及之后的版本:
rqt_plot
显示有关主题的已发布数据随时间推进的图。在这里,我们将使用rqt_plot
来绘制在 /turtle1/pose
主题上发布的数据。在新窗口通过输入以下内容,打开rqt_plot
图形界面:
在左上角的文本框,可以输入任何想要绘制的话题数据。输入 /turtle1/pose/x
,点击高亮的加号按钮,或者直接回车。按同样的方式添加 /turtle1/pose/y
。很快就可以看到 x-y
坐标绘制在图中。
点击减号➖,下拉选择需要隐藏的绘图。隐藏前面添加的话题内容,添加/turtle1/pose/theta
以形成如下绘图。
http://wiki.ros.org/ROS/Tutorials/UnderstandingTopics
replacing with the name of your (e.g. indigo, jade, kinetic, lunar ...)
前面已经提到,geometry_msgs/Twist
消息有两个长度为三的浮点数组:linear
和 angular
。在这个例子中,'[2.0, 0.0, 0.0]'
将为线速度linear
赋值为x=2.0
, y=0.0
, 和z=0.0
, '[0.0, 0.0, 1.8]'
将为角速度 angular
赋值为 x=0.0
, y=0.0
, 和 z=1.8
。这是符合YAML 语法的格式,详细内容请参见 .