一、顶级架构一句话总结

节点 → DDS通信 → 话题/服务/动作 → 参数 → 工具链 → 机器人应用

ROS2(Robot Operating System 2)是新一代开源机器人操作系统,采用DDS作为通信中间件,去掉了ROS1的Master节点,提供更好的实时性和安全性。

二、ROS2 vs ROS1核心对比

1. 主要区别

特性

ROS1

ROS2

通信中间件

自定义TCP/UDP

DDS(Data Distribution Service)

Master节点

有(单点故障)

无(去中心化)

实时性

有限

支持硬实时

安全性

基础

支持加密认证

多机器人

复杂

原生支持

跨平台

Linux为主

Linux/Windows/macOS

Python版本

Python2/3

Python3

2. ROS2的优势

  • 去中心化架构:没有Master节点,任何节点故障不影响其它节点。

  • DDS通信:工业级通信标准,支持QoS(服务质量)配置。

  • 实时性:支持硬实时操作系统(RTOS)。

  • 安全性:支持DDS-Security,提供加密和认证。

  • 多语言支持:C++、Python、Java等。

三、ROS2核心概念

1. 节点(Node)

节点是ROS2的基本执行单元,每个节点负责一个特定功能。

#!/usr/bin/env python3
import rclpy
from rclpy.node import Node

class MinimalNode(Node):
    def __init__(self):
        super().__init__('minimal_node')
        self.get_logger().info('ROS2节点已启动!')

def main(args=None):
    rclpy.init(args=args)
    node = MinimalNode()
    rclpy.spin(node)
    node.destroy_node()
    rclpy.shutdown()

if __name__ == '__main__':
    main()

2. 话题(Topic)

话题是节点间的单向异步通信方式,发布-订阅模式。

特性

说明

通信模式

发布者-订阅者

方向性

单向

同步性

异步

数据连续性

连续数据流

典型应用

传感器数据、机器人状态

3. 服务(Service)

服务是节点间的双向同步通信方式,请求-响应模式。

特性

说明

通信模式

客户端-服务端

方向性

双向

同步性

同步

数据连续性

单次请求-响应

典型应用

计算服务、参数查询

 4. 动作(Action)

动作是节点间的双向异步通信方式,支持反馈和取消。

特性

说明

通信模式

动作客户端-动作服务端

方向性

双向

同步性

异步

数据连续性

目标-反馈-结果

典型应用

导航、机械臂运动

5. 参数(Parameter)

参数是节点的配置选项,支持运行时修改。

class ParamNode(Node):
    def __init__(self):
        super().__init__('param_node')
        
        # 声明参数
        self.declare_parameter('robot_name', 'my_robot')
        self.declare_parameter('max_speed', 1.0)
        
        # 获取参数
        robot_name = self.get_parameter('robot_name').value
        max_speed = self.get_parameter('max_speed').value
        
        self.get_logger().info(f'机器人名称: {robot_name}')
        self.get_logger().info(f'最大速度: {max_speed}')

四、ROS2架构详解

1. 中间件层(Middleware)

ROS2使用DDS作为通信中间件:

┌─────────────────────────────────────────┐
│         用户应用层(Nodes)            │
├─────────────────────────────────────────┤
│         ROS Client Library (rcl)      │
├─────────────────────────────────────────┤
│         ROS Middleware (rmw)          │
├─────────────────────────────────────────┤
│         DDS Implementation            │
│  (FastDDS, CycloneDDS, RTI Connext)  │
├─────────────────────────────────────────┤
│         网络传输层                    │
└─────────────────────────────────────────┘

2. DDS(Data Distribution Service)

DDS是OMG(对象管理组织)定义的工业级通信标准:

  • DCPS(Data-Centric Publish-Subscribe):以数据为中心的发布订阅。

  • DDSI-RTPS:DDS互操作协议。

  • QoS(Quality of Service):服务质量策略。

3. QoS策略(服务质量)

ROS2提供多种QoS策略配置:

QoS策略

说明

应用场景

历史记录(History)

保留多少历史数据

传感器数据缓存

深度(Depth)

历史记录队列大小

控制队列长度

可靠性(Reliability)

可靠传输/尽力而为

关键数据vs非关键数据

持久性(Durability)

数据持久化

晚加入的订阅者

截止期限(Deadline)

数据必须在多长时间内到达

实时系统

寿命(Lifespan)

数据有效期

数据过期

from rclpy.qos import QoSProfile, ReliabilityPolicy, DurabilityPolicy

# 定义QoS配置
qos_profile = QoSProfile(
    reliability=ReliabilityPolicy.BEST_EFFORT,
    durability=DurabilityPolicy.VOLATILE,
    depth=10
)

# 使用QoS创建发布者
self.publisher = self.create_publisher(
    String,
    'sensor_data',
    qos_profile
)

更多内容请看下回。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