Figure 01 进工厂:具身智能爆发前夜,软硬件结合的工程挑战在哪里?

昨天晚上实验室组会,大家都在刷 Figure 01 进工厂的视频。说实话,我盯着屏幕看了三遍,不是因为它有多好看,而是因为它太“反直觉”了。以前我们做机器人,那是把控制算法写在 C++ 里,像修钟表一样精细地调 PID 参数,每一步都要算好力矩、加速度、动力学模型。现在倒好,直接喂给一个大模型一句话:“帮我拿那个红色的杯子。” 然后机器人自己就动起来了。这让我想起 Google DeepMind 上个月发的那篇 RT-2 论文里提到的愿景,但说实话,论文里的数学公式跑通了,真要把 Figure 01 放进流水线里干活,工程上遇到的坑比我想象的要深得多。

30秒速览

  • - Figure 01 使用 VLA 模型,而非传统控制,GPT-4o 提供高层语义,MPC 提供底层执行。
  • - Sim2Real 差距巨大,仿真器的刚体假设无法匹配现实世界的长尾物理现象。
  • - 实时性是硬伤,LLM 延迟必须通过分层架构(规划-执行分离)解决。
  • - 开发者需掌握 ROS2、动力学和 MPC,而不仅仅是调大模型参数。

Figure 01 视频背后的技术揭秘:自然语言如何转化为机械动作

很多开发者看完视频第一反应是:“这不就是多模态大模型嘛?” 错,大错特错。Figure 01 用的不是那种聊天的 LLM,它是一个 **VLA(Vision-Language-Action)模型**。简单说,就是把 GPT-4o 的“理解能力”和机器人的“动手能力”强行缝合在了一起。

VLA 模型的核心:从像素到 Action Token

Figure 01 的摄像头不是用来“看”的,是用来“读”的。它的视觉编码器把摄像头拍到的画面压缩成向量,然后这个向量被扔进 GPT-4o 的处理流程里。但最关键的地方在于,GPT-4o 的输出不是文本,而是 **Action Token(动作 Token)**。

这中间有个巨大的工程转换。你想想,GPT-4o 是一个通用的语言模型,它的输出空间是无限的词汇表。Figure 必须在这个输出层加一个“投影头”,把语言空间映射到机器人的动作空间。这个动作空间不是简单的“移动 5 厘米”,而是一个高维的向量,包含了抓取位置、抓取力度、手腕姿态、甚至手指的张开角度。(延伸阅读:仿真跑了100%通过,实测Lunar Lake仅80%——我的轻薄本异构计算踩坑记)

我看过他们的技术博客,他们并没有直接让 GPT-4o 去控制每一个关节。那样太慢了,而且 GPT-4o 的生成速度根本达不到机器人 1000Hz 的控制频率。他们的架构是“分层”的:GPT-4o 负责高层决策(比如“我要拿杯子”),然后一个轻量级的运动规划器(MPC)负责把这些决策翻译成具体的关节指令。这就好比 GPT-4o 是“大脑”想吃饭,而底层的控制栈是“小脑”负责咀嚼和吞咽。


# 伪代码:模拟 Figure 01 的 Action Token 生成逻辑
# 注意:这是为了理解架构,并非直接复现其内部模型

class VLA_Model:
    def __init__(self, vision_encoder, llm, action_head):
        self.vision_encoder = vision_encoder  # 比如基于 ViT 的视觉编码器
        self.llm = llm  # GPT-4o 或类似的高性能 LLM
        self.action_head = action_head  # 将 LLM 输出映射到动作空间的线性层

    def forward(self, visual_observation, text_prompt):
        # 1. 视觉编码:将图像转为向量
        # 假设输入是 (B, 3, 224, 224) 的图像
        visual_embedding = self.vision_encoder(visual_observation)
        
        # 2. 文本编码:将指令转为向量
        # 假设输入是 "Pick up the red cup"
        text_embedding = self.llm.encode_text(text_prompt)
        
        # 3. 融合与推理:VLM 的核心
        # 在 RT-2 论文里,他们用的是对比学习或者简单的拼接
        combined_input = self.concat_embeddings(visual_embedding, text_embedding)
        
        # 4. 生成动作 Token:关键步骤
        # LLM 输出的是一个巨大的 token 序列,我们只取最后几个作为动作
        logits = self.llm.forward(combined_input)
        
        # 这里的 action_head 作用是把 logits 映射到具体的关节控制参数
        # 比如:[x, y, z, roll, pitch, yaw, gripper_open, gripper_force]
        action_vector = self.action_head(logits[:, -1, :]) 
        
        # 5. 后处理:确保动作在安全范围内
        # 物理世界不允许关节超过 360 度,或者力矩超过电机极限
        safe_action = self.clamp_action(action_vector)
        
        return safe_action

