第1章 · ROS2概述
各位好,我是你们这门课的老朋友。做机器人系统开发这些年,从ROS1一路摸到ROS2,踩过的坑比代码行数还多。今天咱们先不急着写代码,把ROS2的来龙去脉聊透。你想想看,如果连工具的设计哲学都没搞明白,后面调试的时候肯定抓瞎。
机器人操作系统简介
ROS,全称Robot Operating System,说白了就是一套给机器人用的分布式通信框架。它不是真正的操作系统,而是运行在Linux上的中间件。我2016年第一次接触ROS1时,觉得这东西太妙了——节点之间通过话题传数据,跟乐高积木一样灵活。
但ROS1有个硬伤:它依赖master节点,一旦master挂了整个系统就瘫了。而且实时性、多机通信都很勉强。所以ROS2应运而生,从底层换成了DDS(数据分发服务),去中心化,天生支持QoS。嗯,这里要注意,ROS2不是ROS1的升级版,而是重写版。
💡 我的理解: ROS2 把机器人开发从“单机玩具”带到了“工业级分布式系统”的层面。你想想看,一个机器人身上十几个传感器、多个控制器,如果还用ROS1那种中心化架构,早晚出事故。
ROS1 vs ROS2 对比
我经常被学生问:“老师,现在学ROS1是不是过时了?”我的回答是:ROS1依然能跑,但新项目建议直接上ROS2。下面这张表是我自己整理的,你一看就明白。
| 对比维度 | ROS1 | ROS2 |
|---|---|---|
| 通信中间件 | 自定义TCPROS/UDPROS | DDS (Data Distribution Service) |
| 中心节点 | 依赖master | 去中心化,无单点故障 |
| 实时性 | 不支持硬实时 | 支持实时内核 + 零拷贝 |
| 多机通信 | 需手动配置网络 | 原生DDS发现,即插即用 |
| QoS策略 | 无 | 可配置可靠性、历史记录等 |
| 生命周期 | 无统一管理 | 托管节点生命周期 |
| 安全性 | 无内置加密 | 支持DDS安全插件 |
我曾经在一个AGV项目里用ROS1做多车调度,结果网络波动导致master失联,三台车原地罢工。后来换成ROS2,DDS自动发现,稳得很。所以别在ROS1上浪费感情了。
ROS2 核心概念
咱们快速过一遍ROS2的四大通信原语。你不需要立刻背下来,后面每章都会深入。
- 节点 (Node) —— 可执行的最小单元。每个节点只干一件事,比如“激光雷达驱动节点”只管发数据。我习惯把节点想象成一个人,只负责自己的活儿。
- 话题 (Topic) —— 异步通信,发布/订阅模式。适合传感器数据、状态等流式信息。比如/scan话题一直发激光数据。
- 服务 (Service) —— 同步通信,请求/响应模式。适合“查询当前电量”“打开机械臂夹爪”这种一问一答。
- 动作 (Action) —— 带反馈的异步任务。比如“导航到A点”,过程中不断反馈进度,还能中途取消。
🔧 避坑指南: 我曾经把动作和服务搞混,写了一个“抓取物体”的服务,结果客户端卡死。后来才明白,长时间任务必须用动作,服务只适合几十毫秒内能完成的操作。
ROS2 应用场景
ROS2现在几乎覆盖了所有机器人领域。我随便列几个自己参与过的:
- 自主导航 —— 扫地机器人、仓储AGV。ROS2的Nav2框架比ROS1的move_base强太多,支持生命周期管理和行为树。
- 机械臂控制 —— 使用MoveIt2进行运动规划,配合ROS2的实时能力,可以做到平滑轨迹插补。
- 多机器人协作 —— 我去年做的一个无人机编队项目,20架无人机通过ROS2的DDS自动发现,协同编队飞行。
- 工业自动化 —— 很多工厂开始用ROS2做PLC的上位机,因为支持实时通信和安全加密。
说白了,只要你的机器人需要“多个模块协同工作”,ROS2就是目前最成熟的选择。而且社区活跃度越来越高,现在新出的传感器、驱动器基本都提供ROS2驱动。
⚠️ 注意: 别以为ROS2是万能的。如果你只是做一个简单的遥控小车,用Arduino直连可能更高效。ROS2适合复杂系统,别杀鸡用牛刀。
好,第一章就聊到这儿。ROS2的世界很大,咱们后面慢慢拆解。记住今天这张知识地图,后面每一章都会回到这里。