乐趣区

Autolabor-25学习笔记3ROS的工作空间与编译系统

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

参考资料:

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

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

下图是 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 里面放的是各种各样的功能包 package。package 是 catkin 编译的基本单元。

3. package

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

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++ 头文件或者源文件。通常会在像下图一样。

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

退出移动版