详细介绍colcon和ament的关系,以及它们在 ROS 2 构建系统中的角色和区别

Colcon 与 Ament 的关系详解

在 ROS 2 的构建系统里,两个名字经常同时出现:amentcolcon 。很多初学者会混淆它们的作用。实际上,它们处在不同的层级:ament 是构建工具链(build system),colcon 是构建任务管理器(build orchestration tool)

本文将从发展历史、功能定位、关系逻辑、使用场景等方面详细阐述。


1. 背景与历史

ROS 1时代
  • 使用的是 catkin 构建系统(基于 CMake + Python 工具)。
  • 使用 catkin_makecatkin build(来自 catkin_tools)进行工作空间编译。
  • 一次编译时可以处理多个包,但对跨语言、多种构建类型的支持有限。
ROS 2的过渡
  • 需要更加灵活、可扩展的构建系统,支持:
    • CMake、Python、非ROS软件包的混合
    • 更强的依赖管理
    • 更好的可扩展性和插件机制
  • 因此诞生了 ament,对应的是 ROS 2 的核心构建架构。
  • 随着项目规模扩大,开发了 colcon 来替代 ROS 2 早期的 ament_tools,实现更强的批量构建与任务调度能力。

2. 两者的功能定位

Ament
  • 性质:一种构建系统(build system)和包管理框架,专为 ROS 2 定制。
  • 核心作用
    • 定义 ROS 2 软件包的构建规则(CMake 宏、Python 构建支持等)。
    • 提供 ament_cmake, ament_python 等插件来支持不同类型的包。
    • 管理包的元数据(package.xml),并生成安装结构、测试规则等。
  • 底层构建依赖
    • C++/C 项目 → 调用 CMake
    • Python 项目 → 调用 setuptools
  • 本质角色构建单个软件包的工具链
Colcon
  • 性质:批量构建工具(multi-package build tool)。
  • 核心作用
    • 读取工作区(workspace)的多个包,根据依赖拓扑决定构建顺序。
    • 调用特定的构建系统(例如 amentcmakesetuptools)来构建每个包。
    • 提供并行构建、增量构建、日志管理、测试批量运行等功能。
    • 可扩展插件以支持非ROS项目。
  • 本质角色任务调度器 + 构建流程管理器

3. 关系逻辑

我们可以把两者的关系类比成 "高铁调度系统""造车厂"

  • ament = 工厂:定义如何制造一辆车(即构建一个 ROS 2 包),包括用什么零件(CMake宏)、装配顺序、测试流程等。
  • colcon = 高铁调度中心:负责在一个大地图(workspace)上安排多辆车的生产和出厂顺序,调度并行任务,按依赖图排序。

具体关系

  1. colcon build 启动构建流程。
  2. colcon 扫描工作区内所有包及其依赖关系。
  3. 对于每个包,colcon 会调用它对应的构建系统插件:
    • ROS 2 C++包:ament_cmake
    • ROS 2 Python包:ament_python
    • 其他类型包:cmake, setup.py, 甚至是 make(如果插件支持)
  4. ament 实际执行构建动作,生成二进制文件、安装目录、测试目标等。
  5. colcon 收集日志、处理错误、控制并发和增量编译。

4. 使用场景示例

构建 ROS 2 工作区:
bash 复制代码
# 假设 src/ 下有多个 ROS 2 软件包
colcon build --symlink-install
  • colcon
    • 找到所有包,分析依赖。
    • 调度不同构建任务(可能是 ament 或其他系统)。
  • ament
    • 按包类型执行 ament_cmakeament_python 宏来构建每个包。
测试:
bash 复制代码
colcon test
  • colcon 批量运行测试
  • ament 提供测试集成(ament_lint, ament_cmake_gtest 等)

5. 总结对照表

方面 ament colcon
角色 构建系统(单包构建工具链) 批量构建工具(多包任务调度)
主要职责 定义和执行单个 ROS 2 包的构建规则 在整个工作区中协调构建所有包
能否单独使用 可以(只构建一个包时) 不行,需要依赖实际构建系统(ament/cmake等)
可扩展性 支持不同类型的包构建插件 支持多种构建系统插件
与 ROS 关系 ROS 2 核心构建系统 ROS 2 官方推荐的批量构建工具

6. 关系一句话总结

Colcon 是 orchestrator(调度器),Ament 是 builder(构建器)。在 ROS 2 中,colcon 负责总体构建任务,而 ament 决定每个 ROS 2 包如何具体构建。

相关推荐
lqqjuly2 天前
Lidar调试记录Ⅰ之Ubuntu22.04虚拟机安装ROS2(无坑版)
linux·ros2·lidar·ubuntu22.04
nenchoumi31195 天前
ROS2 Humble 笔记(四)ROS 的最小工作单元-- Node 节点
笔记·机器人·ros2
nenchoumi31195 天前
ROS2 Humble 笔记(八)动作 action
笔记·机器人·ros2
nenchoumi31196 天前
ROS2 Humble 笔记(十二)launch 文件与 namespace 启动多个节点
笔记·机器人·ros2
nenchoumi31196 天前
ROS2 Humble 笔记(十)多机分布式通讯 DDS 与宿主机和Docker容器
笔记·机器人·ros2
叠叠乐6 天前
Navigation2 行为树架构源码级分析与设计原理
ros2
nenchoumi31197 天前
ROS2 Humble 笔记(七)标准与自定义 Interface 接口
笔记·机器人·ros2
不懂音乐的欣赏者8 天前
Windows 下 ROS/ROS2 开发环境最优解:WSL 比直接安装、虚拟机、双系统更优雅!
linux·windows·ubuntu·ros·wsl·ros2·双系统
boss-dog9 天前
Ubuntu22.04 ros2-humble 源码安装 Moveit2
编译·ros2·moveit