ROS 2从入门到精通系列(一):什么是ROS2 - 核心概念和架构
ROS 2是新一代机器人操作系统框架,相比ROS 1在实时性、安全认证和跨平台支持等方面有显著改进。其核心架构包含节点(Node)、话题(Topic)、服务(Service)和动作(Action)四大通信机制,采用DDS中间件实现高效通信。ROS 2提供完整的工具链和算法库,支持LTS长期支持版本,适用于从开发到生产的全流程。系统采用分布式计算模型,通过状态机管理节点生命周期,为机器人软件开发提供
ROS 2从入门到精通系列(一):什么是ROS2 - 核心概念和架构
本文是ROS2系列的第一篇,帮助你快速理解ROS2的核心概念和系统架构。
引言
如果你即将学习ROS2或者对机器人开发感兴趣,首先需要理解:什么是ROS2?
ROS(Robot Operating System)是一个灵活的框架,用于编写机器人软件。ROS2是其第二代版本,相比ROS1有重大改进。本文将从零开始,帮你建立起对ROS2的全面认识。
一、什么是ROS2?
1.1 ROS2的定义
ROS2 是一个分布式计算框架,专门为机器人应用设计。它提供了:
- 硬件抽象 - 屏蔽各类传感器和执行器的底层差异
- 中间件 - 实现进程间通信(IPC)和跨机器通信
- 工具链 - 调试、可视化、模拟等开发工具
- 库和算法 - 常用机器人算法的参考实现
1.2 为什么是ROS2而不是ROS1?
ROS1已有15年历史,但在生产环境中存在局限:
| 特性 | ROS1 | ROS2 |
|---|---|---|
| 实时性 | 不支持硬实时 | 支持确定性实时调度 |
| 安全认证 | 无 | DDS安全插件支持 |
| 通信中间件 | 定制TCPROS/UDPROS | 标准DDS |
| 跨平台 | Linux主导 | Linux/Windows/macOS |
| API稳定性 | 不稳定 | 向后兼容性承诺 |
| 生态维护 | 逐步停止 | 积极维护(至2025+) |
二、ROS2核心概念
2.1 节点(Node)
节点是ROS2中最小的计算单元,类似于一个独立的进程。
- 一个节点通常负责一项专门功能(如图像处理、电机控制等)
- 多个节点通过通信机制协调工作
- 节点可以用Python、C++、C#等多种语言编写
示例:
├── 图像采集节点 (camera_node)
├── 图像处理节点 (image_processor)
├── 目标检测节点 (detection_node)
└── 决策节点 (decision_node)
2.2 话题(Topic)
话题是节点间的异步通信通道,采用发布-订阅(Pub-Sub)模式。
数学表示:一个话题在时间 t t t 上的消息流为:
M ( t ) = { m 1 ( t ) , m 2 ( t ) , . . . , m n ( t ) } M(t) = \{m_1(t), m_2(t), ..., m_n(t)\} M(t)={m1(t),m2(t),...,mn(t)}
其中 m i ( t ) m_i(t) mi(t) 是第 i i i 个发布者在时间 t t t 发送的消息
特点:
- 发布者和订阅者解耦,互不知道对方存在
- 支持一对多、多对一的通信关系
- 消息传输是异步的(非阻塞)
2.3 服务(Service)
服务是节点间的同步通信机制,采用请求-响应(Request-Response)模式。
通信公式:
Response = f ( Request ) \text{Response} = f(\text{Request}) Response=f(Request)
一个服务调用的完整周期为:
T s e r v i c e = T s e n d _ r e q + T p r o c e s s + T s e n d _ r e s p T_{service} = T_{send\_req} + T_{process} + T_{send\_resp} Tservice=Tsend_req+Tprocess+Tsend_resp
特点:
- 客户端发送请求,等待服务器响应(阻塞式)
- 一对一的同步通信
- 适合需要立即反馈的操作(如设置参数、查询状态)
2.4 动作(Action)
动作用于需要长时间执行的任务,提供目标、反馈和结果。
动作的数据结构:
Action = { Goal , Feedback , Result } \text{Action} = \{\text{Goal}, \text{Feedback}, \text{Result}\} Action={Goal,Feedback,Result}
时间关系:
T t o t a l = T g o a l _ s e n d + T e x e c u t i o n + T r e s u l t _ s e n d T_{total} = T_{goal\_send} + T_{execution} + T_{result\_send} Ttotal=Tgoal_send+Texecution+Tresult_send
特点:
- 客户端发送目标,服务器周期性发送反馈,最后返回结果
- 支持中途取消任务
- 适合机械臂移动、导航等长时间任务
2.5 消息(Message)
消息是节点间通信的数据载体。
消息由字段组成,每个字段有类型和名称:
# 示例消息定义 (sensor_msgs/Image.msg)
std_msgs/Header header
uint32 height
uint32 width
string encoding
uint8 is_bigendian
uint32 step
uint8[] data
三、ROS2系统架构
3.1 整体架构图
3.2 通信模式对比
3.3 ROS2的DDS中间件
ROS2使用 DDS(Data Distribution Service) 作为通信中间件。
DDS的通信模型:
数据 = 话题 + 发布者 + 订阅者 + QoS策略 \text{数据} = \text{话题} + \text{发布者} + \text{订阅者} + \text{QoS策略} 数据=话题+发布者+订阅者+QoS策略
QoS关键参数:
- 可靠性: P d e l i v e r y ∈ { BEST_EFFORT , RELIABLE } P_{delivery} \in \{\text{BEST\_EFFORT}, \text{RELIABLE}\} Pdelivery∈{BEST_EFFORT,RELIABLE}
- 持久性: D p e r s i s t e n c e ∈ { VOLATILE , TRANSIENT_LOCAL , TRANSIENT , PERSISTENT } D_{persistence} \in \{\text{VOLATILE}, \text{TRANSIENT\_LOCAL}, \text{TRANSIENT}, \text{PERSISTENT}\} Dpersistence∈{VOLATILE,TRANSIENT_LOCAL,TRANSIENT,PERSISTENT}
- 历史深度: H d e p t h ∈ [ 1 , ∞ ) H_{depth} \in [1, \infty) Hdepth∈[1,∞)
四、ROS2生态体系
4.1 发行版本线
- LTS版本(如Humble):5年长期支持,生产环境推荐
- 标准版本(如Iron、Jazzy):约3年支持期
4.2 常用工具链
五、ROS2节点的生命周期
5.1 节点状态转移图
5.2 状态转移的数学模型
节点的状态可表示为:
State ( t + 1 ) = f ( State ( t ) , Event ) \text{State}(t+1) = f(\text{State}(t), \text{Event}) State(t+1)=f(State(t),Event)
其中:
- State ( t ) ∈ { Unconfigured, Inactive, Active, ErrorProcessing, Finalized } \text{State}(t) \in \{\text{Unconfigured, Inactive, Active, ErrorProcessing, Finalized}\} State(t)∈{Unconfigured, Inactive, Active, ErrorProcessing, Finalized}
- Event ∈ { configure, activate, deactivate, cleanup, error_recovery, shutdown } \text{Event} \in \{\text{configure, activate, deactivate, cleanup, error\_recovery, shutdown}\} Event∈{configure, activate, deactivate, cleanup, error_recovery, shutdown}
六、一个简单的例子
6.1 系统架构图
6.2 核心概念映射
在这个移动机器人例子中:
| 组件 | ROS2概念 | 说明 |
|---|---|---|
| lidar_driver | 节点 | 独立进程,负责LIDAR驱动 |
| /raw_points | 话题 | LIDAR原始点云数据流 |
| /filtered_points | 话题 | 滤波后的点云数据 |
| /obstacles | 话题 | 检测到的障碍物信息 |
| plan_path服务 | 服务 | 规划器提供的路径规划服务 |
七、ROS2 vs ROS1:核心差异总结
八、关键概念速记表
| 概念 | 定义 | 特点 |
|---|---|---|
| 节点 | ROS2中最小的可执行单元 | 独立进程,可用多种语言编写 |
| 话题 | 异步通信通道 | 发布-订阅,一对多/多对一 |
| 服务 | 同步通信机制 | 请求-响应,一对一 |
| 动作 | 长时间任务通信 | 目标-反馈-结果,可取消 |
| 消息 | 通信数据载体 | 结构化数据,类型定义 |
| DDS | 通信中间件 | 标准化、跨平台、支持QoS |
| 包(Package) | 代码组织单位 | 包含节点、消息定义、配置 |
九、学习路线提示
基于本文知识,你接下来应该学习:
十、本文要点总结
✅ ROS2是什么:一个为机器人开发设计的分布式计算框架
✅ 5大核心概念:节点、话题、服务、动作、消息
✅ 通信机制:发布-订阅(异步)和请求-响应(同步)
✅ 技术优势:DDS中间件、实时支持、跨平台、安全认证
✅ 系统设计:分层架构、模块化、高度可扩展
常见新手问题
Q1: ROS2相比ROS1,我应该学哪个?
A: 如果你是初学者,强烈推荐ROS2。ROS1已进入维护阶段,新项目应使用ROS2。
Q2: ROS2对硬件有什么要求?
A: ROS2本身很轻量,对硬件要求低。但具体应用(如SLAM、深度学习)可能需要更强硬件。
Q3: ROS2支持实时系统吗?
A: ROS2的DDS支持实时调度,但需要使用PREEMPT_RT实时Linux内核和配置合适的QoS策略。
Q4: 节点、话题、服务我应该怎么选择?
A:
- 话题:数据流、传感器数据 → 发布-订阅
- 服务:一次性请求、参数设置 → 请求-响应
- 动作:长时间任务、需要反馈和取消 → 目标-反馈-结果
推荐资源
- 官方文档:https://docs.ros.org/en/humble/
- GitHub生态:https://github.com/ros2
- 中文社区:https://acolabs.org/
下一篇预告:《ROS2从入门到精通系列(二):环境搭建 - Ubuntu系统安装ROS2》
喜欢本文?点个赞和关注,不迷路!📌
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)