Understanding ROS Topics

ROSarrow-up-right/ Tutorialsarrow-up-right/ UnderstandingTopicsarrow-up-right

描述:介绍 ROS 话题(Topics),以及 rostopicarrow-up-rightrqt_plotarrow-up-right 命令行工具使用。

下一节Understanding ROS services and parametersarrow-up-right

Setup

roscore

打开新窗口,启动roscore

$ roscore

如果roscore已经启动,将提示以下错误信息:

roscore cannot run as another roscore/master is already running. 
Please kill other roscore/master processes before relaunching.
The ROS_MASTER_URI is http://ml-ros-kinetic:11311/
The traceback for the exception was written to the log file

这是正常的,因为有且仅需要一个roscore

turtlesim

在这一部分,我们将用到turtlesim功能包(包含在ros_tutorials元功能包中)。开启新命令窗口输入以下命令启动turtlesim gui

$ rosrun turtlesim turtlesim_node

turtle keyboard teleoperation

为了控制乌龟运动,在新窗口运行:

现在就可以通过方向键控制乌龟移动。如果乌龟没有移动,请先确保当前鼠标焦点在turtle_teleop_key所在的窗口。

image-20220706152723907

下面将讲述其背后的原理和实现。

ROS Topics

turtlesim_nodeturtle_teleop_key 通过ROS Topic进行通信。turtle_teleop_key 在话题中发布当前按下的方向键信息,turtlesim_node订阅相同的话题以获得当前按键信息。使用rqt_graph可以展示当前节点和话题的关系。

Note: 如果使用的是electric 会更早版本,rqt是不可用的。可以使用rxgraph代替。

Using rqt_graph

rqt_graph会创建当前系统运行的节点和话题的动态图。rqt_graphrqt功能包的一部分。如果尚未安装,可以输入:

replacing with the name of your ROS distributionarrow-up-right (e.g. indigo, jade, kinetic, lunar ...)

打开新窗口,输入:

将会弹出以下类似窗口:

image-20220706154057421

如果将鼠标悬停在/turtle1/com_vel,图形将会高亮,节点显示为蓝色和绿色,话题显示为红色。正如图片表示的那样, turtlesim_nodeturtle_teleop_key 通过 /turtle1/com_vel话题通信。

image-20220706154713117

Introducing rostopic

使用 rostopic 命令行工具可以获取ROS 话题(topics) 相关信息。

可以使用帮助选项-h获取可用的子命令:

或者在rostopic后面按下tab键,打印可能的子命令:

Using rostopic echo

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 话题。

image-20220706162203170

Using rostopic list

rostopic list返回当前订阅和发布的所有话题。

查看rostopic list子命令,打开新窗口,运行:

使用rostopic list下的verbose选项:

将展示当前订阅和发布的话题以及他们的消息类型。

对于 ROS Hydro 以及之后的版本:

ROS Messages

ROS节点间的话题通信,通过发送ROS messages完成。对于发布者(turtle_teleop_key) 和订阅者(turtlesim_node) 之间的通信,发布者和订阅者必须发布和订阅相同的数据类型。这就意味着话题类型被定义为发布的消息类型。使用rostopic type可以获取指定话题所发送的消息类型。

Using rostopic type

rostopic type返回获取任意正在发布的话题的消息类型。

Usage:

对于 ROS Hydro 以及之后的版本:

打开新窗口,输入:

使用rosmsg查看消息的详细定义:

在已知turtlesim接受的消息类型后,我们可以发布相应的消息内容给我们的乌龟。

rostopic continued

Using rostopic pub

使用rostopic pub发布/turtle1/cmd_vel话题所需要的数据。

Usage:

对于 ROS Hydro 以及之后的版本,输入:

这一指令将发布一次消息给turtlesim,指引乌龟以2.0的线速度和1.8的角速度运动。

turtle(rostopicpub).png

这是一条较为复杂的指令,下面将给出详细的解释.

对于 ROS Hydro 以及之后的版本,这一命令将发布消息给特定的话题:

-1这一选项表示,仅发布一次消息然后退出:

以下是本次发布消息的话题名称:

以下是该话题的消息类型:

这里的双破折号--选项告诉解析器,后面的参数不是可选项。如果您的参数具有前导破折号“-”(如负数),那么就会出现双破折号的情况。

前面已经提到,geometry_msgs/Twist消息有两个长度为三的浮点数组:linearangular。在这个例子中,'[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 语法的格式,详细内容请参见 YAML command line documentationarrow-up-right.

值得注意的是,乌龟运动一会后会自动停下来。为了使乌龟持续的运动下去,需要通过 rostopic pub -r持续发布稳定的消息流。

对于 ROS Hydro 以及之后的版本:

这一条速度发布指令的速率是1Hz

turtle(rostopicpub)2.png

rqt_graph的图形界面中,我们可以清楚看到各节点以及话题之间的关系。这里的红色节点,即为当前发布速度消息的节点。

image-20220706175256283

turtlesim的图形界面中,能清楚的看到小乌龟沿着一个连续的圆运动。打开一个新窗口,使用rostopic echo来查看乌龟的位姿信息:

Using rostopic hz

rostopic hz 命令可以监控消息发布的频率。

Usage:

查看turtlesim_node 正在发布/turtle1/pose的频率:

可以得到以下信息:

可以看出,当前turtlesim发布位姿消息的频率大概为62 Hz。同样的,我们可以使用rostopic typerosmsg show 联合的方式获取消息的详细定义:

对于 ROS Hydro 以及之后的版本:

Using rqt_plot

rqt_plot显示有关主题的已发布数据随时间推进的图。在这里,我们将使用rqt_plot来绘制在 /turtle1/pose 主题上发布的数据。在新窗口通过输入以下内容,打开rqt_plot图形界面:

在左上角的文本框,可以输入任何想要绘制的话题数据。输入 /turtle1/pose/x ,点击高亮的加号按钮,或者直接回车。按同样的方式添加 /turtle1/pose/y。很快就可以看到 x-y坐标绘制在图中。

rqt_plot.png

点击减号➖,下拉选择需要隐藏的绘图。隐藏前面添加的话题内容,添加/turtle1/pose/theta以形成如下绘图。

rqt_plot2.png

Reference

  1. http://wiki.ros.org/ROS/Tutorials/UnderstandingTopics

Last updated