本章的主要内容是对ROS的工作空间和编译系统的阐述。

参考资料:

ROS Wiki:http://wiki.ros.org/ROS

ROS自学笔记4--工作空间与编译系统:https://blog.csdn.net/qq_1648...

下图是ROS的一个工程结构,反映的是文件系统之间的关系。一个典型的ROS工程就是这个样子。

ROS的工程结构

下面来具体介绍一下这个图的结构。

1. catkin空间

catkin是ROS定制的编译构建系统对CMake的扩展。简单来说catkin就是用来编译ROS工程的。我们所有的代码都放到catkin workspace这个文件夹里的,这个文件夹的名字可以自己起。

首先先建立一个工作空间:

mkdir -p ~/catkin_new/src

编译:

cd ~/catkin_new/
catkin_make
source ~ catkin_new/devel/setup.zsh

需要注意的是一定要在相应工作空间下编译,然后编译完后source一下环境,如果没有这一步,就会导致我们生成的文件打不开。
在编译完成之后,会生成两个文件夹:build和devel。build是cmake和catkin缓存和中间文件,devel是目标文件。 只有src是我们需要写代码的文件。

2. src文件夹

我们日常写程序主要和src打交道。

src文件夹结构

src里面放的是各种各样的功能包package。package是catkin编译的基本单元。

3. package

package是ROS组成的基本细胞,是catkin编译的基本单元,我们在执行catkin_make指令时,编译系统会一个个的找package可执行包。所以多个pachage包放到同一个文件夹下也是可以的。catkin_make会递归的查找编译每个文件。
一个package并不一定包含一个可执行文件,一个package还可以包含多个可执行文件(节点),package架构最基本的结构:必须包含CMkelists.txt和package.xml。

最基本的package结构

CMakeList.txt规定了catkin编译的规则,例如:源文件、依赖项、目标文件。
package.xml定义了package的属性,例如:包名,版本号,作者,依赖等。相当于包的自我描述。

<package>            <!--根标签-->
    <name>            <!--包名-->
    <version>            <!--版本号-->
    <description>            <!--包描述-->
    <maintainer>            <!--维护者-->
    <license>            <!--软件许可-->
    <buildtool_depend>            <!--编译工具-->
    <build_depend>            <!--编译时的依赖-->
    <run_depend>            <!--运行时的依赖-->
</package>            <!--根标签-->

有了上面这两个文件的package就是最基本的package。

ROS里面的可执行程序包括:(1)脚本,如shell或者python;(2)C++头文件或者源文件。 通常会在像下图一样。

某package结构

我们还会放一些自定义的通信格式:包括消息(msg)、服务(srv)、动作(action)。 比如我们想在ROS下面自定义一个服务,那我们就在package下新建一个srv文件夹,然后在这个文件夹里放*.srv文件。我们还可以在package下放launch文件和配置文件。
launch的作用就是用来一次性运行多个文件。一帮放在launch文件中。配置文件一般放到config文件夹下。它的自由度比较高,一般用.yaml格式来写。


folmowang
1 声望0 粉丝

LLER