ROS的前世今生——从ROS1到ROS2的进化逻辑
面试的时候被问你知道ROS吗我说知道。那ROS和ROS2有什么区别我说ROS2是升级版。面试官笑了笑没再追问。后来才知道这个问题考的不是你背没背过版本差异而是看你对机器人软件架构的理解深度。今天从头讲讲ROS的故事。搞清楚它为什么会出现、遇到了什么问题、为什么要重新设计比记住几个技术细节重要得多。ROS的诞生斯坦福的AI实验室ROS的全称是Robot Operating System机器人操作系统。但别被操作系统这个词骗了它不是Windows也不是Linux那样的操作系统更像是一个机器人软件的开发框架。2007年斯坦福大学的AI实验室SAIL在做家用机器人的项目。他们发现一个很头疼的问题每做一个新机器人之前写的代码基本都不能复用。感知模块、导航模块、操控模块每个项目都重新造一遍轮子。于是Morgan Quigley带着团队搞了一套框架把通用的功能抽出来做成可复用的模块模块之间通过消息通信。这就是ROS的雏形。后来这个框架被Willow Garage公司接手并开源。Willow Garage当时是做通用机器人平台的他们需要一个软件框架来支撑PR2机器人。ROS在这个阶段快速发展形成了我们后来熟悉的核心概念节点、话题、服务、参数服务器。ROS1的黄金时代2010年到2018年ROS迎来了黄金时期。学术界大量采用ROS做研究。因为开源、社区活跃、现成的包多。你想做SLAM有gmapping、cartographer。想做导航有move_base。想做物体识别有一堆基于PCL的点云处理包。基本上你能想到的机器人功能都有人做过了。很多大学教授直接说我们实验室只用ROS因为学生毕业之后去其他实验室也能接着用。工业界也开始用ROS。很多创业公司基于ROS做服务机器人、无人机、自动驾驶。ROS大大降低了机器人开发的门槛让几个人的小团队也能做出像样的机器人系统。那个阶段招聘网站上熟悉ROS开始频繁出现逐渐成了机器人软件工程师的标配技能。社区的力量也不可忽视。ROS Answers后来迁移到ROS Discourse上每天都有人提问和回答Stack Overflow上ROS相关的问题越来越多。每年还有ROSCon大会全球的ROS开发者和维护者聚在一起交流。整个生态进入了一个正向循环用的人越多包越多包越多用的人就更多。这个阶段ROS的生态蓬勃发展ros.org上注册的包超过几千个遍布导航、感知、操控、仿真各个领域。问题开始显现但ROS1在设计之初有一些假设随着应用场景的扩展这些假设不再成立了。ROS1假设所有节点都在同一台机器上或者至少在同一个局域网里。它的通信依赖一个中心化的master节点master挂了整个系统就瘫了。这在实验室里没问题但在实际产品里就是单点故障。ROS1假设网络是可靠的。消息丢了就丢了不保证送达。对于研究场景来说丢一帧数据重新来就行。但在工业场景里一条控制指令丢了可能导致机器人撞墙。ROS1假设开发者都在Linux上。ROS1对macOS的支持是社区勉强维护的Windows基本不能用。但在商业公司里有些工具链必须在Windows上跑有些嵌入式平台用的是RTOS。ROS1没有实时性保证。它的通信延迟不确定有时候1ms有时候100ms。对于需要精确时序的控制系统来说这是不可接受的。还有安全问题。ROS1完全没有安全机制任何能连上网络的设备都可以向你的机器人发送指令。在实验室里无所谓但产品化的机器人如果存在这种安全漏洞后果不堪设想。ROS2的诞生2015年Open RoboticsWillow Garage的继承者联合OSRF基金会开始开发ROS2。核心目标就是解决ROS1的这些痛点。ROS2做了一个根本性的架构决策用DDSData Distribution Service替代ROS1的自研通信层。DDS是OMG组织制定的工业级分布式数据总线标准在航空航天、国防、医疗设备、自动驾驶领域已经用了几十年。它天生支持去中心化通信不需要master节点、QoS策略可以配置消息的可靠性和时效性、实时性保证、安全机制DDS Security规范。ROS2还做了很多改进支持多语言C、Python是官方支持的社区还有Rust、Java等绑定、支持实时操作系统如FreeRTOS、RT-Preempt Linux、支持多机器人系统通过namespace隔离、内建安全机制SROS2基于DDS Security。但核心思想没变——节点、话题、服务这些概念都保留了只是底层实现完全重写了。ROS2的第一个LTS版本是2018年的Crystal Clemmys之后每年一个LTS版本Dashing、Eloquent、Foxy、Galactic、Humble、Iron、Jazzy。其中Humble2022年发布是目前工业界用得最多的版本支持到2027年。从ROS1到ROS2的迁移很多公司面临一个问题现有的ROS1代码怎么办全部重写不现实但ROS1又不维护了ROS1 Noetic在2025年停止维护。实际的做法是渐进式迁移。先把不依赖通信的工具代码算法库、驱动封装直接搬过来这部分改动最小。然后逐步替换通信层从ROS1的topic/service换成ROS2的对应物。最后处理那些深度依赖ROS1特性的代码比如参数服务器、tf监听等。社区也提供了桥接工具可以让ROS1和ROS2的节点同时运行、互相通信。这样就能一个模块一个模块地迁移不用一次性全换。ros1_bridge这个包就是干这个的它能在ROS1的topic和ROS2的topic之间做消息转发。面试中怎么聊ROS历史面试官问ROS相关的问题如果你能讲清楚ROS的设计演变和背后的原因会比单纯背API有说服力得多。比如ROS1的中心化master在实验室场景下够用但产品化之后单点故障和安全性就成了问题。ROS2用DDS替代了自研通信层去掉了master每个节点都能独立发现和连接其他节点。这个架构变化直接解决了单点故障和安全性问题。这种回答说明你不只是会用ROS而是理解它为什么这么设计面试官会觉得你有深度思考的能力。ROS2的生态现状和未来截至2026年ROS2的生态已经相当成熟。主流机器人厂商——Universal Robots、Franka、AgileX——都提供了原生的ROS2驱动接口。导航方面Nav2已经完全替代了ROS1的move_base。SLAM领域SLAM Toolbox和Cartographer都有成熟的ROS2版本。值得关注的是ROS2在工业领域的渗透速度。汽车行业的自动驾驶仿真、物流AGV的调度系统、农业机器人的作业控制越来越多地采用ROS2作为中间件。这背后的驱动力是DDS的实时性和可靠性——工业场景对通信质量的要求远高于实验室环境。如果你正在准备面试关注ROS2的最新进展也很重要。比如ROS2的rclpyPython客户端库在性能上已经大幅提升越来越多的团队开始用Python写上层逻辑节点。ROS迁移的决策考量从ROS1迁移到ROS2不是简单的代码翻译很多设计决策需要重新考量。比如ROS1的roslaunch参数格式在ROS2中完全改变了节点生命周期管理也是全新的概念。实际迁移时建议分步走先把核心功能跑通再逐步迁移辅助工具。面试时如果被问到迁移经验重点讲你遇到的兼容性问题和解决方案比罗列迁移步骤更有价值。给你的建议如果你刚开始学机器人开发直接学ROS2。ROS1已经停止维护了新项目没必要再用它。但了解一下ROS1的设计是有好处的因为很多现有的教程、代码、文档都是基于ROS1的理解了ROS1的概念看ROS2的资料会更快上手。读一下ROS2的设计文档design.ros2.org里面记录了每个重要设计决策的讨论过程和取舍理由。知道为什么这么设计比知道怎么用更重要因为工具会过时但设计思想是通用的。上一篇第105篇 CI/CD自动化——GitHub Actions/Jenkins在机器人项目中的应用下一篇预告第107篇 ROS1的痛点——为什么行业必须迁移到ROS2

