第1章 · ROS2概述

各位好,我是你们这门课的老朋友。做机器人系统开发这些年,从ROS1一路摸到ROS2,踩过的坑比代码行数还多。今天咱们先不急着写代码,把ROS2的来龙去脉聊透。你想想看,如果连工具的设计哲学都没搞明白,后面调试的时候肯定抓瞎。

ROS2 核心体系 节点 · 话题 · 服务 动作 · 参数 · 生命周期 DDS中间件 · QoS 导航 · 机械臂 · 多机 仿真 · 感知 · 控制 工业 · 教育 · 产品 ROS2 知识体系与典型应用场景

机器人操作系统简介

ROS,全称Robot Operating System,说白了就是一套给机器人用的分布式通信框架。它不是真正的操作系统,而是运行在Linux上的中间件。我2016年第一次接触ROS1时,觉得这东西太妙了——节点之间通过话题传数据,跟乐高积木一样灵活。

但ROS1有个硬伤:它依赖master节点,一旦master挂了整个系统就瘫了。而且实时性、多机通信都很勉强。所以ROS2应运而生,从底层换成了DDS(数据分发服务),去中心化,天生支持QoS。嗯,这里要注意,ROS2不是ROS1的升级版,而是重写版。

💡 我的理解: ROS2 把机器人开发从“单机玩具”带到了“工业级分布式系统”的层面。你想想看,一个机器人身上十几个传感器、多个控制器,如果还用ROS1那种中心化架构,早晚出事故。

ROS1 vs ROS2 对比

我经常被学生问:“老师,现在学ROS1是不是过时了?”我的回答是:ROS1依然能跑,但新项目建议直接上ROS2。下面这张表是我自己整理的,你一看就明白。

对比维度ROS1ROS2
通信中间件自定义TCPROS/UDPROSDDS (Data Distribution Service)
中心节点依赖master去中心化,无单点故障
实时性不支持硬实时支持实时内核 + 零拷贝
多机通信需手动配置网络原生DDS发现,即插即用
QoS策略无可配置可靠性、历史记录等
生命周期无统一管理托管节点生命周期
安全性无内置加密支持DDS安全插件

我曾经在一个AGV项目里用ROS1做多车调度,结果网络波动导致master失联,三台车原地罢工。后来换成ROS2,DDS自动发现,稳得很。所以别在ROS1上浪费感情了。

ROS2 核心概念

咱们快速过一遍ROS2的四大通信原语。你不需要立刻背下来,后面每章都会深入。

  • 节点 (Node) —— 可执行的最小单元。每个节点只干一件事,比如“激光雷达驱动节点”只管发数据。我习惯把节点想象成一个人,只负责自己的活儿。
  • 话题 (Topic) —— 异步通信,发布/订阅模式。适合传感器数据、状态等流式信息。比如/scan话题一直发激光数据。
  • 服务 (Service) —— 同步通信,请求/响应模式。适合“查询当前电量”“打开机械臂夹爪”这种一问一答。
  • 动作 (Action) —— 带反馈的异步任务。比如“导航到A点”,过程中不断反馈进度,还能中途取消。
🔧 避坑指南: 我曾经把动作和服务搞混,写了一个“抓取物体”的服务,结果客户端卡死。后来才明白,长时间任务必须用动作,服务只适合几十毫秒内能完成的操作。

ROS2 应用场景

ROS2现在几乎覆盖了所有机器人领域。我随便列几个自己参与过的:

  1. 自主导航 —— 扫地机器人、仓储AGV。ROS2的Nav2框架比ROS1的move_base强太多,支持生命周期管理和行为树。
  2. 机械臂控制 —— 使用MoveIt2进行运动规划,配合ROS2的实时能力,可以做到平滑轨迹插补。
  3. 多机器人协作 —— 我去年做的一个无人机编队项目,20架无人机通过ROS2的DDS自动发现,协同编队飞行。
  4. 工业自动化 —— 很多工厂开始用ROS2做PLC的上位机,因为支持实时通信和安全加密。

说白了,只要你的机器人需要“多个模块协同工作”,ROS2就是目前最成熟的选择。而且社区活跃度越来越高,现在新出的传感器、驱动器基本都提供ROS2驱动。

⚠️ 注意: 别以为ROS2是万能的。如果你只是做一个简单的遥控小车,用Arduino直连可能更高效。ROS2适合复杂系统,别杀鸡用牛刀。

好,第一章就聊到这儿。ROS2的世界很大,咱们后面慢慢拆解。记住今天这张知识地图,后面每一章都会回到这里。