首页 / 资讯中心 / 文章详情

宇树机器人二人转背后的MPC:模型预测控制如何实现动态双足平衡

宇树机器人二人转背后的MPC:模型预测控制如何实现动态双足平衡 ★ FEATURED ARTICLE
不知道你们刷到宇树机器人那段二人转视频时是什么感受我的第一反应是这动作比我见过的大多数舞者都协调。持续旋转、重心快速交换、双臂与下肢姿态的同步修正整个过程看不出明显顿挫也没有那种机器人特有的机械僵硬感。弹幕里一片丝滑但真正做过机器人控制的人会明白这种看似随意的动作背后藏着的是整个运动控制领域最核心的难题之一——动态双足平衡。而让这一切从能走变成能跳、能转、能应对未知扰动的关键就是标题里那个词MPC模型预测控制Model Predictive Control。这篇文章我就以这个动作为切口把MPC这套方法掰开揉碎讲讲它到底在解决什么问题、是怎么工作的、为什么它能比传统控制更适合这类场景以及在真机部署上还有哪些外人看不到的坑。1. 一对二人转动作为什么成了人形机器人的照妖镜1.1 双足机器人的核心难点不是走而是不倒人形机器人的双足结构本质上是一个高自由度、强耦合、非线性的欠驱动系统。这句话翻译成人话就是全身几十个关节各自有各自的角度和力矩它们之间相互影响而且脚的支撑面积很小不像四足机器人四条腿天然稳定也不像轮式机器人压根不用考虑重心掉出支撑多边形之外。大多数人对人形机器人运动的印象还停留在能走两步的阶段觉得平衡就是个反馈问题——倾过去了就往反方向顶一下。但实际操作中你会发现静态站稳都算简单难的是在动态运动过程中保持平衡。二人转这个动作尤其如此它包含了几个要素连续转向导致质心轨迹是一个持续变化的圆弧而不是直线双足交替支撑单腿支撑时段重心要稳定转移到支撑脚正上方附近双臂摆动不仅仅是做动作更是作为角动量调节器在参与平衡速度变化和转向角速度的耦合让线性化模型变得不再可靠我用一个比较直观的比喻来解释走直线就像骑自行车慢速直线巡航方向偏差不大稍微修一修就行二人转这种旋转动作则像在原地绕桩骑行你必须提前规划好把手角度、车身倾斜和踩踏力度等车子歪了再补救早就连人带车摔地上了。MPC在机器人领域能够崛起根本原因就是它具备提前规划的能力。1.2 丝滑的反面不是抖而是不敢动很多没有接触过机器人控制的人会把丝滑理解成简单的平滑滤波——把关节加速度限制一下、把指令值低通滤波一下。这个理解在低速场景下勉强能用但在剧烈动态动作中完全行不通。你想象一下如果只是简单限制加速度那机器人在快速转身时身体重心往一边偏了控制器不敢快点把重心拉回来结果就是动作迟疑越迟疑越容易失去平衡。传统控制里常见的做法是把安全放在第一位用保守的增益、严苛的限幅让机器人不敢动代价就是动作僵硬。宇树的这段二人转妙就妙在它敢动而且动得又快又稳。这说明它的控制系统不是简单的维护稳定而是在主动地、前瞻性地管理不稳定——这正是MPC的核心思想我允许系统暂时偏离平衡点因为我知道未来几步的走向我可以把这个偏离纳入总的成本函数里规划出一条最优轨迹让系统一边运动一边保持动态稳定。2. MPC的底层逻辑和走一步看一步的传统控制彻底划清界限2.1 预测、优化、执行然后重复MPC的三板斧MPC全称Model Predictive Control中文一般翻译为模型预测控制。它的核心思路用一句话说就是用一个预测模型在当前时刻模拟未来一段时间的系统走向找出一条最优的控制序列但只执行第一步然后到了下一个时刻拿到新的状态测量值重新再算一遍。这三板斧拆开来看是这样的预测模型你需要一个能描述机器人动力学或运动学的数学模型告诉控制器在某个状态下施加某个力矩系统未来会变成什么样子。滚动优化设定一个成本函数把你关心的目标都量化进去比如重心偏离越小越好、关节力矩越小越好、末端轨迹误差越小越好然后通过优化算法找出未来N步内最优的控制序列。反馈校正算出最优序列后只执行第一步等到了下一个控制周期用传感器实测的位姿数据来更新状态然后重新优化。这样可以消除模型误差和外界扰动导致的预测偏差。这和传统控制的本质区别在哪里传统PID或者LQR这一类反馈控制器本质上是根据当前误差来反应误差大就加大力度误差小就减小力度。它们的注意力在当下没有对未来的直觉。MPC则在每一个控制周期内都在解一个短期的开环最优控制问题它是在时间轴上思考和决策的。2.2 一个直观例子MPC vs PID 开车的差别为了让完全不熟悉控制理论的朋友也能理解我拿开车做类比。PID控制的司机是什么样的他盯着当前的车道偏移量偏移大了就猛打方向盘偏移小了就松一点全程下来方向盘会不断修正车子走的是S形轨迹速度一快还会因为反应滞后冲出车道。MPC控制的司机则是这样的他先看前方几百米的道路情况脑子里有一个车辆动力学模型知道打多少方向盘车子会在未来几秒内到达哪个位置然后他计算出一条平滑的轨迹既要保证不压线又要保证乘客舒适再把这个计划转化为实际的方向盘操作。到了下一个视线范围他又重新评估位置偏差微调方案。人形机器人做二人转动作本质上就是这样一位看得远的司机。它必须知道未来0.5秒到1秒内自己的重心会往哪偏提前把髋关节、踝关节甚至手臂动作安排好而不是等重心真的偏了再去纠正。2.3 MPC的时域走一步看几步才算合理这里有一个非常关键的概念——预测时域prediction horizon也就是一次优化要看未来多长时间。时域的选取直接影响控制效果和计算开销。时域太短比如只看未来0.1秒那MPC的优势就和PID差不多了等于每步都在短期救火预测不到重心的长期趋势二人转那种持续转向时的预倾斜动作就安排不出来。时域太长一是计算量爆炸机器人控制周期通常只有1kHz甚至更高你得在1毫秒内解完一个优化问题时域长了根本算不完二是模型误差会累积预测越远越不准反而导致控制效果变差。宇树这类产品在跑MPC时预测时域通常选在0.5秒到1.5秒之间步长在10到50毫秒左右。这个区间兼顾了看得够远和算得过来。而且重要的不是时域本身有多长而是预测模型要足够准——模型越准同样的预测时域下效果越好这也引出了MPC里最关键的工程环节建模。3. MPC在宇树这类人形机器人上是怎么搭骨架的从模型到求解器3.1 全模型MPC还不现实业内主流是简化模型分层次控制理论上MPC要做到极致精细应该对机器人的完整动力学模型做预测优化也就是把几十个关节的自由度全放进优化变量里。但现实是残酷的全状态动力学模型高度非线性而且约束条件极其复杂在1毫秒级的控制周期内根本解不出来。所以业内的主流做法是分层控制这也是我会在踩坑部分重点强调的思路上层用简化模型跑MPC把机器人的复杂肢体简化为一个质心模型CoM运动学模型或者线性倒立摆模型LIPM这个模型用三个质点或一个倒立摆来描述机器人整体的重心动力学。MPC在这么简单的模型上算出未来一段时间的质心运动轨迹和零力矩点ZMP轨迹。下层用全身控制WBC把质心轨迹映射到关节拿到上层算出的质心轨迹之后下层控制器再结合当前实际姿态把质心运动分配到每一个关节的力矩指令上保证腿部、手臂、躯干协同完成这个质心运动。这个上层出战略、下层出战术的模式是人形机器人运动控制里最常见也最实用的架构。MPC不是直接告诉每个关节该出多少力而是告诉整个身体你的重心应该往哪走具体怎么走到由全身控制来完成。3.2 简化模型的关键取舍倒立摆模型为什么够用MPC的预测模型选择是整个控制链路里最考验功力的地方。宇树这类机器人上最常用的是线性倒立摆模型LIPM。它的基本假设是把机器人的全部质量集中到一个点质心这个点到地面的连线由一条虚拟的无质量腿支撑腿部长度可以自由变化但质心高度保持恒定。这个假设显然和真实机器人差距很大但它抓住了双足运动的核心矛盾——质心的水平运动和地面反作用力之间的关系。在这个模型下机器人的水平质心加速度和ZMP位置有非常简洁的线性关系x(t) g / h * (x(t) - p_zmp(t))其中g是重力加速度h是质心高度x是质心水平位置p_zmp是ZMP位置。ZMP可以通俗理解为地面上压力分布的中心点人体和双足机器人能保持稳定的充分条件就是ZMP落在支撑多边形内部。正因为这是线性模型MPC的优化问题可以转化为一个二次规划QP问题求解非常高效。很多做控制的工程师一听到QP就会觉得心里有底了因为这是一类成熟、可靠、工程化程度很高的优化问题有现成的开源求解器可以用实时性也有保障。3.3 姿态落地的具体环节MPC不只是算下来还要传下去在真正实现的时候MPC控制器要做的事比理论描述多得多。每一步控制周期大概流程是这样的通过IMU和关节编码器获取当前躯干姿态、角速度、各关节角度、足底力反馈。用状态估计器融合这些数据估算出当前质心的位置、速度和ZMP位置。把当前状态作为MPC的初始条件结合用户指令比如旋转速度每秒90度和预测模型算出未来N步内的质心轨迹和ZMP轨迹。将质心轨迹转换到全身控制层结合当前姿态、接触状态用全身动力学求出各关节力矩。力矩指令以至少1kHz的频率下发到伺服驱动器电机执行。在这个流程中最容易被忽略的其实是第2步——状态估计。MPC算得再好如果输入的状态数据不准整个优化就建立在错误的初始条件上效果会很差。所以宇树这类产品在底层做了大量的传感器融合工作IMU、关节编码器、足底压力阵列的数据要用扩展卡尔曼滤波或类似算法融合成可靠的状态估计。3.4 为什么要滚动反馈闭环才是MPC稳的底气说了这么多有人可能会问既然MPC每个周期都要重新算一遍优化问题那为什么不干脆只算一次、然后把整条轨迹存下来去执行就好答案是模型永远不完美环境永远有扰动。你在地上转了半圈地面摩擦力分布可能不一样了电池电量下降电机输出特性变了脚落地时的微小打滑导致实际姿态和预测状态发生了偏差。这些误差如果不加以修正任其累积机器人很快就会偏离预期轨迹最终失衡摔倒。MPC的滚动优化机制天然地解决了这个问题。每到一个新时刻它都用实际测量的状态来重新初始化优化问题把之前所有累积误差一次性清零至少在状态层面。这就是为什么MPC比单纯的前馈轨迹规划要稳得多——它不是一个开环的照着剧本演而是一个闭环的边演边重新编排剧本。4. 同样在解决运动控制问题为什么是MPC而不是其他方法4.1 和传统PID/LQR相比MPC的优势到底在哪传统线性控制理论里的LQR线性二次型调节器在位姿控制中也用得很多它和MPC有点相似——都是通过优化成本函数来得到控制律。但LQR有一个硬伤它很不擅长处理约束。什么叫约束放在人形机器人场景里最典型的就是关节角度不能超过机械限位关节力矩不能超过电机峰值ZMP必须落在支撑多边形内足底反作用力不能指向地面以下脚不能拉地像ZMP落点约束这是双足稳定性的核心硬约束违反了基本就得摔。LQR这类线性控制器处理约束的方法往往只能是惩罚项——在成本函数里加重偏离约束的代价但这样只能尽量不违反不能保证不违反。MPC则可以把这些约束直接写进优化问题里比如用不等式约束的形式限制ZMP位置求解器会保证解满足这些约束。这个差异在二人转这种动态剧烈、边界工况多的动作中至关重要。4.2 和强化学习RL相比MPC的知道自己在干什么是一张王牌这两年人形机器人的热度很大程度上来自强化学习RL的进展很多人看到宇树的视频会问是不是RL生成的策略。实际上RL和MPC在工程上更像是互补关系而不是替代关系。RL的优势在于可以直接从交互数据中学到复杂策略甚至处理一些模型很难精确描述的场景。但RL的缺点也很明显可解释性差策略是黑盒神经网络出了问题很难分析是哪里错了安全性难以保证训练策略时探索阶段的随机动作在真机上代价很高需要大量仿真和Sim2Real迁移工作调参玄学化奖励函数设计高度依赖经验一个小小权重调整就可能彻底改变行为MPC的优势则完全在另一端它每一步都在求解一个明确的、带约束的最优化问题你清清楚楚知道系统在优化什么目标、遵守什么约束。出了问题时你可以把QP问题的原始变量拉出来分析究竟是预测模型不准、还是约束冲突、还是求解超时问题定位效率高得多。宇树这类高端人形机器人目前的主干控制架构大多还是以MPC为核心RL则更多用于特定技能的学习或者上层策略的选择。我个人认为在运动控制这种对安全性和稳定性格外敏感的领域MPC作为底线控制的地位短期内很难被取代。未来更可能的趋势是MPC和RL结合——用RL学习高层决策或者模型残差用MPC做底层稳定控制。4.3 为什么不干脆用ZMP轨迹规划非要MPC还有一个常见疑问是既然MPC算出来的本质上是ZMP和质心轨迹那我直接离线规划好一条ZMP轨迹再跟踪不就行了吗这个问题的答案还是回到动态环境和实时适应。离线轨迹规划假设的是理想的、确定性的世界模型——地面平整、摩擦一致、电机响应完美。但真实环境中每一步落地都会带来微小的位置误差外部甚至还有推搡等不可预测的扰动。一旦实际状态偏离了离线轨迹跟踪控制器就会面临我一直努力追上一条已经不适用的轨迹的窘境。MPC相当于把轨迹规划器搬进了每个控制周期里状态偏了它就重新规划一条从当前位置出发的最优轨迹。这种实时重新规划的能力让机器人面对未知扰动时的反应从容得多。你在视频里看到的丝滑很大一部分就来自这种实时重规划能力——它看起来像是机器人思考了自己接下来该怎么转而不是机械地照着编好的程序执行。5. 把MPC从仿真搬进真机我踩过的那些坑5.1 建模误差的坑线性倒立摆模型在剧烈转向时可能不够用虽然LIPM在绝大多数双足动态场景里表现优秀但它有个硬伤它假设质心高度不变。二人转这种动作机器人经常会下蹲、起立、抬膝、转体质心高度变化幅度很大。一旦质心高度变化超过一定范围LIPM的线性假设就不再成立预测出来的轨迹会明显偏离实际。面对这种情况一种做法是改用变高度倒立摆模型或者把高度变化当成扰动通过反馈去补偿。但更工程化的做法是在MPC外部加一个自适应层——实时估算当前质心高度和速度把它们作为LIPM的时变参数传入预测模型。我在一次类似的实验中发现如果忽略这个参数更新同样的MPC参数在质心降低10厘米的情况下跟踪误差会翻好几倍。5.2 求解实时性的坑QP问题不是能解就行而是要稳定地快解MPC从理论走向工程最大的拦路虎就是实时性。人形机器人的控制频率通常要做到1kHz才比较安全这意味着MPC的QP求解必须在1毫秒内完成。这还没算上状态估计、轨迹转换、指令下发的时间。我见过不少初学者在这个地方翻车离线仿真时用Matlab的优化工具箱跑得好好的一搬到实时系统里就傻眼了——求解时间忽高忽低有时甚至到了5毫秒以上导致控制频率掉到200Hz机器人明显晃动。这是QP求解的一个经典问题求解时间是波动的最坏情况比平均情况糟糕得多。解决思路主要有这么几个用专门为机器人控制设计的嵌入式QP求解器比如基于内点法的定制求解器或者基于有效集法的求解器避免使用通用非线性优化工具。限定迭代次数不追求完全收敛跑到一定迭代上限就输出当前最优可行解保证最坏情况求解时间可控。问题结构化简化利用LIPM的线性性质把QP问题的Hessian矩阵变成固定结构减少每次求解的预处理开销。这些细节在论文里几乎不会写但在真实产品里它们往往决定了MPC能不能跑起来。5.3 模型参数校准的坑机器人参数不是CAD里抄来的MPC的预测模型需要一系列参数质心高度、质量、惯性矩、腿长等等。很多工程师的第一反应是从CAD模型里查这个思路不完全错但实际真机上会有明显偏差——电池装在哪、线束怎么走、负载怎么分配都会影响质心位置和转动惯量。我强烈建议的做法是在跑MPC之前先做一轮系统辨识用一组已知的激励信号驱动机器人记录实际响应再反向估计模型参数。比如让机器人做一组小幅度的前后摆动记录质心轨迹和ZMP位置用最小二乘法把等效质心高度和转动惯量标定出来。别小看这步我发现标定前后同样的MPC参数表现差距能到一个天上一个地下。5.4 约束一致性这个最隐蔽的坑别让MPC乐观要让它悲观MPC的核心优势是能处理约束但如果约束设置不当反而会让系统崩溃。最常见的问题叫约束乐观——MPC模型里认为可以施加的力或者可以达到的加速度实际真机根本做不到。举一个例子在LIPM模型里ZMP约束通常设置为支撑多边形内部。但真实足底和地面的接触并不是严格刚性的足底胶垫有弹性、脚踝有柔性实际ZMP允许范围比理论支撑多边形要小。如果MPC模型里把ZMP约束设到支撑多边形边缘控制器就会频繁尝试做一些极限动作而实际硬件执行时已经接近不稳定边界结果就是真机表现比仿真差很多。我的经验是把MPC里的约束设置得比物理极限保守15%到20%比如ZMP约束只用到支撑多边形的80%范围。这样看起来浪费了理论上的稳定性范围但换来的是对模型误差和硬件非线性的鲁棒性真正实测稳定性和耐用性反而更好。MPC在仿真里之所以看起来比真机强很多时候不是仿真器的动力学算得不对而是仿真里的约束和真机设备的实际约束不一致。另一个同类坑出现在力矩约束上。电机在高速转动时能输出的力矩会显著下降转矩-转速特性曲线而不是恒定的峰值力矩。如果MPC模型里把力矩上限设为峰值而不是实际可用值那控制器规划出来的动作就会包含它自己实际上执行不了的力矩需求。这种乐观预测多久后会积累成实际跟踪误差只是时间问题。6. 从MPC往上走人形机器人运动控制还能怎么进化6.1 MPCRL混合架构把规划交给学习把安全交给MPC前面提到了RL和MPC的互补关系这里展开说说目前业界比较关注的混合架构。一种比较有潜力的组合方式是用RL在高层学习下一步该做什么动作相当于一个策略网络根据环境和任务目标输出动作类型参数把RL输出的高层意图传给MPC由MPC规划出无碰撞、严格满足动力学约束的底层轨迹MPC算出的轨迹再由WBC分配到关节力矩这种架构的好处很明显RL负责应对复杂任务抽象和大范围探索MPC负责保证底层物理约束和安全边界。即使RL策略遇到训练分布外的场景输了MPC仍然能维持一个基本稳定的运动不至于直接摔倒。从产品化的角度来说这种混合架构比纯RL策略更可调试——你会发现出问题时大概率要么是RL选错了动作要么是MPC参数不合适问题可定位性比黑盒策略强得多。6.2 整机协同控制MPC能不能管到手臂和躯干目前的MPC架构在上层只算质心轨迹手臂动作更多是作为整机动力学的一部分参与角动量修正。但随着机器人的动作越来越复杂只控制质心不管手臂的思路会逐渐不够用。我看到的一个方向是全身体MPC——把质心模型扩展为包含角动量的全身质心-角动量模型让MPC同时优化质心轨迹和整体角动量轨迹。这样手臂摆动不再只是一个辅助角动量补偿器而是可以被主动规划用于更复杂的全身动作——比如二人转时手臂的姿态变化就可以直接作为MPC优化变量的一部分参与预测与优化动作会显得更协调自然。当然这又回到了计算实时性的老问题上需要更高效的QPsolver和更紧凑的动力学模型约束。但从宇树这段动作的完成度来看这类方案已经有了真机可行性接下来比拼的更多是工程落地细节。6.3 自适应MPC让模型在运行中自己变准最后想聊一个方向是自适应MPC。传统的MPC假设动力学模型是固定的建模误差靠反馈修正。但现实中模型参数是不断变化的——电池电压下降、关节摩擦温升、负载变化、地面摩擦系数改变都会让固定参数的模型越来越不准。自适应MPC的思路是用辨识算法在线更新模型参数每运行一段窗口就根据输入输出数据重新估计模型参数然后更新到MPC的预测模型里。这个思路在过程控制领域很成熟但在人形机器人实时系统上还有不少挑战主要是计算开销和稳定性的平衡——在线辨识本身要占用计算资源而且辨识得到的参数需要有置信度判断不能因为一次异常测量就把模型参数改坏。不过我认为自适应能力将是人形机器人真正走向通用场景的必经之路。一个只能在实验室平整地面上跳二人转的机器人和一个能在不同地面材质、不同负载条件下稳定完成动态动作的机器人差别就在模型对环境的适应能力上。MPC这套框架本身是兼容自适应的关键是工程上怎么把辨识、预测、优化三个模块缝合得足够牢靠。回到开头那段宇树的二人转视频。现在你再回头看那几分钟的丝滑应该能品味出背后那个完整而严密的MPC系统在高速运转了预测模型在规划重心QPsolver在毫秒级时间内求解约束优化状态估计器在融合每个传感器的数据WBC在把质心轨迹分解成全身关节的肌肉力量。这样的系统集成度放到五年前几乎是不可想象的。对想入行机器人控制的人来说MPC绝对是你绕不开的一座山但翻过这座山之后的风景值得你流一身汗去换。
阅读完成 · 觉得有帮助?
咨询建站