Advertisement

了解ROS topics(主题)

阅读量:

在上面node的例子基础上再开一个Terminal后运行如下命令:

rosrun turtlesim turtle_teleop_key

此时Terminal会有如下提示输出:

Reading from keyboard
---------------------------
Use arrow keys to move the turtle.

此时,在终端上按下键盘的方向键即可观察到node例子里的乌龟呈现为小海龟

启动一个新的Terminal窗口后,请执行以下命令以观察到node之间的topic通信关系:

rosrun rqt_graph rqt_graph

命令运行后有如下界面:

运行rostopic -h 命令可以看到如下帮助信息:

rostopic 是一种用于输出 ROS 题目信息的命令行工具。

命令:

rostopicbw 可以显示主题所使用的带宽。
rostopicdelay 可以显示主题从头时间戳中延迟的信息。
rostopspace echo 可以打印消息到屏幕。
rostopspace find 可以根据类型查找主题。
rostopspace hz 可以显示主题发布速率。
rostopspace info 可以输出活跃主题的信息。
rostopspace list 可以列出活跃的主题。
rostopspace pub 可以将数据发布到指定的主题上。
rostopspace type 可以输出主题或字段的类型信息。

使用 -h 选项可以获得更详细的信息,请参考 'rostopic echo -h' 为例。

4.使用rostopic echo命令查看主题发布的数据

执行命令rostopic echo /turtle1/cmd_vel后,在终端中通过键盘方向键进行操作时,终端将显示以下返回信息。

linear:
x: -2.0
y: 0.0
z: 0.0
angular:
x: 0.0
y: 0.0
z: 0.0
---

相应的刷新rqt_graph界面,更新为如下;

5.使用rostopic list查看当前所有订阅和发布的主题

运行rostopic list -h 可以看到如下帮助信息:

获取 ROS 节点列表

选项:

  • h | ? 显示帮助信息并退出程序
  • b BAGFILE | -b BAGFILE 指定包含节点包的文件名
  • 列出.bag 文件中的主题名称
  • v | Verbs 进行详细列表操作
  • p 只列出发布者
  • s 只列出订阅者
  • 按主机名分组

运行rostopic list -v 可以看到如下内容:

Published topics:

  • /turtle1/color_sensor [turtlesim/Color] 1publisher
  • /turtle1/cmd_vel [geometry_msgs/Twist] 1publisher
  • /rosout [rosgraph_msgs/Log] 4 publishers
  • /rosout_agg [rosgraph_msgs/Log] 1publisher
  • /turtle1/pose [turtlesim/Pose] 1 publisher

Subscribed topics:

  • /turtle1/cmd_vel [geometry_msgs/Twist] 2subscribers
  • /rosout [rosgraph_msgs/Log] 1 subscriber
  • /statistics[rosgraph_msgs/TopicStatistics] 1 subscriber

6.ROS Messages

两个节点利用topic通信机制应采取措施以维持一致的消息类型。通过rostopic命令可获取相关主题的消息类型信息。进而可通过rosmsg show命令获取该消息类型的详细定义。

运行rostopic type /turtle1/cmd_vel 命令会返回如下内容:

geometry_msgs/Twist

接下来使用rosmsg show geometry_msgs/Twist 命令,可以看到如下返回值:

维度为三维的线性向量(Linear Vector)定义如下:

其中各分量均为浮点数类型(float64),具体包括x分量、y分量以及z分量。

类似地,在角向坐标系中(Angular Coordinate System),同样定义了一个三维向量:

其中各分量均为浮点数类型(float64),具体包括x分量、y分量以及z分量。

在确定了Topic所属类型之后,请继续学习如何发布Topic。运行以下命令:rostopic pub -l /turtle1/cmd_vel geometry_msgs/Twist -- '[2.5, 35°, [x,y,z]]' 'velocity_vector' 这将实现对/turtle1/cmd_vel主题的参数化发布操作。其中--用于分隔不同参数块

该命令运行后,会出现如下提示:

publishing and latching message. Press ctrl-C to terminate

而相应的界面如下:

  1. 上述主题仅实现了让乌龟移动四分之一圆周的目标,并未完成后续设定频率转动的任务。随后,请执行以下指令:

rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, -1.8]'

使用到了-r 1参数,表示执行的频率是1Hz,相应的截图如下:

此时刷新rqt_graph会有如下界面:

9.接下来使用rostopic hz命令可查看指定Topic的发布频率,如下命令:

rostopic hz /turtle1/cmd_vel

此时会看到如下信息不停输出:

subscribed to [/turtle1/cmd_vel]
no new messages
average rate: 1.001
min: 0.999s max: 0.999sstd dev: 0.00000s window: 2
average rate: 1.000
min: 0.999s max: 1.000s std dev: 0.00062swindow: 3
average rate: 1.000
min: 0.999s max: 1.000sstd dev: 0.00054s window: 4

使用rqtPlot能够实时更新发布到主题中的数据,并基于时间偏移进行绘制;运行 rosrun rqtPlot rqtPlot 命令即可;呈现以下界面:

当前,在此编辑区域的Topic字段中录入/turtle1/pose/x,并分别按下回车键和+号键时(或者同时按下这两个快捷键),系统界面将相应地进行更新。

还可以在上面界面上进一步增添其他主题的数据项变量名,并使界面中更清晰地呈现更多对比信息

请参考:ROS教程理解主题 作为一个关键资源库

全部评论 (0)

还没有任何评论哟~