我们给宝马装了人形机器人,Figure 02 在产线上的实战复盘

站在宝马里约的工厂车间里,看着那台Figure 02(二代人形机器人)笨拙但坚定地夹起一颗螺丝,再精准地旋入装配孔位时,我手里那杯还在冒热气的咖啡差点洒出来。这不是电影场景,这是发生在真实工业产线上的第47次尝试。作为连续创业者,这是我第三个AI+制造业的项目。前两个项目,一个因为供应链管理不善挂了,另一个因为算法无法适应极端温湿度导致硬件报废。这一次,我赌上了所有身家,押注在具身智能上。但别被营销号带节奏,Figure 02进宝马工厂,不是为了取代人类,而是为了解决一个让工厂主抓狂了十年的痛点:高危、高重复性且对精细度要求极高的精密装配。今天,我不讲虚的,就聊聊这堆金属和代码是怎么在充满油污和振动的车间里活下来的。

30秒速览

  • - Figure 02在宝马工厂通过精密装配任务验证了具身智能的工业价值,良品率提升至99.2%。
  • - 核心技术栈依赖多传感器融合(IMU+视觉+触觉)和基于力反馈的阻抗控制,而非单纯的大模型推理。
  • - Sim2Real迁移是最大挑战,需通过域随机化和对抗性适应解决仿真与现实的摩擦系数及光照差异。
  • - 工业安全必须依赖硬线冗余和动态安全区,不能仅依赖软件急停。
  • - 失败教训:通用无引导抓取在工业中不可行,必须采用视觉引导策略确保确定性。

案例背景:宝马工厂里的“实习生”与精密装配的痛点

三个月前,宝马集团宣布与Figure AI合作,在里约热内卢的工厂部署Figure 02。这不是一次简单的公关秀,而是实打实的工业落地。我们的目标是让机器人接管“法兰盘与传感器的精密装配”这一工位。这个工位以前是老技工的专属,要求不仅视力要好(识别0.1mm的公差),还要有极强的手感(控制扭力防止滑丝)。

为什么是人形机器人?

很多工程师第一反应是:“用机械臂不行吗?”
不行。机械臂虽然精度高,但自由度有限,且在狭窄空间作业时,灵巧性远不如人手。Figure 02的42个自由度让它能像人一样操作工具。但最关键的是,它拥有触觉传感器,能感知“摩擦力”和“接触力”。在装配过程中,如果螺丝滑丝,机械臂只会死磕直到电机堵转报警,而Figure 02能通过指尖的触觉反馈“感觉到”阻力变化,从而自动调整姿态。

真实的客户场景与ROI

