1. ROS2起源与哲学:从ROS1到ROS2的演进历程、设计哲学与核心优势

各位同学好,我是这门课的主讲。今天咱们聊聊ROS2的来龙去脉。说实话,我接触ROS已经快十年了,从ROS1的Indigo版本一直用到现在的ROS2 Humble。这中间踩过的坑、填过的洞,真不少。

为什么要有ROS2?ROS1用得好好的,干嘛要折腾?嗯,这个问题,当年我也问过自己。

1.1 从ROS1到ROS2:为什么必须升级?

ROS1诞生于2007年,那时候机器人还主要在实验室里跑。它的设计目标很纯粹:让学术界的机器人研究者能快速搭建原型、共享代码。说白了,就是个科研工具。

但时代变了。工业机器人、自动驾驶、服务机器人开始要求:

  • 实时性:机器人关节控制必须在1毫秒内响应,ROS1做不到
  • 可靠性:工厂里机器人不能动不动就断连、丢数据
  • 安全性:多机器人协同,一个节点崩溃不能拖垮整个系统
  • 多平台:Windows、嵌入式系统也得跑

我在2018年参与过一个工业AGV项目,用的ROS1。那叫一个痛苦——机器人跑到一半,roscore挂了,整个车队全部瘫痪。从那以后,我坚定地转向了ROS2。

核心痛点总结:ROS1的roscore中心化架构是单点故障的根源。ROS2去掉了这个"老大",改用DDS分布式通信,每个节点都是对等的。

1.2 ROS2的设计哲学:去中心化、实时性、安全性

ROS2不是ROS1的简单升级,而是重新设计。它的三大哲学,我一个个说。

去中心化:没有"老大"了

ROS1里,所有节点都得先找roscore注册。roscore一挂,整个系统就聋了。ROS2用DDS(数据分发服务)替代了roscore。每个节点直接通信,不依赖中心节点。

你想想看,这就好比一个团队,以前所有事都得经过项目经理。项目经理请假,大家就干瞪眼。现在每个人都能直接沟通,效率高多了,也不怕单点故障。

我的经验:在ROS2里调试多机器人系统,我习惯先用ros2 node list和ros2 topic list确认所有节点都在线。DDS的发现机制有时候会慢几秒,别急,等一等。

实时性:说到做到

ROS1的通信基于TCP,延迟不可控。ROS2支持多种QoS(服务质量)策略,你可以指定"这个数据必须在10毫秒内送达",系统会尽力保证。

举个例子,机器人关节的力矩控制,要求1000Hz的更新频率。ROS1做不到,但ROS2可以。我做过一个六轴机械臂的力控项目,用的就是ROS2的实时内核补丁,配合rclcpp的executor配置,成功把控制周期稳定在1毫秒以内。

# 设置QoS策略,保证实时性
rclcpp::QoS qos(rclcpp::KeepLast(10));
qos.reliability(RMW_QOS_POLICY_RELIABILITY_RELIABLE);
qos.durability(RMW_QOS_POLICY_DURABILITY_VOLATILE);
qos.deadline(std::chrono::milliseconds(10));  // 10ms deadline

安全性:别让机器人"裸奔"

ROS1没有安全机制,任何节点都能订阅任何话题。ROS2引入了DDS的安全插件,支持身份认证、加密通信、权限控制。

我曾经帮一家工厂做安全审计,发现他们的ROS1系统里,一个恶意的节点可以轻松篡改机器人的速度指令。换成ROS2后,我们配置了SROS2(ROS2的安全扩展),只有经过签名的节点才能发布控制指令,这才算真正锁上了门。

注意:SROS2的配置有点繁琐,但别偷懒。我见过太多人图省事跳过安全配置,结果出了问题追悔莫及。至少把permissions.xml写好,限制每个节点能做什么。

1.3 ROS2在工业与学术界的应用现状

说实话,ROS2现在已经是"当红炸子鸡"了。我列几个典型场景:

领域 典型应用 为什么用ROS2
工业机器人 协作臂、AGV、焊接 实时性、可靠性、安全认证
自动驾驶 感知、规划、控制 多传感器融合、确定性通信
服务机器人 配送、清洁、导览 跨平台、易于部署
学术研究 SLAM、运动规划、人机交互 生态丰富、社区活跃

学术界这边,ROS2已经成为主流。我记得2023年的ICRA(国际机器人与自动化大会),超过70%的都用了ROS2。工业界也在加速,像ABB、发那科这些老牌厂商,都开始提供ROS2接口。

但别以为ROS2就完美了。它也有缺点:学习曲线陡峭、DDS配置复杂、资源占用比ROS1高。不过,这些代价换来的是一套能上生产环境的机器人系统,值不值?我觉得值。

ROS1 架构 roscore(中心节点) 节点A 节点B 所有通信经过中心节点 单点故障风险 ROS2 架构 DDS 网络(分布式数据总线) 无中心节点,点对点通信 节点A 节点B 节点C 节点间直接通信 无单点故障,高可靠性 核心变化 ROS1:中心化 → ROS2:去中心化 TCP通信 → DDS实时通信

好了,这一章就到这里。记住一句话:ROS2不是ROS1的补丁,而是一次彻底的重新设计。理解了它的设计哲学,后面的学习会顺畅很多。