☰
人形机器人用脚关洗碗机:单腿平衡与柔顺控制的硬核挑战
2026/10/21 18:01:52 网站建设 项目流程

最近刷到一段人形机器人演示,某家估值390亿的公司让机器人弯下腰、抬起一只脚,把洗碗机门干脆利落地关上。评论区都在喊“神操作”,但作为常年和机器人控制打交道的从业者,我第一反应不是“这脚可真灵活”,而是“它怎么做到不摔倒、不乱晃、不把门推坏”的。用脚关洗碗机,表面看只是换了一个末端执行器,实际上对全身平衡、动力学建模、柔顺接触控制提出的要求,比“用手关门”高了一个量级。这篇文章就从控制工程师的视角,把这套“黑科技”拆开讲清楚,顺便聊聊想复现这个动作,得先迈过哪些门槛。

1. 用脚关洗碗机这个动作,凭什么叫“神操作”

1.1 外行看热闹,内行看冷汗

普通人看到这段视频,第一反应通常是“机器人居然能把脚抬这么高”。但搞机器人控制的人看到的是另一层:单腿站立的同时,另一条腿在执行末端接触任务。人形机器人天生是浮基系统,双脚站立时支撑点多、稳定裕度大,问题相对可控;一旦抬起一条腿,支撑区域瞬间缩小到一只脚掌的范围,整个上半身和操作腿的质量都必须时刻压在脚掌投影内,否则就倒。

更麻烦的是,操作腿本身是一坨会移动的重量。把一条腿抬起来去推门,相当于在身体侧面甩出一个载荷,整机的质心位置和转动惯量都在实时变化。这个过程中,门还会通过脚面给机器人一个反作用力,如果控制回路没有把这个外力纳入计算,机器人会被自己“推”倒。用一个生活类比:这就像你在平衡木上单脚站立,同时用另一只脚去推开一扇有点沉的弹簧门——视觉、前庭、肌肉协同全都要在同一个瞬间完成。机器人要把这个“瞬时规划”变成每个控制周期都在跑的实时计算。

1.2 手操作和脚操作,难度不在一个量级

很多文章在讲这个视频时,强调的是“人形机器人的手已经很灵活了,为什么还要用脚”。我的理解恰恰相反:用脚操作不是因为手不行,而是因为“脚能做到的手做起来代价太高”。把两者的差异放在一起看会更直观。

对比维度手操作脚操作
支撑条件双腿站立,重心稳定可假设单腿站立,支撑多边形极小
自由度冗余肩肘腕共7个自由度,冗余度高髋膝踝共6个自由度,既要支撑又要操作
接触类型多指抓握、捏取,可包络物体足底/脚面推、踩、拨,欠驱动接触
失败后果最多是东西没拿稳整机摔倒,硬件损坏风险极高
控制核心末端位置/姿态精确跟踪平衡、末端轨迹、接触力三者强耦合

所以“用脚关门”本质上是把一个操作任务塞进了一个本来就接近极限的平衡问题里。也正因如此,这个动作才能刷新行业对人形机器人能力边界的认知:过去大部分演示集中在“上半身灵巧操作”,因为躯干锁稳了,手臂就可以自由发挥;而这次直接用脚打破了舒适区,把“操作”和“平衡”焊在了同一个动力学问题里。

1.3 一个动作背后其实是三个子问题

从工程实现上拆,用脚关洗碗机能拆成三个子问题:

  1. 单脚支撑期间,怎么保证机器人始终不倒;
  2. 操作脚怎么以合适的姿态和轨迹到达门板位置,并且跟着旋转门盖的几何关系走;
  3. 足端接触门板后,怎么把力度控制在“推得上、又不撞坏门”的区间。

这三个子问题不是串行关系,而是强耦合的。足端推门的反作用力会直接影响平衡,平衡状态的变化又决定操作脚可达的工作空间,接触力最终决定关门动作能不能完成。任何一个环节单独做好都不够,必须放进同一个全身控制框架里统一求解。

2. 单腿站立不摔的底牌:全身平衡控制的三个闭环

2.1 底层闭环:高频平衡与ZMP约束

