参考:

ROS系列文章

ROS的架构

ROS的架构经过设计并划分成了三部分, 每一部分都代表一个层级的概念:

文件系统级(Filesystem level)
主要有ROS的内部构成、 文件夹结构, 以及工作所需的核心文件。

计算图级(Computation Graph level)
主要是进程和系统之间的通信,包括建立系统、 处理各类进程、 与多台计算机通信等。

社区级(Community level)
主要是在开发人员之间共享知识、 算法和代码,塑造了ROS强大的开源社区。

本章的准备工作
本文章中我们将会用到ros-tutorials程序包,要先用apt命令去安装:

sudo apt-get install -y ros-<distro>-ros-tutorials

 <distro>替换成你所安装的版本(比如 kinetic、melodic 等)。

从我们上一篇文章安装的是melodic版本,那么命令就是:

sudo apt-get install -y ros-melodic-ros-tutorials

ROS文件系统的概念
ROS文件系统可以将项目构建过程集中化, 同时提供很好的灵活性和工具来分散之间的依赖性。

Packages
功能包,也可以被称之为软件包,是ROS应用程序代码的组织单元,每个功能包都可以包含程序库、可执行文件、脚本或者其它手动创建的东西。

Manifest
清单,它包含了关于Packages的维护者、许可协议、依赖关系以及编译标志等的信息,由一个名为package.xml的文件管理。

Metapackage
元功能包:多个具有某些功能的包组织在一起,称为元功能包。

Metapackage Manifest
元功能包清单:由一个名字为package.xml的文件管理,类似普通功能包但有一个XML格式的导出标记。

文件系统工具
由于ROS中大量代码分散在众多的packages和Metapackage之中,linux本身的命令工具ls和cd已不能满足检索要求,因此ROS提供了一套自己的命令工具来完成与这些命令相似的工作。

rospack
rospack允许用户获取功能包的有关信息,比如我们找一个roscpp功能包所在的位置,可以通过以下命令:

➜  ~ rospack find roscpp

/opt/ros/melodic/share/roscpp

rospack的用法是:

rospack find [功能包名称]

ros006

roscd
roscd是rosbash命令集中的一部分,它允许你直接切换(cd)工作目录到某个软件包或者软件包集当中。

roscd的用法是:

roscd [功能包名称[/子目录]]

比如切换到roscpp目录下:

roscd roscpp

比如切换到roscpp的子目录msg下:

roscd roscpp/msg

ros007

rosls
这个命令更linux下的ls很像,但它允许你在任何位置列出某个功能包的当前目录或者其子目录的内容,而不需要在绝对路径执行ls。

rosls的用法是:

rosls [功能包名称[/子目录]]

比如列出roscpp目录下的内容:

rosls roscpp

比如列出roscpp的子目录msg下的内容:

rosls roscpp/msg

ros008

同时它们都支持Tab补全,非常方便

参考:

ROS官方wiki

ROS笔记(5) ROS架构