概述
首先需要打开一个终端在里面运行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的话题概念会有一个清楚的认识。
最后
以上就是开放未来为你收集整理的ROS的学习(七)ROS的话题的全部内容,希望文章能够帮你解决ROS的学习(七)ROS的话题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复