6.2 KiB
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):控制节点可见性(同一域的节点才能通信)
- ROS 2 守护进程
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 系统由以下层次组成:
- 应用层:节点、话题、服务、动作
- 中间件层:DDS 通信系统
- 工具层:命令行工具、可视化工具、调试工具
- 硬件抽象层:传感器、执行器、硬件接口
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 的强大功能。