ROS2机器人系统开发工程 - 第1节

1. ROS2前世今生

一、ROS2前世今生:机器人操作系统演进史、ROS1 vs ROS2核心差异、ROS2设计哲学与生态全景

1.1 机器人操作系统的起源:从Willow Garage说起

聊ROS2之前,得先说说它的老大哥ROS1。2007年,斯坦福大学和Willow Garage公司联合启动了ROS项目。那时候机器人开发有多痛苦?我跟你讲,每个团队都在重复造轮子——自己写驱动、自己搞通信、自己搭框架。说白了,整个行业就像一群人在黑夜里各自摸索。

ROS1的出现,就像给机器人开发者点亮了一盏灯。它提供了消息传递、包管理、工具链这些基础设施。我记得2012年刚接触ROS1时,最大的感受是:终于不用再手写socket通信了!

但ROS1有个致命伤——它设计之初就没考虑过「实时性」和「多机器人协作」。你想想看,一个机器人系统,如果控制指令延迟几百毫秒,那还怎么玩?

核心痛点:ROS1的通信基于TCP,节点之间是松耦合的。这在实验室环境里跑个单机器人还行,一旦上产线、做多机协同,问题就全暴露了。

1.2 ROS1 vs ROS2:一场不得不做的升级

2015年,ROS2项目正式启动。为什么?因为ROS1的架构已经撑不住了。我参与过一个工业AGV项目,用ROS1做调度,结果三台车同时运行时,通信延迟直接飙到200ms以上。嗯,那场面,真是让人头大。

来看看它们核心差异在哪:

对比维度 ROS1 ROS2
通信中间件 自定义TCP/UDP DDS(数据分发服务)
实时性支持 无原生支持 支持实时内核
多机器人通信 依赖单Master 去中心化,自动发现
安全性 无加密机制 支持DDS安全插件
跨平台 主要支持Linux 支持Linux/Windows/macOS
生命周期管理 手动管理节点 内置节点生命周期

这张表里最关键的,其实是DDS。ROS2抛弃了ROS1那套自定义通信协议,直接拥抱了工业级的DDS标准。DDS是什么?说白了,它是一套「发布-订阅」模式的通信中间件,但比ROS1的通信强太多了——支持QoS(服务质量)、自动发现、实时传输。

我的经验:在ROS1时代,如果你要保证消息不丢,得自己写ACK机制。ROS2里直接设置QoS策略就行,比如设置成RELIABLE模式,系统会自动重传丢失的数据包。这个改进,省了我至少两周的调试时间。

1.3 ROS2的设计哲学:为什么这么设计?

ROS2的设计哲学,我总结为三个词:去中心化、实时化、标准化。

去中心化——ROS1有个Master节点,一旦挂了整个系统就瘫痪。ROS2去掉了Master,每个节点通过DDS自动发现彼此。你想想看,一个工厂里几十台机器人,如果Master挂了,那生产不就停了吗?

实时化——ROS2支持将节点绑定到特定CPU核心,配合实时内核,可以实现微秒级的控制周期。我做过一个机械臂项目,要求控制周期1ms以内,ROS2配合RT-Preempt内核,实测能做到0.8ms。这在ROS1下根本不可能。

标准化——ROS2直接复用DDS标准,这意味着你可以用任何支持DDS的硬件和软件。比如,你可以用RTI Connext、Fast DDS、Cyclone DDS等不同实现,它们之间可以互操作。

ROS2 设计哲学与核心架构 应用层 机器人应用节点 · 生命周期管理 · 参数服务 · 动作服务 TF坐标变换 · URDF模型 · 导航栈 · MoveIt2 ROS2 中间件层(rcl) rclcpp(C++ API) · rclpy(Python API) 节点图 · 话题/服务/动作接口 · 时间与时钟 DDS 通信层 QoS策略 · 自动发现 · 实时传输 · 安全加密 Fast DDS · Cyclone DDS · RTI Connext 去中心化 · 无单点故障 实时化 · 微秒级控制 标准化 · DDS互操作

1.4 ROS2生态全景:你有哪些选择?

ROS2的生态,现在已经相当成熟了。我按功能领域给你梳理一下:

  • 通信实现:Fast DDS(默认)、Cyclone DDS、RTI Connext、GurumDDS。我个人推荐初学者先用Fast DDS,社区支持最好。
  • 开发工具:rqt(可视化调试)、rviz2(3D可视化)、ros2cli(命令行工具)、colcon(构建工具)。
  • 核心库:tf2(坐标变换)、urdf(机器人描述)、nav2(导航)、MoveIt2(运动规划)。
  • 硬件支持:ROS2官方支持的硬件包括Intel RealSense、Velodyne激光雷达、UR机械臂等。第三方驱动也越来越多。

避坑指南:我曾经在项目里直接用了ROS1的包,想着「应该兼容吧」。结果编译报错一堆,折腾了两天才发现ROS2的API和ROS1完全不兼容。所以,千万别偷懒,ROS2项目就用ROS2的包。

1.5 为什么现在必须学ROS2?

说实话,ROS1已经进入维护模式了。ROS1 Noetic是最后一个长期支持版本,2025年就停止维护了。而ROS2的Humble Hawksbill(2022年发布)和Iron Irwini(2023年发布)都是长期支持版,至少维护到2028年。

你想想看,现在新出的机器人产品,哪个还用ROS1?从工业机械臂到服务机器人,从自动驾驶到无人机编队,ROS2已经是事实上的标准了。

嗯,这一章我们先把ROS2的「前世今生」理清楚。后面我们会一步步搭建开发环境、写第一个节点、搞通信、做控制。别急,路要一步一步走。