1、ros2安装
bash
wget http://fishros.com/install -O fishros && . fishros
2、小海龟:测试一下
bash
ros2 run turtlesim turtlesim_node
ros2 run turtlesim turtle_teleop_key
3、colcon安装
bash
sudo apt install python3-colcon-common-extensions
colcon --help
pip3 show colcon-core
- 全称/背景 :
colcon是一个通用的、可扩展的构建工具,支持多种构建系统(如 CMake、Python setuptools、ament 等)。 - 在 ROS 2 中的作用 :
- 编译你写的 ROS 2 包(C++ / Python)
- 管理依赖关系
- 生成可执行文件、库、消息类型等
📌 注意:
colcon本身不是 ROS 2 的一部分,而是一个独立的 Python 工具,但 ROS 2 官方指定它为标准构建工具。
为什么 ROS 2 使用 Python 编写的 colcon 来编译 C++/Python 代码?
- 核心思想:"编排者 ≠ 编译器"
colcon本身不编译任何代码 ,它只是一个 "构建流程的协调者(orchestrator)"。
- 真正的编译工作由底层工具完成:
- C++ 包 → 用
CMake+make/ninja - Python 包 → 用
setuptools/pip - 其他语言(如 Rust、Go)→ 对应的构建工具
- C++ 包 → 用
colcon的任务是:- 扫描工作空间中的所有包
- 分析依赖关系(谁依赖谁)
- 按正确顺序调用
CMake、setup.py等工具 - 统一管理输出目录(
build/,install/) - 提供一致的命令行体验(
colcon build,colcon test)
✅ 所以:用 Python 写"调度器"完全合理,因为调度不需要高性能,但需要灵活性和可扩展性。
与 ROS 1 的教训对比
- ROS 1 用
catkin(基于 CMake 的宏),导致:- CMake 被"滥用"做包管理,逻辑混乱
- 难以支持非 CMake 包(如纯 Python 包)
- 构建系统和包描述 tightly coupled(紧耦合)
- ROS 2 吸取教训:分离"包描述"、"构建系统"、"构建调度器"
→ 于是诞生了colcon(调度器) +ament(ROS 2 的包格式和 CMake 工具链)
4、ros2 编译流程:Hello World
bash
# 1、创建功能包(工作空间的:src目录下)
# pkg01_helloworld_cpp 是(自定义)的(功能包)的名词
ros2 pkg create pkg01_helloworld_cpp --build-type ament_cmake --dependencies rclcpp --node-name helloworld
# 2、编辑源文件
.cpp文件
# 3、编辑配置文件
package.xml、CMakeLists.txt
# 4、编译(工作空间下)
colcon build
# 5、执行(工作空间下)
# helloworld 是node-name 名称
. install/setup.bash
ros2 run pkg01_helloworld_cpp helloworld