ROS学习(四)了解ROS主题

一、建立

1.1 roscore

首先,确保在新终端中运行roscore :

$ roscore

1.2 turtlesim功能包

在本教程中,我们还将使用turtlesim。请在新的终端上运行:

$ rosrun turtlesim turtlesim_node

1.3 用键盘控制乌龟

请在新的终端上运行:

$ rosrun turtlesim turtle_teleop_key

现在,您可以使用键盘上的箭头键(上下左右)来驱动乌龟了。如果您无法驾驶乌龟,请选择turtle_teleop_key的终端窗口,以确保记录了您键入的键。
在这里插入图片描述

二、ROS主题

turtlesim_node和turtle_teleop_key节点彼此通过ROS通信主题。turtle_teleop_key正在发布按键控制的主题,而turtlesim 订阅了同一主题以接收这些按键。让我们使用rqt_graph来显示当前正在运行的节点和主题。

2.1 使用rqt_graph

rqt_graph创建一个动态图形,显示系统中正在发生的事情。rqt_graph是rqt软件包的一部分。除非已经安装,否则运行:

$ sudo apt-get install ros- melodic -rqt
$ sudo apt-get install ros- melodic-rqt-common-plugins

注意ROS版本名称,我的是melodic
在新终端中输入:

$ rosrun rqt_graph rqt_graph

你会看到以下类似内容:
在这里插入图片描述
如果将鼠标放在/ turtle1 / cmd_vel上方,它将突出显示ROS节点(此处为蓝色和绿色)和主题(此处为红色)。如您所见,turtlesim_node和turtle_teleop_key节点在名为/ turtle1 / cmd_vel的主题上进行通信。
在这里插入图片描述

2.2 rostopic介绍

该rostopic工具可以让你获取有关ROS的消息主题。
您可以使用帮助选项获取rostopic的可用子命令:

$ rostopic -h
rostopic bw          显示主题使用的带宽
rostopic delay     从标题中的时间戳显示主题的延迟 
rostopic echo      打印消息到屏幕
rostopic find        按类型查找主题
rostopic hz           显示主题的发布的频率    
rostopic  info       打印在运行主题的信息
rostopic  list        列出正在运行的主题
rostopic pub       将数据发布到主题
rostopic type      打印主题或字段类型

在这里插入图片描述
或在rostopic后按tab键(好像是双击来者)会自动显示:
在这里插入图片描述

2.3 使用rostopic echo

rostopic echo 显示有关某个主题的数据。
用法:

rostopic echo [topic]

让我们看一下turtle_teleop_key节点发布的命令速度数据。
对于ROS Hydro和更高版本,此数据发布在/ turtle1 / cmd_vel主题上。在新的终端中,运行:

$ rostopic echo /turtle1/cmd_vel

您可能不会看到任何事情,因为没有关于该主题的数据被发布。让我们通过按箭头键使turtle_teleop_key发布数据。请记住,如果乌龟不动,则需要再次选择turtle_teleop_key终端。
在这里插入图片描述
现在,让我们再次看一下rqt_graph。按下左上角的刷新按钮以显示新节点。
在这里插入图片描述

2.4 使用rostopic list

rostopic list返回当前已订阅和发布的所有主题的列表。

让我们找出list子命令需要什么参数。在新的终端运行中:

$ rostopic list -h

在这里插入图片描述
对于rostopic list,请使用verbose选项:

$ rostopic list -v

在这里插入图片描述

三、ROS Messages

通过在节点之间发送ROS消息来进行主题交流。为了使发布者(turtle_teleop_key)和订阅者(turtlesim_node)进行通信,发布者和订阅者必须发送和接收相同类型的消息。这意味着主题类型由发布在其上的消息类型定义。关于主题发送的消息的类型可以使用rostopic type来确定

使用 rostopic type

用法:

rostopic type [topic]

对于ROS Hydro和更高版本,尝试:

$ rostopic type /turtle1/cmd_vel

你会得到:
在这里插入图片描述
我们可以使用rosmsg查看消息的详细信息:

$ rosmsg show geometry_msgs / Twist

你会得到:
在这里插入图片描述
现在我们知道了turtlesim期望的消息类型,我们可以将命令发布到我们的turtle。

四、rostopic continued

现在我们已经了解了ROS messages,让我们将rostopic与messages一起使用。

4.1 使用 rostopic pub

rostopic pub将数据发布到当前广告(advertise)的主题上。
用法:

rostopic pub [topic] [msg_type] [args]

对于ROS Hydro和更高版本,例如:

$ 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 pub
  • 此选项(连字符1)使rostopic只发布一条消息然后退出:
 -1 
  • 这是要发布到的主题的名称:
/ turtle1 / cmd_vel
  • 这是发布到主题时要使用的消息类型:
geometry_msgs/Twist
  • 这个选项(双破折号)告诉选项解析器,下列参数都不是选项。这在你的参数前面有破折号的情况下是必需的,比如负数。
--
  • 如前所述,geometry_msgs / Twist msg具有两个向量,每个向量包含三个浮点元素:linear和angular。在这种情况下,[[2.0,0.0,0.0]'是x = 2.0,y = 0.0和z = 0.0的线性值,而[[0.0,0.0,1.8]'是x = 0.0的角度值,y = 0.0,z = 1.8。
'[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]' 

您可能已经注意到乌龟已经停止移动了。这是因为乌龟需要1 Hz的稳定命令流才能继续移动。我们可以使用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]'

这将以速度1 Hz的速度发布速度命令。

在一个新的终端中输入:

rostopic echo /turtle1/pose

可以查询乌龟的位置信息

4.2 使用rostopic hz

rostopic hz报告数据发布的速率。
用法:

rostopic hz [topic]

让我们看看turtlesim_node发布/ turtle1 / pose的速度:

$ rostopic hz /turtle1/pose

你会看到:
在这里插入图片描述
我们还可以将rostopic type与rosmsg show结合使用,以获取有关主题的深入信息:

$ rostopic type /turtle1/cmd_vel | rosmsg show

在这里插入图片描述

五、使用rqt_plot

rqt_plot显示有关主题发布的数据的滚动时间图。在这里,我们将使用rqt_plot绘制在/ turtle1 / pose主题上发布的数据。首先,输入以下命令启动rqt_plot:

$ rosrun rqt_plot rqt_plot

在一个新的终端。在应该弹出的新窗口中,左上角的文本框使您能够向绘图添加任何主题。键入/ turtle1 / pose / x将突出显示以前禁用的加号按钮。按下它,然后对主题/ turtle1 / pose / y重复相同的过程。现在,您将在图形中看到乌龟的xy位置。
在这里插入图片描述
按下减号按钮将显示一个菜单,您可以从该菜单中隐藏指定主题。隐藏您刚刚添加的主题和添加/ turtle1 / pose / theta都将导致下图所示的绘图。
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值