# 实际工程中,这不仅仅是前向传播,还要考虑 KV Cache 的复用
# 为了降低延迟,Figure 01 可能会使用 KV Cache,即把历史帧的
# 视觉特征缓存起来,而不是每帧都重新跑一遍 Encoder

从仿真到现实的差距:具身智能落地难点

这也是我最焦虑的地方。Google DeepMind 那篇 RT-2 论文里提到,只要在仿真中把环境随机化做得足够好,模型就能泛化到现实。但我最近在复现他们的实验时发现,**仿真里的“完美物理引擎”和现实里的“混沌物理世界”之间,隔着一道天堑。**

论文里的理想 vs 现实的长尾问题

在论文的实验里,机器人拿杯子通常成功率在 80% 以上。但 Figure 01 在真实工厂里,面对的是什么?是滑溜溜的不锈钢表面,是传送带的不规则震动,是光照突然变化导致的视觉漂移。(延伸阅读:仿真跑通了Lunar Lake的NPU,实测延迟却比M3 Pro慢了40ms——我的轻薄本异构计算踩坑记)

最让我头疼的是“长尾分布”。仿真器里的物体通常都是刚体,碰撞反馈是完美的。但在现实里,你抓起一个塑料瓶,它的受力变形是不规则的。Figure 01 必须具备“力觉反馈”的感知能力,但这在纯视觉的 VLA 模型里很难体现。如果模型没见过“瓶子滑脱”这种极端情况,它就会死机——比如它死死抓住滑落的瓶子不放,或者试图把瓶子“推”回传送带,结果把自己摔了。

Figure 团队肯定做了大量的**域随机化**。他们在训练时故意把仿真环境的摩擦系数、质量分布、光照角度打乱。但工程上有个悖论:随机化做得太狠,模型泛化能力变强了,但收敛速度变慢了。在算力有限的大厂实验室,这往往是个两难选择。


# 伪代码:模拟 Sim2Real 中的 Domain Randomization
# 这是为了防止模型“死记硬背”仿真器的参数

import numpy as np

class SimulationEnvironment:
    def __init__(self):
        # 仿真器的基础参数(例如 MuJoCo 或 Isaac Gym)
        self.base_gravity = np.array([0, 0, -9.81])
        self.base_friction = 0.5
        
    def randomize_domain(self):
        # 1. 随机化物理参数:摩擦系数是关键
        # 实际上机器人抓取成功率很大程度上取决于摩擦
        friction_coeff = np.random.uniform(0.1, 1.5)
        
        # 2. 随机化质量分布:让物体有时候很轻,有时候很重
        object_mass = np.random.uniform(0.1, 5.0)
        
        # 3. 随机化环境干扰:模拟传送带的震动
        conveyor_speed = np.random.uniform(-0.5, 0.5)
        vibration_noise = np.random.normal(0, 0.05)
        
        return {
            "friction": friction_coeff,
            "mass": object_mass,
            "conveyor": conveyor_speed,
            "vibration": vibration_noise
        }

# 在训练循环中
sim = SimulationEnvironment()
for episode in range(num_episodes):
    # 每一帧都给仿真器注入随机参数
    domain_params = sim.randomize_domain()
    
    # 重置环境,但保持任务目标不变
    state = env.reset()
    
    while not done:
        action = policy(state)
        next_state, reward, done, info = env.step(action)
        
        # 关键点:如果仿真环境参数和真实环境差异过大,
        # reward 函数需要设计成“鼓励鲁棒性”而不是“完美执行”
        # 比如,如果物体滑落了,给予一个巨大的负反馈
        if info['object_slipped']:
            reward -= 10.0 # 这种惩罚必须够狠,否则模型学不会

为什么仿真跑通的动作,真机上一碰就飞

我在实验室也遇到过这种情况。我们在 PyBullet 里训练了一个抓取模型,成功率 99%。但把代码移植到 Jetson Orin NX 上跑真机时,成功率直接掉到了 20%。为什么?(延伸阅读:HBM3e 短缺正在杀死 80% 的 AI 初创公司:Blackwell B200 的 FP4 与 Transformer 引擎如何重新定义 ROI)

除了传感器噪声,最大的问题是**视觉延迟**。仿真器里计算一帧可能只要 1ms,但 Orin NX 上跑视觉编码器可能要 30ms。这个时间差会导致模型看到的画面是“滞后”的。Figure 01 必须在软件栈里做时间同步和补偿,否则机器人看着杯子在左边,手已经打到了右边。

