人形机器人拧螺丝?别被演示骗了,产线离我们还有三个「工程鸿沟」

30秒速览

  • Demo视频全是精心布置的“棚拍”,放到真实车间光照一变、桌布一换就直接抓瞎
  • 模仿学习需要海量多样化数据,1500条轨迹根本不够,Sim2Real物理偏差至今无解
  • 触觉传感器寿命短、标定烦,力控参数整定能逼疯你,过冲一次就可能报废工件
  • 产线实战插个连接器要1分20秒,人工8秒,成本是人工20倍,客户果断弃用
  • 通用操作突破看触觉工业化、世界模型和Sim2Real,5年内最多半自主,别抱速胜幻想

那些高调Demo,我一看镜头外就懂了——从Figure 02折叠T恤说起

去年夏天,Figure公司放出一段视频:Figure 02人形机器人站在桌子前,缓慢但流畅地把一件T恤对折、再对折,动作稳得像新手保姆。弹幕里刷满了“AGI来了”“马上进厂打螺丝”。我反反复复看了十几遍,按下暂停键的那一刻,忍不住在群里怼了一句:“你们注意到背景里那个固定相机的三脚架没?那玩意儿在工厂里连半天都撑不住。”

我干这行快十年了,从四足机械臂到双臂人形,实验室里见过的“神级Demo”少说也有四五十个。无一例外,那些视频都在一个高度受控的环境里拍摄——光照均匀到每个像素的CT值,背景纯色到连阴影都是精心布置的,待操作的物件被放在一个精确标记的位置,甚至视频本身就是从几十次尝试里挑出来的唯一一次完美执行。这不是贬低,而是必须说清楚的工程现实:人形机器人在开放场合下的操作能力,和Demo里展现的根本不在同一个数量级。

先拆解一下Figure那段叠衣服的任务。首先,T恤是平铺在桌面上的,没有堆叠,没有褶皱,没有其它杂物混在一起。机器人用的是视觉伺服,相机固定在三脚架上,外参从没变过。这意味着一旦我们把机器人推到另一张桌子前,哪怕桌子高度差2厘米,抓取点的像素坐标就会漂,直接导致抓空或者扯烂布料。其次,双臂协调动作其实是一段预存的关键帧轨迹,加上在线视觉微调。你仔细观察手腕角度,会发现它根本没有应对衣服材质变化的柔顺能力——换一件丝绸衬衫,传感器还没来得及反馈,夹爪已经把布料捏出死褶了。

特斯拉的Optimus在2024年股东大会上放出的叠衣服视频我也看了,背后是遥操作采集的数据,再用模仿学习训练出来的策略。遥操作意味着人类操作员戴着头显和力反馈手套,像玩VR游戏一样教机器人动作。这方法在数据效率上比纯强化学习高出一截,但问题在于:人类操作员本身的动作是有惯性的,遥操作系统还有几十毫秒的延迟,导致采集到的轨迹包含了大量微小抖动和非最优的施力曲线。这些噪声数据训练出来的策略,在面对真实物体时,那些抖动会被动力学链放大,末端偏差几毫米就等于在螺丝头上干磨。

还有一个被普遍忽略的细节:几乎所有的人形机器人演示都在用低速运动。关节速度限制在20%以下,因为全速运行会激发出机械臂的共振模态。你在Demo里看到的那个平稳动作,背后是底层控制器在拼命镇压振动——一旦速度提到产线要求的节拍,机械臂末端会像筛糠一样抖起来,别说拧螺丝了,能把螺丝刀对准螺丝槽都算奇迹。我自己做过实验,将UR5e的关节速度从0.5 rad/s提到1.2 rad/s,末端振幅直接飙到3毫米,而M2螺丝的槽宽只有1.6毫米。

所以,当有人拿着Demo视频问我“人形机器人什么时候能上产线”,我的标准回答是:“先让它在车间里跑通连续8小时不打碎一个工件,再来谈节拍和成本。”

我训练了个机器人叠袜子,结果它把袜子拧成了麻花——模仿学习的数据饥渴与泛化地狱

2023年的时候我们团队接了一个项目,想把人形机器人用在服装后整理环节——把洗完的袜子配对上架。这个任务人类干起来不费脑子,但机械化的难度极高,因为每只袜子的纹理、形状、弹性都不同。我们决定用模仿学习,选了当时最火的ACT(Action Chunking Transformer)和Diffusion Policy两个算法,想看看哪个更扛造。

