理解ROS话题---ROS学习第5篇

Posted loongembedded

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了理解ROS话题---ROS学习第5篇相关的知识,希望对你有一定的参考价值。

1. 通过键盘控制turtle

(1) 打开一个终端运行roscore
(2) 再打开一个新的终端来打开turtlesim_node节点

kandi@ubuntu:~$ rosrun turtlesim turtlesim_node

弹出一个乌龟的界面
(3) 再打开一个新的终端,通过键盘控制turtle

kandi@ubuntu:~$ rosrun turtlesim turtle_teleop_key


现在就可以通过键盘上的方向键来控制turtle运动了,要确保turtle_teleop_key的终端窗口是在任务最前面,这样才能获取方向键的输入,才能看到turtle的移动

2. ROS话题

turtlesim_node节点和turtle_teleop_key节点之间是通过一个ROS话题来相互通信的。turtle_teleop_key在话题上发布键盘按下的消息,turtlesim则订阅该话题以接收消息。我们使用rqt_graph来显示当前运行的节点和话题。

2.1 使用rqt_graph

打开一个新的终端:

$ rosrun rqt_graph rqt_graph

弹出一个窗口

把鼠标放在/turtle/cmd_vel上方,相应的ROS节点(蓝色和绿色)和话题(红色)就会高亮显示。其中turtle_teleop_key节点对应蓝色的/teleop_turtle,turtlesim_node节点对应绿色的/turtlesim,可以看到,这两个节点通过一个名为/turtle1/cmd_vel的话题来相互通信。

2.2 介绍rostopic

可通过使用rostopic帮助选项查看可用的rostopic子命令,用法:

$ rostopic -h

rostopic is a command-line tool for printing information about ROS Topics.

Commands:
rostopic bw display bandwidth used by topic
rostopic delay display delay of topic from timestamp in header
rostopic echo print messages to screen
rostopic find find topics by type
rostopic hz display publishing rate of topic
rostopic info print information about active topic
rostopic list list active topics
rostopic pub publish data to topic
rostopic type print topic or field type
Type rostopic -h for more detailed usage, e.g. ‘rostopic echo -h’

2.3 使用功能rostopic echo

rostopic echo可以显示在某个话题上发布的数据
用法:

$ rostopic echo [topic]

打开新终端:

rostopic echo /turtle1/cmd_vel

输入上面命令后刚开始什么信息都看不到,请选中turtle_teleop_key的终端窗口以确保按键输入能够被捕获,需要按下键盘方向键让turtle_teleop_key节点发布数据。可以看到turtle_teleop_key节点发布的"指令、速度"

现在再来看一下rqt_graph,正如我们所看到的,rostopic echo (这里红色显示)现在也订阅了/turtle1/cmd_vel话题

2.4 使用rostopic list

rostopic list能够列出当前已被订阅和发布的所有话题,使用下面命令列出所有发布和订阅的主题及其类型的详细信息:

rostopic list -v

3. ROS消息

话题的通信是通过节点间发送ROS消息实现的。为了使发布者(turtle_teleop_key)和订阅者(turtulesim_node)进行通信,发布者和订阅者必须发送和接受相同类型的消息。这意味着对话题的类型是由发布在它上面消息的类型决定的。

3.1 使用rostopic type

使用rospotic type命令可以查看发布在话题上的消息的类型,用法:

rostopic type [topic]

运行:

kandi@ubuntu:~$ rostopic type /turtle1/cmd_vel
geometry_msgs/Twist

我们可以通过使用rosmsg查看消息的详细信息:

kandi@ubuntu:~$ 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

4.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]’

此条命令会发送一条消息给turtlesim,告诉它以2.0大小的线速度和1.8大小的角速度移动。对应移动的距离见下图:

下面来详细分析一下其中的每一个参数。
●"rostopic pu"这条命令将消息发布到指定的话题
●"-l"这一选项会让rostopic只发布一条消息,然后退出
●"/turtle1/cmd_vel"这是要发布到的话题的名称
●"geometry_msgs/Twist"这是发布到话题时使用的消息的类型
●"–"这两个破折号用来告诉选项解析器,标明之后的参数都不是选型。如果参数前有破折号(-)比如附属,那么这是必需的。
●如前所述,一个geometry_msgs/Twist消息有两个浮点型元素:linear和angular。在本例中,’[2.0, 0.0, 0.0]‘表示linear的值为x=2.0, y=0.0, z=0.0,而’[0.0, 0.0, 1.8]'是说angular的值为x=0.0, y=0.0, z=1.8。这些参数实际上使用的是YAML语法,在YAML命令行文档中有描述。

运行完"rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist – ‘[2.0, 0.0, 0.0]’ ‘[0.0, 0.0, 1.8]’"
后turtle已经停止移动了,如果要保持移动状态,turtle需要一个稳定的频率为1Hz的指令流程才能保持移动的状态。我们可以使用rostopic pub -r命令来发布源源不断的命令,下面命令以1Hz的速度发布geometry_msgs/Twist 消息到/turtle1/cmd_vel话题中。

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


我们还可以看一下rqt_graph中的情形,可以看到rostopic pub节点(红色)正在与rostopic echo节点(绿色)进行通信:

可以看到,turtle正沿着一个圆形轨迹持续运动。我们可以在新终端中通过rostopic echo命令来查看turtlesim所发布的数据

4.2 使用rostopic hz

rostopic hz报告数据发布的频率,用法:

rostopic hz [topic]

我们看一下turtlesim_node发布/turtle/pose有多快:

现在我们知道了turtlesim正以大概60Hz的频率发布有关乌龟的数据,我们也可以结合rostopic type和rosmsg show命令来获取关于某个话题的更深层次信息

kandi@ubuntu:~$ rostopic type /turtle1/cmd_vel | rosmsg show
geometry_msgs/Vector3 linear
float64 x
float64 y
float64 z
geometry_msgs/Vector3 angular
float64 x
float64 y
float64 z

5. 使用rqt_plot

rqt_plot命令可以在滚动时间图上显示发布到某个话题上的数据,这里我们使用rqt_plot命令来绘制正被发布到/turtle1/pose话题上的数据,首先,在一个新终端中输入:

$ rosrun rqt_plot rqt_plot

会弹出一个新窗口,可以在左上角的文本框里面添加任务想要绘制的话题。在里面输入/turtle1/pose/x后,之前不能按下的加号按钮将会变亮。按一下该按钮,并对/turtle1/pose/y重复相同的过程。现在你会在图中看到turtle的x-y位置

按下减号按钮会显示一组菜单可以让你在图中隐藏指定的话题。现在隐藏掉你刚才添加的话题并添加/turtle1/pose/theta,你会看到如下所示的图:

以上是关于理解ROS话题---ROS学习第5篇的主要内容,如果未能解决你的问题,请参考以下文章

理解ROS节点---ROS学习第4篇

理解ROS节点---ROS学习第4篇

理解ROS服务和参数---ROS学习第6篇

理解ROS服务和参数---ROS学习第6篇

ROS官网初级教程学习总结(5-9)

ROS官网初级教程学习总结(5-9)