很少有人想到,具身智能的寒武纪爆发,是由一只鸭子开始的。第一次看到这个说法,我以为是文案上的夸张。真把具身智能最近几年的论文、模拟器、开源数据集、机器人本体的变化放在一起看,却发现这个领域确实进入了物种分化式的爆发期。而那只鸭子,不管它指的是 Duckietown 里穿行在迷你城镇的小车乘客,还是调试代码时放在屏幕边上的小黄鸭,它更像是一把钥匙:帮你理解什么是具身智能,也帮你找到入门的第一条小路。
这篇记录不写新闻,不列榜单。我想从亲手跑过模拟器、配过环境、也折腾过真实机器人项目的角度,把具身智能是什么、为什么说是寒武纪、新人该怎么入门、训练时哪些参数和坑值得先知道,按实际操作顺序讲一遍。
1. 那只鸭子,其实是具身智能的入门隐喻
1.1 具身智能到底是什么
先给定义。具身智能,指一个智能体通过身体与物理环境持续交互,完成“感知—决策—动作”闭环的智能系统。它和纯大模型最大的区别在于:模型不再只输出文字或图片,而是必须输出动作;动作会改变环境,环境变化又会成为下一次感知的输入。
简单说,语言模型是坐在书桌前答题的智能,具身智能是动手操作、脚踩地面、出了问题要自己兜底的智能。机器人看到杯子之后,机械臂关节要输出多大力矩,路径该怎么规划,遇到障碍怎么重新决策,最后手指能不能稳定抓住杯把,这些都属于具身智能的范畴。
这里有个容易混淆的点。大模型也能调用工具、控制机器人,但那通常只是“给一个动作指令”。具身智能关注的是更底层的闭环:视觉信息要转成关节控制信号,动作要平滑,传感器噪声要处理,任务失败还要能恢复。指令层和运动控制层之间的距离,恰恰是具身智能最难也最值得投入的部分。
1.2 为什么很多入门故事里都有一只鸭子
我理解“由一只鸭子开始”至少有三层意思。
第一层是 Duckietown 这类开源教学平台。小纸板城镇、胶带贴出来的道路、装着小摄像头的机器人,车上通常还会放一只标志性的橡皮鸭。它的价值不是玩具本身,而是用一个很小的场景把感知、定位、规划、控制整条链路完整串起来。很多人的机器人第一课并不是从机械臂开始的,而是从让一辆载着小黄鸭的车沿着线走开始的。
第二层是小黄鸭调试法。程序员遇到问题,会把代码一行行讲给一只橡皮鸭听,讲着讲着自己就发现哪里不对。具身智能的日常和这个很像:策略不收敛、机械臂突然抖动、奖励曲线变成 NaN,多数问题不是出在模型深处,而是出在你还没讲清楚的假设里。比如奖励权重设反了,或者动作范围没有归一化。
第三层是机械臂演示里高频出现的那只黄色橡胶鸭。它体积小、颜色明显、形状有一定柔性,非常适合作为抓取、放置、推动实验的测试对象。表面看是道具,实际上承担了“最小可验证目标物”的角色。
这三层指向同一件事:进入具身智能,你需要先在某个极小的客体上,把感知、决策、动作的闭环完整走一遍。鸭子只是这个闭环的最小锚点。
1.3 “寒武纪爆发”不是营销词,是物种分化
寒武纪在古生物学里的特点,不是简单的“生物数量变多”,而是动物门类在很短时间内大量分化,不同生态位被快速填满。具身智能当前的状态更像这种分化。
以前一个机器人平台只能做一项任务,现在一个视觉—语言—动作模型可以在多种任务之间切换。以前仿真器主要用来做视觉研究,现在大量仿真器支持 GPU 并行、域随机化和统一评估接口。以前四足、人形、机械臂是三个不同市场,现在同一套模型框架可能同时适配多种本体。
这种分化对新人反而是机会。你不必只跟唯一标杆,可以根据兴趣、资源和手里的硬件选择一条适合自己的路线。团队分工也在分化:有人专注感知,有人专注决策,有人专注运动控制和本体集成,谁都能找到入口。
2. 寒武纪爆发的四个“物种群”:环境、数据、模型、本体
2.1 环境:仿真器从“画布”变成“训练场+实验台”
模拟环境的选择维度,不只是画面好不好看。更要看四件事:是否支持 GPU 并行、是否带渲染、是否提供真实传感器模型(RGB-D、深度、关节编码器)、是否有统一的 reset 和评估接口。常见名字包括 MuJoCo、PyBullet、Isaac Sim/Gym、Habitat、SAPIEN、ManiSkill、RoboMimic 等,但不需要全装。
判断标准很简单:你能不能在一小时内跑通官方示例。官方示例都跑不通的环境,后面所有自定义任务都会变成连环坑。我一般会先跑官方 demo,再决定要不要迁移自己的任务。一个仿真器能跑通,不代表它适合你的问题;但如果官方示例都跑不通,那它大概率不适合现在的你。
2.2 数据:真机演示、遥操作、视频数据成为新燃料
具身智能是一个很吃数据的领域。真机演示、遥操作采集、视频观察、仿真合成,每条路径都在解决同一个问题:让模型知道“在这个状态下,应该做出什么动作”。
判断数据质量的关键不是条目数,而是三个对齐:任务定义是否对齐、动作空间是否对齐、本体形态是否对齐。
- 一份在机械臂上采集的数据,很难直接训练一个四足机器人。
- 一段没有记录关节指令的视频,只能提供语义层面的监督,做不到精细动作控制。
- 同样是抓取任务,夹爪和吸盘的执行方式完全不同,数据里的标注方式也要跟着变。
很多项目一开始就想收集大量真机数据,我建议反过来想:先明确任务边界,再决定用什么方式采数。数据少不是问题,数据定义混乱才是大问题。
2.3 模型:从单任务策略到视觉—语言—动作模型
早期机器人学习往往是“一个任务训一个策略”,换个物体,往往就要重新收集数据。现在的主流思路是构造视觉—语言—动作模型,用文本指令描述任务,用视觉感知当前场景,再输出动作。RT 系列、OpenVLA 这类工作把语言、视觉和动作统一到一个模型框架里,任务切换能力和对新指令的推理能力,比传统单任务策略强很多。
但要注意,VLA 不是万能解。它对数据质量、本体对齐、显存开销都更敏感。很多项目嘴上说“用 VLA”,实际真正出效果的部分仍然依赖经典的强化学习、模仿学习和运动规划。模型只是其中一环,环境交互和底层控制始终绕不开。
2.4 本体:机器人从展示品变成可开发的研究平台
机械臂、四足、人形、复合移动操作平台,这几年都在快速商品化。真正的判断标准不是只看参数表上的自由度,而是看:有没有稳定的 SDK、能不能直接读传感器数据、有没有安全限位和急停、配件和维修成本是否可控、社区资料够不够多。
我在实测中最大的感受是:API 质量和配套文档,比外观重要得多。一个外观朴素但文档清晰、驱动稳定的平台,往往比一个参数惊艳但总要自己造轮子的平台更适合学习和研究。真机实验最耗时间的并不是模型训练,而是驱动配置、传感器标定和故障排查。
3. 想真正入门,先想清楚你要走哪条路线
3.1 三条典型路线:感知、决策、控制本体
具身智能不是单一学科,不同人做的是很不一样的事。先分清三条路线,再选方向,比一上来就背论文有效得多。
| 路线 | 核心问题 | 典型技能 | 常见工具 |
|---|---|---|---|
| 感知 | 机器人如何理解环境 | 视觉、点云、深度估计、物体检测、场景理解 | 2D/3D 视觉库,Habitat、Matterport 类场景平台 |
| 决策 | 给定状态,如何选择动作 | 强化学习、模仿学习、VLA、数据设计 | MuJoCo、PyBullet、Isaac、PyTorch |
| 控制与本体 | 动作如何执行得稳 | 运动学、动力学、MPC、调参、真机安全 | ROS2、MoveIt、真实机器人 SDK |
三条路线不是互斥的,但你需要一条主线。感知路线的人,可以不用深入调强化学习;控制路线的人,也不必把大模型吃透。把一条线打深,再横向补短板,效率最高。
3.2 给零基础的四步学习路线
如果你现在刚接触具身智能,我建议按四步走,不要跳。
第一步,补齐基础工具。Python、Linux 基本操作、线性代数、概率论、机器学习基础。不需要先把数学书全部读完,用到哪补到哪。
第二步,跑通一个模拟器里的最小强化学习实验,比如 CartPole。目的不是学这个玩具任务本身,而是理解“状态—动作—奖励—环境更新”这个循环到底长什么样。
第三步,读懂一篇代表性工作。可以是视觉—语言—动作模型方面的,也可以是某个机器人操作任务里的强化学习方案。尝试复现,或者至少把作者开源的代码读一遍,标出每个模块的作用。
第四步,部署到低成本真机,或者参加公开数据集和竞赛。真机不一定很贵,很多开源小车、小型机械臂都适合做入门验证。
怎么判断自己能不能进入下一步,标准不是“看完了”,而是“能不能闭着眼睛把训练—评估—保存—加载—记录日志的完整闭环做一遍”。
3.3 看到“具身智能之心”“具身智能学习路线”这类热词,先做减法
现在搜索“具身智能学习路线”,很容易找到“具身智能之心”这类资料合集。资源多的时候,第一反应不是兴奋,而是做减法。
我建议把收集到的资源分成三类:入门必看、按需查阅、以后再说。然后只保留三样东西:一个模拟器的官方文档、一条可执行的学习路线(通常就是“先跑 CartPole,再跑操作任务,再读论文”的顺序)、一篇你真正读得下去的综述。
其余的东西先收藏,不要一上来就照单全收。资料看太多,人很容易进入“收藏即完成”的状态。真正让你进步的,永远是打开终端,把一个实验从头到尾跑通。
4. 从模拟器里的第一行代码开始:环境准备与最小实验
4.1 环境准备清单
模拟器实验的环境配置,比想象中容易踩坑。下面这份清单是通用参照,具体版本以你本机为准。
| 项目 | 建议 |
|---|---|
| 操作系统 | Linux 优先;Windows 能跑但路径和权限问题更多;macOS 适合轻量任务 |
| Python | 建议用 conda 新建独立环境,Python 3.9/3.10 比较常见 |
| GPU | 纯状态输入的小任务 CPU 可跑;像素输入或并行仿真建议准备 NVIDIA GPU |
| 常用依赖 | PyTorch、Gymnasium、MuJoCo 或 PyBullet、Stable-Baselines3 等 |
第一次配环境,最忌一次性把所有包都装齐。我见过太多人装了一整天依赖,最后不知道自己装了什么。先按最小集合装,跑通官方示例,确认导入和渲染正常,再做加法。
注意:第一次跑环境时,如果出现“找不到模块”或“导入失败”,先确认你激活的是哪个虚拟环境。很多时候不是包没装,而是命令行里切错了环境。
4.2 一个最小强化学习实验思路
先看一段非常基础的示例代码,用 PPO 训练 CartPole。这段代码的作用不是解决复杂问题,而是验证你本机的依赖、训练循环、日志输出和模型保存是否正常。
import gymnasium as gym from stable_baselines3 import PPO # 创建环境 env = gym.make("CartPole-v1") # 创建策略 model = PPO("MlpPolicy", env, verbose=1) # 训练 model.learn(total_timesteps=50_000) # 保存模型 model.save("cartpole_ppo") env.close()跑通之后,再写一段加载和评估的代码:
import gymnasium as gym from stable_baselines3 import PPO model = PPO.load("cartpole_ppo") env = gym.make("CartPole-v1", render_mode="human") obs, _ = env.reset() total_reward = 0 for _ in range(1000): action, _ = model.predict(obs, deterministic=True) obs, reward, terminated, truncated, info = env.step(action) total_reward += reward if terminated or truncated: break print("episode reward:", total_reward) env.close()CartPole 不是最终目标。它的作用是验证四件事:依赖是否完整、训练循环是否正常、日志是否可读、模型能否保存和加载。如果这条链路跑通,你已经知道具身智能里“策略训练”的基本盘长什么样。
4.3 从玩具环境换到机器臂或移动平台怎么调整
跑通 CartPole 之后,下一步通常是换到机械臂或移动平台环境。这时候的变化集中在四块。
- 观察空间:从 CartPole 的几个状态变量,变成关节角度、关节角速度、末端位姿,甚至图像输入。
- 动作空间:从左右两个离散动作,变成连续力矩、连续速度或关节位置控制命令。
- 奖励设计:从简单的杆不倒下,变成到达目标点、物体被抓起、运动平滑不抖动。
- 环境 reset:机械臂任务需要把物体放回初始位置,仿真环境要确保每次初始状态一致。
我的建议是换到 PyBullet 或 MuJoCo 的官方操作示例,先把官方提供的抓取或推动任务