数据采集阶段我就开始怀疑人生。我们让操作员戴着VR手柄遥操作双臂机器人,每天收集大概120条成功轨迹。花了整整两周,攒了1500条。然后训练、部署、测试——在采集数据那张桌子上,叠自己的袜子成功率85%。我觉得有戏,结果把实验推到隔壁实验室,灯光换成暖色顶灯,桌面铺了一张带花纹的桌布,机器人直接傻眼。夹爪要么抓空,要么把袜子揉成一团,最离谱的一次把袜子拧成了麻花,纤维都被扯出来几根。

问题出在观测空间的不匹配。我们的策略输入是四个相机:一个全局RGB-D,两个腕部相机,还有一个俯视相机。ACT模型把RGB图像通过ResNet编码后拼接成特征向量,再和关节状态一起送进Transformer。在原始场景下,所有像素分布都是训练集里的,换了灯光和桌布,ResNet提取的特征就飘了。我们加过颜色抖动、随机裁剪、高斯噪声这些数据增强,但泛化依旧不够。后来读DeepMind那篇RT-2-X的论文,他们用了跨多类别的真实机器人数据,总轨迹数超过10万条,才勉强在未知场景里有70%以上的成功率。1500条?塞牙缝都不够。

这里贴一段我们做数据增强时用的代码,用来在采集时实时扰动图像,给模型增加一些鲁棒性。代码跑在数据采集节点上,通过ROS topic订阅图像,做完增强后再发布到训练数据集存储模块。


#!/usr/bin/env python3
"""
数据采集时的在线图像增强节点
订阅原始相机话题,应用随机颜色抖动、亮度变化、高斯模糊,
再发布增强后的图像给数据记录器。这样能避免训练时的过拟合。
"""
import rospy
from sensor_msgs.msg import Image
import cv2
from cv_bridge import CvBridge
import numpy as np
import random

class ImageAugmenter:
    def __init__(self):
        self.bridge = CvBridge()
        # 参数由rosparam控制,方便调参
        self.blur_kernel = rospy.get_param('~blur_kernel', 3) # 3x3高斯模糊核
        self.brightness_delta = rospy.get_param('~brightness_delta', 20) # ±20亮度变化
        self.color_jitter_strength = rospy.get_param('~color_jitter_strength', 0.02) # HSV抖动比例
        self.sub = rospy.Subscriber('/camera/color/image_raw', Image, self.callback)
        self.pub = rospy.Publisher('/camera/color/augmented', Image, queue_size=5)

    def callback(self, msg):
        try:
            cv_image = self.bridge.imgmsg_to_cv2(msg, "bgr8")
        except Exception as e:
            rospy.logerr("cv_bridge conversion error: %s", e)
            return
        # 随机决定是否应用每种增强,模拟不同环境
        if random.random() > 0.5:
            cv_image = cv2.GaussianBlur(cv_image, (self.blur_kernel, self.blur_kernel), 0)
        if random.random() > 0.5:
            delta = random.randint(-self.brightness_delta, self.brightness_delta)
            cv_image = cv2.convertScaleAbs(cv_image, alpha=1, beta=delta)
        if random.random() > 0.5:
            hsv = cv2.cvtColor(cv_image, cv2.COLOR_BGR2HSV).astype(np.float32)
            # 对色相和饱和度加入微小扰动
            h_delta = (random.random() - 0.5) * 2 * self.color_jitter_strength * 180
            s_delta = (random.random() - 0.5) * 2 * self.color_jitter_strength
            hsv[:,:,0] = (hsv[:,:,0] + h_delta) % 180
            hsv[:,:,1] = np.clip(hsv[:,:,1] * (1 + s_delta), 0, 255)
            cv_image = cv2.cvtColor(hsv.astype(np.uint8), cv2.COLOR_HSV2BGR)
        aug_msg = self.bridge.cv2_to_imgmsg(cv_image, "bgr8")
        aug_msg.header = msg.header
        self.pub.publish(aug_msg)

if __name__ == '__main__':
    rospy.init_node('image_augmenter')
    node = ImageAugmenter()
    rospy.spin()

