ROS基础教程学习笔记5-理解ROS的话题

本节主要让你了解关于ros话题(topic)的含义以及rostopic和rxplot命令工具的使用

1.开始

先保证roscore运行,打开一个新终端,键入:

roscore

然后在另外打开两个新终端打开乌龟节点和键控乌龟节点

rosrun turtlesim turtlesim_node

rosrun turtlesim turtle_teleop_key

然后你在键控乌龟的终端窗口控制乌龟随意移动一下:

ROS基础教程学习笔记5-理解ROS的话题_第1张图片

接下来可以看一下背后发生亮什么事情

2.ROS Topic

turtlesim_node节点和turtle_teleop_key节点之间是通过一个ros话题来通信的,turtle_teleop_key在一个话题上发布按键信息,turtlesim_node节点则订阅这个话题接收信息。

接下来使用rqt_graph命令来显示这之间的关系。

(1)使用rqt_garph

首先需要安装rqt程序包:

sudo apt-get install ros-kinetic-rqt
sudo apt-get install ros-kinetic-rqt-common-plugins 

打开一个新终端键入:

rosrun rqt_graph rqt_graph

就会显示:

ROS基础教程学习笔记5-理解ROS的话题_第2张图片

鼠标移到图上才会变成彩色,鼠标不再上面就全是黑色。

从图可以看出,两个节点正是通过一个名为/turtle1/cmd_vel的话题来通信的

(2)rostopic介绍

你可以通过使用帮助help来查看rostopic的子命令:

rostopic -h

ROS基础教程学习笔记5-理解ROS的话题_第3张图片

(3)rostopic echo

该命令可以显示某个话题发布的数据

//用法:
rostopic echo [topic]

打开一个新终端查看以下/turtle1/cmd_vel话题的数据:

rostpic echo /turtle1/cmd_vel

运行完该命令之后,此时并没有任何信息输出,因为键控节点并没有给乌龟节点发消息,此时需要你在turtle_teleop_key终端窗口通过方向键控制小乌龟移动,这个时候echo才会有信息出来,显示信息如下:

ROS基础教程学习笔记5-理解ROS的话题_第4张图片

此时在rqt_graph界面点一下左上角的刷新按钮,就会看到:

ROS基础教程学习笔记5-理解ROS的话题_第5张图片

也可以看出rostopic也订阅了/turtle1/cmd_vel话题

(4)rostopic list

先通过帮助查看一下子命令:

rostopic list -h
Usage: rostopic list [/namespace]

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
  --host                group by host name

使用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] 3 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
 * /statistics [rosgraph_msgs/TopicStatistics] 1 subscriber

3.ROS Messages

话题之间的通信是通过在节点之间发送ROS消息实现的。对于发布器(turtle_teleop_key)和订阅器(turtulesim_node)之间的通信,发布器和订阅器之间必须发送和接收相同类型的消息。这意味着话题的类型是由发布在它上面的消息类型决定的。使用rostopic type命令可以查看发布在某个话题上的消息类型

(1)rostopic type 查看发布话题的消息类型

//用法:
rostopic type [topic]

//示例:
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节点的消息类型后,就可以给turtle发布消息了

4.继续学习rostopic

了解亮ros信息后,接下来我们开始结合信息来使用rostopic

(1)使用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]'

这条命令是发消息给turtesim,告诉它以2.0大小的限速度和1.8大小的叫就会看到乌龟移动亮一个弧线:

ROS基础教程学习笔记5-理解ROS的话题_第6张图片

参数分析:

rostopic pub:这条命令将会发布消息到某个给定的话题 
-1:这个参数选项使rostopic发布一条消息后马上退出
/turtle1/cmd_vel:这是消息所发布到的话题名称
geometry_msgs/Twist:这是发布消息的类型
--:告诉命令解析器,接下来的参数不是命令
2.0 1.8:在一个turtle1/cmd_vel消息里面包含有两个浮点型元素:linear和angular。在本例中,2.0是linear的值,1.8是angular的值。这些参数其实是按照YAML语法格式编写的

植入命令后,小乌龟运动亮一下就停止了,就需要给一个稳定的频率来保持移动:

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

这条命令以1hz的频率发送消息到话题上。

ROS基础教程学习笔记5-理解ROS的话题_第7张图片

(2)rostopic hz

该命令可以用来查看数据发布的频率

//用法:
rostopic hz [topic]

//示例:
rostopic hz /turtle1/cmd_vel

输出信息为:

average rate: 0.999
	min: 1.001s max: 1.001s std dev: 0.00000s window: 2
average rate: 0.999
	min: 1.000s max: 1.001s std dev: 0.00028s window: 3
average rate: 1.000
	min: 1.000s max: 1.001s std dev: 0.00050s window: 4
average rate: 1.000
	min: 1.000s max: 1.001s std dev: 0.00046s window: 5

可以看出刚好是1hz的频率发数据给turtle,接下来可以通过下面的命令获取话题更深层次的信息:

rostopic type /turtle1/cmd_vel |rosmsg show

5.使用rqt_plot

rqt_plot命令可以实时显示一个发布到某个话题上的数据变化图形。这里我们将使用rqt_plot命令来绘制正在发布到/turtle1/pose话题上的数据变化图形。首先,在一个新终端中运行rqt_plot命令:

rosrun rqt_plot rqt_plot

会弹出一个图形坐标窗口

ROS基础教程学习笔记5-理解ROS的话题_第8张图片

你可以通过在topic那个选型哪里输入话题来绘制出话题,按”+“号键就会将相关话题的信息都展现出来,按“-”号键就可以将你不想看得图像消除

总结

  • rosrun rqt_graph rqt_graph:能够显示个节点和节点通过什么话题传递数据的
  • rostopic echo [topic]:查看某个话题发布的信息
  • rostopic list -v:列出所有发布和订阅消息
  • rostopic type [topic]:查看发布话题的消息类型
  • rostopic hz [topic]:查看数据发布频率
  • ros pub [yopic] [msg_type] [args]:吧数据发布到某个话题上去 例如:
    rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'
  • rosrun rqt_plot rqt_plot:实时显示一个发布到话题的数据可视化

参考文献:http://wiki.ros.org/cn/ROS/Tutorials/UnderstandingTopics

你可能感兴趣的:(ROS学习)