ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

启元 Q1 机器人为什么不会摔倒?平衡背后的科学,与一次 150 万次的训练实验

启元 Q1 机器人为什么不会摔倒?平衡背后的科学,与一次 150 万次的训练实验

你保持现在的坐姿或站姿时,身体正在以每秒上百次的频率做着一件事:防止自己摔倒。人类做这件事毫不费力,机器人却要为此建立整套理论——从支撑多边形、零力矩点(ZMP)到捕获点,人形机器人平衡的科学已经发展了五十多年。本文通俗讲清这套科学:静态平衡靠什么判据、人类恢复平衡的"三板斧"、机器人学界的对应方案;并用一次真实的训练实验(PPO 算法 150 万次尝试)展示"把理论变成会站立的机器人"到底难在哪。全部数据与代码开源可复现。

实验与开源仓库:https://atomgit.com/capybarala/q1-balance-lab(启元 Q1 官方模型 + MuJoCo + PPO,全部脚本与 150 万步模型开源) 理论出处:支撑多边形与 ZMP(Vukobratović 等)、平衡恢复三策略(Horak & Nashner, 1986)、捕获点(Pratt 等,2006)

前言

人形机器人正在从发布会走进客厅:2026 年,多款消费级人形机器人开始量产交付,启元 Q1 就是其中之一——88 厘米的身高、22 个可动关节,能招手、能碰拳、能跳舞。但大多数人不知道的是,让这样一台机器"站稳"背后站着一套发展了五十多年的科学:从二十世纪七十年代的零力矩点理论,到生物力学的平衡策略研究,再到今天用强化学习让机器人在虚拟世界里反复摔倒的训练方法。

这篇是这套科学的一次通俗导览,写它的起因很简单:我在没有真机的情况下,用启元公开发布的官方模型做了一个"让 Q1 学会不被推倒"的训练实验,过程里把平衡这件事的科学脉络重新学了一遍——读到的理论、踩到的坑、得到的出人意料的结局,都记录在文中。

一、平衡是被低估的超能力

先做个小实验:双脚并拢站立,闭上眼睛,感受一下脚底。你正在做的,是以每秒上百次的频率微调全身几十块肌肉,把约 60 公斤的重量稳定在一个比脚掌大不了多少的区域里。前庭系统、视觉、本体感觉三路信号汇合,小脑实时解算——这套系统让人类可以在摇晃的公交车上刷手机。

机器人没有这套系统。对一台双足机器人来说,"站着不倒"是需要从零建立的能力;而"被推之后不倒",则是一个让学界研究了五十多年、至今没有完全解决的问题。

本文先讲清这门科学的三个核心概念(都很好懂),再带你亲眼看一次训练实验:让启元 Q1 的数字分身在虚拟世界里尝试 150 万次,看看它能学到哪一步。

平衡中的 Q1:双臂展开、重心回落——对人类是本能,对机器人是一门五十年历史的科学。

二、静态平衡的判据:重心必须落在支撑多边形里

第一块基石是支撑多边形(support polygon):双脚掌与地面接触点围成的凸区域。静态平衡的判据一句话可以说完——重心在地面上的垂直投影,必须落在这个多边形之内。

支撑多边形示意:双脚接触点围成的区域就是"安全区"。重心投影在区内则稳定;一旦越界,没有任何地面反力能把你拉回来——只能摔倒或跨步。

这个判据解释了很多日常直觉:为什么单脚站比双脚难(支撑多边形缩小近一半)、为什么踮脚尖更难(多边形再缩小到前脚掌)、为什么背 heavy 包的人会不自觉前倾(把重心投影"挪回"多边形内)。

对机器人同样成立。我们在启元 Q1 的官方模型上做过一组实测:让 Q1 以位置控制方式站立(22 个关节全部锁在站立角度),然后从侧面施加 0.5 秒的推力,力度从 10N 加到 80N——

30N 以内:稳如泰山(30N 时重心偏移不到 2 厘米,还在支撑多边形内);40N 一推:直接摔倒。边界精确得像用尺子画的——因为支撑多边形判据本来就是硬几何:重心出了多边形,物理定律不允许任何关节力矩把它救回来。

三、人类的"三板斧":动态平衡的三种策略

