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

相关推荐
热心市民R先生17 小时前
EtherCAT+ROS 2 实时系统优化实践:CPU 隔离、线程绑定与优先级调优
ros2
漫漫求2 天前
ROS 2 节点从源码到运行的完整依赖流程
ros2
花花少年3 天前
快速体验ros2之发布者-订阅者模式
ros2·发布者-订阅者
飘忽不定的bug4 天前
ubuntu22.04部署ROS2-humble
linux·ubuntu·ros2
zylyehuo4 天前
Ubuntu22.04 外接显示屏显示异常
ros2·夯实基础
滴啦嘟啦哒4 天前
【机械臂】【总览】基于VLA结构的指令驱动式机械臂
python·ros2·vla
kyle~5 天前
导航---Nav2导航框架概览
c++·机器人·ros2·导航
米有哥6 天前
[Embodied AI] Mac上安装ROS2
人工智能·macos·ros2
叠叠乐9 天前
ros2 找功能包的get_package_share_directory
ros2
漫漫求13 天前
ros2常用命令
ros2