ROS学习-小乌龟解析

ROS入门的时候,肯定都跑过小乌龟.这小乌龟到底能给我们什么帮助呢?

rosrun turtlesim turtlesim_node

启动一只小乌龟,如下图所示,蓝色的背景,小乌龟就处于背景的正中央
在这里插入图片描述

一 查看话题列表

rostopic list

这条命令能够帮助我们查看当前ROS运行状态下,所有正在运行的话题,它会将全部的话题打印出来.
在这里插入图片描述
可以看到这里一共有五个话题.

/rosout /rosout_agg 这两个话题是roscore主节点启动后产生的话题.这里我们不理它.所以可以看到,启动一个乌龟节点,附带产生了三个话题,分别是:
/turtle1/cmd_vel
/turtle1/color_sensor
/turtle1/pose

其中,/turtle1 是这只乌龟的名字,也可以说是命名空间,我们不搭理它.那这些话题代表着什么呢?

cmd_vel 这是速度话题.我们启动的键盘控制,就是通过这个话题来对乌龟进行控制.

rosrun turtlesim turtle_teleop_key

我们启动键盘控制,然后再查看一次话题列表.可以看到,并没有产生新的话题.
在这里插入图片描述

rqt_graph

我们打开qt插件–话题可视化界面.
在这里插入图片描述
可以看到,键盘控制节点 /teleop_turtle 的箭头指向 /cmd_vel 话题,而 该话题的箭头指向 /turtlesim 乌龟仿真节点.这代表什么意思呢?

二 查看话题内容

rostopic info /turtle1/cmd_vel

这条命令能够打印出 /turtle1/cmd_vel 这个话题的内容.
在这里插入图片描述
打印出来的内容包含三个信息:Type,Pubulisher,Subscribers.

Pubulisher 是发布者的意思,而 Subscribers 是订阅者的意思.

我们再来对照上面的话题可视化插件.可以看到:
① 箭头指向话题 /turtle1/cmd_vel 的是节点 /teleop_turtle ,而这个图中它是发布者;
② /turtle1/cmd_vel 将箭头指向 /turtlesim 节点,而这个图中它是订阅者.

根据我们的操作,键盘按下后乌龟会运动.可知,话题发布者就是命令发出端,是控制者,而话题订阅者就是命令的接收端,是被控者.话题就是这个意思,很容易理解.

那除此之外,Type 又是什么呢?

三 查看消息格式

我们知道话题需要命令发布者,也需要命令订阅者,那还缺什么呢?那就是命令了,Type 显然就是命令的类型了,我们称之为消息.这里它的内容是 geometry_msgs/Twist.这是什么呢?

我们再运行一条新的命令:

rosmsg show geometry_msgs/Twist

在这里插入图片描述
这条命令能够帮助我们打印需要查看的消息的格式.从图中可以看出,这条消息包含两个内容,六个参数.

第一个内容 linear 是线速度,第二个内容 angular 是角速度.
线速度 用于控制乌龟的前进与后退;
角速度 用于控制乌龟的旋转方向.

这是一个很普遍使用的消息格式.我们自己制作ROS机器人的时候,用的也是这个消息格式.

继续看图,可以看到,线速度有三个参数,角速度也有三个参数.这是为什么呢?
虽然很多物体都是处在二维的平面进行运动,像汽车一样,可以前进后退,它们是以x轴作平移运动.但是,现实中的物体都是三维的,三维的物体有三条交叉的轴线.像电梯的运动,就是以z轴作平移运动.以y轴运动的机器虽然不常见到,但它确实是存在的.所以线速度的运动需要三个参数值.

那旋转为什么也是三个值?
这其实也很好理解.汽车的旋转是绕着垂直于汽车运动平面的z轴运动的.同理,也有绕x轴的运动,也有绕y轴的运动.飞机就是可以实现绕三个轴运动的机器了.所以飞机有 yaw(偏航角),pitch(俯仰角),roll(翻滚角) 这三个值.这里就不作展开了.如果很难想象,也可以观察魔方,转动魔方的时候,就可以发现魔方有三个轴可以转动.

但对于乌龟来说,只需要x轴的平移运动,绕z轴的旋转运动.所以其实只用到了其中的两个值.
在这里插入图片描述

四 查看消息数据

‘rosmsg show geometry_msgs/Twist’ 命令只让我们看到了消息的格式,却看不到在话题运作下,消息的具体状态.

为了能够看到话题发布时,消息的具体数据,我们需要运行一条新的命令:

rostopic echo /turtle1/cmd_vel

这条命令能够打印出话题接收到的实时消息内容,如果我们不对该话题发布消息,是看不到任何信息的.

那么此时,我们尝试一下,让乌龟向前运动一下.
在这里插入图片描述
可以看到,该命令下方,立刻为我们打印了乌龟运动的相关信息,其中 linear 的 x 参数有了数值,而其他五个参数的数值均为 0.

我们再给乌龟一个旋转的运动.
在这里插入图片描述
可以看到,命令下方的数据立刻产生了更新,linear 的 x 参数变为 0,而angular 的 z 参数产生了数值.

五 总结

以上就是对乌龟 /turtle1/cmd_vel 话题的解析,它帮助我们了解了:
① 什么是话题,话题的作用是什么
② 话题的结构: 发布者,订阅者,消息
③ 消息的作用

如何查看话题列表
如何查看话题信息
如何查看消息的格式
如何查看话题接收到的消息数据内容
⑤ 乌龟运动的所需数据

在这里插入图片描述

发布了45 篇原创文章 · 获赞 40 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_43419705/article/details/103098756