这个增强方案虽然减缓了过拟合,但没有从根本上解决场景泛化。真正的泛化需要模型本身学会对环境中的无关变量不敏感,也就是要构建一个包含数千种背景、光照、物体材质的超大多样性数据集。可真实机器人采集的数据成本太高,于是大家把希望寄托在Sim2Real上。

我们的仿真管道用的是Isaac Sim,里面可以导入随机的厨房、客厅、工厂环境,渲染的时候加入域随机化:纹理随机、灯光位置强度和色温随机、甚至给相机加虚拟灰尘。训练出来的策略在仿真里成功率91%,一上真机跌到44%。原因很简单,仿真里的物理参数(摩擦系数、接触刚度、物体质量分布)和现实有偏差,策略学的抓取力要么太大要么太小。我后来加了一个在线系统辨识模块,让机器人在前几次接触物体时用触觉信号估计真实摩擦系数,再调整策略,才把成功率提到65%。但这也只是在“叠袜子”这样一个相对静态的任务上。

模仿学习的另一个死穴是动作空间的累积漂移。行为克隆策略一旦在序列早期出现微小误差,后面每一步都会偏离训练分布,最终做出疯狂的动作。Diffusion Policy试图用去噪扩散过程生成更平滑的动作序列,但推理速度太慢,在边缘设备上跑一次推理要200ms,产线等不起。我们试过把模型蒸馏成MLP,速度上来了,但精度又丢了。

灵巧手的触觉传感器让我烧了三个,才明白力控不是加个PID那么简单

拧螺丝这个任务,人类闭着眼睛都能干。手指感受到螺丝头的十字槽,施加轴向力保证批头不跳出来,再根据旋转阻力判断是否拧到底。到了机器人身上,每一个环节都是坑。

我第一个坑是触觉传感器选型。市面上的触觉传感器主要分三类:基于视觉的(如GelSight)、基于电容阵列的(如XELA uSkin)、基于压阻的(如Tekscan)。GelSight能提供高分辨率的三维形变图,适合感知表面纹理和接触几何,但它对光源极其敏感,装在灵巧手指尖上,一开关节电机,内部的LED光源会因为电磁干扰产生纹波,拍出来的触觉图像全是横条纹。我们烧掉的第一个GelSight Mini就是因为在装配时,夹爪夹得太紧,把表面凝胶挤出了不可恢复的凹痕。第二个则是因为在工厂现场,油污渗进了保护层,直接报废。

后来换了XELA的uSkin,六轴力/力矩加电容触觉阵列,防尘防水。但它的标定文档那叫一个一言难尽——官方给的Python例程里居然用硬编码的增益矩阵,不同的传感器个体差异完全没考虑。我花了一个周末重新写标定程序,用六维力传感器作基准,最小二乘拟合出每个taxel的线性系数,才算勉强能用。下面这段代码是一个简单的标定流程,用来采集静态负载下的传感器原始值,并计算校准矩阵。


import numpy as np
import rospy
from std_msgs.msg import Float32MultiArray
from geometry_msgs.msg import WrenchStamped

class TactileCalibrator:
    def __init__(self):
        # 订阅原始触觉数据(假设每个传感器有16个taxel)
        self.taxel_sub = rospy.Subscriber('/tactile/raw', Float32MultiArray, self.taxel_cb)
        # 订阅参考力传感器数据(安装在手腕上)
        self.ref_sub = rospy.Subscriber('/wrench', WrenchStamped, self.ref_cb)
        self.raw_data = []   # (taxel_values, ref_force_torque)
        self.calibration_matrix = None

    def taxel_cb(self, msg):
        self.latest_taxel = np.array(msg.data)

    def ref_cb(self, msg):
        # 存储参考力和力矩向量 [Fx,Fy,Fz,Mx,My,Mz]
        ref = np.array([msg.wrench.force.x, msg.wrench.force.y, msg.wrench.force.z,
                        msg.wrench.torque.x, msg.wrench.torque.y, msg.wrench.torque.z])
        if hasattr(self, 'latest_taxel'):
            self.raw_data.append((self.latest_taxel.copy(), ref))
            if len(self.raw_data) % 100 == 0:
                rospy.loginfo("Collected %d samples", len(self.raw_data))

    def compute_calibration(self):
        # 用最小二乘求解 C: taxel -> wrench
        X = np.array([d[0] for d in self.raw_data])   # N x num_taxel
        Y = np.array([d[1] for d in self.raw_data])   # N x 6
        # 添加偏置项
        X_with_bias = np.hstack([X, np.ones((X.shape[0],1))])
        # 求解 Y = X * C^T, 对于每个输出维度单独求解
        C, residuals, rank, s = np.linalg.lstsq(X_with_bias, Y, rcond=None)
        self.calibration_matrix = C   # (num_taxel+1) x 6
        rospy.loginfo("Calibration done, residuals: %s", residuals)
        return self.calibration_matrix

    def save_calibration(self, path):
        np.save(path, self.calibration_matrix)
        rospy.loginfo("Calibration saved to %s", path)

