参考:ROS入门笔记(七):详解ROS文件系统 - 少云清的文章 - 知乎
https://zhuanlan.zhihu.com/p/338042120
ROS文件目录
这里的软件包指的是src下的文件夹,因为在ROS下创建软件包的流程如下:
把软件包名字定下来后,还需要添加依赖,最后才能成一个软件包,然后再编写代码文件。
CMake、CMakeLists.txt 和 make、Makefile
Catkin
Catkin 是 ROS(Robot Operating System)中用于构建和管理软件包的构建系统,它在 ROS 的工作空间中负责处理项目的编译、安装和依赖关系管理。以下是关于 Catkin 编译系统的详细介绍:
### 1. 定义
Catkin 是 ROS 1.x 和 ROS 2.x 的默认构建系统,基于 CMake,并提供了一些 ROS 特有的功能。它允许用户以模块化的方式组织和管理 ROS 软件包。
### 2. 主要特点
- **基于 CMake**:Catkin 使用 CMake 作为基础,可以利用 CMake 的强大功能,同时为 ROS 开发提供了一些方便的扩展。
- **工作空间概念**:Catkin 采用工作空间(workspace)的概念,允许用户将多个软件包组织在一个目录下,便于管理和编译。
- **依赖管理**:Catkin 可以自动处理包之间的依赖关系,确保在编译时按照正确的顺序构建软件包。
- **支持多种语言**:尽管主要用于 C++ 和 Python,但 Catkin 也支持其他语言的集成。
### 3. 工作流程
使用 Catkin 编译系统的基本工作流程如下:
1. **创建工作空间**:
```bash
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
2. **创建软件包**:
使用 `catkin_create_pkg` 命令创建新软件包。例如:
```bash
catkin_create_pkg my_package std_msgs rospy roscpp
3. **编写 CMakeLists.txt 和 package.xml**:
- `CMakeLists.txt`:定义包的构建规则、依赖和目标。
- `package.xml`:描述包的信息(如名称、版本、依赖关系等)。
4. **编译工作空间**:
使用 `catkin_make` 或 `catkin build` 命令编译工作空间:
```bash
cd ~/catkin_ws
catkin_make
5. **源环境设置**:
编译完成后,需要源环境,以便使用新编译的软件包:
```bash
source devel/setup.bash
### 4. Catkin 的命令
- `catkin_make`:这是 Catkin 的默认编译命令,适用于较简单的工作空间。
- `catkin build`:这是更灵活的命令,支持并行编译和更多选项,适用于更复杂的工作空间。
### 5. 优缺点
- **优点**:
- 便于管理大型项目和模块化代码。
- 自动处理依赖关系。
- 与 CMake 集成,提供强大的构建功能。
- 提供良好的社区支持和文档。
- **缺点**:
- 对于小型项目来说,可能显得过于复杂。
- 学习曲线相对较陡,特别是对 CMake 不熟悉的用户。
### 6. 适用场景
Catkin 适用于 ROS 软件包的开发和管理,尤其是需要多个软件包相互依赖的复杂项目。无论是开发机器人应用、传感器驱动,还是实现算法,Catkin 都提供了良好的支持。
### 总结
Catkin 编译系统是 ROS 开发中的一个核心组成部分,帮助开发者高效地构建和管理 ROS 软件包。它通过 CMake 提供强大的构建能力,同时简化了包的依赖管理,是 ROS 项目开发中不可或缺的工具。
catkin_make 和 catkin的区别:
关系:Catkin 是一个构建系统,而 catkin_make 是使用 Catkin 进行构建的一个命令行工具。
可以将 Catkin 看作是整个构建框架,而 catkin_make 是在这个框架内执行构建操作的工具。
使用场景:在开发 ROS 软件包时,
开发者通常会使用 catkin_make 来构建工作空间中的所有软件包,
借助 Catkin 提供的功能来管理依赖和构建过程。
CMake 的全称是 “Cross Platform Make”
CMake 是一个跨平台的构建系统,用于管理软件的编译过程。它通过平台无关的配置文件(CMakeLists.txt)生成特定于平台的构建文件(如 Unix 系统上的 Makefile 或 Windows 系统上的 Visual Studio 项目文件)。