静态判据只回答了"什么时候会倒"。真正有趣的是倒之前人做了什么。生物力学的经典研究(Horak & Nashner, 1986)发现,人类恢复平衡用的是三种策略,按扰动大小切换:

人类的三种平衡恢复策略(Horak & Nashner, 1986):小扰动用踝、中扰动加髋、大扰动直接跨步,切换是全自动的。

  • 踝策略(小扰动):身体像一根绕脚踝转动的倒立摆,靠脚踝发力把重心"兜"回来——你在公交车上急刹时身体前倾又回来,用的就是它;
  • 髋策略(中扰动):扰动再大些,脚踝力矩不够了,人会用髋部快速屈伸带动上半身反向摆动,用躯干的动量把重心拉回来;
  • 跨步策略(大扰动):重心实在兜不回来了,那就迈一步——把支撑多边形直接搬到重心要去的地方。

第三条最反直觉也最深刻:摔倒不是"没站稳",而是"没来得及换一个能站的地方"。人在被人猛推时会本能地跨出一大步,不是狼狈,而是最优解。

三种策略的原始出处:Horak 与 Nashner 1986 年发表在 Journal of Neurophysiology 的经典论文。

四、机器人的对应方案:ZMP 与捕获点

机器人力学界为同样的思想建了一套严谨的语言。

零力矩点(ZMP)——由南斯拉夫学者 Vukobratović 等在二十世纪七十年代提出——是支撑多边形理论在动态场景的推广:行走或被推时,地面反力的等效作用点就是 ZMP,只要 ZMP 始终留在支撑多边形内,机器人就不会翻倒。ZMP 是双足机器人步态规划几十年的基石。

捕获点(Capture Point)——Pratt 等人在 2006 年前后提出——更进一步回答了"被推之后该往哪跨步":把当前运动状态考虑进去,计算出一个位置,只要下一步迈到那里,就能恰好把所有动能消耗掉、彻底站稳。这个点因此得名"捕获点"(capture point)。

用生活语言总结这三代理论:支撑多边形告诉你"哪里能站",ZMP 告诉你"动态中会不会倒",捕获点告诉你"下一步迈到哪就能救回来"。

捕获点的原始定义:Pratt 等人 2006 年提出——下一步迈到这个点,动能恰好耗尽、彻底站稳。

而本文的实验恰恰是这些理论的一个反面注脚:我们训练的策略只会第一代方案——像一根会小幅抖动的棍子那样调整关节,既不会计算捕获点,也不会跨步。这就是它扛不住 40N 的理论解释。

五、150 万次尝试:机器人如何训练

理论说"该跨步",但让神经网络自己悟出跨步,是另一回事。我们用强化学习做了一次实验:在 MuJoCo 物理仿真里,让 Q1 的数字分身从零学"被推后不倒"。

5.1 四个分身同时训练

训练最怕低效:一个分身摔倒后要重置重来。我们让4 个数字分身同时训练,各自的经历汇总给同一位算法消化——相当于把训练效率翻了四倍。

5.2 训练算法:PPO

负责训练的是一种叫PPO的算法(Proximal Policy Optimization,近端策略优化)。它的工作方式:每隔一小段时间,把 4 个分身最近的尝试全部回看一遍——哪些动作得了高分、哪些纯属乱动——然后小幅调整策略的"行为倾向"。

近端策略优化(Proximal Policy Optimization)来自 Proximal Policy Optimization Algorithms(Schulman et. al., 2017)这篇论文,是当前最先进的强化学习 (RL) 算法。这种优雅的算法可以用于各种任务,并且已经在很多项目中得到了应用,最近火爆的ChatGPT就采用了该算法。

关键词是"小幅"。PPO 的核心主张是不做激进改革:每次调整都限制在"离上一版策略不远"的范围内,宁可慢一点,也不让策略大幅震荡。这种稳健风格让它成了目前训练机器人最常用的强化学习算法之一。

5.3 核心训练代码:二十行启动一次训练

整个训练的主循环,核心配置压缩后不到二十行:

env = DummyVecEnv([build_env for _ in range(4)]) # 4 个分身并行 model = PPO( "MlpPolicy", env, # 策略网络:多层感知机 n_steps=512, # 每次收集 512 步经验 batch_size=2048, # 小批量更新 n_epochs=10, # 每批经验回看 10 遍 learning_rate=3e-4, # 学习率:小步慢走 ent_coef=0.0, # 不额外鼓励随机探索 gamma=0.99, # 未来奖励的"折扣率" device="cpu", # 纯 CPU 训练 ) model.learn(total_timesteps=1_500_000, callback=ProgressCallback(total))