这段代码在实际使用中还有一个致命问题:温度漂移。机器人连续工作一小时后,触觉传感器基线会偏移几十个计数,导致力估计出现零点误差。我只能在线实时估计偏移量,用一个卡尔曼滤波器,假设传感器空闲时外力为零,缓慢更新基线。这又引入了延迟和调参复杂度。

有了相对可信的力觉反馈,就可以做力控了。很多工程师的直觉是“加个PID力环就行”,结果就是过冲、震荡、或者根本推不进去。拧螺丝是一个典型的力位混合控制任务:轴向需要恒力保证批头嵌入,旋转需要力矩伺服防止滑牙。我早期用导纳控制框架,把期望力误差转换成末端位姿增量,代码大致如下:


def admittance_control(current_force, desired_force, current_pose, M, B, K, dt):
    # M, B, K 是导纳参数:质量、阻尼、刚度
    # 计算力误差
    force_error = current_force - desired_force
    # 二阶导纳方程: M*a + B*v + K*x = force_error
    # 这里简化用欧拉方法更新虚拟位移
    # 实际最好用更高阶的积分器
    global vel, disp   # 维持内部状态
    acc = (force_error - B*vel - K*disp) / M
    vel = vel + acc * dt
    disp = disp + vel * dt
    # 把虚拟位移叠加到当前位姿上(在任务空间)
    target_pose = current_pose.copy()
    target_pose[:3] += disp[:3]   # 平移
    # 对旋转部分同样处理(忽略)
    return target_pose

参数整定的时候我崩溃了好几次。M太小,系统对力噪声过敏,批头在螺丝头上跳舞;B太大,响应太慢,螺丝还没旋进去,产线的节拍已经超了。最后逼得我用强化学习在仿真里自动调导纳参数,结果还算不错,轴向力控制精度做到了±0.5N。但一上真实螺丝,因为螺丝和螺纹孔之间的静摩擦不确定,策略又需要重新适应。

我在一家汽车零部件厂试了三个月,人形机器人插个连接器要三分钟,还碎了两个接插件

说再多理论,不如一次产线实战来得清醒。2024年Q3,我被派到一家汽车线束供应商——他们每天要人工插接上万对防水连接器,工人抱怨手指关节痛,离职率奇高。管理层看到人形机器人的新闻,觉得这是个“未来方案”,就拉我们团队去做可行性验证。目标是用一台人形机器人完成一个工位的插接:拿起20针防水连接器公头,对准母头,推入直到卡扣锁死,再轻微回拉确认锁紧。人工的平均节拍是8秒。

我们带过去的是一台国产人形机器人的上半身,装在AGV上,双臂七自由度,末端是两指平行夹爪。视觉系统用了固定在头顶的Realsense D435i和一个腕部的D405。第一个星期用来标定手眼关系和搭建抓取点。连接器放在一个蓝色料盘里,位置随机但姿态统一。用2D相机做模板匹配,抓取成功率第一天就掉到了62%——因为下午阳光从窗户照进来,料盘的阴影改变了边缘梯度。我不得不加了偏振片和补光灯,又调了半天的阈值,成功率回到89%,但每次光照变化都要重新搞。

插接环节更是噩梦。公头需要以约15度倾斜插入导向槽,然后旋转摆正、轴向推入。我们写了一个有限状态机,结合视觉伺服装配和力控插入。视觉伺服负责把连接器带到母头正前方2mm处,力控负责后续的柔顺插入。下面是一个视觉伺服的简化逻辑:


