这一期我们将了解 ROS 中最基本的程序单元 Node,也就是节点
➢ 以及节点的组词形式 package, 我们称之为包。
➢ 之前我们说过, ROS 和安卓有很多相似之处,安卓系统是由很多的 APP 组成。
➢ 我们在使用安卓手机的时候,实际上就是在使用具体的 APP
➢ 打电话是一个 APP,发短信是一个 APP,拍照是一个 APP,玩游戏也是一个 APP。
➢ 在 ROS 中也一样,当我们在使用 ROS 的时候,实际上是在使用 ROS 中的某一个或者某一些节点,这些节点有的是管建图的,有的是管导航的,有的是控制底盘,有的是驱动雷达
➢ 尽管节点们有着各自完全不同的功能,
➢ 但是每个节点在代码上的结构是遵循一个固定的套路的,
➢ 先干嘛, 再干嘛,最后干嘛,这些都是事先安排好的。
➢ 如果不按这个套路来,就可能会和 ROS 的核心配合失败,导致程序运行不起来。
➢ 所以我们只要掌握了这个套路,以后无论是阅读代码臃肿的节点程序,还是自己实现一
个繁琐复杂的需求,都不会感觉无法入手。
➢ 只要在代码中找到几个关键的环节,基本上对整个程序的内容分布就比较清楚了。
➢ 其实按照 ROS 的模块化设计理念,单个节点的功能一般不会弄得太过复杂,
➢ 有时候我们看到一些 ROS 机器人能够实现一些非常复杂的任务,那其实是一堆节点相
互合作的结果
➢ 把它们拆开来看,每个节点都是一个很单一的功能,
➢ 当我们逐个击破调节了每一个节点的具体功能之后, 再把这些节点串联起来,就不难理解整个任务的实现原理了。
➢ 所以我们可以从最简单的节点程序入手,先熟悉节点的基本结构,然后再在这个结构中逐步的装填其他的功能。
➢ 等按照课程一步步地完成一系列小的功能点之后,
➢ 再回过头来看,就会发现其实已经实现了一个相当智能的机器人程序。
➢虽然 ROS 程序的基础单元是节点,但我们并不能像手机下载 APP 一样只安装单个节点,而是必须以包为单位进行安装。
➢ 在之前我们使用 apt 安装的 Turtlesim 和从 GitHub 下载的 wpr_simulation 都是下载的一整个软件包
虽然我们最后只用到了这个软件包里的一个或几个节点,但是还是得把整个软件包下载下来。
➢ ROS 采用的模块化的设计理念,强调功能的相互独立,所以造成了单个节点的功能比较单一,要想实现一个完整的任务,通常需要几个节点的配合才能够完成。
➢ 同时 ROS 使用 cmake 和 catkin 作为编译工具,引入了 package 包的概念,正好可以把散落的节点规整起来,
➢ 一次安装一个包,也就是一组节点,省去了一个安装节点的繁琐操作,
➢ 跟超市购物一样,把所有关联的节点都装在一个包里,就可以一次全部带走。
➢ 所以我们也可以简单地将包理解为节点的容器。