本节主要让你了解关于ros话题(topic)的含义以及rostopic和rxplot命令工具的使用
先保证roscore运行,打开一个新终端,键入:
roscore
然后在另外打开两个新终端打开乌龟节点和键控乌龟节点
rosrun turtlesim turtlesim_node
rosrun turtlesim turtle_teleop_key
然后你在键控乌龟的终端窗口控制乌龟随意移动一下:
接下来可以看一下背后发生亮什么事情
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
就会显示:
鼠标移到图上才会变成彩色,鼠标不再上面就全是黑色。
从图可以看出,两个节点正是通过一个名为/turtle1/cmd_vel的话题来通信的
(2)rostopic介绍
你可以通过使用帮助help来查看rostopic的子命令:
rostopic -h
(3)rostopic echo
该命令可以显示某个话题发布的数据
//用法:
rostopic echo [topic]
打开一个新终端查看以下/turtle1/cmd_vel话题的数据:
rostpic echo /turtle1/cmd_vel
运行完该命令之后,此时并没有任何信息输出,因为键控节点并没有给乌龟节点发消息,此时需要你在turtle_teleop_key终端窗口通过方向键控制小乌龟移动,这个时候echo才会有信息出来,显示信息如下:
此时在rqt_graph界面点一下左上角的刷新按钮,就会看到:
也可以看出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
话题之间的通信是通过在节点之间发送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发布消息了
了解亮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大小的叫就会看到乌龟移动亮一个弧线:
参数分析:
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的频率发送消息到话题上。
(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
rqt_plot命令可以实时显示一个发布到某个话题上的数据变化图形。这里我们将使用rqt_plot命令来绘制正在发布到/turtle1/pose话题上的数据变化图形。首先,在一个新终端中运行rqt_plot命令:
rosrun rqt_plot rqt_plot
会弹出一个图形坐标窗口
你可以通过在topic那个选型哪里输入话题来绘制出话题,按”+“号键就会将相关话题的信息都展现出来,按“-”号键就可以将你不想看得图像消除
rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'
参考文献:http://wiki.ros.org/cn/ROS/Tutorials/UnderstandingTopics