机器人“站稳”的本质,不是把关节锁死,而是让质心投影始终落在支撑多边形内。双脚站立时支撑多边形很大,单脚站立时它缩小到脚掌范围,稳定裕度成倍下降。假设整机质量60kg,脚掌有效支撑长度20cm,质心只要偏离脚心2cm,就会产生约12N·m的倾倒力矩,这已经需要髋关节持续输出侧向力来对抗了。再叠加抬腿、推门带来的惯性力和外部接触力,静态地“站住”根本不够,必须做动态平衡。

工程上常用模型预测控制(MPC)来解决这个问题:在0.5到1秒的短时域里,建立一个包含质心动力学和接触约束的优化问题,每10到20毫秒滚动求解,输出期望的质心轨迹和足端受力。控制内环通常在1kHz左右运行,用零力矩点(ZMP)误差作为反馈量,通过动力学模型反解出全身各关节的转矩。这一层的核心要求是“快”和“稳”,容不得明显的相位延迟。

2.2 中层闭环:全身运动学的任务优先级

单脚关门的控制目标不止“不倒”这一个。它同时要求“脚能碰到门”“脚能推对方向”“躯干姿态不要太难看”。如果把这几个目标全部塞进一个无差别优化问题里,数值上很容易发散,因为低优先级任务会不断和高优先级任务抢控制自由度。

所以更实际的做法是分层任务控制(task-space priority control)。高优先级的任务先占用必要的自由度,低优先级任务在高优先级任务的零空间里寻找自己的可行解:

# 全身分层控制的简化示意 priorities = [ "balance_and_contact", # 支撑脚接触力、质心位置,最高优先级 "operating_foot_traj", # 操作脚的末端轨迹与姿态 "wholebody_posture", # 关节限位、姿态平滑、运动学奇异回避 ] for task in priorities: # 将当前任务投影到前序所有任务的零空间 # 在剩余自由度上求最小二乘解 pass

分层的好处是让“平衡”和“操作”不会硬碰硬抢资源;只要平衡任务占用的自由度没有饱和,操作任务就能在剩余自由度里把脚送到指定位置。这也是为什么视频里机器人躯干看起来不那么僵硬,姿态整体很自然——它其实是把“保持好看姿态”放在了最后一级,在前两级约束都满足的前提下顺手优化的结果。

2.3 上层闭环:状态估计与外力补偿

机器人得先“知道自己站在哪”,才知道该怎么控制。这个认知来自IMU、关节编码器、足底压力传感器和视觉的融合状态估计。单腿操作时,陀螺仪和加速度计的信号里有大量运动噪声,如果直接把原始数据送进控制器,系统会抖得厉害。

更关键的是外力估计。机器人推门时,门板给脚的反作用力是外部的未知扰动,必须在线估计出来并前馈补偿到平衡控制器里。常见的做法是利用整机动力学模型、关节力矩电流和IMU数据,构造外力观测器或卡尔曼滤波器,实时估计施加在躯干和操作脚上的外力/外力矩。我在实际调试中明显感觉到,这段视频里最“反直觉”的难度其实就在这里:门没有碰到脚之前,控制系统要预测并准备应对;门碰到脚之后,系统要在几个毫秒内把外力信息送到全身控制环路里。传感器延迟10ms,单腿支撑下的稳定裕度就少一大截。

3. 从“手能操作”到“脚能操作”,变的不只是一个执行器

3.1 工作空间和自由度的重新理解

人形机器人手臂通常有7个自由度,基座固定,末端工作空间是一个不完整的球壳;腿部通常是6个自由度,但髋关节的位置会随着躯干姿态实时变化,所以腿的工作空间其实是“全身姿态的函数”。用脚操作时,我们不指望脚具备手的灵巧性——没有对指结构,能干的基本是推、踩、拨、踢这个级别。但它的价值在于把作业空间从手臂可达半径扩展到了地面和低位空间。

在厨房这个场景里,洗碗机门在低处。如果让机器人用手关门,它必须弯腰、压低躯干,视觉和重心都会跟着大范围调整;用脚关门则只需要侧身抬腿,躯干基本保持直立,视觉也不需要大幅转移。这意味着“移动+操作”之间的衔接距离大大缩短,任务规划更接近人的本能方式——能用脚带一下的门,没必要专门蹲下去。

