如何成为一名ROS专家
从通信模型、仿真到机器人竞赛实战,整理自动化学生学习 ROS 的路线与实践建议。
hi,我是 HDU 的 soyorin。许久没更新了,今天出一期将一下ROS(机器人操作系统),本人在ROS1领域已经深耕两年了,ROS2也是刚刚学完,从最开始的网上学习仿真,到智能车的实战竞赛,ROS始终陪伴在我的大学生涯中,也确确实实学到了很多
ROS是什么?
ROS(Robot Operating System),中文叫机器人操作系统。但它并不是像 Windows 或 Linux 那样的传统操作系统,而是一个运行在 Linux 之上的分布式通信框架。
打个比方:你有一台机器人,它上面有摄像头、激光雷达、电机驱动等等一堆硬件。如果每个硬件自己写一套通信协议,代码很快就变成一坨屎山。ROS 做的事情就是提供一套标准化的通信机制——不管是摄像头的数据、还是电机的控制指令,统统通过 ROS 的"话题"(Topic)来传递,各个模块(Node)各司其职、互不干扰。
核心就三个字:解耦、复用、标准化。学会 ROS,你就等于有了一套通用的"机器人开发语言",换个平台、换个硬件,代码逻辑几乎不用动。 这就是我喜欢ROS的原因:不用处理复杂的通信协议,还有方便的辅助工具,这就是一些嵌入式做不到的
为什么学习ROS,谁需要学习ROS?
谁需要学?
如果你是以下专业的 HDUer,ROS 大概率会出现在你的学习或竞赛路上:
- 自动化:智能车竞赛、机器人控制、SLAM
- 电子信息:嵌入式 + ROS 通信、传感器融合
- 计算机:机器人算法、仿真、AI + 机器人
- 机械:机械臂控制、数字孪生
简单讲:只要你想让代码"控制一个物理的东西动起来",ROS 就是你绕不开的工具。
或者说项目上想做四足小车、多旋翼无人机、人形机器人、四组机器狗等等
ROS都是非常好的工具!
为什么要学?
我从大一就开始接触 ROS,踩了无数坑之后,总结出三个最实在的理由:
1. 竞赛利器 智能车、RoboMaster、电赛……越来越多比赛开始用 ROS 做上层控制。掌握了 ROS,你就比纯裸写 C 驱动的队伍多一个维度——人家在调 PID,你已经在跑导航栈了。
2. 就业加分 机器人/自动驾驶行业的岗位(感知、规划、控制、仿真),JD 里十有八九写着"熟悉 ROS/ROS2"。这玩意儿已经成了行业通用语言,跟程序员不会 Git 一样尴尬。
3. 开发效率翻倍
ROS 生态里有大量现成的package可以直接复用——建图用 slam_toolbox,导航用 Nav2,机械臂用 MoveIt2。你不需要从零造轮子,站在巨人肩膀上写自己的应用就够了。
如果你确实对此感兴趣,想深入学习,那就请不要错过下面的内容
学哪种?ROS1 or ROS2
ROS1 vs ROS2 对比一览
| ROS1 (Noetic) | ROS2 (Humble / Jazzy) | |
|---|---|---|
| 维护状态 | 2025 年停止官方维护 | 活跃开发中 |
| 操作系统 | Ubuntu 20.04 | Ubuntu 22.04 / 24.04 |
| 通信架构 | 中心化(ROS Master) | 去中心化(DDS) |
| 实时性 | 不原生支持 | 原生支持实时 |
| 多机器人 | 需额外配置 | 原生支持 |
| 跨平台 | 仅 Linux | Linux / Windows / macOS |
| 嵌入式支持 | 需自行裁剪 | micro-ROS 官方方案 |
| 生态成熟度 | 非常成熟,资料丰富 | 快速追赶,核心功能已齐备 |
各自的优势
ROS1 的优点:
- 经过十多年沉淀,社区资源极其丰富——几乎你遇到的任何问题都能搜到答案
- 大量经典开源项目(Autoware、MoveIt 早期版本等)基于 ROS1,论文复现材料充足
- 很多高校实验室和比赛环境仍在用,学习资料多、门槛低
ROS2 的优点:
- 通信基于工业级 DDS 标准,去中心化,不再有单点故障问题
- 命令行工具统一为
ros2 <动词> <名词>格式,比 ROS1 的rostopic/rosnode/rosservice更一致 - 编译系统从 Catkin 升级到 Colcon,支持纯 CMake 和 Python setuptools
- 工业界和自动驾驶公司已逐步迁移,未来趋势明确
我个人的真实体验
我自己 ROS1 玩了两年,ROS2 刚学完一轮,两边都有发言权。
ROS1 的中心化架构比较简单直观——一个 Master 管所有节点,对新手理解通信模型很友好。但实际用起来,Master 挂了整个系统崩掉,多机通信需要手动配置 ROS_MASTER_URI,调试时确实折腾。
ROS2 的 DDS 自发现机制解决了这个问题,节点独立运行互不影响。但 DDS 配置项多,新手可能遇到节点发现不了的情况(跟网络配置有关),也需要一定学习成本。 而且代码确实相比ROS1更复杂,很多API都变了,很多ROS1的package还没移植到ROS2。 尤其是那个动作通信逻辑,ROS1的Actionlib是基于Topic的,而ROS2的Action是基于Service和Topic的组合,逻辑上更复杂,但也更灵活。
一句话总结:ROS1 赢在生态和资料,ROS2 赢在架构和未来。按自己的实际需求选择。
什么时候需要碰 ROS1?
即使主攻 ROS2,以下情况你还是得了解 ROS1:
- 实验室项目或导师的代码基于 ROS1,短期内不迁移
- 想参考某个经典开源项目,它只有 ROS1 版本
- 学校比赛环境指定使用 ROS1(很多智能车就是,除了地瓜)
遇到这些情况,建议花一两周过一遍 ROS1 基础概念,能读懂代码、改改参数就够了,不必深入。
选择建议
ROS1 和 ROS2 的核心概念(节点、话题、服务、动作)是相通的,学会一个再转另一个并不难。 关键是开始动手,不必纠结太久的选型。
怎么学?
有请,恩师 赵! 虚! 左!
天不生我赵虚左,ROS万古如长夜 ROS1:
https://www.bilibili.com/video/BV1Ci4y1L7ZZ/?spm_id_from=333.337.search-card.all.click&vd_source=ab428c3952dca788271ad95654273af5ROS2:https://www.bilibili.com/video/BV1VB4y137ys/?spm_id_from=333.337.search-card.all.click&vd_source=ab428c3952dca788271ad95654273af5非常推荐赵老师的课程,既有理论知识,也有实战案例,讲解非常清楚,适合初学者入门。 学的时候一定要耐心,在这个AI横行的年代,古法编程也能让你学到很多东西
实战学习
在学习完基础知识后,建议通过实战项目来巩固和提升技能。以下是一些推荐的实战项目:
- 智能小车:使用 ROS 控制小车进行路径规划和避障。
- 机械臂控制:使用 ROS 控制机械臂进行抓取和放置任务。
- 无人机飞行:使用 ROS 控制无人机进行自主飞行 但限于经费,一个好的上位机就要大几百,更别说其他硬件了(如果你是富哥当我没说),可以去投靠一些导师或者学长,他们那里肯定会爆金币,也可以自主去参加一些竞赛,免费玩车说是(bushi
进阶方向路线图
基础打完之后,ROS 的世界很广,你得选一个方向深入。以下四个是当前最主流的路线,按兴趣对号入座:
自动驾驶 / 移动机器人
想让小车自己跑起来、建图、导航、避障?这条路的技能树是:
- SLAM(同时定位与建图):
slam_toolbox(ROS2)或cartographer - 导航:
Nav2(Navigation2)—— ROS2 的导航全家桶,包含全局规划、局部规划、行为树 - 传感器融合:
robot_localization(IMU + 里程计 + GPS 融合) - 仿真:Gazebo 里搭个差分底盘小车,先跑通再上真机
推荐练手项目:用 TurtleBot3 仿真跑通整个建图→导航→避障流程,网上教程极多。
机械臂控制
想玩六轴机械臂、抓取、轨迹规划?核心是:
- MoveIt2:机械臂运动规划的工业标准,支持碰撞检测、轨迹生成、抓取规划
- 运动学:正运动学/逆运动学(如果你不知道这是啥,先补一下机器人学基础)
ros2_control:连接 ROS 与真实硬件的中间层,所有关节驱动都通过它- URDF / Xacro:描述机器人模型的 XML 文件,MoveIt 和 Gazebo 都依赖它
推荐练手项目:在 RViz 里搭一个 UR5 机械臂,用 MoveIt2 做抓取仿真。
嵌入式 / micro-ROS
如果你想在 STM32 / ESP32 上直接跑 ROS 节点(不用树莓派做中间代理):
- micro-ROS:专为 MCU 设计的 ROS2 裁剪版,内存占用极小
- DDS-XRCE:micro-ROS 的底层通信协议,连接 MCU 和 ROS2 主机
ros2_control+ 硬件接口:自己写hardware_interface,让 ROS 直接控制电机
这条路对嵌入式基础要求较高,建议先熟悉 FreeRTOS 和基础通信协议。
视觉 + 深度学习
给机器人装上眼睛和大脑:
cv_bridge:ROS 图像消息 ↔ OpenCV Mat 的桥梁ros2_vision+ OpenCV:物体检测、二维码识别、颜色跟踪- 深度学习部署:YOLO / TensorRT 跑在 Jetson 上,模型输出通过 ROS Topic 广播
depthai-ros:OAK-D 深度相机的 ROS 驱动,做深度估计和3D感知
推荐练手项目:用 USB 摄像头 + YOLO 做一个目标跟随小车。
选择建议
不必全都学,选一个方向深入,另外几个了解即可。 一个人的精力有限,但一个团队可以互补。 找个志同道合的队友一起搞,效率翻倍。