[置顶] ROS的学习(七)ROS的话题

     首先需要打开一个终端在里面运行roscore:
roscore

     再打开一个终端,在里面运行一个turtlesim_node节点:
rosrun turtlesim turtlesim_node

     打开另一个终端,在里面输入:
rosrun turtlesim turtle_teleop_key


在运行完这条命令后,在这个终端下,按键盘上的方向键可以看到,之前我们运行的乌龟开始移动,:-),很有意思吧。

     turtlesim_node和turtle_teleop_key通过ROS的话题来相互通信。turtle_teleop_key把用户按下的键发布到话题上,turtlesim_node也订阅了同一个话题用来接收用户按下的键,并做出相应的动作。我们有这个例子可以体会到话题的作用,更加深刻的认识到了节点的概念。

     rqt_graph创建了一个当前系统中运行的节点的动态图。如果你没有安装rqt的话,请首先安装:

sudo apt-get install ros-hydro-rqt

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

     首先按照ROS学习(六)博客中讲到的例子运行一下,即通过按键来控制乌龟的移动。我们在终端中输入命令:
rosrun rqt_graph rqt_graph

就可以看到一个表示节点之间的关系的图。将鼠标放在图片上面可以看到图片会变为高亮。可以看到两个节点是通过 /turtle1/command_velocity话题来进行通信的。

     使用rostopic echo命令可以查看在一个话题上发布的数据。它的使用方法如下:

rostopic echo [topic]

例如,我们可以输入:
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
---

     现在我们重新运行:
rosrun rqt_graph 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

     现在我们已经知道了turtlesim接收的消息类型,现在我们可以给它发布消息了。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]'

我们可以看到,乌龟运动了一个弧度。这是一个非常复杂的命令,我们详细分析一下:
rostopic pub

这个命令发布话题,
-1 

这个参数的意思是只发布一个命令,然后退出。
/turtle1/cmd_vel

这是要发布消息的话题,
--
2.0 1.8 

这两个参数我们可以先不用深究。我们可以使用 rostopic pub -r命令让乌龟持续运动,如:
rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'

我们可以看到,乌龟围绕着一个圈在不停的运动。

     通过上面丰富的实例,相信大家会对ROS的话题概念会有一个清楚的认识。


你可能感兴趣的:(topic,robot,话题,ROS,operating,syst)