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

6.2 KiB
Raw Blame History

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 的强大功能。