双层控制:大模型之外让人形机器人站稳的底层技术 2025年人形机器人算是彻底走到聚光灯下了。但如果你真去刷过那些demo视频会注意到一个很有意思的现象这些机器人讲起话来头头是道大模型加持下能听懂自然语言、能拆解任务甚至能解释自己“为什么要这么走”。可一旦脱离脚本面前有个台阶、被人推一下、地面稍带坡度它当场就可以表演一个“脸朝地”。明明大模型连厨房做菜这种长链条任务都能规划得明明白白为什么一个最简单的“站住别动”都做不好这个问题这两年我被问到的次数比“机器人是不是要取代人类”还多。答案其实不玄乎你把“决策”和“物理稳定”放错了位置。真正让一个人形机器人立住的不是那个会规划的大脑而是一套跑在毫秒级实时循环里的底层控制。这套分工行业内通常就叫双层控制。这篇文章我就从这个问题出发把“大模型负责什么”“底层控制负责什么”“它们之间怎么配合”讲透顺便分享一些我在实际调试机器人时踩过的坑和排障经验。1. 大模型解决的是“做什么”不是“怎么站稳”1.1 大模型的真实能力边界从Token到现实大模型的本质是一个在超大规模文本/图像数据上训练出来的概率模型。它最擅长的事情是把一段输入自然语言指令、视觉画面、传感器描述映射成一段有意义的符号输出比如一段话、一个JSON格式的任务清单、一组坐标点。拿“帮我把桌上的苹果拿过来”这句话举例。接入视觉语言模型后机器人确实能“看到”桌上的苹果识别出苹果的三维坐标理解“拿过来”这个意图然后输出一个高层计划走到桌边、伸出右手、抓取苹果、转身、走回。这一整套过程属于任务规划和语义理解行业里叫Task Planning或Task-Level Reasoning。这确实是突破性的能力但请注意大模型输出的是一串符号不是一条能直接驱动电机的指令。它告诉机器人“走过去”很好但没告诉你腿要先抬多高、脚落到什么位置、重心要不要先往左偏、落地瞬间踝关节该用多少力矩缓冲。一句话大模型工作在token的世界机器人工作在牛顿力学的世界。1.2 规划输出不等于物理执行很多人把“大模型规划”和“机器人执行”混为一谈这是理解这个问题的最大误区。给你一个路线图上面画着从A点到B点的步行路径你就能走过去了对不对对但你之所以能走不是因为这张图而是因为你的小脑、前庭系统和肌肉骨骼系统在每时每刻做着高速闭环调节——前脚落地瞬间重心偏了半厘米你的脚踝会立刻补偿地板微滑你的髋关节会自动调整姿态。这些动作你的大脑皮层根本不会参与也不该参与。机器人也一样。大模型是那个绘制路线图的“大脑皮层”而能否沿着路线走稳取决于一套完全在底层工作的“反射系统”。这个底层系统必须处理动力学、接触力、力矩约束、传感器噪声、外部扰动而且所有这些计算必须在几十毫秒甚至几毫秒内完成闭环。说白了规划解决的是“做什么”控制解决的是“怎么做得稳”。二者缺一不可但互相替代不了。1.3 控制频率这道坎大模型就是跨不过去聊到实时控制就绕不开频率这个概念这是双层控制架构存在的第一物理原因。人形机器人的关节电机电流环往往跑在20kHz以上机器人身上的IMU惯性测量单元典型的输出频率是1kHz底层全身控制算法通常以500Hz到2kHz的速率运行强化学习策略推理一次动作一般需要1到5毫秒而在线模型预测控制MPC即使简化后也要在10到30毫秒内完成一次优化求解。再看大模型。一次涉及长上下文的推理延迟轻松达到几百毫秒甚至数秒。哪怕是最轻量的端侧模型要输出一个有用的高层决策也至少需要几十毫秒。把几十赫兹都跑得艰难的大模型放到需要1000赫兹更新的控制回路里这就相当于要求一个深思熟虑的哲学家去做一位在电光石火间反应的世界级守门员。物理上就不可能也不应该。2. 人形机器人“站不稳”背后的动力学原理2.1 站立从来不是一个静态过程人体的站立从生理学上讲就是持续的“跌倒-纠正”小循环身体前倾一点点脚跟肌肉立刻发力把重心拉回来重心稍微后移踝关节马上收紧。你知道人单脚站立时为什么难吗因为支撑面积骤然缩小留给你纠正的“安全余量”变窄了需要更高频率和更精准的肌肉调节。人形机器人的“站”也是同一个物理命题。如果机器人真的像一座雕像一样纹丝不动地站着那叫静平衡只在数学上成立。真实环境里脚底有微小的力扰动、质心建模有误差、关节角度反馈有噪声机器人随时都在偏离目标姿态。控制器要做的事情就是不断测量这种偏离并施加反向控制力把它拉回来。2.2 ZMP与支撑多边形必须理解的力学基础做双足机器人一定会遇到一个概念零力矩点英文叫Zero Moment Point缩写ZMP。先说结论只要机器人脚底地面反作用力的合力作用点保持在双脚与地面接触所形成的支撑多边形内部机器人就不会翻倒。如果ZMP跑到了支撑多边形边缘甚至外面结果就是摔。这里需要补一个重要的直觉人形机器人的底盘不是一个“固定底座”而是一个需要动态维持的区域双脚交替时支撑多边形甚至会变成单脚的小范围。所以控制器要在每一瞬间计算当前ZMP在哪质心速度朝哪飞下一步该把ZMP挪到哪个位置去“接住”将要偏移的质心。有一个经典的线性倒立摆模型LIPM可以很直观地解释这个原理把整个人抽象成一个质点质心连在一根无质量的“腿”上脚底和地面的接触点看作支点。质心的水平加速度近似正比于质心水平位置与ZMP位置的差值。也就是说控制器通过移动ZMP这个支点就可以间接命令质心加速度从而控制机器人的姿态。好关键来了**这个“移动ZMP”的动作本质上是一个毫秒级的连续微分决策问题它要求控制器持续给出具体的接触力分配方案。**大模型哪怕能把“把ZMP再往左挪5毫米”这种话講得滚瓜烂熟它也算不出在当下摩擦力锥约束下各个脚趾关节需要施加多大的力矩。2.3 双脚站立的微妙之处摩擦力锥与单向约束为什么人形机器人会“站着站着突然滑倒”因为脚底力是要服从物理接触约束的。机械臂末端在空间里自由运动动力学比较简单想往哪发力往哪发。但双脚站在地面上情况完全不同地面只能给脚一个向上的支撑力不能向下“吸”这意味着接触力的法向分量必须大于零同时摩擦力的大小必须在摩擦锥范围内否则脚底就会打滑。此外接触点不能产生绕Z轴过大的力矩导致脚底翻转。底层控制器必须实时求解一个带这些硬约束的优化问题。比如全身控制WBC本质就是一个二次规划QP问题目标函数是尽量让机器人跟踪期望运动同时必须满足接触力约束、关节力矩上限、关节位置限位。这需要数值优化求解器在这个毫秒级窗口里算出最优解。一旦上层模型忽视了这些约束输出的“动作意图”再完美底层也无法执行。这也是为什么很多团队在给机器人加装大模型后第一件事不是让它变聪明而是先加一层“物理可行性的过滤器”。3. 双层控制到底谁在负责什么3.1 机器人的经典分级架构机器人控制圈有个老生常谈的分层架构在几十年前就已经明确了任务规划层负责“做什么”顶层拆分任务运动规划层负责“怎么动”生成轨迹、路径、落脚点轨迹跟踪控制层负责“怎么稳”跟踪期望轨迹并抑制扰动伺服执行层负责“怎么出力”电流环、力矩闭环大模型的介入一开始盯上的其实是任务规划层和部分感知功能。它取代的是人去手写任务流程树的行为而不是取代伺服层那种高频计算。所以千万不要认为“上了大模型底层控制就能省掉”。正好相反越是聪明的上层规划越是需要一个稳如老狗的底层来兑现。否则计划得越宏大摔得越彻底。3.2 底层控制在毫秒级战场里做的事把底层控制展开看至少有四件核心工作状态估计每毫秒融合IMU、关节编码器、足底力传感器数据用误差状态卡尔曼滤波ESKF等方法实时估算机器人的三维姿态、角速度、线加速度、质心位置和速度。步态生成与落脚点规划根据上层给出的目标方向和速度生成合理的步态周期规划每一步的落脚点。注意这一步虽然叫“规划”但它是在体系内部的实时反馈循环里跑的一般频率也是几十到几百赫兹。动力学最优控制用MPC或WBC计算期望的关节力矩。比如MPC会以当前状态为起点预测未来0.5到1秒的轨迹同时优化出最优的质心加速度和ZMP轨迹WBC再把ZMP轨迹转化成每个关节的实际力矩指令求解一个QP问题。执行与补偿将期望力矩输出到电机驱动器并处理关节摩擦、电机延迟、弹性变形等非理想因素必要时叠加扰动观测器。这一整套东西全部在人和机器人都不感知的毫秒级节奏里持续运转。它才是“站得住”的真正功臣。3.3 为什么不能直接让大模型输出关节力矩这个问题业内称为“端到端大模型接管控制”听起来很美好但至少现阶段有几道硬墙第一是可解释性和可靠性。大模型是概率模型同样的输入给两次输出可能不完全一样。机器人关节力矩控制绝不允许随机性——上一次决定踝关节发200牛米下一次同样的状态发20牛米机器人当场就摔。第二是身体模型缺失。大模型训练时并没有见过你家这台机器人的质量分布、转动惯量、关节摩擦力矩、结构弹性。它不知道“这个电机的峰值扭矩只有80牛米”不知道“这条腿的第二个关节在前伸时会碰到限位”。让它直接生成力矩无异于让一个从没见过钢琴精准闭着眼睛弹肖邦。第三是梯度爆炸式的延迟。别忘了控制回路是闭环的力矩输出之后传感器数据变化状态更新下一轮控制指令必须马上跟上。大模型几百毫秒的延迟意味着在这个延迟窗口内机器人已经按错误的力矩加了半天的力早就躺地上了。所以现实中的主流做法是把大模型用在高层认知把低层物理控制完全交给传统控制或者强化学习策略形成双层控制架构。4. 一次完整任务的链路拆解4.1 从自然语言到关节力矩的完整链路我们拿“去厨房帮我拿一瓶水”这个任务来拆解第一环感知与理解。视觉语言模型VLM接收摄像头画面和语音指令识别出厨房里的“水瓶”输出其在机器人坐标系的粗略三维位置并判断它是可抓取的。这一环时延在几百毫秒量级但没关系因为它只做一次。第二环任务规划。大模型将“去厨房拿水”拆成子任务序列导航到厨房区域、定位桌面上的水瓶、伸出右臂抓取、收回手臂、返回起点。它还顺便规划了失败分支比如“如果水瓶没被识别到切换视觉重检”。这依然是符号层面的东西。第三环运动规划。运动规划器把“走到厨房”翻译成一串具体的落脚点序列和全身轨迹右腿迈30厘米左腿跟上25厘米髋关节预旋转多少度手臂保持什么姿势以维持质心位置。这一层在几十赫兹下运行已经非常接近具体动作了。第四环全身控制与力矩分配。MPC计算出每个时刻的期望质心轨迹与ZMP位置WBC基于逆动力学把期望的接触力分配到每条腿、每个关节上得到关节力矩。这一层在千赫兹级别运转。关节电机再把力矩换算成电流指令完成物理执行。第五环状态反馈与闭环更新。动作执行期间IMU和编码器不断告诉控制器“我现在姿态偏了”“重心在向左移”控制器立刻在下一轮计算中修正力矩。整个环路每毫秒都在自我更新。4.2 接口设计两层怎么相处才不吵架双层控制能不能跑好接口设计比任何一层的算法都重要。我的经验是五个字上层出意图下层出动作。大模型层输出的永远是一组宏语义的目标而不是一组关节角度。比如“以1.2米/秒的速度走到厨房门口”是合理接口而“左髋关节角度从0.3改到0.5”就是越界。中间需要一层干净的意图翻译器把大模型的语义指令往哪走、拿什么、多快转换成运动规划器和WBC能理解的参数目标点坐标、参考速度、导航窗口。这层翻译器还负责过滤大模型的输出噪声——防止它输出一个在物理上根本不可达的坐标。另外一件特别容易踩坑的点意图切换的平滑处理。大模型从“走动”突然改为“原地停止”如果直接把运动指令切断底层惯性会把机器人往前甩出去。正确做法是让上层意图经过一个速率限制器或轨迹生成器逐步过渡到新目标。这个过程我见过太多初学者忽略了结果机器人被“自己人”的决策晃倒。4.3 仿真到真机移植时的双层配合要点现在很多人形机器人团队的下一步是在仿真环境里训练强化学习运动策略再部署到真机。这个过程叫sim2real同样离不开双层控制的思路。强化学习策略网络通常期望输入机器人的关节角度、角速度、IMU姿态信息输出目标关节位置或者目标关节力矩。这个策略本身运行频率往往不高常见的只有50到200Hz。如果直接把100Hz的策略输出接到2000Hz的伺服环上中间必须有平滑器或者插值器否则控制指令会出现台阶式跳跃表现为关节“哆嗦”。更关键的是仿真里训练出来的策略往往“无比相信”机器人本体。如果仿真时没做充分的域随机化真机上一个微小的电机延迟、一个齿轮间隙就会让策略崩溃。我之前见过一只“仿真战神”——在Isaac Gym里跑得虎虎生风一上真机往前迈了半步就趴下原因就是没有随机化仿真过程中电机的响应时间常数和腿部关节阻尼。再补充一点实际心得真机调试时不要一上来就全速跑。先在底层控制器里把“原地踏步”调稳再加“慢速行走”让上层规划器的期望速度从0.1米/秒开始逐步提升。很多团队跳过这个步骤把高层大模型的“全速奔跑”指令直接丢给没调试好的底层结果当然是一场灾难。这个坑我自己就花了两周才爬出来。5. 实战排障站不稳的五个典型现场5.1 现象一站得好好的人一推就倒这是最典型的“站不稳”现场。可能的原因其实很集中首先是踝关节力矩饱和。机器人两腿的踝关节扭矩有限如果质心偏移已经很靠边缘底层控制器再怎么请求扭矩电机也出不了那么多力。此时机器人会感觉“想撑却撑不住”顺着推力方向倒下去。排查方法看WBC求解后输出的踝关节力矩是否长期顶到电机峰值。如果是要么缩小支撑多边形漂移的限制让质心更早回调要么用MPC把预测时域调长提前一两秒开始预防性重心纠正而不是等ZMP已经到边缘了才紧急发力。其次是状态估计延迟。IMU和编码器数据都要经过滤波滤波越大信号越平滑但滞后也越大。滞后会让控制器对即将到来的失稳“反应慢半拍”。可以适当提高滤波器带宽或者采用预测补偿但要注意噪声会跟着变大需要权衡。5.2 现象二走路时左右摇摆像喝了半斤酒这种问题往往不是底层动力学算错而是质心估计和步态节奏不匹配。比如机器人上半身质量估计偏大控制器会认为质心偏移量比实际更大动作就变得过分谨慎或者走路频率和WBC的调节带宽不匹配每一步的横向摆动都在放大误差。我的排查顺序是先看状态估计器输出的质心加速度曲线有没有明显高频毛刺再看落脚点规划是否跟步频产生了共振。常见修法是降低步频、给质心横向位置加一点阻尼项或者用机器人全身的姿态控制器来稳定上身。最让我印象深刻的是一次调试机器人左一步右一步地走成“之”字最后发现是视觉感知出来的桌面目标坐标和IMU姿态数据的坐标系没对齐质心全程偏移了几厘米。这种低级错误数据流图一画十秒就能发现但初期排查时是真想不到。5.3 现象三上层规划好了下层执行时“发呆”这是加入大模型后最多见的新问题。上层已经解析完任务输出了一条清晰路线但底层执行的时候机器人在原地顿了半天甚至干脆罢工。多数情况是上层输出的目标和底层控制器对目标的可达性判定不一致。比如大模型说“从桌面拿水杯”但这个水杯的坐标超出了机械臂的物理可抓取范围又或者大模型输出的行走速度是每秒3米而底层控制器设置的极限是每秒1.5米这会触发执行器的安全拒绝逻辑。解决思路很简单一定要在这两层之间加一个可行的检查器。这个检查器对上层输出做约束验证——目标是否在可达空间内、速度是否在允许范围内、步态周期是否可行。不可达就向上层反馈“需要换个方案”而不是把不可能的任务硬塞给控制层。另外就是异步问题。大模型推理一次可能要一两秒底层控制是连续运行的。如果大模型偶尔一次输出慢了底层等待期间的控制指令是什么必须有一个预案要么保持上一轮计划不变要么自动切换到待机安全步态。最忌讳的就是直接把控制器挂起等上层那等于解除武装等指令非常危险。5.4 避坑速查表调试顺序与参数方向常见现象优先排查方向常用参数调整备注一推就倒踝关节力矩是否饱和增大踝关节限位余量、MPC预测时域加长先看力饱和再调控制参数高频颤抖状态估计噪声/增益过高降低WBC比例增益、增加观测滤波分清是抖动还是真失稳低速摇晃质心估计偏倚校准质量分布、提高质心观测权重检查坐标系对齐sim2real崩溃仿真随机化不足增大域随机化范围、加入延迟模拟先调底层别动上层策略上层规划和底层执行脱节缺失可行性检查增加约束校验器、设定目标范围接口层不要写过深的业务逻辑指令切换摔倒意图切换无过渡加入速率限制器、轨迹平滑器所有高层指令都要过这一层这张表是我自己团队在调试中积累的简化版实际场景千差万别但排查思路可以复用先状态估计再底层动力学然后运动规划最后才去怀疑大模型规划层。顺序反了耗时翻倍。6. 双层控制之外大模型正在如何渗透机器人6.1 端到端尝试视觉语言动作模型VLA现在的学术圈和工业界并不是没有人尝试把两层合并。以视觉-语言-动作模型VLA为代表的一类工作试图让大模型直接从视觉和语言输入预测动作输出越过显式的任务规划层。但细看这些系统的落地情况会发现所谓的“动作输出”大多数时候是高层动作原语端口——比如一个离散的动作token“向前走”“抓取红色物体”“蹲下”。真正把这些原语转化成电机力矩的依然是那一套MPC和WBC或者是经过域随机化训练的RL运动策略。也就是说VLA模型压缩掉的是任务规划层和一部分运动规划层的显式耦合但底层高频物理控制并没有被省掉。因为底层控制面对的不是符号问题是实打实的力、摩擦、接触和惯性。这一点目前还没有任何一种大模型架构能绕过。6.2 我认为更务实的演进方向技能库加模型编排如果你问我这几年做机器人控制最大的感受我会说别追求让大模型掌握所有技能而是让它学会调用技能。更有效的做法是把机器人已有的底层能力封装成一个个“技能”——稳定站立、双足行走、爬坡、跨越障碍、灵巧抓取。每个技能背后都是一套经过充分验证的单双层控制代码。大模型要做的是理解任务后以正确的顺序和参数去编排这些技能。这就好比一个导演不需要自己会演戏、会走位、会吊威亚但他必须知道手下的演员谁能演什么哪个场景该上哪个演员。大模型做完分镜每一个“演员”都由底层的专业控制算法剧组来执行。这样既发挥了大模型在跨任务理解上的泛化优势又保住了底层控制在物理稳定性上的可靠性。我甚至建议想入行这个方向的新人别急着啃大模型API先把MPC、全身控制和状态估计这套底层体系吃透。我见过太多人把接口一接、大模型一通就发朋友圈结果机器人一摔连是上层意图错了还是下层力矩饱和了都分不清。两种能力都能掌握的人才是未来把双层控制真正做好的主力。6.3 双层控制还缺什么一个现实的技术缺口最后说一个我在实操中反复惦记的缺口就是上下层之间缺失的“身体-任务共识”。大模型对任务的描述往往是离散的、语义化的但底层控制面对的世界是连续的、物理的。比如大模型说“走过去把箱子抬起来”它并不会想到箱子重20公斤会导致重心前移多少也不会知道地面是瓷砖还是地毯、摩擦系数差多少。这些信息大模型是缺失的。未来如果大模型能内嵌一个可微物理世界模型在做规划的同时能模拟评估每一步对底层受力的影响那双层控制的接口会平滑很多。一个可能的做法是把机器人动力学模型、支撑多边形约束、接触摩擦锥作为一种“物理损失”接入大模型微调环节让它在训练时就学会权衡动作的物理可行性。这个方向目前还比较初步但我判断会是接下来一两年比较热的研究线。作为长期做底层控制的老兵我乐于看到大模型给这个行业带来新的想象力。但有一点必须清醒站在地面上的人形机器人最终是要和牛顿力学打交道的。无论上层模型多聪明底层那套毫秒级反应和物理约束处理都不会消失只会越来越轻巧、越来越自动化。而双层控制的意义就是让聪明的大脑和稳重的身体各就各位。