详细介绍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 包如何具体构建。

相关推荐
曦云沐18 小时前
一键部署ROS2开发环境!Docker run命令详解与实战
docker·容器·ros2
维度攻城狮7 天前
交互式机器人编程:使用Jupyter Notebook运行ROS2程序
jupyter·机器人·ros2
wzyannn9 天前
Ubuntu24.04下ROS2和MoveIt2控制六轴机械臂(持续更新)
ros·机械臂·ros2
小屁猪qAq9 天前
ROS2 节点中使用参数
开发语言·c++·参数·ros2
WWZZ202510 天前
Isaac Sim入门——基础用法
机器人·大模型·机械臂·ros2·具身智能·isaac sim
General_G11 天前
ROS2资源汇总
linux·机器人·ros2
-点灯-18 天前
【无标题】
ros2
General_G18 天前
irobot_benchmark的编译和使用
linux·中间件·机器人·ros2
阿豪只会阿巴19 天前
【多喝热水系列】从零开始的ROS2之旅——Day10 话题的订阅与发布1:Python
开发语言·c++·python·ubuntu·ros2
阿豪只会阿巴20 天前
【多喝热水系列】从零开始的ROS2之旅——Day9 初识话题通信:基本命令
c++·笔记·python·ubuntu·ros2