相关新闻

CI/CD自动化——GitHub Actions/Jenkins在机器人项目中的应用

CI/CD自动化——GitHub Actions/Jenkins在机器人项目中的应用

上篇聊了clang-tidy、cppcheck这些代码质量工具,最后提到要把它们串进CI流水线。今天就把CI/CD这件事展开讲透。 面试的时候被问:"你们代码提交之后,怎么保证编译通过、测试能跑?" 我当时说"本地跑一遍&#xff…

2026/10/13 0:05:50 阅读更多 →
代码质量工具——clang-tidy/cppcheck和机器人代码规范

代码质量工具——clang-tidy/cppcheck和机器人代码规范

面试的时候被问:"你们团队怎么保证代码质量?" 我当时说了句"靠code review"。面试官点点头,又问:"除了人工review,有没有用什么自动化工具?"我又卡了。 后来进了一个正规团…

2026/9/29 12:27:12 阅读更多 →
格鲁吉亚名义雇主的雇佣方式对企业全球扩展的影响

格鲁吉亚名义雇主的雇佣方式对企业全球扩展的影响

本文将围绕格鲁吉亚名义雇主的雇佣方式展开讨论、重点阐述其如何推动企业的全球扩展。名义雇主成为一种灵活的雇佣模式、能够帮助企业快速适应新等市场环境,规避合规风险。通过与当地名义雇主合作,如万领钧Knit People,企业可以简化招聘过程、…

