机器人操作系统(ROS)教程10:ROS的话题-Arduino中文社区 - Powered by Discuz! Archiver

对折之内 发表于 2015-2-14 12:01

机器人操作系统(ROS)教程10:ROS的话题

本帖最后由 对折之内 于 2015-2-14 12:05 编辑

上节我们启动了一个turtlesim_node节点,这节我们再启动一个turtle_teleop_key节点,并他们之间通过话题来互相通信。先看下这几个概念:          节点(NODE):一个节点就是一个可执行程序,它使用ROS可以和其他节点进行通信。   消息(Message):当在一个话题上,发布或订阅时所使用的ROS的数据类型。   话题(Topic):节点可以在一个话题上发布消息,同样也可以订阅一个话题来接收消息。区分这几个概念,对理解ROS是很有帮助的。现在打开终端,输入:
roscore


再打开一个新的终端,运行一个turtlesim_node节点:rosrun turtlesim turtlesim_node
再打开一个终端,运行turtle_teleop_key 节点:
rosrun turtlesim turtle_teleop_key
在运行完这条命令后,在打开turtle_teleop_key 节点的这个终端下,按键盘上的方向键可以看到,之前我们运行的乌龟开始移动。就说明这两个节点间已经建立了通讯。 turtlesim_node和turtle_teleop_key通过ROS的话题来相互通信。turtle_teleop_key把用户按下的键发布到话题上,turtlesim_node也订阅了同一个话题用来接收用户按下的键,并做出相应的动作。从这个例子就可以明白节点和话题的关系和作用了。我们可以使用rqt_graph工具来创建当前系统中运行的节点的动态图。从这个工具中你可以直观地看到节点之间通过话题的连接。如果没有安装rqt_graph的话,先输入:sudo apt-get install ros-indigo-rqt
和sudo apt-get install ros-hydro-rqt-common-plugins
来安装。在这个过程中,不要关闭前面打开的节点。
新打开一个终端,输入:rosrun rqt_graph rqt_graph
来启动rqt_graph工具。就可以在rqt_graph中看到一个表示节点之间的关系的图。将鼠标放在图片上面可以看到图片会变为高亮。可以看到两个节点是通过/turtle1/cmd_vel话题来进行通信的。如下图所示:

使用rostopic echo命令可以查看在一个话题上发布的数据。它的使用方法如下:rostopic echo
例如,我们可以输入:rostopic echo /turtle1/cmd_vel   
之后我们在运行turtle_teleop_key节点的窗口下按方向键,就可以在刚才的窗口看到输出的数据如下:
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窗口左上角的刷新按钮,就可以看到刚才的话题又多了一个订阅者。如下:

使用rostopic list命令可以列举出当前系统中的话题:
rostopic list
使用rostopic list -v
可以详细地查看每一个话题的发布者和订阅者的个数。
需要注意的是:发布者(turtle_teleop_key)和接收者(turtlesim_node)的通信,发布者和接收者必须使用相同类型的消息。也就是说,一个话题的类型是通过在它上面发布的消息的类型来定义的。可以通过:rostopic type /turtle1/cmd_vel
命令来查看/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

于是我们就知道了发布者(turtle_teleop_key)和接收者(turtlesim_node)之间通信的消息类型了,于是我们可以自己用rostopic pub命令用来发布消息,使乌龟动起来。
rostopic pub命令的使用方法如下:
rostopic pub
实例如下:
rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- '' ''
我们可以看到,乌龟运动了一个弧度。
我们来详细解析一下rostopic pub 命令的参数。
-1
这个参数是说明执行命令的次数。此处表示,执行这个命令一次。
/turtle1/cmd_vel
这个参数表示,发布这个消息的话题。是用哪个话题把这个消息发布出去。
geometry_msgs/Twist
这个参数是说明消息的类型。
'' ''
这个则是消息的内容。可与geometry_msgs/Twist的类型一一对应。
可以使用rostopic pub -r命令让乌龟持续运动,如:
rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '' ''
可以看到,乌龟围绕着一个圈在不停的运动。








cttx 发表于 2016-8-31 09:52

可以,继续学习
页: [1]
查看完整版本: 机器人操作系统(ROS)教程10:ROS的话题