文件系统
ROS文件系统的架构如上图所示,ROS不同的组件要放在不同的文件夹下,且文件夹根据功能对文件进行组织。
- 功能包 :功能包构成ROS中的原子级。一个功能包具有用于创建ROS程序的最小结构和最少内容。它可以包含ROS运行时进程(节点)、配置文件等;
- 功能包清单:功能包清单提供关于功能包、许可证、依赖关系、编译标志等的信息。包清单由一个名为package.xml的文件管理。;
- 元功能包:如果你希望将几个具有某些功能的包组织在一起,那么你将会使用一个元功能包。该功能包是一个虚包,没有实质性的功能,但是它依赖了其他的软件包,可以通过这种方法将功能包组合起来。
- 元功能包清单:元功能包清单类似普通功能包但有一个XML格式的导出标记。它在结构上也有一定的限制。
- 消息类型:消息是一个进程发送到其他进程的信息。ROS有很多标准类型的消息。消息类型的说明存储在my_package/msg/MyMessageType.msg中。
- 服务类型:服务描述说明存储在my_package/srv/MyServiceType.srv中,为ROS中由每个进程提供的服务定义请求和响应数据结构。
工作空间
工作空间是包含众多功能包的文件夹,如下图所示。
该图为catkin_book的一级文件目录,其包含build, devel, src三个基本的文件夹。
build:编译空间,为功能包和项目保存缓存信息、配置和其他中间文件
devel: 开发空间,保存编译后的程序。
include文件夹中包含C++程序使用的自定义的库文件,如自定义消息或服务
lib文件夹中包含python脚本使用的模块文件,如自定义消息或服务
src: 源文件空间,放置了功能包、项目、复制的包等。
chapter2_tutorials:功能包
CMakeLists.txt:当在工作空间中配置包时,src文件夹中有CMakeLists.txt因为cmake调用它。这个文件是通过catkin_init_workspace命令创建的。
用catkin编译包有两个选项。第一个是使用标准CMake工作流程。
通过此方式,可以一次编译一个包,见以下命令:
cmake packageToBuild/
make
如果想编译所有的包,可以使用catkin_make命令行,见以下命令:
cd workspace
catkin_make
在ROS配置的编译空间目录中,这两个命令编译出可执行文件。
功能包
上图为某功能包的文件夹树图
CMakeLists.txt:Cmake的生成文件,编译使用文件,catkin_make编译工作空间时使用。
include/package_name:包含需要的库的头文件;
msg:用于存放自定义非标准的消息文件
package.xml:功能包清单。必须在每个功能包中,它用来说明此包相关的各类信息,如包的名称、依赖关系等信息。作用是为了方便安装和分发这些功能包。在package.xml文件中使用的两个典型标记是<build_depend>和<run_depend>。<build_depend>标记会显示当前功能包安装之前必须先安装哪些功能包。<run_depend>标记显示运行功能包中代码所需要的包。
scripts:用于存放python文件或其他脚本语言的可执行脚本;
src:用于存放程序源文件;
srv:用于存放服务。
部分功能命令
rospack:使用此命令来获取信息或在系统中查找包。
catkin_create_pkg:使用此命令创建一个新的功能包。
catkin_make:使用此命令来编译工作空间。
rosdep:使用此命令安装功能包的系统依赖项。
rqt_dep:此命令用来查看包的依赖关系图。
roscd:此命令用于更改目录,类似于Linux中的cd命令。
rosed:此命令用来编辑文件。
roscp:此命令用于从功能包复制文件。
rosd:此命令列出功能包的目录。
rosls:此命令列出功能包下的文件,类似于Linux中的ls命令。类似于Linux命令的命令。下面是一些示例。
元功能包
元功能包(或简称元包)是一些只有一个文件的特殊包,这个文件就是package.xml。它不包含其他文件,如代码等。且在package.xml中会注明metapackage。
消息msg
消息类型必须具有两个主要部分:字段(field)和常量(constant)。
字段定义数据类型,常量定义字段名称。如下图中int32为字段,id为常量。
消息数据放在功能包的msg文件夹下,文件的后缀为.msg。
发布者和订阅者之间传递消息。
下图为标准数据类型。
针对消息,可以使用rosmsg命令来对消息进行查看或操作。
服务srv
ROS使用一种简化的服务描述语言来描述ROS的服务类型,用于实现节点之间的请求/响应通信。服务的描述存储在功能包的srv子目录下的.srv文件中。
使用rossrv命令对服务进行查看或操作。
服务的书写类似消息,由字段和常量组成。“—”用于分割请求和响应,“—”上方为请求,下方为响应。