ROS学习笔记五:理解ROS topics

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/mountzf/article/details/52314364

ROS学习笔记五:理解ROS topics

本节主要介绍ROS topics并且使用rostopic和rqt_plot命令行工具。

例子展示

roscore

首先运行roscore系列服务,这是使用ROS所必需的基础

roscore

turtlesim

这里还要用到turtlesim例子,先运行其节点:

rosrun turtlesim turtlesim_node

turtle键盘遥控操作

我们可以运行一个例程,然后通过键盘遥控操作turtle运行:

rosrun turtlesim_teleop_key

然后就可以通过方向键来驱动小海龟运行了。下面来探究一下屏幕背后发生了什么。

ROS topics

上面例程中节点turtlesim_node和节点turtle_teleop_key通过一个ROS topic来互相通信。turtle_teleop_key节点在topic上面发布关键进程,turtlesim_node节点则订阅相同的进程来接收这些关键进程。可以利用rqt_graph工具来显示正在运行的节点和主题之间的关系。

使用rqt_graph

rqt_graph工具是rqt软件包的一部分,可以创建系统中正在运行的节点、主题之间的一个动态关系图。运行命令:

rosrun rqt_graph rqt_graph

然后就可以看到类似如下的关系图,可以看出节点turtle_teleop_key和节点turtlesim_node之间在turtle1/cmd_vel主题上进行通信。
这里写图片描述

使用rostopic

rostopic工具允许我们获取ROS topics的相关信息。rostopic -h可以知道有如下命令:

Commands:
    rostopic bw display bandwidth used by topic
    rostopic delay  display delay of topic from timestamp in header
    rostopic echo   print messages to screen
    rostopic find   find topics by type
    rostopic hz display publishing rate of topic    
    rostopic info   print information about active topic
    rostopic list   list active topics
    rostopic pub    publish data to topic
    rostopic type   print topic type

使用rostopic echo

rostopic echo显示发布在一个主题上的数据。

rostopic echo [topic]

在此可以利用此命令看一下由turtle_teleop_key发布的command_velocity数据。

rostopic echo /turtle1/cmd/vel

刚运行此命令,应该在屏幕上什么也不会出现,这是因为在这个主题上没有发布任何数据。通过按下方向键来使turtle_teleop_key节点在此topic上发布数据,此时在刚刚的窗口应该出现如下信息:

 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
---
linear: 
  x: 0.0
  y: 0.0
  z: 0.0
angular: 
  x: 0.0
  y: 0.0
  z: -2.0

回过头来再看一下rqt_graph中的关系图,发现又多了一个订阅节点,就是用来显示topic数据的节点。

通过命令列出节点:

rosnode list
/rosout
/rostopic_3763_1472092089570
/rqt_gui_py_node_3827
/teleop_turtle
/turtlesim

使用rostopic list

rostopic list命令显示了当前被订阅和被发布的主题列表。

rostopic list
/rosout
/rosout_agg
/statistics
/turtle1/cmd_vel
/turtle1/color_sensor
/turtle1/pose

ROS Messages

通过在节点之间发送ROS Messages实现节点之间的通信,发布和订阅节点之间发送和接收的数据类型必须一致,这意味着一个主题的数据类型由发布在其上的信息类型所决定。发布在主题上的信息类型可以由rostopic type topic1来显示。

使用rostopic type

rostopic type返回正在使用的主题上的信息的类型。

rostopic type /turtle1/cmd_vel
geometry_msgs/Twist

利用命令rosmsg可以查看信息的详细信息

rosmsg show geometry_msgs/Twist
geometry_msgs/Vector3 linear
  float64 x
  float64 y
  float64 z
geometry_msgs/Vector3 angular
  float64 x
  float64 y
  float64 z

现在我们知道了turtlesim需要什么样的数据类型,所以我们可以发布命令给我们的小海龟。

rostopic continued

学习完ROS Messages之后,下面来学习一下rostopic和messages。

使用rostopic pub

rostopic pub直接发布数据到一个主题之上

rostopic pub [topic] [msg_type] [args]

对于小海龟的例子

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

给定速度参数竟然只能用逗号隔开,呵呵
上面的命令告诉小海龟按照线速度2角速度1.8进行移动,默认的持续时间是3秒钟,如下图

通过加入选项-r则可以一直向topic发布数据

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

再次看一下rqt_graph中发生了什么,其中rostopic pub节点在一直与rostopic echo节点和turtlesim节点进行通信。

使用rostopic hz

rostopic hz返回数据发布的速率。

rostopic hz [topic]

利用该命令查看turtlesim发布/turtle1/pose的速度

rostopic hz /turtle1/pose
subscribed to [/turtle1/pose]
average rate: 62.502
    min: 0.016s max: 0.016s std dev: 0.00006s window: 60
average rate: 62.501
    min: 0.016s max: 0.016s std dev: 0.00005s window: 123
average rate: 62.498
    min: 0.016s max: 0.016s std dev: 0.00005s window: 185

使用rqt_plot

rqt_plot是rqt软件包的一部分,可以动态绘制发布到某一个主题上的数据的图形

rosrun rqt_plot rqt_plot

在输入框中输入要绘制的主题名称,选择即可。

总结

这一节的内容较多,首先要理解ROS topics、ROS nodes、ROS Messages之间的关系。目前个人的理解是:ROS topics是ROS nodes之间进行通信的枢纽,ROS messages是ROS nodes订阅和发布数据的载体。两个ROS nodes欲实现通信,则其中一个节点向ROS topic发布ROS messages,另一节点则通过订阅此topic来接收messages,两者的message类型一定要相同,而message的类型由主题确定,通过rostopic type命令可以查看topic的数据类型。

然后就是辅助查看ROS中节点关系和数据的工具:rqt_graph和rqt_plot,两者都是针对ROS类型的,其中rqt_graph工具会自动搜寻系统中正在运行的节点和主题,并动态绘制出关系图,rqt_plot则是绘制发布到topic上的数据的图形,因此两者使用的前提是有ROS的进程在运行。

运行节点:roscore
rosrun turtlesim turtlesim_node
rosrun turtlesim turtle_teleop_key
查看节点关系图:rosrun rqt_graph rqt_graph

显示topic1上所发布的数据:rostopic echo topic1
列出当前处于激活状态的topic列表:rostopic list -v
显示topic1的数据类型:rostopic type topic1
显示类型更加详细的信息:rosmsg show type1
直接向主题topic1发布数据:rostopic pub [topic1] [msg_type] [args]
显示主题topic1上数据的发布速率:rostopic hz [topic1]

祝枫
2016年8月25日于哈尔滨

展开阅读全文

没有更多推荐了,返回首页