Files
note_sync/ros/ros2/概念/基础概念.md
T

165 lines
6.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ROS 2 基础概念
ROS 2 (Robot Operating System 2) 是一个用于构建机器人应用程序的开源框架。它提供了一套工具、库和约定,帮助开发者创建可维护、可扩展且可重用的机器人软件。
## 1. Node (节点)
**节点** 是 ROS 2 中最小的可执行单元,代表一个单一功能模块。每个节点执行特定任务(如控制传感器、处理图像、规划路径等),并通过标准接口与其他节点通信。
- **特点**:
- 轻量级,单一职责
- 使用命名空间避免命名冲突
- 支持多种客户端库(C++、Python、Java等)
- **核心概念**:
- 节点名称:唯一标识符,如 `/camera_driver`
- 命名空间:用于组织节点,如 `/robot1/camera_driver`
## 2. Discovery (发现机制)
**发现机制** 是 ROS 2 中节点自动发现其他节点和服务的过程。它允许节点在网络中找到彼此并建立通信,无需硬编码地址。
- **工作原理**:
- 使用 DDS (Data Distribution Service) 作为底层通信中间件
- 通过参与者(Participant)、主题(Topic)和服务(Service)的发现实现
- 自动管理连接的建立和断开
- **关键组件**:
- ROS 2 守护进程 `ros2 daemon`(后台运行,管理发现)
- DDS 域(Domain ID):控制节点可见性(同一域的节点才能通信)
## 3. Interfaces (接口)
**接口** 定义了节点之间通信的消息格式。ROS 2 提供了三种主要通信接口类型:
### 3.1 Topics (话题) - 发布/订阅通信
**话题** 是节点之间传递数据的命名通道。一个节点可以**发布**(发送)数据到某个话题,其他节点可以**订阅**(接收)该话题的数据。
- **特点**:
- 单向、异步通信
- 一对多或多对多通信模式
- 消息类型严格定义(如 `std_msgs/String`、`sensor_msgs/Image`)
- **使用场景**:
- 持续数据流(如传感器数据、状态信息)
### 3.2 Services (服务) - 请求/响应通信
**服务** 实现节点之间的双向同步通信。一个节点提供**服务**,其他节点发送**请求**并等待**响应**。
- **特点**:
- 请求/响应模式
- 同步通信(客户端等待服务端处理)
- 需要定义请求和响应的消息类型(.srv 文件)
- **使用场景**:
- 一次性任务(如获取配置、执行动作)
### 3.3 Actions (动作) - 目标导向通信
**动作** 是服务的扩展,支持长时间运行的任务,并提供反馈和取消功能。
- **特点**:
- 目标-反馈-结果模式
- 可取消、可获取进度反馈
- 异步执行
- 消息类型定义在 .action 文件中
- **使用场景**:
- 长时间运行的任务(如导航、抓取物体)
## 4. Parameters (参数)
**参数** 是节点的配置值,可以在运行时动态修改。参数支持多种数据类型(整数、浮点数、字符串、布尔值等)。
- **管理方式**:
- 命令行设置
- 配置文件(YAML)
- 运行时动态修改(通过 `ros2 param` 命令或 API)
- **常用操作**:
- `ros2 param list`:列出节点参数
- `ros2 param set`:设置参数值
- `ros2 param get`:获取参数值
## 5. Introspection (内省)
**内省** 允许开发者在运行时检查和监控 ROS 2 系统的状态。通过内省工具,您可以查看节点、话题、服务和参数的信息。
- **常用工具**:
- `ros2 node list`:列出所有节点
- `ros2 topic list`:列出所有话题
- `ros2 service list`:列出所有服务
- `ros2 topic echo`:查看话题消息内容
- `ros2 node info`:查看节点详细信息
## 6. Launch (启动系统)
**Launch** 允许您同时启动多个节点和配置它们的参数。使用 Python 或 XML 编写的启动文件可以简化系统启动过程。
- **特点**:
- 同时启动多个节点
- 配置节点参数
- 设置命名空间和重映射
- 支持条件启动和依赖关系
- **常用工具**:
- `ros2 launch`:执行启动文件
- 启动文件格式:Python(推荐)、XML、YAML
## 7. Client Libraries (客户端库)
**客户端库** 是 ROS 2 提供的编程接口,允许开发者使用不同语言编写节点。
- **主要客户端库**:
- **rclcpp**:C++ 客户端库(推荐用于高性能应用)
- **rclpy**:Python 客户端库(推荐用于快速原型开发)
- **rcljava**:Java 客户端库
- **其他**:Swift、Go 等语言的社区支持
- **核心特性**:
- 统一的 API 接口
- 自动内存管理
- 支持所有 ROS 2 通信模式
## 8. 通信中间件
ROS 2 使用 **DDS (Data Distribution Service)** 作为默认通信中间件,提供可靠的实时数据交换。DDS 是工业标准的中间件,适用于嵌入式系统和高性能计算。
- **DDS 特性**:
- 高可靠性
- 低延迟
- 实时支持
- 可扩展性
- 服务质量(QoS)配置
## 9. 服务质量(QoS)
**QoS (Quality of Service)** 配置允许您控制通信的可靠性、持久性和其他特性。QoS 设置对于确保系统在不同环境下的性能至关重要。
- **主要 QoS 策略**:
- Reliability:可靠传输(保证交付)或最佳 effort(不保证交付)
- Durability:数据是否持久化(对晚加入的节点可见)
- History:保留消息历史的深度
- Deadline/Lifespan:消息的截止时间和寿命
## 10. 系统架构概览
ROS 2 系统由以下层次组成:
1. **应用层**:节点、话题、服务、动作
2. **中间件层**:DDS 通信系统
3. **工具层**:命令行工具、可视化工具、调试工具
4. **硬件抽象层**:传感器、执行器、硬件接口
## 11. 与 ROS 1 的主要区别
- **通信中间件**:ROS 1 使用 TCPROS/UDPROS,ROS 2 使用 DDS
- **节点发现**:ROS 1 依赖 roscore,ROS 2 去中心化
- **接口类型**:ROS 2 添加了 Actions
- **参数系统**:ROS 2 支持动态参数配置
- **编译系统**:ROS 1 使用 catkin,ROS 2 使用 colcon
- **支持的语言**:ROS 2 对 Python 3 的支持更好,添加了更多语言选项
这些基础概念是理解和使用 ROS 2 的核心。通过掌握这些概念,您可以开始构建复杂的机器人系统,并利用 ROS 2 的强大功能。