了解ROS topics(主题)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了了解ROS topics(主题)相关的知识,希望对你有一定的参考价值。

参考技术A 1.在上面node的例子基础上再开一个Terminal后运行如下命令:

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

  这时在该Terminal按键盘的方向键,就可以看到node例子里的乌龟在移动。

2.打开一个新的Terminal,运行如下命令就可以看到node之间通过topic通信的关系:

  命令运行后有如下界面:

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

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

  运行 rostopic echo /turtle1/cmd_vel 命令,并在可以接收键盘方向键的Terminal操作方向键,可以看到如下返回信息:

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

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

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

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

6.ROS Messages

  两个通过topic通信的node需要保持相同的消息类型,使用rostopic type可以查看到相应的topic的消息类型,继而通过rosmsg show命令可以查看到该类型的定义:

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

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

7.了解了Topic的类型后继续了解如何通过命令发布Topic,运行 rostopic pub -l /turtle1/cmd_vel  geometry_msgs/Twist -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]' 命令,会发布主题为/turtle1/cmd_vel,类型为 geometry_msgs/Twist,参数为'[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.0]'的带参数的主题,其中--是分隔符。

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

  而相应的界面如下:

8.上面发布的主题只是让乌龟移动了1/4个圆,接下来让乌龟以1Hz的频率不停移动转圈,运行如下命令:

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

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

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

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

10.使用rqt_plot可以滚动刷新发布的主题里的数据根据时移绘制情况,执行 rosrun rqt_plot  rqt_plot 命令, 有如下界面:

此时在上面界面里的Topic框里输入/turtle1/pose/x并按回车或按后面的+号,界面会变为如下:

 也可以继续添加其他主题时的数据项变量名,让上面界面里显示更多对比数据。

参考网址: http://wiki.ros.org/ROS/Tutorials/UnderstandingTopics

理解ROS的Topics

1. 设置

(1) 运行roscore

(2) 在新的terminal运行turtlesim

$ rosrun turtlesim turtlesim_node

(3)  用键盘遥控turtle

$ rosrun turtlesim turtle_teleop_key

2. ROS Topics

2.1 turtle_teleop_key node 发布(publish) Topic,turtlesim_node node 订阅(subscribe) Topic,两者相互通信。

2.2 使用rqt_graph

    (1)rqt_graph是rqt package的一部分,创建系统运行的动态图(dynamic graph)。

    (2)rqt package的安装:

$ sudo apt-get install ros-<distro>-rqt
$ sudo apt-get install ros-<distro>-rqt-common-plugins

    (3)运行

$ rosrun rqt_graph rqt_graph

    (4)结果

技术分享图片

    蓝色和绿色是Nodes,红色是Topic

2.3 介绍rostopic

    (1)通过rostopic可以得到有关ROS topics的有关信息

$ rostopic 
bw    echo  find  hz    info  list  pub   type 

    (2)通过help查询子命令

$ rostopic -h
  rostopic bw display bandwidth used by topic   rostopic echo print messages to screen   rostopic hz display publishing rate of topic   rostopic list print information about active topics   rostopic pub publish data to topic   rostopic type print topic type

2.4 使用rostopic echo可以显示top发布的数据

$ rostopic echo /turtle1/cmd_vel

  若没看到东西说明没有数据发布,选中turtle_teleop_key的terminal,按键盘上的键盘键控制即可。

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

  此时再看rqt_graph,按左上角refresh键,这时会显示新的node

技术分享图片

2.5 使用rostopic list 显示所有发布和被订阅的topics

  (1)查看需要什么argument

$ rostopic list -h

  (2)得到以下结果

Usage: rostopic list [/topic]

Options:
  -h, --help            show this help message and exit
  -b BAGFILE, --bag=BAGFILE
                        list topics in .bag file
  -v, --verbose         list full details about each topic
  -p                    list only publishers
  -s                    list only subscribers

   (3)如需要详细信息verbose,输入

$ rostopic list -v

   得到以下结果

Published topics:
 * /turtle1/color_sensor [turtlesim/Color] 1 publisher
 * /turtle1/cmd_vel [geometry_msgs/Twist] 1 publisher
 * /rosout [rosgraph_msgs/Log] 2 publishers
 * /rosout_agg [rosgraph_msgs/Log] 1 publisher
 * /turtle1/pose [turtlesim/Pose] 1 publisher

Subscribed topics:
 * /turtle1/cmd_vel [geometry_msgs/Twist] 1 subscriber
 * /rosout [rosgraph_msgs/Log] 1 subscriber

 

3. ROS Message

3.1 关于topic的节点间通信通过发送节点间的ROS Message实现,发布者和订阅者需要发送和接受相同类型的message,topic type由message type定义,发送topic的message类型可通过rostopic type确定。

3.2 rostopic type使用方法

rostopic type [topic]

   如:

$ rostopic type /turtle1/cmd_vel

   得到:

geometry_msgs/Twist

3.3 使用rosmsg可以得到message的详细信息:

geometry_msgs/Vector3 linear
  float64 x
  float64 y
  float64 z
geometry_msgs/Vector3 angular
  float64 x
  float64 y
  float64 z

4. 伴有message的rostopic

4.1 使用rostopic pub

用法:

rostopic pub [topibc] [msg_type] [args]

比如:

$ rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- ‘[2.0, 0.0, 0.0]‘ ‘[0.0, 0.0, 1.8]‘

解释:

rostopic pub:发布message关于指定的topic
-1: 只发布一条message然后退出
/turtle1/cmd_vel: 要发布的topic的名字
geometry_msgs/Twist: message的类型
--: 告诉选项解析器后面的东西不是可选的,有负数时一定要有这项
‘[2.0, 0.0, 0.0]‘ ‘[0.0, 0.0, 1.8]‘ :第一行向量是线性值,第二行是角度值,详见YAML syntax

乌龟停止了运动,因为需要steady stream of commands at 1Hz来保持运动。
$ rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- ‘[2.0, 0.0, 0.0]‘ ‘[0.0, 0.0, -1.8]‘

 在速度topic上发布了速度命令,速率为1Hz

 这是再在rqt_graph上按左上角的refresh

技术分享图片

查看被发布的数据:
rostopic echo /turtle1/pose

4.2 使用rostopic hz来指导数据发布的速率:

用法:

rostopic hz [topic]

比如:

$ rostopic hz /turtle1/pose

结果:

subscribed to [/turtle1/pose]
average rate: 59.354
        min: 0.005s max: 0.027s std dev: 0.00284s window: 58
average rate: 59.459
        min: 0.005s max: 0.027s std dev: 0.00271s window: 118
average rate: 59.539
        min: 0.004s max: 0.030s std dev: 0.00339s window: 177
average rate: 59.492
        min: 0.004s max: 0.030s std dev: 0.00380s window: 237
average rate: 59.463
        min: 0.004s max: 0.030s std dev: 0.00380s window: 290

 

我们可以通过得到更深的信息:

$ rostopic type /turtle1/cmd_vel | rosmsg show

 

5. 使用rqt_plot绘制发布的数据

$ rosrun rqt_plot rqt_plot

/turtle1/pose/x

/turtle1/pose/y

/turtle1/pose/theta

 










以上是关于了解ROS topics(主题)的主要内容,如果未能解决你的问题,请参考以下文章

ROS-4 : ROS节点和主题

深入了解kafka系列-消费者

Kafka:如何高效运维之主题篇

RocketMq-dashboard:topic 5min trend 原理和源码分析

PostGraphile 订阅 - “主题”指的是啥?

ROS从入门到精通系列ROS系统整体架构详解(下)