三、理解ROS功能包(一)

三、理解ROS功能包(一)

0.前言

对于功能包的理解意思在于两个方面。

一方面,当你完成各个功能包的功能实现,需要组合各个功能包以实现最终更复杂的功能,例如你完成了定位、路径规划、底盘速度控制、雷达数据获取这几个功能包的实现,现在要完成最终的导航功能,那么就需要从抽象层面清楚理解功能包的构成。功能包在抽象层面最重要的特点就是你要使用它的时候可以完全不了解其内部的代码实现,而只需要了解功能包提供的接口。以gmapping功能包为例,它的接口主要为:订阅/odom、/imu、/laser_scan、/tf话题,发布/map话题,所以单对于gmapping,我们希望它生成代价地图(/map),就需要提供给它/odom、/imu、/laser_scan、/tf话题。

另一方面,功能包的理解是完成整个ROS框架搭建的基础,所有具体的代码,为的都是最后实现功能包所对应的”功能“。

*这里明显写的很抽象,等复习到后面一点的时候,我打算去了解一下turtlesim功能包源码的组成,然后专门总结一下我调包的技术;前者对应的是我说的功能包理解的第二方面,后者对应我说的第一方面。

1.从turtlesim功能包简单理解

这里还要特别指明我复习的参考书是胡春旭写的《ROS机器人开发实践》,作者在B站上还有“ROS入门21讲”的视频,我的ROS技术差不多都是跟着古月学的

为了搞清楚turtlesim功能包节点、服务、话题的基本情况我实际操作了一下,来搞清楚下面几个问题:

a.turtlesim功能包下只有一个节点吗?

其实这个问题不用验证,因为我还是知道turtlesim下有两个节点的,也就是/teleop_turtle和/turtlesim,但是我还是没事检验了一下

我rosrun了turtlesim的两个节点,然后用rosnode list指令在终端输出来

在这里插入图片描述
其实可以利用自动补全更加顺理成章地来查看有turtlesim功能包下有哪些节点
在这里插入图片描述

我都检验过了,这四个都是turtlesim功能包下的节点

特别要说的是这个draw_square节点,字面意思就是这个节点实现的任务,“画正方形”,运行起来的时候乌龟就会一直在那边画正方形。这应该算是个挺无聊的节点,因为节点本身拥有某种角色身份才更合乎ROS的理念。例如turtlesim_node的身份是海龟本身,turtle_teleop_key的身份是遥控器,而这个draw_square指代了一个具体过程,这个功能可以用节点完成,但是显然用服务的形式更加符合一般思维逻辑(解释“为什么不能用topic代替service“也是一样的理由)。

b.节点会提供哪些东西?

这个问题算是一个先导问题,因为对于功能包实际应用时最重要的就是把它要抽象成一个通过接口就能交互的“盒子”。

这个问题大答案就是第一篇中所说的几个ROS的基本概念,也就是ROS的一些基本组成:话题、服务、参数

c.turtlesim提供了哪些话题?

直接看结果,我们就以turtlesim_node为例:

在这里插入图片描述

它产生了“/turtle1/cmd_vel”“ /turtle1/color_sensor”“/turtle1/pose“三个话题

这里说的产生不是发布的意思!更确切是注册的意思,因为生成订阅者也会产生这个话题,话题可以视作公告板上的一张纸,只要是有读者或者有撰写者,这个纸就会被贴到公告板上。

然后我用rostopic echo来查看各个话题,rostopic echo查看的是“纸”上的内容。

cmd_vel(command_velocity)是我最熟悉的话题,它的中文意思是速度指令,我们用echo去查看的时候会发现什么也没有,这个是因为“海龟”本身并不会在纸上写任何东西,它只是作为一个订阅者,阅读纸上内容,然后做出相应动作。

echo pose的话会得到海龟当前的位置信息。

然后我echo了一下color_sensor,它得到的信息是背景的颜色信息:
在这里插入图片描述

然后我们可以来看一下各个节点之间通过话题实现的通讯。首先我们要确认海龟本身是我们的主要节点,然后我们开启遥控器操控海龟移动。这个操控的信息实现的办法就是通过话题/cmd_vel,遥控器在纸上写下指令,海龟看了以后进行移动。

这里我就用rqt工具来直观验证一下:

在这里插入图片描述

验证完毕。

d.turtlesim提供的服务有哪些?

这里我们先尝试一下不太可能有服务提供的节点,具体见下(话题名简写了):

/teleop_key

在这里插入图片描述

/draw_square

在这里插入图片描述

他们都是有服务的,但是貌似都是没有肉眼可见的功能

所以主要还是要看turtlesim_node的服务列表了:

在这里插入图片描述

提供的服务翻译成中文即可

e.turtlesim提供的参数有哪些?

这里就长话短说了,这里会发现一个奇怪的问题,就是节点一旦启动参数就会被加载到公告板上,就算对应节点关闭,公告板上依然留有参数

这里以turtlesim_node为例,它提供了这些参数,描述的是背景板的颜色:
在这里插入图片描述

*到这里就先告一段落,以上是了解了一下turlesim功能包在干些什么,提供了什么,具体怎么被使用,以及怎么搭建就看后续了。现在我又有点明白了开头说的两个理解功能包的方面,现在可以说的更加确切些:一方面,理解功能包怎么使用;一方面,理解功能包怎么被搭建。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值