3.2 控制框架从“上半身控制”到“全身控制”

早期人形机器人控制喜欢把问题拆开:双腿管走路,双臂管操作,躯干锁位。这个范式在“脚关门”这种任务上根本行不通——足端接触产生的反作用力会直接穿过髋关节传到躯干,必须在一个全身动力学模型里同时处理。

现在主流路线有两条:一类是基于模型的全身控制(WBC),把行走、平衡、操作统一成一个优化问题,实时求解全身关节力矩;另一类是基于强化学习(RL)的全身控制,用大规模仿真训练一个策略网络,输入本体感觉和任务状态,输出关节力矩或位置增量。前者解释性强,但依赖精确的动力学模型,换一个硬件平台基本要重新做系统辨识;后者对非线性、非精确模型更鲁棒,适合端到端训练,但奖励设计、仿真真实度和训练算力都是门槛。真实产品里往往两者混合:RL做运动生成,WBC做安全兜底。

3.3 机器是怎么“学会”用脚的:奖励工程示例

用RL训练这类动作时,奖励函数直接决定最终策略的“性格”。我在项目里看到过不少失败案例,比如只奖励“门被关上”,机器人就会慢慢演化出用躯干撞门的投机动作,策略完全走偏。所以除了正向奖励,还必须加禁忌项:

def compute_reward(state, action): reward = 0.0 # 正向项 reward += w_balance * balance_metric(state) # 质心稳定、支撑脚压力分布均匀 reward += w_distance * distance_to_door(state) # 操作脚与门的目标距离越近越好 reward += w_progress * door_angle_progress(state) # 门被推动的角度进展 reward += w_smooth * action_jerk_penalty(action) # 力矩变化越平滑越好 # 禁忌项 if body_part_touches_door_except_foot(state): reward -= 5.0 # 非脚部位接触门,惩罚 return reward

训练通常在Isaac Gym、MuJoCo之类的仿真环境里做,配合域随机化:随机化质量、惯量、摩擦系数、门弹簧刚度、传感器噪声,让策略不至于过拟合到仿真参数上。实机部署前还要做仿真到现实的迁移验证,并不是训完直接装进机器人就能跑的。

3.4 仿真与现实的鸿沟

仿真里最容易被低估的就是接触模型。MuJoCo默认接触参数偏“软”,脚碰到门时会有一定穿透量,学出来的策略在实机上会觉得“门的材质不对”;摩擦系数更是重灾区,仿真里设0.8的橡胶-聚合物摩擦,到了瓷砖地面上可能只有0.5甚至更低。门铰链的阻尼通常也是强非线性的,尤其接近锁扣位置时有一个“咔哒”突变,一体化的弹簧阻尼模型几乎复现不出来。所以行业里普遍的做法是:在仿真中大力做域随机化排查参数敏感性,再拿实机采集的少量数据对策略做微调。

4. 关门的力度是怎么“柔”出来的:足部力控与柔顺交互

4.1 洗碗机门不是恒定负载

很多人以为关门就是一个“往一个方向推固定力度”的动作,实际上洗碗机门的负载曲线很麻烦:铰链里内置了弹簧和阻尼,开门前半段弹簧力随角度变化,靠近关闭位时反力最大;最后几毫米还有一个锁扣结构,需要一定的速度和力量才能越过;越过卡点之后,门可能会被锁舌“吸”向闭合位。整条力矩曲线不是线性的,恒定推力根本玩不转。

对上一条“力大推不动、力小推飞”的失败模式,硬性位置控制也不行。门板的位置、铰链阻尼、锁扣触发点都存在误差,机器人一旦按刚体轨迹猛推,经常是门没关上,反而把门板或脚趾结构撞坏。所以必须上柔顺控制:根据实时接触力动态调整足端位置和推力方向。

4.2 力觉从哪里来

实现柔顺控制,先得有力反馈。常用方案有三种:

