ROS的文件系统
基本概念
package是ROS系统中的最基本的组织单位。每个package都可以包含库,可执行文件,脚本或其他文件。
Manifest: package描述的描述文件,用于描述package之间的依赖关系和package的有关信息,例如版本,维护者,许可证等。
stacks: package的集合。
stack Manifest: 作用类似package manifest文件,用来描述Stacks的。
系统工具
由于package和stacks的文件结构可能很复杂,使用ls和cd来定位文件十分麻烦,所以ROS提供了一些工具。
rospack:
用于获取package的有关信息,如使用:rospack find [package_name],可获得package的路径
roscd:
类似于cd的作用,不同的是可利用package名字直接切换到相应文件目录下,roscd package-or-stack[/subdir]
roslog:
进入ROS存储日志文件的文件夹
rosls:
类型于ls的作用,可利用package名字直接使用ls而不是按照目录,rosls package-or-stack [/subdir],支持TAB补全
package
package.xml
必须包含package.xml文件,该文件定义有关软件包的属性,例如软件包名称,版本号,作者,维护者以及对其他catkin软件包的依赖关系。
package.xml文件格式:
(1): 以<package>作为根标记
<package format =“ 2”>
</ package>
(2): 至少包含以下一组标记
<name> -包的名称
<version> -软件包的版本号(必须为3个点分隔的整数)
<description> -包装内容的描述
<maintainer> -正在维护包的人员的姓名
<license> -用于发布代码的软件许可证(例如GPL,BSD,ASL)。
(3): 依赖关系,<depend>指定依赖关系是构建,导出和执行依赖关系。这是最常用的依赖项标签。
CMakeLists.txt
每个package都具有自己的文件夹
创建package
建立工作区
建立如下文件结构的工作区
catkin Workspace:
workspace_folder/ -- WORKSPACE
src/ -- SOURCE SPACE
CMakeLists.txt -- 'Toplevel' CMake file, provided by catkin
package_1/
CMakeLists.txt -- CMakeLists.txt file for package_1
package.xml -- Package manifest for package_1
...
package_n/
CMakeLists.txt -- CMakeLists.txt file for package_n
package.xml -- Package manifest for package_n
创建包
打开catkin Workspace,即workspace_folder/src/,使用catkin_create_pkg脚本创建package
如:创建一个名为“ beginner_tutorials”的新程序包,该程序包取决于std_msgs,roscpp和rospy
catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
构建包
cd〜/ catkin_ws
catkin_make
. ~/catkin_ws/devel/setup.bash
包依赖
一阶依赖:查看一阶依赖项,rospack depends1 package_name
间接依赖:查看所有依赖项,rospack depends package_name
<build_depend>,Build Dependencies(构建依赖关系),指定构建此软件包所需的软件包。在构建时需要这些软件包中的任何文件时,就是这种情况。这可以包括在编译时来自这些程序包的标头,与这些程序包中的库链接或在构建时需要任何其他资源(尤其是在CMake中这些程序包是find_package()-ed时)。在交叉编译方案中,构建依赖项是针对目标体系结构的。
<build_export_depend>,Build Export Dependencies(构建导出依赖关系),指定了针对该程序包构建库所需的程序包。在您将其标头可传递地包含在此程序包的公共标头中时,就是这种情况(尤其是当这些程序包在CMake中的catkin_package()中声明为(CATKIN_)DEPENDS时)。
<exec_depend>,执行依赖关系,指定运行该程序包中的代码所需的程序包。当您依赖此程序包中的共享库时,就是这种情况(尤其是当这些程序包在CMake中的catkin_package()中声明为(CATKIN_)DEPENDS时)。
<test_depend>,测试依赖项,仅为单元测试指定其他依赖项。他们绝不应该复制已经提到的任何依赖,即构建或运行依赖。
<buildtool_depend>,Build Tool Dependencies,指定此软件包自行构建所需的构建系统工具。通常,唯一需要的构建工具是catkin。在交叉编译方案中,构建工具依赖项是针对要在其上进行编译的体系结构的。
<doc_depend>文档工具依赖项,指定此包生成文档所需的文档工具。