具身智能的“小脑”工程:实时性与控制栈的博弈

很多非机器人专业的 AI 工程师有个误区,觉得只要把 LLM 跑通就行了。错。机器人是实时系统,你的 LLM 延迟如果是 2 秒,机器人早就摔碎了。

控制回路延迟:LLM 不能等,机器人更不能等

Figure 01 的架构里,GPT-4o 并不是每 20ms 调用一次。那是不可能的。他们的做法是**“规划-执行”分离**。(延伸阅读:为什么 HBM3e 的价格战正在淘汰 90% 的 AI 芯片初创企业:Blackwell B200 的 FP4 是真突破还是营销噱头?)

每隔几百毫秒(比如 100ms),系统才会把当前的视觉画面和任务指令喂给 GPT-4o。GPT-4o 返回一个“动作意图”。然后,一个基于 Model Predictive Control (MPC) 的控制栈会利用这个意图,在接下来的 100ms 内规划出一系列关节指令。这就好比一个象棋大师(GPT-4o)看一眼棋盘,给出一步妙手,然后底下的棋手(MPC)负责把这步棋走好,不走歪。

工程上最难的是**状态估计**。机器人不知道自己手在哪里,除非它看得见。Figure 01 用的是视觉 SLAM(Simultaneous Localization and Mapping)来追踪自己的手部位置。但视觉 SLAM 在工厂这种光照复杂的环境下很容易丢帧。一旦丢帧,控制栈就会进入“盲开”模式,这时候必须启动冗余的 IMU(惯性测量单元)数据作为补充。

安全约束:硬编码的保命符

大模型是概率性的,它可能会说“把杯子扔进垃圾桶”。在代码里,我们得加一层硬编码的安全过滤器。


# 伪代码:安全约束层
# 这层代码是必须的,哪怕 GPT-4o 再聪明

class SafetyMonitor:
    def __init__(self):
        self.max_joint_velocity = 2.0  # rad/s
        self.max_torque = 50.0  # Nm
        self.gripper_force_limit = 20.0  # Newton
    
    def check_and_clip_action(self, raw_action):
        # raw_action 来自 LLM 的输出 [x, y, z, qx, qy, qz, qw, gripper]
        
        # 1. 关节速度限制
        # 假设 raw_action 包含速度指令
        if raw_action.velocity > self.max_joint_velocity:
            raw_action.velocity = self.max_joint_velocity
            print("Warning: Joint velocity clamped!")
        
        # 2. 力矩限制
        # 如果是力控模式
        if raw_action.force > self.max_torque:
            raw_action.force = self.max_torque
            print("Warning: Torque clamped!")
            
        # 3. 空间边界检查
        # 不能让机器人把手伸到传送带底下(有风险)
        if raw_action.position.z < 0.05:
            raw_action.position.z = 0.05
            print("Warning: Z-axis limit reached!")
            
        # 4. 逻辑安全检查
        # 禁止出现会导致自碰撞的动作序列
        if self.check_self_collision(raw_action):
            raw_action = self.retract_action() # 执行撤退动作
            
        return raw_action

给机器人开发者的建议:从传统控制转向 AI 驱动

如果你现在正准备入局具身智能,别光盯着 LLM 的参数调优了。那只是冰山一角。

学习路径:ROS2 已经过时了吗?

别把 ROS/ROS2 抛弃了。虽然现在的趋势是用 PyTorch 直接写控制栈,但 ROS2 在节点通信和设备驱动管理上依然有优势。我建议你的技术栈是这样的:**ROS2 负责底层的传感器数据和硬件控制,Python/PyTorch 负责中间层的感知和决策,大模型(GPT-4o 或开源的 LLaMA-3-70B)负责高层语义理解。**(延伸阅读:仿真跑了100%通过,实测76%——我的Tesla Optimus具身智能踩坑记)

你需要掌握的不仅仅是深度学习,还有**机器人动力学**。不懂动力学,你就没法调那个 MPC 控制器。不懂 MPC,你就没法把大模型的“意图”转化为物理上可行的“动作”。

评估指标:不要只看成功率

在实验室里,我们喜欢看成功率。但在工厂里,我们看的是 **MTBF(平均故障间隔时间)** 和 **恢复时间**。如果一个机器人能 99% 地完成抓取任务,但一旦失败就需要人工介入修复 10 分钟,那它对工厂来说就是累赘。