力觉方案原理优点缺点
足底六维力传感器直接测地面反力/接触力精度高,直接成本高,存在漂移
关节力矩传感器谐波减速器/电机端应变片接近驱动源,响应快受摩擦扰动,标定复杂
电机电流观测由电流估算输出转矩零硬件成本精度最差,只能粗估

实际工程里通常“足底六维力传感器+关节力矩传感器”一起用,再通过卡尔曼滤波融合。只靠电流估算做柔顺控制,误差大到没法用。

4.3 导纳控制用在腿上,为什么参数完全不同

导纳控制的思路不复杂:不是去硬性跟踪一条刚性轨迹,而是根据外力修正参考位置。简化公式是:

X_ref = X_desired + ΔX(F_ext / K_admittance)

外力越大,参考位置越往受力方向让,表现出来就是“柔”。手臂上做导纳控制,K_admittance可以设大一点,末端轻微偏离马上就能恢复;但腿上不行。腿的杠杆臂长,从髋到脚底的距离比肩到指尖大得多,同样的接触力在髋关节产生的重力矩扰动会放大几倍。在线调试时最直观的感受就是:手臂上能用的那组刚度参数,搬到腿上会变成“一碰就晃”,甚至引起躯干高频抖动。

所以腿部导纳控制的参数设计有三个要点:刚度要比手臂低一个数量级、阻尼比要明显加大、力信号要加低通滤波和限幅。感官上就像用一根长竹竿推门——你只能靠更“泄力”的方式来保持稳定。

4.4 实操中关于力控的几个坑

这部分真的是调出来的经验,新手很容易踩:

  • 传感器零点漂移:力传感器每次上电都必须重新标定零点。漏一次,机器人会以为地面在持续推它,平衡控制点全程偏移,姿态肉眼可见地歪掉。
  • 接触冲击尖峰:脚碰到门板瞬间,力反馈会有一个短时尖峰。不过滤、不限幅,导纳外环会把整只脚猛地弹开,动作看起来就像碰触了电门。
  • 失败状态机:如果门没推动或没关到位,必须有超时/超力判断,而不能让机器人一直重复顶门。演示里通常会用视觉确认门缝是否完全闭合,关不上就主动重置动作。

最后说句实话:视频里那段“轻柔又干脆”的关门,参数上没有任何一个值是说明书里能抄来的,全是靠真机一遍遍试出来的。标定、调参、试错,没有捷径。

5. 估值390亿背后的技术门槛:硬件、算法与数据缺一不可

5.1 硬件不是“能动的机器人”就行

普通舵机式人形机器人根本做不了这个动作,因为它在位置模式下只能硬顶,没有力矩闭环能力,更谈不上柔顺。要完成“用脚关门”,硬件至少得具备以下几个条件:

硬件模块作用为什么必须
高扭矩密度关节电机腿部侧向承重与推力输出单腿支撑时髋/踝需持续输出大扭矩维持平衡
足底/关节力觉传感接触力闭环没有力反馈就无法做柔顺控制
高性能IMU与编码器姿态和关节状态估计单腿状态下姿态噪声放大,低延迟状态估计是前提
实时计算平台跑MPC/WBC/RL推理控制周期5-10ms,算力不足就得降频降性能
视觉感知(可选)门板定位与关门确认提升任务鲁棒性,闭环确认是否关到位

这些加起来就是“估值门槛”的第一层:便宜的机器人只能做个大概,做不出“准”和“柔”。

5.2 算法栈是全团队的工程集成

算法上要同时打通嵌入式实时系统、动力学建模、状态估计、MPC/WBC或RL、视觉感知、安全监控。每一环都有专门的人在做。在我看来,这段演示背后至少有五到六个子团队在协作:一组负责腿足硬件的力矩控制带宽,一组负责全身动力学辨识,一组负责MPC/RL训练,一组负责视觉和任务状态机,一组负责实验安全与数据采集。这还没算仿真基础设施。

对个人开发者或小团队来说,即使拿到了同款硬件,从零把这条算法栈自研出来也要以年为单位。这属于“团队密度”门槛。

5.3 数据与测试的隐性成本