def visual_servo_move(current_image, target_feature, Kp):
    # 提取当前特征(比如母头外框的角点)
    feature = detect_connector_outline(current_image)
    error = target_feature - feature   # 图像平面误差(像素)
    # 使用基于图像的视觉伺服(IBVS)的交互矩阵近似
    # 这里简化为比例控制映射像素误差到末端速度
    # 实际需要相机内参和目标深度
    v_cam = Kp * np.array([error[0], error[1], 0, 0, 0, 0])  # 仅平移
    # 将相机速度转换到机器人基座标系
    v_base = transform_cam_to_base(v_cam)
    return v_base

视觉伺服最大的敌人是反光。连接器外壳是黑色PA66,但上面有金属端子,一旦灯光角度不对,金属反光直接让特征点跟踪丢失。我们试过用红外相机加红外光源,但端子不反红外,母头特征又不够明显。最终还是妥协了:在连接器上方贴了AprilTag,用标签定位,精度能到1mm,可是这等于要对每个连接器做人工改造,产线根本不可能接受。

力控插入阶段,我们用了一种最简单的力位切换:当检测到轴向力超过5N并且持续0.1秒,说明连接器已经触底,可以释放。结果因为这个硬阈值,有两次公头插入角度稍有偏差,侧向力导致公头边缘切入母头硅胶密封圈,等拔出来的时候密封圈已经撕裂了。(后来拆开看,里面密封圈裂成了两半,整条线束报废,工厂车间主任的脸黑得像锅底。)最后不得不引入六维力传感器监控侧向力,超过2N就立即退回重试,但这又让节拍进一步拉长。

经过两个月的迭代,我们把单次插接成功率从45%拉到了82%,平均节拍时间从最初的3分钟降到了1分20秒。而人工只需8秒,成功率99.9%。成本方面,那台人形机器人本体加集成费用超过百万,加上工程师驻场调试,摊到每根连接器的成本是人工的20倍。最终客户叫停了项目,转而采购了两台专用的插接机,每台二十万,节拍2.5秒,用振动盘上料,根本不需要复杂的视觉。

这次经历让我意识到,人形机器人在当前阶段根本不是去和成熟自动化设备正面竞争的,它的长处在任务切换的柔性。只有在那种“每天换十几种产品、每种量不大的”多品种小批量场景,通用操作的价值才能超过那些笨重的专机。可即使是那样的场景,也需要机器人拥有更强的自主适应能力,而当前我们离那个目标还差得远。

通用操作能力的路线图:不是线性提升,而是几个关键技术的突破才能迈过坎

很多人喜欢把技术进步画成一条漂亮的指数曲线,仿佛明年模型再大十倍、数据再多百倍,人形机器人就能突然开窍。过去十年我学到的最深刻的一课就是:操作能力的提升是阶梯式的,每个台阶都被某一项技术的天花板卡着,不突破那个点,再多数据也是白搭。

第一道坎是触觉感知的工业化。目前实验室里的触觉传感器价格贵、寿命短、维护难,在粉尘油污环境下活不过三个月。未来的突破方向一定是通过MEMS工艺把电容或压电阵列直接做在柔性的手指皮肤上,同时集成信号处理芯片,让触觉像今天的摄像头一样即插即用。这需要微机电、材料、信号处理领域的联合攻关。我观察到的趋势是,像SynTouch这样的公司已经在尝试用磁传感技术做高动态范围的力触觉传感器,但成本还远没降到百元级。

第二道坎是物理世界的预训练模型(世界模型)。现在大语言模型能写诗,但在预测“我拧这颗螺丝需要用多大的力矩”时,基本是瞎猜。机器人需要一个能模拟物理交互的内部表征,通过自监督学习从大量视频和交互数据中学到物体的动力学和摩擦特性。像UC Berkeley的DreamerV3和Google的UniSim这类工作已经在仿真环境里展示了初步能力,但要在真实高精度操作中可靠使用,还需要模型能实时推理并处理连续接触时的不连续性。

第三道坎是Sim2Real的跨越,特别是接触丰富的任务。目前的域随机化和系统辨识方法,在小批量任务上还行,一旦面对成百上千种不同零件,仿真模型库的构建和维护成本就会爆炸。我认为未来需要基于神经辐射场(NeRF)或3D高斯抛雪球等快速三维重建技术,让机器人自己在现场扫描工件,自动生成高保真仿真模型,然后在数字孪生里训练策略。这条路已经有团队在探索,但端到端的自动化程度还很低。

