ROS和ROS2的区别

ROS和ROS2的区别
Baja MeadROS和ROS2的区别
ROS (Robot Operating System) 和 ROS 2 在构建功能包时有一些重要的区别,主要体现在构建系统、依赖管理和工具链等方面。以下是这两者的主要差异:
1. 构建系统的变化
ROS 1:
构建工具:ROS 1 使用 catkin 作为默认的构建工具。
构建命令:通常使用 catkin_make 或 catkin build 来构建工作空间。
catkin_make 是一个脚本,它结合了 CMake 和 Python,适用于相对简单的 ROS 1 包。
catkin build 是 catkin_tools 工具的功能,提供了更强的并行构建支持和更好的工作空间管理。
ROS 2:
构建工具:ROS 2 使用 colcon 作为默认的构建工具。
构建命令:使用 colcon build 来构建 ROS 2 工作空间。
colcon 是 ROS 2 的主要构建工具,它支持更复杂的工作空间管理、并行构建和更好的扩展性。它同时支持 ament_cmake 和 ament_python 等构建类型。
2. 包的结构和构建类型
ROS 1 (catkin):
构建类型:ROS 1 包的构建通常依赖于 CMakeLists.txt 文件,使用 catkin 工具进行构建。
包依赖声明:通过 package.xml 声明包的依赖关系,使用 catkin 进行依赖解析和管理。
ROS 2 (ament):
构建类型:ROS 2 使用 ament 作为构建系统,支持更灵活的构建类型。常见的构建类型有:
ament_cmake:使用 CMake 进行构建,通常用于 C++ 包。
ament_python:用于 Python 包。
ament_lldb、ament_vscode 等其他工具类型也有所支持。
ROS 2 默认采用的是 ament_cmake 构建类型,但您可以为特定的语言或需求选择其他构建工具。
包依赖声明:ROS 2 同样使用 package.xml 文件声明包的依赖,但 ament 对依赖的管理更加严格,支持更多功能,如分离构建依赖和运行时依赖。
3. 依赖管理
ROS 1 (catkin):
catkin 在 ROS 1 中管理的依赖关系相对简单,构建过程中会将所有包一起构建,但有时可能出现依赖冲突问题,特别是在大型项目中。
ROS 2 (ament):
ROS 2 引入了更加细致的依赖管理。ament 在构建时根据包的构建类型来管理依赖,并且支持严格区分构建时依赖和运行时依赖。
通过 ament 构建,包的依赖关系和编译选项得到了更加清晰的分离,便于管理大型项目。
4. 命名空间和文件结构
ROS 1:
ROS 1 的工作空间通常使用 catkin_make 生成的 build 和 devel 目录进行管理。devel 目录用于存放编译的包文件、设置脚本等。
ROS 2:
ROS 2 使用 colcon 构建工具时,工作空间中的文件结构有所不同,生成的文件目录为 build、install 和 log。install 目录用于存放安装后的文件,包含所有包的可执行文件、库和配置文件等,build 用于存放构建过程中的临时文件。
5. 并行构建和优化
ROS 1:
catkin_make 支持并行编译,但它的并行化程度和灵活性相对较低,尤其是在大型工作区时。
ROS 2:
colcon 对并行构建进行了优化,它支持高度的并行编译,并且能够根据包之间的依赖关系动态地调整构建顺序。这样可以显著提高构建速度,尤其是在包含多个包的大型工作区中。
6. 支持的语言和工具
ROS 1:
主要支持 C++ 和 Python,其他语言的支持较少。
ROS 2:
ROS 2 对多语言的支持更加完善。除了 C++ 和 Python,ROS 2 还在逐步增加对其他语言(如 Rust)的支持。此外,ROS 2 提供了更多工具,例如支持与 ament 配合使用的 ament_tools 和更强大的命令行工具。
| 特性 | ROS 1 (catkin) | ROS 2 (ament/colcon) |
|---|---|---|
| 构建工具 | catkin_make、catkin build |
colcon build |
| 包结构 | CMakeLists.txt、package.xml |
CMakeLists.txt、package.xml |
| 构建类型 | catkin |
ament_cmake、ament_python、其他 |
| 依赖管理 | 相对简单,依赖解析可能不够严格 | 更细致的依赖管理,支持区分构建时和运行时依赖 |
| 并行构建 | 支持并行构建,但功能较为简单 | 高度优化的并行构建,支持动态依赖排序 |
| 工作空间结构 | build、devel |
build、install、log |
| 支持语言 | C++、Python | C++、Python、Rust等多语言支持 |
从 ROS 1 到 ROS 2 的迁移不仅仅是构建工具的变化,还涉及了对系统架构、性能和可扩展性的优化。ROS 2 的构建系统更加灵活、强大,适应现代机器人的需求。