实机调一个“单脚关门”动作,风险很高:足端接触失误可能导致脚踝冲击、门被撞坏、机器人重心失衡摔倒。所以必须有吊装保护、软垫、安全员和急停策略。一次有效实验可能只有几十秒,但准备和清理时间是几十倍。仿真数据也不是免费的——训练一个可用的全身RL策略,需要调用大量GPU算力跑上百万帧。这些基础设施成本,决定了把demo变成稳定产品,消耗的远不只是算法工程师的时间。

5.4 这类demo真正值得被关注的地方

“用脚关洗碗机”不是纯粹的炫技,它是人形机器人“操作能力从上半身扩展到下半身”的信号。一旦腿部可以承担操作任务,后续像踢球、踩按钮、骑自行车、用脚扶住物体这类“非手部操作”都可以复用同一套全身控制框架。对行业来说,这比单个动作本身重要得多——它意味着机器人正在把“身体感知”和“控制能力”做成了平台级能力,而不只是某个实验室的孤例。

6. 想复现这个动作?先把这几个坑填平

6.1 仿真训练里最容易翻车的三个设置

如果你打算在自己的机器人仿真环境里复现“单脚关门”,最先要检查的是这三个地方:

  1. 接触参数。MuJoCo、PyBullet这类仿真器的默认接触刚度往往偏“软”。你训练出来的策略可能善于“挤”进门里而不是“推”门,在实机上第一脚就会失败。
  2. 摩擦随机化。给脚掌和地面分别设置摩擦系数区间(比如0.4到1.0),不然实机打滑会让控制器误判为接触丢失。
  3. 门铰链模型的真实度。强烈建议在真机上测一次力矩-角度曲线:用拉力计在不同开度下测维持门静止的力,拟合出一条曲线,再把这条曲线做成仿真里的门模型。用理想弹簧模型训出来的策略,实机真的不灵。

6.2 实机测试的安全节奏

真机验证千万不要一上来就全状态跑,要分阶段走:

  1. 吊挂保护下测试单脚平衡,目标先站10秒以上;
  2. 平衡闭环已稳定后,做“虚推”动作——操作脚沿轨迹走到门附近但不接触门,确认没有抖振;
  3. 调整导纳参数后,小力接触门(比如上限10N),观察躯干扰动;
  4. 逐步增加关门速度和末端力,观察锁扣阶段的冲击;
  5. 最后加视觉闭环,测试不同门缝宽度、不同关门起始角度下的鲁棒性。

每一阶段都要有人守着急停,一旦出现高频抖动,先把控制增益降下来再分析,不要扛着问题硬试。

6.3 那些容易被低估的麻烦

调试过程中真正耗时间的往往是这类问题:

  • 力传感器漂移会让导纳外环把参考轨迹慢慢修歪,对策是增加在线零点估计,或者定期重标定;
  • 门铰链的开、关力矩曲线不对称,训练的奖励函数里要分别建模,否则实机关门速度会忽快忽慢;
  • 视觉检测门板存在2到3cm的位置误差,在足端接触时表现为额外冲击力,所以不能只依赖视觉,接触后要用力觉做一次局部修正。

6.4 给想进入这个方向的朋友的建议

如果让我给一条学习路径:先在固定基座机械臂上把导纳/阻抗控制吃透,再去做双足平衡,最后才是“行走+操作”的全身融合。仿真里也建议先把“抬脚”和“推门”当作两个独立子任务分别调试,收敛后再放进同一个全身优化框架里。一步到位上全身控制,出了问题你根本不知道是哪个环节造成的。

如果让我挑这段视频里最打动我的细节,不是那只抬起的脚,而是关门最后几厘米里,机器人的躯干几乎没有任何晃动。要在那个位置做到“既没推不动、也没撞门”,背后是无数轮参数迭代:铰链曲线的标定、导纳刚度与阻尼的匹配、足底力传感器的漂移补偿、接触瞬间的滤波策略。这套东西没有任何一个环节可以靠“读文档”学会,只能在一次次摔倒、一次次重新标定、一次次看曲线中磨出来。对我来说,这种demo真正的价值正在于那些看不见的收敛过程,而不是视频里那只脚。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询