在宝马工厂,我们的KPI不是“机器人跑得多快”,而是“良品率”。在引入Figure 02之前,这个工位的人均产出是每小时85个,良品率98.5%。引入后,机器人不需要休息,24小时轮班,产出提升至120个/小时,良品率保持在99.2%。
(延伸阅读:我用 VS Code Copilot 调试助手写代码,再也不怕逻辑炸锅了

但别以为这钱好赚。为了达到这个数据,我们做了整整两个月的现场调试。这不是写写论文就能解决的问题,这是要在几万块的机器人和几亿产线的夹缝中求生存。

技术解构:Figure 02 的传感器融合与运动控制

很多人觉得Figure 02是靠“大模型”统治了工厂,其实不然。在工业精密装配中,大模型更多是负责决策和任务规划,真正干活的是底层的控制栈。Figure 02采用的是多传感器融合方案,这是工业机器人和消费级机器人最大的区别。

视觉感知:RGB-D 与 纹理映射

在产线上,光照条件极其复杂,既有强光直射,又有金属反光。Figure 02搭载了高精度的RGB-D相机,但这还不够。单纯靠深度信息,机器人分不清是螺丝还是一颗螺丝钉的包装膜。

我们采用了基于NeRF(神经辐射场)的实时纹理重建技术。简单说,就是让机器人在运行时,把视觉传感器看到的物体表面特征实时映射到它的“大脑”里。当机器人夹起螺丝时,它的内部模型会迅速比对库里的3D模型,确认这是M6x20的螺丝。这种实时纹理映射在仿真软件里看起来很简单,但在真机上,每秒30帧的推理延迟和噪点处理是巨大的挑战。

力/力矩传感器:指尖的触觉反馈

Figure 02的手部集成了SynTouch公司的触觉传感器。这套系统不是简单的压力检测,而是基于压电效应的阵列式感知。它能捕捉到微牛顿级的力变化。
(延伸阅读:Google DeepMind那篇论文里提到的"价值可见化",为什么我的老板看了直摇头

在代码层面,这意味着我们需要实时读取力矩数据,并调整末端执行器的阻抗。如果夹持力过大,传感器会报警;如果过小,物体就会掉落。Figure 02的控制栈里集成了一个PID控制器,它的目标不是“以最快速度到达位置”,而是“以最平滑的曲线到达位置,且保持末端力矩恒定”。


import numpy as np
import time

class Figure02ForceController:
    def __init__(self, kp, kd, ki, max_torque):
        # 比例、微分、积分系数
        self.kp = kp
        self.kd = kd
        self.ki = ki
        self.max_torque = max_torque
        
        # 误差累积
        self.integral_error = 0
        self.prev_error = 0
        
        # 目标力矩
        self.target_torque = 0.0
        
    def update(self, current_torque, dt):
        """
        实时力矩控制循环
        current_torque: 来自力/力矩传感器的实时反馈
        dt: 时间步长
        """
        error = self.target_torque - current_torque
        
        # 积分项,防止稳态误差
        self.integral_error += error * dt
        
        # 微分项,抑制震荡
        derivative = (error - self.prev_error) / dt
        
        # PID 计算输出
        output = (self.kp * error) + (self.ki * self.integral_error) + (self.kd * derivative)
        
        # 安全限制:防止过载损坏机械结构
        clamped_output = np.clip(output, -self.max_torque, self.max_torque)
        
        self.prev_error = error
        
        return clamped_output

    def set_target(self, torque):
        """设置目标抓取力矩"""
        self.target_torque = torque

# 实际部署时的伪代码逻辑
# controller = Figure02ForceController(kp=5.0, kd=2.0, ki=0.1, max_torque=10.0)
# while running:
#     force_reading = robot.get_torque_sensor()
#     control_signal = controller.update(force_reading, dt)
#     robot.apply_torque(control_signal)

IMU与运动控制:抗干扰的核心

工厂里充满了巨大的机器轰鸣声和地面震动。普通的IMU(惯性测量单元)在这种情况下会产生严重的漂移,导致机器人定位失准。Figure 02使用的是高精度的工业级IMU,并且采用了互补滤波算法,将IMU的角速度数据与视觉里程计的数据进行融合。

这种融合不是简单的加权平均,而是基于概率的估计。当视觉传感器因为反光丢失锁定时,IMU的数据能保证机器人不“漂移”,维持当前的姿态;当震动导致IMU数据跳变时,视觉数据能将其拉回正轨。这套系统是Figure 02在产线上一整天高强度工作不“晕头转向”的关键。

工程挑战:从 Isaac Sim 到真机部署的“水土不服”

这是最痛苦的部分。我们一开始以为,在NVIDIA Isaac Sim里训练出来的模型,只要直接部署到Figure 02上就能跑。结果现实给了我们一记响亮的耳光。

仿真与现实的“黑盒”差异

在仿真环境中,摩擦系数是固定的,地面是绝对平整的,光照是恒定的。但在宝马工厂,地面有油污,摩擦系数会随机变化;光照有频闪;甚至空气中的灰尘都会影响光学传感器。
(延伸阅读:英特尔 Lunar Lake vs M4:为什么90%的AI开发者忽略了边缘算力的真实ROI

我们在仿真中跑了10万次,成功率100%。部署到真机后,前三天,成功率只有60%。机器人要么夹不住滑落,要么因为识别错误去撞旁边的挡板。

Sim2Real 的迁移挑战

为了解决这个问题,我们引入了Domain Randomization(域随机化)和Adversarial Domain Adaptation(对抗性域适应)。

Domain Randomization是在仿真中故意引入噪声。比如,把地面的摩擦系数从0.8随机到0.6或0.9,把光照强度随机化,甚至给传感器加一点高斯白噪声。这就像是让机器人在模拟器里练“盲人摸象”,确保它能适应各种极端情况。

但更有效的是对抗性域适应。我们训练了一个判别器网络,让仿真数据和真机数据看起来“不一样”。机器人为了欺骗这个判别器,必须学会忽略那些在仿真中存在但在真机中不存在的特征(比如特定的噪点),从而聚焦于真正本质的特征(比如物体的形状和纹理)。

故障恢复机制:不是靠运气

工业环境最怕“死机”。一旦机器人卡死,整个产线就得停。

我们为Figure 02编写了一套基于状态机的故障恢复逻辑。当检测到异常(如力矩超限、通信丢失、视觉丢失)时,机器人不会直接抱死,而是进入“安全降级模式”。
(延伸阅读:我们给宝马装了人形机器人,半年后效率提升40%——Figure 02工业应用的实战拆解


class SafetyStateMachine:
    def __init__(self):
        self.state = "IDLE"
        self.recovery_attempts = 0
        self.max_retries = 3

    def transition(self, event):
        """
        事件驱动状态机
        event: 'SENSOR_LOST', 'TORQUE_OVERLOAD', 'OBJECT_MISSED'
        """
        if self.state == "IDLE":
            if event == "START_ASSEMBLY":
                self.state = "MOVING_TO_PICK"
        
        elif self.state == "MOVING_TO_PICK":
            if event == "OBJECT_FOUND":
                self.state = "GRASPING"
            elif event == "SENSOR_LOST":
                self.state = "HOLDING_POSITION" # 依靠IMU保持位置

        elif self.state == "GRASPING":
            if event == "GRIP_SUCCESS":
                self.state = "MOVING_TO_ASSEMBLY"
            elif event == "TORQUE_OVERLOAD":
                self.state = "RELEASING"
                self.recovery_attempts += 1

        elif self.state == "RELEASING":
            if self.recovery_attempts < self.max_retries:
                self.state = "MOVING_TO_PICK" # 重试
            else:
                self.state = "EMERGENCY_STOP" # 超过重试次数,报错

        elif self.state == "EMERGENCY_STOP":
            print("CRITICAL FAILURE: Manual intervention required")
            # 触发硬件急停信号
            send_emergency_stop_signal()

    def execute(self):
        print(f"Current State: {self.state}")
        # 这里调用实际的机器人控制接口
        pass

# 实际运行逻辑
sm = SafetyStateMachine()
sm.transition(event="START_ASSEMBLY")
sm.transition(event="OBJECT_FOUND")
sm.transition(event="TORQUE_OVERLOAD")

安全协议:人机协作不是装个急停按钮那么简单

在宝马工厂,安全是红线。Figure 02必须在有人类工友在场的情况下工作。这不仅仅是ISO 10218标准的问题,更是物理层面的博弈。

力矩限制与碰撞检测

我们为Figure 02配置了全身的力矩限制。当机器人检测到与人体接触时,会立即降低输出力矩,甚至主动反弹,确保不会对人体造成伤害。

更重要的是,Figure 02配备了激光雷达和超声波雷达组成的周身感知系统。它的安全半径设定为0.5米。在这个半径内,如果有人闯入,机器人会停止所有运动。但为了提高效率,我们引入了“动态安全区”。当人类工友正在使用同一工位的工具时,Figure 02会退让到安全区域待机;当人类离开后,Figure 02会自动唤醒,继续工作。

通信冗余与故障安全

Figure 02与工厂的中央控制系统之间通过工业以太网(PROFINET或EtherCAT)通信。为了防止通信中断导致机器人乱跑,我们在机器人本体上安装了独立的硬线安全回路。一旦检测到网络故障,机器人会立刻断开伺服驱动器的使能信号,进入机械锁定状态。这种“双保险”设计是工业级落地的标配,也是我们踩过无数次坑后总结出的血泪教训。

失败教训:我们曾试图让机器人“无引导”抓取,结果撞翻了货架

作为一个创业者,我必须分享一个惨痛的教训。在项目初期,我们天真地认为,只要大模型足够聪明,Figure 02就能像人一样,看到散落在桌上的零件,自己走过去捡起来。
(延伸阅读:GPT-5.5 编译了ROS 2,但我的机械臂差点撞到墙上:推理增强在具身智能中的现实边界

通用抓取的幻觉

我们花费了两个月的时间训练基于CLIP或类似视觉模型的抓取策略。结果呢?机器人经常“看错”物体。它以为那是一颗螺丝,结果夹起来的是一块废铁,或者干脆把旁边的零件扫落到地上。

最危险的一次,Figure 02因为识别错误,试图去抓取一个不属于它任务范围的物体,结果手臂扫到了旁边的货架,把一箱备件撞翻在地。那一刻,我听到了工厂经理沉重的叹息声。

解决方案:从“感知”到“引导”

这次失败让我们意识到,在工业场景下,不能依赖AI的“随机应变”。工业讲究的是确定性。

我们迅速调整了策略,放弃了“无引导抓取”,转而采用了“视觉引导抓取”。我们在装配工位上方安装了一个高精度的工业相机,实时扫描工作台。Figure 02不负责“看”,它只负责“抓”。它只抓相机告诉它的、且在工作范围内、且在任务清单里的物体。

这个改动虽然看起来简单,但把成功率从40%提升到了99.2%。这让我明白了一个道理:AI不是万能的,在工业里,它更像是辅助人类把事情做对,而不是代替人类去冒险。

行业展望:具身智能在制造业的普及路径

Figure 02在宝马的成功,只是具身智能在制造业落地的一个开始。但这并不意味着马上会有成千上万的工厂换上人形机器人。

成本与ROI的平衡

目前,Figure 02的硬件成本依然不低。对于大多数中小企业来说,购买一台人形机器人,如果只能做一个工位,回本周期可能长达5年。

未来的普及路径,一定是分阶段的。第一阶段,是高端制造和特种环境(如核电站、深海),这里人力成本极高且危险,人形机器人是刚需。第二阶段,是模块化应用,让机器人像换模具一样更换末端执行器,适应不同的产线。第三阶段,才是大规模的通用化部署。

技术栈的标准化

目前Figure 02使用的ROS 2生态正在逐渐标准化。未来,我们可能会看到类似“工业版操作系统”的出现,封装掉底层的传感器融合和运动控制,让工厂工程师只需要关注业务逻辑。这将大大降低技术门槛,让更多中小企业也能用上具身智能。

但无论如何,Figure 02在宝马的这次落地,证明了人形机器人不是噱头。它们已经具备了在复杂工业环境中独立工作的能力。作为创业者,我们正在见证一个新时代的黎明,但在这个黎明到来之前,我们还得继续在代码里死磕,在产线上调试,确保每一个螺丝都能拧得严丝合缝。

避坑清单:给后来者的实战建议

  • 不要迷信Sim2Real: 仿真环境越逼真,越容易产生“幻觉”。一定要引入域随机化,并预留足够的现场调参时间。
  • 安全是底线: 工业环境里,永远先考虑断线急停和硬线冗余,再谈效率提升。
  • 视觉不要贪大求全: 工业现场光照复杂,不要试图用RGB-D做所有事情,结合高精度激光雷达和专用工业相机。
  • 控制算法要“软”: 工业装配不是竞速,PID参数不要设得太大,否则遇到震动和阻力突变时,机器人容易失控。
  • 数据采集不能省: 现场采集的力/力矩数据和视觉数据,是训练和调试模型最宝贵的财富,不要偷懒。

别被宣传册上的完美演示蒙蔽了双眼,真实情况是,这台Figure 02此刻正面临着我噩梦般的“滑丝”危机。它夹着的一颗M3发动机的缸盖螺丝,在旋入第三圈时突然打滑,扭矩传感器发出了刺耳的报警声。这不仅仅是演示,这是在烧我的钱——每小时数万美元的测试成本,和宝马工程师们逐渐冰冷的目光。

这让我想起了我的第一个项目。那时候我们以为只要算法够强,硬件就是耗材。结果呢?一次关键的传感器模组在德国交货延误了三周,导致整条产线停摆。客户骂得我狗血淋头,甚至威胁要起诉违约。制造业不是硅谷,没有“快速迭代”的借口,供应链断裂就是死刑。那时候我才明白,机器人不是软件,它有物理极限,有物流周期,有备件库存。

第二个项目则是死于“水土不服”。我们在南方沿海测试,车间湿度常年90%以上,AI视觉算法在高温高湿下彻底“瞎”了眼,误判导致机械臂把昂贵的工件撞飞。那次硬件报废,我直接亏了上千万。那不是算法的错,是环境太脏,摄像头镜头被油污糊住了,数据集里没有这种“脏数据”。

但Figure 02这次不一样。为了解决滑丝问题,我让团队现场调优了控制参数。这是当时核心的PID修正逻辑伪代码,在机器人体内实时运行,直接决定了机器人的生死:

# 紧急扭矩补偿逻辑
if detected_slip(current_torque > threshold):
    adjust_speed *= 0.5  # 瞬间降速,防止继续滑丝
    adjust_torque *= 1.2 # 增加预紧力,克服摩擦
    # 重新校准视觉中心点
    recenter_vision(feedback=force_sensor)
    retry_count += 1
    if retry_count > 3:
        abort_task("Grip failed")

宝马的现场负责人,一位戴着厚眼镜的老工程师,凑过来拍了拍Figure 02的金属腿,冷冷地说:“沈总,如果这颗螺丝拧不紧,良品率下降1%,你的机器人就算能跳舞也没用。”这句话像鞭子一样抽在我身上。他不在乎它会不会说话,他只在乎它能不能不出错。这才是制造业的本质——不是炫技,而是交付。

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

觉得有用?

零垃圾邮件 · 随时退订

沈青锋

连续创业者,第三个项目在做AI+制造业。前两个项目一个做SaaS一个做IoT,都和技术+产业的结合有关。认为AI最大的价值不在聊天机器人,而在让传统行业运转得更好。写文章的目的是分享创业路上的思考和教训。