2026/10/1 11:31:27 阅读更多 →

最新新闻

虚拟机+Linux入门:从安装配置到快照恢复的完整指南

虚拟机+Linux入门:从安装配置到快照恢复的完整指南

直接学Linux的人,十有八九第一堂课都是在装虚拟机。我自己当年学Linux,一开始直接拿一台老笔记本去装系统,结果分区的时候手一抖,把资料盘给格了,那种酸爽至今记忆犹新。后来老老实实按部就班用虚拟机,才发…

2026/10/13 16:54:42 阅读更多 →
SpringBoot+Vue3+MyBatis乡村政务办公系统开发与部署全解析

SpringBoot+Vue3+MyBatis乡村政务办公系统开发与部署全解析

身边不少朋友做过政务类的管理系统,我经手的项目里也有不少类似的诉求。乡村政务办公系统这类项目,看起来就是典型的CRUD加权限管理,但真正落地时,细节远比想象中多。尤其是面对乡、村两级的工作人员,系统不光要功能完…

2026/10/13 16:54:42 阅读更多 →
t3code:轻量级代码片段管理方案,纯文本与可检索的极简实践

t3code:轻量级代码片段管理方案,纯文本与可检索的极简实践

1. 项目缘起与核心定位第一次看到“t3code”这个名字,我下意识以为是某个新出的终端工具或者代码片段管理器。翻了一圈社区讨论和零散的项目描述之后才反应过来,它其实是一个面向轻量级代码片段与结构化文本的极简组织方案——你可以把它理解成“给开发者…

2026/10/13 16:54:42 阅读更多 →
用 CLI 终结团队代码规范之争:t3code 的设计与落地

用 CLI 终结团队代码规范之争:t3code 的设计与落地

大概半年前,我们团队在 Code Review 时的画风是这样的:有人坚持单引号,有人只用双引号;有人习惯把工具函数丢进utils.ts,有人喜欢按业务模块建helpers文件夹;新同事入职第一周,光适应"潜规…

2026/10/13 16:54:42 阅读更多 →
用Python打造Mercari新品扫描器:轻量爬虫与增量去重实战

用Python打造Mercari新品扫描器:轻量爬虫与增量去重实战

简介:mercari-scanner 是一套基于 Python 的 Mercari 新商品扫描与提醒工具,面向海淘代购人群和二手市场研究者,旨在解决手动刷新页面容易错过心仪商品的问题。工具支持通过命令行参数 --min-price 与 --max-price 设置价格区间,并…

2026/10/13 16:54:42 阅读更多 →
AI能力图谱日报:从热词到工程落地的决策指南

AI能力图谱日报:从热词到工程落地的决策指南

1. 这份“AI 日报”不是新闻简报,而是一份动态能力图谱很多人看到“AI 日报(2026年10月6日)”这个标题,第一反应是点开看今天又出了什么大模型、哪家公司发了新论文、又有哪个开源项目爆火了——就像刷微博热搜那样扫一眼就划走。…

2026/10/13 16:53:41 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →