如何成为一名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:

  1. 实验室项目或导师的代码基于 ROS1,短期内不迁移
  2. 想参考某个经典开源项目,它只有 ROS1 版本
  3. 学校比赛环境指定使用 ROS1(很多智能车就是,除了地瓜)

遇到这些情况,建议花一两周过一遍 ROS1 基础概念,能读懂代码、改改参数就够了,不必深入。

选择建议

ROS1 和 ROS2 的核心概念(节点、话题、服务、动作)是相通的,学会一个再转另一个并不难。 关键是开始动手,不必纠结太久的选型。

怎么学?

有请,恩师 赵! 虚! 左!

天不生我赵虚左,ROS万古如长夜 ROS1: https://www.bilibili.com/video/BV1Ci4y1L7ZZ/?spm_id_from=333.337.search-card.all.click&vd_source=ab428c3952dca788271ad95654273af5 ROS2: https://www.bilibili.com/video/BV1VB4y137ys/?spm_id_from=333.337.search-card.all.click&vd_source=ab428c3952dca788271ad95654273af5 非常推荐赵老师的课程,既有理论知识,也有实战案例,讲解非常清楚,适合初学者入门。 学的时候一定要耐心,在这个AI横行的年代,古法编程也能让你学到很多东西

实战学习

在学习完基础知识后,建议通过实战项目来巩固和提升技能。以下是一些推荐的实战项目:

  1. 智能小车:使用 ROS 控制小车进行路径规划和避障。
  2. 机械臂控制:使用 ROS 控制机械臂进行抓取和放置任务。
  3. 无人机飞行:使用 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 做一个目标跟随小车。


选择建议

不必全都学,选一个方向深入,另外几个了解即可。 一个人的精力有限,但一个团队可以互补。 找个志同道合的队友一起搞,效率翻倍。

相关标签
机器人ROS机器视觉Linux职业规划