前两天和一位准备转行人形机器人测试的朋友聊天,他开口就问了一个让我有点意外的问题:人形机器人是不是已经不用 ROS2 了?我问他从哪听来的,他说看到一些招聘要求里写的是“自研中间件”,网上也有人讨论 ROS2 被弃用。我一听就明白了,这个争议不是个例。过去两年,人形机器人公司的招聘里确实越来越多出现“自研软件框架”“自研通信中间件”这类关键词,于是很多准备入行的人开始犹豫:现在学 ROS2,会不会白学?
这个问题值得认真拆一次。它背后其实藏着三个完全不同的疑问:人形机器人哪些模块真的会用 ROS2?转行人形机器人测试岗,有没有必要系统学?以及 ROS2 到底是不是一个即将被淘汰的技术方向?我的结论先放在这里:ROS2 没有被弃用,它仍然是当前机器人软件生态里最值得学习的基础设施之一,尤其对人形机器人测试岗位来说,它是理解机器人数据流和问题定位的重要工具。真正被淘汰的不是 ROS2,而是“以为学会 ROS2 就能搞定一切”的想法。
1. 先回答“ROS2被弃用了吗”:把这个争论拆清楚
1.1 “被弃用”这种说法从哪来
“弃用”传言的根源,不是某个官方公告,而是行业分工在最近两年发生了明显变化。很多机器人公司早期做原型验证时,会优先选择 ROS2,因为它的通信机制、工具链和生态库非常丰富,能让团队在短时间内把相机、激光雷达、底盘、机械臂和各种算法模块拉通。到了产品化、量产化阶段,团队会开始做自研中间件或自研软件栈,用来解决实时性、确定性、资源占用、OTA 升级、功能安全、多机协同等更具体的问题。这时候招聘需求上写的是“自研中间件”,不再重点强调 ROS2,新人就容易产生“ROS2 已经被抛弃”的错觉。
另一个误会来自 ROS1 与 ROS2 的更新节奏。ROS1 已经停止维护,很多人误读成“ROS 整个体系都在退出历史舞台”。实际情况恰恰相反,ROS1 停止维护反而标志着 ROS 生态全面转向 ROS2。ROS2 才是当前开源机器人生态里的活跃主线,版本迭代、社区贡献、硬件驱动支持都在持续增加。
所以“被弃用”这个说法,更像是对行业分层的一次误读。自研中间件和 ROS2 并不是二选一,很多团队的实际做法是在 ROS2 之上封装自己的接口,或者只在算法验证、仿真测试阶段使用 ROS2,底层实时控制器则走自研通路。对一个机器人测试人员来说,你仍然极大概率会在仿真、调试、数据采集和回归验证中遇到 ROS2。
1.2 现在机器人行业里 ROS2 的真实位置
从公开的开源项目、仿真工具、机械臂控制框架、导航框架、视觉 SLAM 组件,再到传感器厂家提供的驱动,ROS2 经常是“模块之间互相接通”的那层公共语言。我说它是行业里的“事实标准之一”,不是说没有它机器人就做不出来,而是说它已经形成了一套庞大的生态工具链:RViz2 可视化、ros2 topic 命令行、ros2 bag 数据采集、Nav2 导航栈、MoveIt 2 机械臂规划、ros2_control 硬件抽象、Gazebo 等仿真器的 ROS2 接口,这些能力用自研方案重新实现,成本很高。
我在实际项目里见过一种很常见的架构:机器人公司有自己的通信总线和状态管理框架,但新接入一个传感器,或者让算法团队快速验证一个感知模型时,还是会先搭一个 ROS2 环境,用 ROS2 把点云、图像、位姿数据拉通,再把结果封装给内部系统。这说明什么?说明 ROS2 的大量价值不在最终产品里,而在研发和测试的中间环节。测试人员恰恰是天天和这些中间环节打交道的人。
当然,也不能把它当成万能方案。尤其在运动控制、步态生成、强实时安全控制这类场景,ROS2 的硬实时能力并不总是够用,很多团队会采用 RTOS 或自研控制器。但“局部不用”不等于“整体弃用”,更不等于“不该学”。
1.3 人形机器人特别容易产生误解的原因
人形机器人的技术栈比其他移动机器人更复杂。它的核心亮点往往是双足运动、全身动力学、强化学习步态、灵巧手操作这些偏“运动智能”的部分。这些模块里,步态控制器和强化学习训练环境通常不会跑在 ROS2 里,更多是专用的优化算法、PyTorch 训练脚本和实时控制程序。于是很多人一提到人形机器人,就默认它的软件栈全部是自研底层,不需要 ROS2。
但人形机器人并不只有腿部控制。它还有感知系统、导航系统、机械臂抓取、任务调度、仿真验证、远程遥操作、数据采集回放等一系列模块。这些模块需要与视觉、激光雷达、底盘、上层决策系统频繁交换数据。在研发测试阶段,ROS2 是最常用的一层“数据总线和工具集”。举个很直白的例子:仿真环境里要让机器人在室内导航到指定位置,通常会先跑一个 SLAM 建图,再规划路径,再发送速度指令给底盘或全身控制器。这个过程里,Rviz2 可视化、Nav2、TF 坐标变换、关节状态话题、路径点话题,几乎都能用 ROS2 的机制串起来。
人形机器人之所以容易被误解成“不用 ROS2”,是因为讨论的人大多站在“运动控制”视角,而测试人员则需要站在“系统集成”视角。视角不同,结论自然不同。
2. 人形机器人的模块拆开看:哪些地方在用 ROS2,哪些不用
2.1 感知、定位和建模:ROS2 像是传感器数据的“交通规则”
人形机器人要感知环境,通常需要摄像头、激光雷达、深度相机、IMU 等多种传感器。不同传感器有不同驱动,有的直接输出图像,有的输出点云,有的输出 IMU 原始数据。如果每个模块各写各的接口,团队协作会非常痛苦。ROS2 用标准消息类型把数据统一起来,比如sensor_msgs/Image表示图像,sensor_msgs/PointCloud2表示点云,sensor_msgs/LaserScan表示激光扫描数据。感知节点订阅这些话题,经过目标检测、语义分割、SLAM 等算法处理后,再发布出目标位置、障碍物列表、机器人在 map 坐标系下的位姿。
在测试感知模块时,你经常会用到几个 ROS2 能力:ros2 topic echo查看话题数据,rviz2可视化点云和图像,ros2 topic hz看发布频率是否稳定。SLAM 建图也是高频场景。地图可以用栅格地图,也可以用八叉树地图来表达三维占栅格信息。在导航避障中,八叉树地图是常见的选择之一,ROS2 生态里也有对应工具和组件,测试人员可以先理解“地图数据是从哪条话题发布的、靠什么坐标变换落地”这两个问题。
2.2 导航、避障和路径规划:Nav2 与代价地图
人形机器人如果要在室内环境中完成“从当前点到目标点”的任务,导航模块通常是少不了的。ROS2 生态里最常见的导航框架是 Nav2,它负责维护全局代价地图和局部代价地图,生成全局路径,再结合局部避障策略输出速度指令。
人形机器人的底盘形态和两轮差速底盘不同,但很多导航概念是通用的:全局规划器、局部规划器、代价地图、恢复行为、目标点发布。在测试流程里,你可能会使用ros2 action send_goal向导航节点发送一个目标点,观察机器人是否能够生成路径、避开障碍物、最终到达目标。如果机器人一直原地打转,你可能要查全局代价地图有没有正确更新、局部规划器有没有收到传感器数据、TF 坐标变换是否连续。这些排查动作,使用的几乎都是 ROS2 的命令和工具。
2.3 机械臂控制与作业:MoveIt 2 和 ros2_control
人形机器人如果带双臂,机械臂的轨迹规划和运动执行非常常用。ROS2 里对应的两个重要模块是 MoveIt 2 和 ros2_control。MoveIt 2 负责机械臂的运动学、碰撞检测和轨迹规划,ros2_control 负责控制器的加载、关节状态发布和硬件接口抽象。
测试机械臂任务时,你会关注关节状态话题、规划路径、执行轨迹以及动作反馈。MoveIt 2 通常会把运动规划结果发布成可视化路径,在 Rviz2 里可以看到机械臂的规划过程。ros2_control 则会把真实或仿真关节的状态发布成sensor_msgs/JointState话题,测试人员只要看话题里的关节角度、速度和位置是否合理,就能判断机械臂底层执行是否正常。这里有一个常见坑:关节状态话题频率很低,或者数据更新断断续续,不代表机械臂一定坏了,可能是控制器没有正确启动,也可能是话题名配错了。
2.4 仿真、数据采集和状态管理:测试人员的日常战场
对测试岗位来说,仿真环境几乎每天都用。Gazebo、Isaac Sim、以及其他专用仿真器大多提供 ROS2 桥接。仿真器把传感器数据发出来,算法节点订阅数据后发布控制指令,形成闭环。你可以在仿真里反复修改地图、障碍物、传感器噪声,验证算法是否稳定。
数据采集和回放也是测试工作里非常高频的环节。现场跑车时记录的 ROS2 bag 包,拿到电脑上回放,就可以复现一个感知问题或规划问题。ros2 bag record按话题名记录数据,ros2 bag play按时间去回放,ros2 bag info查看包内话题列表和消息数量。对于测试人员来说,录制一份能复现问题的 bag 包,是推动问题定位的重要证据。
状态管理在人形机器人里同样关键。一个复杂机器人系统可能有几十个节点同时运行,哪些节点负责感知、哪些节点负责决策、哪些节点负责执行,需要用 launch 文件统一启动,用生命周期节点来管理系统状态。测试人员如果只会按按钮跑 demo,不熟悉 launch 文件结构,遇到“某个节点启动失败导致整个任务中断”的情况就会很被动。
2.5 底层控制、步态算法和模型训练:未必在 ROS2 里
也要把话说明白,不是所有模块都需要 ROS2。人形机器人的步态控制、全身力控、强化学习训练、高频率关节控制,通常运行在专用实时控制器或高速通信链路上,未必经过 ROS2。原因很简单:步态控制需要毫秒级甚至更低的延迟,ROS2 的节点通信虽然已经比 ROS1 好很多,但在强实时、安全关键、资源受限的环境下,自研或专用方案更合适。
所以更合理的表述是:人形机器人采用“混合架构”。上层感知、规划、仿真、数据采集常用 ROS2;底层实时控制、电机驱动、安全保护,往往由专用控制器完成。中间可能通过 ROS2 话题把控制指令或状态反馈桥接出去。测试人员要能理解这个边界,不要一看到自研控制器,就觉得整个系统都和 ROS2 无关。
3. 转行人形机器人测试,到底要不要系统学 ROS2
3.1 先看测试岗位到底分哪几类
“转行做测试”这个说法太宽泛,实际岗位差别很大。你至少可以先分成四类:
- 系统测试:验证完整任务,比如机器人能不能走到目标点,能不能完成抓取动作。这类岗位需要能启动 demo、看运行状态、判断任务是否成功,对 ROS2 的要求是能看懂基本数据和日志。
- 集成测试:关注模块之间数据链是否打通,比如感知节点发布的话题是否被规划节点订阅到。这类岗位非常依赖
rqt_graph、ros2 node info、ros2 topic info等工具。 - 算法测试:评估感知、规划、控制算法效果。需要能录制 bag 包、回放数据、用 Rvis2 可视化结果、分析指标,对 ROS2 消息结构理解要更深。
- 硬件在环测试:仿真和真机结合,关注接口、时序、通信稳定性。除了 ROS2,还需要了解传感器驱动、实时控制和数据同步。
不同岗位对 ROS2 的深度要求不一样。如果你只是系统测试,不需要会写复杂节点;如果是算法测试,至少要做到“能看懂话题里的数据语义”。“要不要学”不是一刀切,而是“要不要按照岗位需求跳到对应的深度”。
3.2 测试人员在真实工作中接触 ROS2 的高频场景
我基于实际经验给你列几个最常见的场景,你看看是不是真的很常见:
- 跑通一个仿真 demo:
ros2 launch启动一堆节点,测试人员要靠终端日志判断是否启动成功。 - 查看某个传感器是否发数据:
ros2 topic hz /camera/pointcloud,如果频率为 0,说明驱动没起来或者网络没通。 - 确认某个节点到底连着哪些话题:
ros2 node info /node_name,看发布和订阅列表。 - 录制现场问题:
ros2 bag record记录原始数据,回放给研发复现。 - 在 Rviz2 里叠加显示点云、路径和 TF 坐标,判断感知和规划对齐没有。
这些场景的共同特征是:你不需要写代码,但你必须知道数据往哪流、话题叫什么、消息里各个字段大概什么意思。这就是 ROS2 对测试人员的真正价值。
3.3 学习 ROS2 的最小知识清单
我给准备转行的测试朋友画过一个最小知识清单,内容不追求多,但要能覆盖工作里八成场景。
| 类别 | 需要掌握的内容 |
|---|---|
| 核心概念 | 节点、话题、服务、动作、参数、坐标变换 TF、生命周期 |
| 常用命令 | ros2 topic list、ros2 topic hz、ros2 topic echo、ros2 node list、ros2 node info、ros2 bag record/play/info、ros2 launch、rqt_graph |
| 常用消息 | sensor_msgs/Image、PointCloud2、LaserScan、nav_msgs/Odometry、geometry_msgs/Pose、Twist、std_msgs/String、std_srvs/Trigger、action_msgs |
| 调试工具 | Rviz2、rqt_graph、日志级别设置、PlotJuggler 或 Foxglove Studio(可选) |
| 常见工作流 | 启动仿真、可视化数据、录制 bag、回放 bag、发送目标点、查看 TF 树 |
不需要把 ROS2 文档全部过一遍。你要做的是“遇到一个现象,知道该用哪个命令去看”,而不是“能徒手实现一个话题发布节点”。当然,如果会写一个最小的publisher/subscriber节点,对理解底层机制会有很大帮助,但这不一定是测试岗的硬门槛。
3.4 学到什么程度可以停
测试岗位学 ROS2,有一个明确的停止线:不需要精通底层 DDS 策略,不需要会写复杂的硬件驱动,不需要把每个消息的定义都背下来。你需要做到的是三件事:
第一,能独立运行一个 ROS2 demo,并解释每个窗口在做什么。第二,能通过rqt_graph和ros2 topic命令,快速找到“哪条链路断了”。第三,能录制、回放一份 bag 包,并从中提取关键数据交给研发。
超过这个程度的内容,遇到项目需求再补完全来得及。很多人转行的误区是,想先把 ROS2 学得“系统又完整”,结果被版本安装、编译报错、工作空间概念劝退。测试岗需要的是“会用工具看数据”,不是“从零搭建一个 ROS2 系统”。
3.5 一个适合转行者的 30 天上手路线
如果只能给一条学习路径,我会建议按“最小闭环”思路来,先跑通,再深入。
第一周:完成环境安装,跑通 turtlesim 小海龟 demo,理解节点、话题、发布者、订阅者这四个词的含义。用ros2 topic echo /turtle1/cmd_vel观察键盘控制数据,用rqt_graph看到通信链路。
第二周:跑一个仿真机器人,比如带传感器的机器人仿真环境,用rviz2查看点云或激光数据,用ros2 topic hz观察发布频率。这一步是后面做算法测试的基础。
第三周:学会录制和回放 bag。在仿真里录一段机器人运动数据,回放后确认话题、频率和时间戳都正常。有时间可以再配合ros2 bag info分析包内容。
第四周:跑一个机械臂或导航样例,比如 MoveIt 2 或 Nav2 的官方示例,理解 action 的客户端-服务器模型。遇到问题先自己看日志,再搜索解决方案。
这四周看起来不复杂,但如果能坚持下来,你已经比很多只会看宣传视频的转行候选人有优势了。
4. 搭一个能跑通的测试 ROS2 环境:步骤、避坑与排查链路
4.1 环境选择:版本、系统和网络
ROS2 的版本很多,但在当前阶段,对人形机器人测试和应用开发来说,Ubuntu 22.04 + ROS2 Humble 是很常见的一组组合。Humble 属于长期支持版,生态支持比较成熟,很多仿真器和机器人开源包都优先支持它。如果条件不允许用 Ubuntu,Docker 也是一个可选项,但要注意共享网络、宿主时区和 USB 设备映射会让新手上手变复杂。
还有一个很容易忽略的点是ROS_DOMAIN_ID。同一子网里如果有多套 ROS2 系统在跑,默认 domain ID 相同会互相干扰,出现“看到别人的话题”这种奇怪现象。测试环境里建议显式设置一个独立 ID,比如在终端里执行:
export ROS_DOMAIN_ID=42如果要长期固定,可以写入~/.bashrc。在真机测试时,多台机器人同时运行的情况非常多,这个参数能避免一批诡异问题。
4.2 安装与验证最小流程
安装这块我只给一个最小可用方式,具体版本号请以官网为准:
# Ubuntu 22.04 示例,安装 ROS2 Humble Desktop 版 sudo apt update sudo apt install ros-humble-desktop安装完成后,把环境加载到当前终端:
echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc source ~/.bashrc验证是否能用:
ros2 --help如果能打印出命令列表,说明基础环境已经就绪。接下来建议先跑一个小海龟 demo,验证发布订阅机制。开第一个终端:
ros2 run turtlesim turtlesim_node开第二个终端:
ros2 run turtlesim turtle_teleop_key此时可以用方向键控制小海龟移动。再开第三个终端,查看移动指令数据:
ros2 topic echo /turtle1/cmd_vel如果能看到linear和angular数据不断刷新,说明 ROS2 的节点通信已经通了。这个最小流程看起来简单,但它验证了环境、编译、消息、命令行工具、节点发现等一串关键环节。
4.3 测试人员最常用的三个操作:看话题、看 TF、录包
第一个操作是“看话题”。你要习惯用ros2 topic list看当前有哪些话题,用ros2 topic hz /话题名看发布频率,用ros2 topic echo /话题名 --once只看一帧数据。这三个命令能解决大部分“这个数据到底有没有在发”的疑问。
第二个操作是“看 TF”。坐标变换是人形机器人问题定位里最容易忽略的一环。机器人在 map 坐标系、odom 坐标系、base 坐标系、camera 坐标系之间的变换,如果有一层断了,感知和规划都会错乱。可以运行:
ros2 run tf2_tools view_frames执行后会在当前目录生成一份 TF 树 PDF,能看到各个坐标系之间的父子关系。再配合rviz2里的 TF 显示,基本能判断出坐标系有没有断裂或异常跳变。
第三个操作是“录包和回放”。测试现场发现问题后,第一反应不是马上改代码,而是先记录证据:
ros2 bag record /topic_a /topic_b -o issue1回放时:
ros2 bag play issue1回放的过程中,你可以在rviz2里重新观察当时的传感器数据和算法输出。对于测试岗来说,这一套动作的价值非常高,它让“复现问题”变得可控。
4.4 问题排查链路:从一个异常现场开始
假设测试时遇到“机器人任务中断,但又没有明显报错”,我建议按下面这个顺序排查,而不是直接去翻代码。
第一步,看节点是否在线。执行ros2 node list,确认预期节点都在列表里。如果少了一个节点,多半是启动失败或异常退出,去启动终端看日志。
第二步,看话题是否在发布。执行ros2 topic list找相关话题,再用ros2 topic hz看发布频率。如果频率为 0,说明发布端没连上或驱动没工作;如果频率忽高忽低,说明节点调度或传感器传输有问题。
第三步,看数据是否合理。用ros2 topic echo看一帧消息,检查时间戳、坐标系名称、数值范围。比如点云坐标突然全部变成 NaN,那感知算法或数据同步一定存在问题。
第四步,看 TF 是否连续。用view_frames生成 TF 树,确认是否有坐标系断裂或跳动。TF 的异常往往会导致规划模块认为地图和机器人不在同一个世界。
第五步,看运行环境和参数。检查ROS_DOMAIN_ID、DDS 通信、launch 里的参数配置、日志级别,再结合系统资源占用判断是不是环境因素导致的偶发问题。
这五步可以串成一个框架,几乎适用于人形机器人的仿真和真机测试。
注意:不要一上来就反复重启节点。多数偶发问题,日志里都有线索。先把现象、话题、TF 和 bag 包收集齐,再谈修复。
4.5 长期测试工作的额外建议
如果你真的想长期做人形机器人测试,我有几个额外建议。
第一,不要被“自研中间件”这个词吓退。招聘要求里写自研,不代表完全不碰 ROS2。很多团队仍然用 ROS2 做仿真验证和原型集成,只是产品化阶段会做封装。
第二,养成记录 bag 和写复现步骤的习惯。人形机器人的问题往往和传感器、时序、环境强相关,没有完整记录,研发很难快速定位。
第三,多理解消息的“语义”,而不是只记命令。看到geometry_msgs/msg/Pose,你要能知道 position 里的坐标单位是米,orientation 是四元数而不是欧拉角。这种细节最容易让新人在调试中走弯路。
第四,如果工作环境里真的已经用自研框架,别急着抱怨。先找出它和 ROS2 的相似点,很多自研中间件在设计时多多少少借鉴了“发布订阅、参数、动作”这些模型。理解了 ROS2,再学自研框架,速度会快很多。
避坑提醒:ROS2 不同发行版不能混装,
ros-humble-*包不要硬装到 Foxy 或 Jazzy 环境里。如果自己用 colcon 构建工作空间,构建完记得source install/setup.bash,否则自己写的节点怎么都找不到包。
回到最初那个问题。朋友问我该不该学 ROS2,我的回答是:如果你的目标是做人形机器人测试,ROS2 不会白学。它不一定是你每天唯一在用的工具,但它几乎是你平时调试、复现、定位问题的公共语言。你不需要成为 ROS2 开发专家,但至少要能在仿真或真机里,熟练地判断“哪条数据链断了”。真正值得长期关注的不是“ROS2 是不是被弃用”,而是“机器人各模块之间到底怎么协作”。先把小海龟跑起来,把topic和TF这两个基本概念建立起来,后面的事情,会比你想象中顺利得多。