具体到时间表,我个人的判断(可能被打脸)是:

  • 2025-2026年:在高度结构化的物流和仓储场景,人形机器人能够完成搬运、拆垛、简单分拣,成功率勉强达到实用门槛(>95%),但需要大量环境改造和人工守护。
  • 2027-2029年:随着触觉传感器和力控算法的成熟,机器人可以执行中等复杂度的装配任务(如拧M4以上的螺丝、插拔无锁紧的大连接器),在限定品种(<100种)的产线上实现半自主运行。
  • 2030年以后:如果世界模型和Sim2Real取得决定性突破,我们可能看到能处理软硬物体、有弹性零件的通用操作机器人。但即便如此,全自主、零人工干预的“通用操作”仍将是圣杯,也许永远无法完全达到人类的适应性。

我经常被问到:“那现在投资一家机器人公司是不是太早了?”我会反问:“你是想解决今年的产量问题,还是布局五年后的劳动力替代?”答案决定了你应该用什么心态看待这个时间表。

别急着让机器人上产线,先把实验室里的泛化测试跑通再说——一个工程现实的checklist

这几年我帮好几个制造企业做过机器人导入评估,发现一个共性毛病:决策者被Demo视频刺激后,直接跳过工程可行性验证,拍板就上。结果就是预算烧完,留下一台吃灰的机器人。为了避免更多人掉进这个坑,我总结了一套实验室阶段的泛化测试清单,每一项都直接对标产线真实挑战。

测试项 产线对应挑战 通过标准
光照扰动测试:使用至少5种不同强度、色温的光照组合,包含频闪灯(模拟车间日光灯闪烁) 自然光变化、灯具老化 视觉定位成功率波动<5%
背景杂乱度测试:在操作区域随机摆放无关物体(手套、工具、线缆) 工人随手放置杂物 机器人不应误抓,且能安全避障
物体位姿随机化:被抓物体在±30°旋转、±5cm平移范围内完全随机 来料不规范 抓取成功率>98%
材质泛化测试:至少使用3种不同表面纹理、颜色的同规格工件(如电镀、喷砂、黑色氧化) 供应商批次差异 策略能在一小时内无调参完成切换
力控安全边界测试:插入障碍物时(如故意倾斜放置母头)检测到异常力,应在100ms内撤回 工件缺陷、装配异常 无工件或工具损坏
连续运行疲劳测试:在无人干预下连续运行8小时,记录成功率时间衰减曲线 产线常态运行 最后1小时成功率不低于初始的90%
成本模型核算:包含机器人折旧、能源、耗材、工程师驻场费用,与人工成本对比 ROI计算 在一年内收回附加成本(否则需重新评估技术方案)

如果一项都不能通过,别急着去产线丢脸。把这清单贴在实验室墙上,一条一条打勾,直到全部通过。这个过程可能需要半年,甚至一年,但绝对是好过在客户车间掉链子。

我为什么还在坚持:尽管烂摊子一堆,但这玩意真的会改变制造业

写完前面几千字,你可能觉得我是个悲观主义者。其实恰恰相反,我比任何时候都更相信人形机器人代表的操作智能是制造业的终局。为什么?因为我亲身经历了中国制造业的人口断层。那家线束厂的工人平均年龄43岁,5年内退休的比例超过40%,可是年轻人宁愿送外卖也不愿每天重复插接8000次连接器。这不是薪酬问题,而是人的自我实现需求在排斥这种异化劳动。人形机器人的通用操作能力,哪怕目前笨拙、昂贵,但它承载着把人类从简单重复劳动中解放出来的可能性。

技术层面,我最近在关注几个进展:Google的RT-2展示了视觉-语言-动作的大一统模型,虽然动作还很粗糙,但证明了多模态知识可以迁移到物理交互;斯坦福的Mobile ALOHA用低成本硬件实现复杂的双臂协调,让我看到数据采集平民化的道路;扩散策略在动作生成上的平滑性,如果能解决推理延迟,将对精细操作产生颠覆性影响。这些都是让我愿意继续熬夜debug的原因。

所以,如果你也是一个在机器人操作方向上挣扎的工程师,别被那些唱衰的声音影响。把每一个过冲的力控信号、每一张被误检的图像、每一个失败的动作序列都当成一次正向积累。我们离真正的人形机器人产业爆发,可能就是还差几个关键突破,但每个突破都需要一群不信邪、还在拧螺丝的人。

发表评论