每个参数都值得一句人话解释:n_steps=512是"每 512 步做一次小结";gamma=0.99表示"眼前的 1 分比 100 步后的 1 分值钱"——正是这个折扣让机器人优先保证"现在别摔";ent_coef=0.0表示不鼓励它故意乱试(我们希望它稳健)。这些超参数没有标准答案,本文的取值是数次试错的结果。

5.4 循序渐进:从浅水区到深水区

推力难度是精心编排的。想象教游泳:没人会第一天就把孩子扔进深水区。训练中的推力安排同理——

  • 训练初期:几乎没有推力,先专心学会"站"这件最基本的事;
  • 中期:随机方向的推力开始出现,力度从约 12N 起步;
  • 后期:推力越来越强、越来越刁钻(方向随机),直到超过 60N——远超它作为"锁死木棍"时代能扛住的极限。

这种设计有个学名叫"课程学习"(curriculum learning):先在小扰动里建立基本功,再逐级加码。和游泳教练把学员从浅水区慢慢带到深水区,是同一个道理。

5.4 45 分钟后的评估

4 个分身并行、约 45 分钟的 CPU 时间、150 万步决策之后,用与基线实验完全相同的协议(0.5 秒侧推、力度梯度)重新评估。结果一句话概括:

它扛住了 30N——和"锁死法"打平;但在 40N 面前,两个都倒了。

强化学习没有输给位置控制,也没有赢它:它用 150 万次尝试,把自己练到了与"天生锁死"相同的静态水平,但动态恢复还没学会。

训练后策略被 40N 推力击中的实录(物理仿真回放):它在推力下大幅调整姿态,最终仍未恢复。

六、为什么这么难:理论五十年前就有,做到是另一回事

诊断发现策略并非摆烂:被推时它在大幅、积极地调整动作(变化幅度覆盖全程),但调整没有有效的方向感——学到了"挣扎",没学到"捕获"。结合理论看,这次实验恰好演示了从理论到工程的鸿沟:

  • 捕获点理论要求策略"看见"自己的运动状态并计算落足位置——而我们的实验只给了它原始终感信号,让它自己从摔倒里悟;
  • 人类的踝-髋-跨三策略是分层自动切换的——我们的实验用单一策略硬扛所有扰动;
  • 理论假设"可以迈步"——Q1 的实验环境里,跨步意味着单脚支撑的瞬间稳定,这又回到 ZMP 约束的严格解算。

理论是地图,工程是走路。地图五十年前就画好了,走过去每一步都是算力、奖励设计与训练时间的账。实验的完整数据、脚本与 150 万步模型已开源(https://atomgit.com/capybarala/q1-balance-lab),三个改进方向(更大的动作权限、恢复过程的奖励梯度、更干净的状态观测)也写在实验笔记里——接手的人可以少走我们已经走过的弯路。

七、最后一句话

双足行走的机器人曾经只存在于实验室与科幻片里,如今它们开始走进客厅、门店与展厅。让它们站稳的,不是某一次灵光乍现,而是从支撑多边形到捕获点、从生物力学到强化学习,一代代研究者把"不摔倒"这件事拆成了一块块可计算的科学。

下一次看到机器人稳稳地走过起伏的地面,不妨想一想:在那段平稳的画面背后,是它(以及它的训练者们)在你看不见的地方,摔过的成千上万次。

参考资料

  1. 启元机器人开发者社区(官方 q1_v3 模型包):启元机器人开发者社区 · 一站式具身智能研发平台
  2. Vukobratović M., Stepanenko J. On the stability of anthropomorphic systems. Mathematical Biosciences, 1972.(ZMP 概念的奠基工作)
  3. Horak F. B., Nashner L. M. Central programming of postural movements: adaptation to altered support-surface configurations. Journal of Neurophysiology, 1986.(踝/髋/跨三策略)
  4. Pratt J., et al. Capture Point: Per Step Prediction and Control of Balance. International Journal of Robotics Research, 2006.(捕获点)
  5. 本文实验开源仓库 q1-balance-lab:https://atomgit.com/capybarala/q1-balance-lab

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进