ROS2
Robot Operating System 2 第二代机器人操作系统[1]
并不是一个传统意义上的操作系统(如 Windows 或 Linux),而是一个用于构建机器人应用的开源软件框架和中间件。
它提供了一系列库、工具和约定,核心目标是实现代码的复用、模块化以及跨平台的机器人软件开发,使得软件的复用性更高,简化机器人开发任务,是加速机器人落地的软件库和工具集。
设计目标:面向真实世界应用
ROS 2 是对其前身 ROS 1 的彻底重新设计,旨在解决 ROS 1 在真实世界商业和研究应用中遇到的局限。其核心设计目标包括:
- 支持多机器人系统: 提供开箱即用的、可靠的多机器人通信能力。
- 支持实时控制: 改善对实时系统(Real-time Systems)的支持,满足高性能机器人(如机械臂)的控制需求。
- 支持嵌入式平台: 能够轻松部署到资源受限的微控制器上。
- 支持生产环境: 提升稳定性和安全性,使其适用于商业产品而非仅仅是学术研究。
相关章节
ROS2 相关基础
ROS2 的安装
ROS2 Architecture
Ros2 bag
概念 Concepts
Basic Concepts
ROS2 Nodes
ROS2 Topics
ROS2 Services
RCL
ROS2 Package
ROS2 Message
ROS2 Communication
实际实践
创建工作区
编写节点 rclcpp 或 rclpy
编译构建 colcon build
运行节点 ros2 run
测试通信 ros2 topic echo / ros2 topic pub
ROS and mqtt 代码使用
核心概念:计算图模型 (Computation Graph)
一个 ROS 2 系统由一系列松散耦合的、可独立运行的节点 (Nodes) 组成,这些节点通过一个通用的通信层进行交互,形成一个“计算图”。

1. 节点 (Nodes)
节点是 ROS 2 中的基本可执行单元。一个机器人系统通常由许多各司其职的节点组成。例如,一个节点负责从摄像头读取图像,另一个节点负责处理图像以检测障碍物,还有一个节点负责根据障碍物信息控制电机。
2. 通信机制
节点之间通过三种核心机制进行通信:
- 话题 (Topics)
- 模式: 发布/订阅 (Publish/Subscribe) 模式,是多对多的异步通信。
- 工作方式: 一个节点(发布者)将消息发布到一个特定的话题上(如
/camera/image),其他任意数量的节点(订阅者)都可以订阅该话题以接收这些消息。 - 适用场景: 持续的数据流传输,如传感器数据、机器人状态等。这是最常用的通信方式。
- 服务 (Services)
- 模式: 请求/响应 (Request/Response) 模式,是一对一的同步通信。
- 工作方式: 一个节点(客户端)向另一个节点(服务器)发送一个请求,并等待服务器处理并返回一个响应。
- 适用场景: 需要远程过程调用(RPC)的场景,例如请求机器人执行一个特定的、耗时较短的计算或动作。
- 动作 (Actions)
- 模式: 带反馈的请求/响应模式,是一对一的异步通信。
- 工作方式: 客户端向服务器发送一个目标 (Goal),服务器在执行任务的过程中会周期性地发布反馈 (Feedback),并在任务完成后返回一个最终结果 (Result)。客户端可以随时取消任务。
- 适用场景: 需要执行耗时较长、且需要过程监控的任务,如“导航到某个位置”、“旋转机械臂 30 度”等。
3. 其他概念
- 参数 (Parameters): 每个节点都可以拥有可动态配置的参数,方便在不重新编译代码的情况下调整节点行为。
- 启动文件 (Launch Files): 使用 Python 编写的脚本,用于一次性地启动和配置一个包含多个节点的复杂系统。
与 ROS 1 的主要区别
| 类别 | ROS 1 | ROS 2 |
|---|---|---|
| 网络传输 | 基于TCP/UDP的自定义协议 | 现有标准(DDS),抽象层支持添加其他协议 |
| 网络架构 | 中央名称服务器(roscore) | 对等节点发现 |
| 平台支持 | Linux | Linux、Windows 和 macOS |
| 客户端库 | 各种语言独立编写 | 共享一个共同的底层C库(rcl) |
| 节点与进程 | 每个进程单节点 | 每个进程多节点 |
| 线程模型 | 回调队列和处理程序 | 可交换的执行器 |
| 节点状态管理 | 无 | 生命周期节点 |
| 嵌入式系统 | 最小实验性支持(rosserial) | 商业支持的实现(micro-ROS) |
| 参数访问 | 基于XMLRPC的辅助协议 | 使用服务调用实现 |
| 参数类型 | 赋值时推断类型 | 类型声明并强制执行 |
核心生态系统
- Rviz2: 强大的 3D 可视化工具,用于显示传感器数据、机器人模型和各种调试信息。
- Gazebo: 功能齐全的 3D 物理仿真环境,用于在部署到真实机器人之前进行算法测试。
- MoveIt2: 应用最广泛的开源运动规划框架,用于机械臂的路径规划、运动学求解和碰撞检测。
- Nav2: 完整的机器人自主导航框架。