Figure 01 最厉害的地方不是它能拿杯子,而是它**能从失败中恢复**。这是目前所有基于模仿学习(Imitation Learning)的模型都做不到的。未来的研究方向,应该是让大模型具备“自我反思”能力——比如当它抓不住物体时,它能意识到“摩擦力不够”,然后自动调整抓握力度。

总的来说,Figure 01 进工厂是一个里程碑,但它离真正的“通用机器人”还有很长的路要走。那条路,就是从“仿真跑通”到“真机稳定”的工程化之路。别被 GPT-4o 的光环骗了,底层的控制算法才是决定生死的根本。

✨ 本文由 AI 辅助生成(作者人设:韩知行),已经自动化事实核查流程处理,但仍可能存在不准确之处,具体信息请以官方文档为准。

觉得有用?

零垃圾邮件 · 随时退订

韩知行

大厂AI研究员,博士毕业后在工业界做了4年。读论文、复现模型、部署上线都干过。学术和工程都懂一些,所以特别理解「论文里99%的SOTA在生产环境不work」这件事。喜欢把前沿研究翻译成工程师能理解的语言。

📖 系列文章:具身智能与机器人

从仿真到实机的机器人部署实战

  1. 我们把Walker S丢进汽车零部件仓库三个月,视觉抓取从零到节拍稳定,仿真救了一半,另一半是靠“关掉仿真”才修好的
  2. 我们花两年把人形机器人送上亦庄半马赛道,结果它跑到一半开始“跳舞”
  3. 人形机器人拧螺丝?别被演示骗了,产线离我们还有三个「工程鸿沟」
  4. 液压Atlas后空翻时我的示波器跳了一下——电动Atlas电机响应实测缩短28%,但惯性比数据手册大了34%
  5. 我在机械臂产线上熬了两年,发现最难的不是算法,是让操作工信这个铁疙瘩不会撞到人
  6. 灵巧操作不是多装几个电机,是让机器人懂得“摸一下就知道能不能捏碎鸡蛋”
  7. VLA真实世界泛化崩溃实录:我把模型从仿真厨房扔进丈母娘的杂乱厨房,7种死法每一种都让我血压飙升
  8. 机器人视觉系统部署实战:2026年我把识别延迟从120ms干到28ms的七次迭代
  9. 机器人视觉系统部署与优化指南:2026年我把识别准确率从78%干到96%的五个关键步骤
  10. 工业级机器人视觉系统部署全流程:2026年我把识别准确率从78%干到96%的五个关键步骤
  11. 物流分拣机器人视觉控制:我踩过的7个坑让准确率从68%飙到97%
  12. 别以为标定就是拍个棋盘格——我给物流机器人做视觉控制,栽在了这个“简单”步骤上
  13. 具身智能控制落地:我在四足机器人上练了300万步,实机第一脚就劈了叉
  14. 三年修了200台机器人后,我悟了:ROI的命门是螺丝刀,不是Excel
  15. 50元触觉手指:从选型、标定到灵巧抓取,我把Dobot折腾到凌晨三点
  16. 凌晨三点被Figure 02的抓取失败告警叫醒:宝马产线人形机器人装配系统的血泪运维实录
  17. 仿真零摔倒,实测8km摔一次——我把人形机器人送上亦庄半马赛道后的运动控制复盘
  18. 我们试过给汽车厂上协作机械臂,结果六轴的钱只赚回三轴,才搞明白人形机器人的真实切口在哪
  19. 机器人在马拉松摔了7跤,每一跤都在打脸VLA的“物理理解”——因果推理缺位的60亿美金教训
  20. 我们在Optimus Gen-3上刷出了99.2%搬运精度,但仿真到实机的坑烧掉了三台关节电机
  21. 用Ollama + LangChain构建本地隐私聊天机器人,30行代码搞定!
  22. Optimus搬运技术的ROI陷阱:99.2%精确度为什么还是让我在投委会上投了反对票
  23. 仿真99.3%准确率,实测76.2%:我把客服机器人从上线翻车拉到投诉下降70%的硬件评测改造实录
  24. 仿真分拣99.3%,实测掉到71.5%——我拆解Optimus视觉运动策略后发现的Sim-to-Real鸿沟
  25. Optimus学会了分拣,但它的感知‑控制环路里藏着一个足以杀死量产计划的成本死结
  26. 多机协作搬运仿真97%成功率,实测71%:我的ROS2多智能体事件驱动架构踩坑报告
  27. Optimus分拣仿真99.2%,实测71.3%——我复现端到端模仿学习后,发现Sim2Real的三个死穴
  28. ALOHA的ACT算法论文看起来很优雅,但我在真机上跑了三天后才明白它为什么需要200个演示
  29. Figure 02量产进厂72小时:关节寿命不到标称值一半、防水标称IP68却因为一个密封圈泡汤——我的产线监控面板红了整夜
  30. Backstage AI代码生成在仿真中通过率89%,换上真实双足机器人直接降到53%——我的内部开发者门户实测手记
  31. 给Orin塞六路RGB-D的代价:内存带宽踩到34.1 GB/s天花板,我才看清工业人形SLAM的算力账不是那么算的
  32. Amazon Q生成ROS2节点仿真92%通过,实机61%:我把公司5年机器人文档接入知识库后,重写了什么
  33. 我解剖了Figure 02灵巧手的控制栈,才发现工业精密装配的瓶颈不在电机
  34. Isaac 4.0生成式仿真训练零样本导航:仿真3000场景100%通过,实测32台AMR仅72%——我的14天踩坑全录
  35. 我们给宝马装了人形机器人,半年后效率提升40%——Figure 02工业应用的实战拆解
  36. GPT-5.5 编译了ROS 2,但我的机械臂差点撞到墙上:推理增强在具身智能中的现实边界
  37. 我们给宝马装了人形机器人,Figure 02 在产线上的实战复盘
  38. 仿真跑了100%通过,实测B200+4NP仅72%——我的具身智能踩坑记
  39. 骁龙8 Gen3实测Qwen2.5-3B:手机NPU跑LLM的真实延迟与发热边界
  40. 仿真跑了100%通过,实测Lunar Lake仅80%——我的轻薄本异构计算踩坑记
  41. 仿真跑通了Lunar Lake的NPU,实测延迟却比M3 Pro慢了40ms——我的轻薄本异构计算踩坑记
  42. 仿真跑了100%通过,实测76%——我的Tesla Optimus具身智能踩坑记
  43. ▸ Figure 01 进工厂:具身智能爆发前夜,软硬件结合的工程挑战在哪里?
  44. Optimus 进工厂:仿真 99% 通过,实测 68%——我的具身智能落地血泪史
  45. 仿真99%通过,实测76%——Claude 3.5 Sonnet 重构遗留代码库的血泪实录(2024)
  46. 仿真99%通过,实测76%——我的Figure 02具身智能落地血泪史
  47. Figure 01 机器人:仿生架构如何驱动通用操作
  48. Atlas 2.0 的腿为什么没软?DeepMind 那篇论文里的“软控制”到底难在哪
  49. Figure 02 进了车间:我跑了三个月仿真,最后发现还是得靠人肉调试
  50. 为什么Tesla Optimus Gen 2的动作控制算法,才是检验人形机器人技术的真正标尺
  51. 为什么波士顿动力的新一代机器人,正在改写工业自动化的游戏规则
  52. Tesla Optimus Gen 2 的步态算法:为何它是下一个百亿级独角兽的入场券
  53. 仿真跑了100%通过,实测76%——我的具身智能与Rust高性能向量数据库踩坑实录
  54. 为什么优必选与Tesla Optimus的人形机器人具身智能,还是PPT AI
  55. 仿真99%通过,实测76%——我的AI医疗诊断踩坑实录:真实世界与仿真的鸿沟
  56. Tesla Optimus与波士顿动力:具身智能软件工程师的转型抉择与系统设计考量
  57. Tesla Optimus Gen 2:工业场景的人形机器人商业化部署深度解析
  58. 仿真跑了100%通过,实测76%——我的具身智能踩坑记:Figure 01 与 Tesla Optimus 的物理交互革命
  59. 从技术集成看商业价值:Figure 01 与 OpenAI 如何点燃具身智能
  60. 仿真跑了100%通过,实测76%——我的具身智能踩坑记:Tesla Optimus 新款人形机器人技术深度解析
  61. 为什么波士顿动力的协作机器人不是PPT AI,而是工业自动化的硬通货
  62. 仿真跑了100%通过,实测76%——我的AI工具链踩坑记
  63. 特斯拉 Optimus 量产提前背后的残酷真相:从PPT到复杂家务的ROI突围
  64. Tesla Optimus 量产提前背后的残酷真相:从PPT到复杂家务的ROI突围
  65. 仿真延迟10ms,真实延迟500ms——我的具身智能多模态集成踩坑实录
  66. 仿真与现实的鸿沟:我的Tesla Optimus商业落地探索录
  67. 仿真延迟10ms,真实延迟500ms——我的AWS Lambda冷启动优化踩坑实录
  68. Figure 02:OpenAI端到端AI如何把机器人的手变得像人