理解ROS的Topics

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了理解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 topics(主题)

ROS官网初级教程学习总结(5-9)

ROS官网初级教程学习总结(5-9)

ROS2学习笔记4--认识ros2话题topic

ROS2之OpenCV怎么理解一段代码

由浅到深理解ROS