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都将导致下图所示的绘图。