ROSubuntu实战:理解话题topics

roscore
rosrun turtlesim turtlesim_node
rosrun turtlesim turtle_teleop_key
rosrun rqt_graph rqt_graph
rostopic echo
rostopic list -h
rostopic type /turtle1/cmd_vel
rosmsg show geometry_msgs/Twist
rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist – ‘[2.0, 0.0, 0.0]’ ‘[0.0, 0.0, 1.8]’
rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 – ‘[2.0, 0.0, 0.0]’ ‘[0.0, 0.0, -1.8]’
rostopic hz topic_name
rosrun rqt_plot rqt_plot

1.准备工作

1.1 roscore

在新的终端中,运行roscore

1.2 turtlesim

运行turtlesim

$ rosrun turtlesim turtlesim_node

1.3 乌龟键盘遥操作

我们需要有东西来操控乌龟移动。打开新的终端输入

$ rosrun turtlesim turtle_teleop_key

现在可以使用键盘的箭头按钮来控制乌龟移动。切记一定要在turtle_teleop_key终端操作箭头控制移动,在其他界面不好用。

2 ros话题topics

turtlesim_node与turtle_teleop_key节点是通过ROS话题进行通讯。turtle_teleop_key在向话题发送键盘敲击的命令,与此同时,turtlesim订阅相同的话题以接受键盘敲击命令。通过rqt_graph命令我们可以看到正在运行的节点和话题。

2.1 rqt_graph

rqt_graph创建了一个正在系统中运行的活跃图表。它是rqt包的一部分。首先要下载一哈。

$ sudo apt-get install ros-<distro>-rqt
$ sudo apt-get install ros-<distro>-rqt-common-plugins

在这里插入图片描述打开新的终端窗口:

$ rosrun rqt_graph rqt_graph

在这里插入图片描述当把鼠标移动到/turtle1/cmd_vel上时,将会突出ros节点,此时,可以看出来,/teleop_turtle与/turtlesim节点通过话题/turtle1/cmd_vel进行通信。因为ubuntu截图不变,此处不附图。

2.2 rostopic

rostopic工具允许你获得有关ros话题的相关信息。
你可以通过帮助选项获得可使用的rostopic子命令。

$ rostopic -h

在这里插入图片描述

2.3 rostopic echo

rostopic echo 展示了被发布到话题的数据

rostopic echo [topic]

在这里插入图片描述具体如图所示。当我们回过头去操作之前的终端让乌龟移动时,rostopic echo便会返回具体的数据。

注意,此时我们回到rqt_graph那个小程序中,点击左上角的刷新按钮(左上角的第一个按钮,长得就像刷新一样的那个),此时再看,
在这里插入图片描述可以看出,rostopic echo的工作原理是生成一个独立节点,然后订阅我们想知道的topic,获得我们需要的数据。

2.4 rostopic list

rostopic list命令将会返回当前所有的发布的和订阅的主体列表。
让我们看一哈rostopic list子命令所需要的参数,打开新的终端

$ rostopic list -h

在这里插入图片描述用一下其中的-v选项
在这里插入图片描述一切都显而易见。

3.ros message 消息

通过在节点之间发送ROS消息来进行主体通信。对于发送节点(turtle_teleop_key)与接受节点(turtlesim_node),二者要进行通信,必须发送和接受相同类型的消息。这意味着主题topic的类型由其上发布的消息message类型所决定。被发送到一个主体上的消息的类型可以由rostopic type来确定。

3.1 rostopic type

rostopic type 返回正在发布的任何主体的消息类型。
用法:
rostopic type topic名称

$ rostopic type /turtle1/cmd_vel

与此同时,我们还以可使用rosmsg来看消息的细节:

$ rosmsg show geometry_msgs/Twist

在这里插入图片描述如此,话题的类型与消息的具体定义均可查明。

4.rostopic 扩充

既然我们已经了解了有关ros消息的相关内容,下面就将消息与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的角速度移动。

测试证明,由于该命令发送指令的时间只有3S,只有在这3S的时间内,在rqt_graph中会出现一个rostopic的节点,用来发送数据,3S过后,该节点消失!!!
在这里插入图片描述这是一个很复杂的例子,所以,让我们来认真看一下每一个参数的细节:
rostopic pub
-1 :这个选项使rostopic只发送一次消息便停止;
/turtle/cmd_vel:topic名称;
geometry_msgs/Twist:发送给topic的消息的类型
–:这个双破折号选项告诉选项分析器以下参数都不是选项。如果参数中有一个前破折号,例如负数,那么这个选项就是必须的;
‘[2.0, 0.0, 0.0]’ ‘[0.0, 0.0, 1.8]’ :如前所述,geometry_msgs/Twist 有两个向量,每个向量有三个浮点元素:线性元素和角度元素。在这种情况下,’[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的角值。这些参数实际上是使用yaml语法的,这在yaml命令行文档中有更详细的描述。
经过测试,我发现对于第一个速度参数,虽然有x,y,z三个坐标轴,但只有x值对速度有影响。

你或许已经注意到,乌龟已经停止移动;这是因为乌龟需要以1赫兹的稳定指令来使他持续移动。我们可以使用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]'

此时我们在通过rqt_graph来查看一下。点击左上方刷新按钮

在这里插入图片描述上图中,左上角为键盘录入节点,左下角为持续发送特定指令的节点,即rostopic pub产生的节点
右上角为乌龟节点,右下角为rostopic echo 返回具体数据的节点。

可以看到,乌龟正在疯狂转圈。打开一个新的终端,使用rostopic echo可以看到我们的乌龟turtlesim发送的数据

rostopic echo /turtle1/pose

4.2 rostopic hz

rostopic hz 报告数据发送的频率。
使用方法

rostopic hz [topic]

让我们看一下turtlesim_node在以多块的速度发送/turtle/pose:
在这里插入图片描述在这里插入图片描述现在我们可以知道,海龟正在以60赫兹的速率发布关于海龟的数据。我们还可以将rostopic type与rosmsg show结合使用,以获得有关主题的深入信息:

$ rostopic type /turtle1/cmd_vel | rosmsg show//两个命令一起使用

5 rqt_plot

rqt_plot显示主题上发布的数据的滚动时间图。在这里,我们将使用rqt_plot来绘制发布在/turtle1/pose主题上的数据。首先,在一个新的终端键入

$ rosrun rqt_plot rqt_plot

在应该弹出的新窗口中,左上角的文本框使您能够向绘图中添加任何主题。键入/turtle1/pose/x将突出显示先前无法使用的加号按钮。按下它,重复相同的步骤,主题为/Turtle1/Pose/Y。现在您将看到图中绘制的海龟的X-Y位置。

同时,按下减号会显示一个菜单,允许您从绘图中隐藏指定的主题。隐藏刚刚添加的全部主题并且另外添加/turtle1/pose/theta将会导致下图中的情况。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值