简介这份资源是Marc H. Raibert所著《Legged Robots that Balance》的中文整理文档面向足式机器人、运动控制与人工智能方向的研究生、工程师及科研人员聚焦动态腿部系统的平衡控制这一开放难题。内容从1974年步行运动探索讲起梳理弹跳杆机器人原型、Leg实验室的研发历程并系统阐述主动平衡、运动控制分解、动力学建模、传感器融合与反馈控制等关键技术还涉及三维空间运动与多腿机器人奔跑等进阶议题。资源包共1个PDF文件大小约7.13MB便于在电脑或平板上直接阅读与检索。目前已有394人学习适合希望理解生物行走奔跑机制、构建足式机器人控制框架或寻找算法研究切入点的读者可从中获取完整理论脉络、经典实验背景与后续研究方向。1. 足式机器人平衡算法为什么动态稳定比静态稳定更难却更值得做很多人第一次接触足式机器人会下意识觉得“站稳”是底线——四只脚撑住地面重心落在支撑多边形里不就完了但真正让机器人跑起来、跳起来、在碎石坡上不摔的恰恰是主动放弃这种“绝对稳”的策略。这份《Legged Robots that Balance》文档讲的核心就是如何用动态平衡替代静态平衡让机器人在“快要倒”的瞬间反而获得更强的机动性。静态爬行机器人每一步都要确保重心投影落在支撑域内速度慢、地形适应性差而主动平衡系统允许机身短暂倾倒再用下一步的落足点把姿态拉回来。这背后是一套把奔跑拆成弹跳高度、前行速度、身体姿态三个独立控制通道的算法框架也是后来所有奔跑机器人控制器的底层范式。搞懂它你才能理解为什么波士顿动力那类机器能跳上台阶而不是像扫地机一样挪动。2. 三通道分解为什么奔跑控制可以拆成三个互不干扰的回路2.1 从“整体动力学”到“解耦控制”的降维思路足式机器人奔跑时整机动力学方程耦合严重腿的摆动会影响机身俯仰俯仰又改变落足点落足点反过来影响速度。如果直接对整机做最优控制状态维度高、实时求解几乎不可能。Raibert 的核心洞察是把奔跑周期拆成“弹跳高度、前行速度、身体姿态”三个相对独立的控制目标每个目标只用一个简单的反馈律去调就能让系统稳定。这不是数学上的严格解耦而是工程上的“足够好”近似——每个通道的控制器只关心自己那一个误差量通道之间的耦合被弹跳周期的自然节律吸收了。常见的实现思路是高度控制只调腿的等效刚度或着地时的推力幅值速度控制只调落足点相对于髋关节的前后偏移姿态控制只调髋关节力矩或腿的摆角。三者共用同一个状态机按“飞行相—着地相—蹬伸相”循环切换。这样每个控制器的设计空间从十几维降到一两维参数整定变得可操作。2.2 弹跳高度控制为什么调推力比调轨迹更稳如果让机器人跟踪一条预设的质心高度曲线一旦地面刚度变化或着地时刻有偏差跟踪误差会累积控制器需要很高的带宽去修正反而容易激发振荡。Raibert 的做法是不跟踪轨迹只调节每次弹跳的“能量注入量”。具体来说在着地相检测腿的压缩量如果实际压缩量小于期望值说明这次弹跳高度不够下一次蹬伸时增加推力反之减小推力。这本质上是一个离散时间的能量反馈周期就是弹跳周期。# 弹跳高度控制基于着地压缩量的离散反馈 # y_des: 期望弹跳高度对应的腿部压缩量 # y_act: 本次着地实际压缩量 # F_push: 蹬伸相推力幅值 # K_h: 高度反馈增益通常取 0.3~0.8 def height_control(y_des, y_act, F_nominal, K_h): error y_des - y_act F_push F_nominal K_h * error # 限幅防止推力过大导致腿过伸 F_push max(F_min, min(F_max, F_push)) return F_push这段代码里y_des不是直接的高度值而是期望高度映射到腿的压缩量——因为腿的弹性变形量直接反映储能多少。K_h取得太大弹跳会发散取得太小高度恢复慢。实际调试时通常先给 0.5 左右再根据弹跳波形微调。注意F_nominal是维持当前高度所需的基础推力由重力补偿和腿的刚度决定不是零。2.3 前行速度控制落足点为什么比髋关节力矩更有效速度控制最直觉的做法是加速时髋关节往前蹬减速时往后蹬。但这样会引入一个副作用——蹬地力同时改变了机身俯仰力矩速度还没调好姿态先翻了。Raibert 的替代方案是保持髋关节力矩基本恒定只改变落足点的前后位置。如果实际速度低于期望速度就把落足点往前放一点这样着地后腿的支撑反力会自然产生一个向前的水平分量把机身往前推速度过高则落足点后移。这个机制的物理本质是落足点偏移改变了地面反力相对于质心的力臂从而在不改变腿的伸缩状态的前提下产生水平加速。它把速度控制和姿态控制的耦合降到了最低因为落足点前后移动对俯仰力矩的影响远小于直接蹬地。# 前行速度控制基于速度误差的落足点偏移 # v_des: 期望前行速度 # v_act: 当前估计速度由腿的摆动周期和触地时刻推算 # x_hip: 髋关节水平位置 # K_v: 速度反馈增益通常取 0.1~0.3 秒 def speed_control(v_des, v_act, x_hip, K_v): error v_des - v_act foot_offset K_v * error # 落足点 髋关节位置 偏移量 x_foot x_hip foot_offset # 限幅防止落足点超出腿的工作空间 x_foot max(x_hip - L_max, min(x_hip L_max, x_foot)) return x_footK_v的量纲是时间可以理解为“速度误差转化为落足点提前量的比例”。如果K_v太大落足点会剧烈前后摆动机器人像在“抽搐”太小则速度恢复缓慢。实际系统中v_act的估计往往不是直接测出来的而是通过腿从触地到离地的水平位移除以着地时间算出来的——这也是文档里强调“从机腿的运行中估计前向速度”的原因。2.4 身体姿态控制为什么髋关节力矩就够了姿态控制的目标是让机身俯仰角保持在零附近。在弹跳周期中着地相腿对机身施加的力如果不过质心就会产生俯仰力矩。Raibert 的方案是在着地相用髋关节施加一个与俯仰角误差成正比的力矩直接对抗这种扰动。因为着地时间很短通常几十到一百多毫秒这个力矩不需要很大只要在每次着地时把角速度往反方向拉一点几个周期后姿态就能收敛。这里有个容易翻车的点姿态控制器的增益不能按连续系统去整定因为着地相是离散的。如果按连续系统算出一个高增益实际着地时力矩会过冲导致机身反向旋转。常见的做法是把姿态误差和角速度误差一起反馈相当于给俯仰运动加阻尼增益通常比高度和速度通道低一个数量级。3. 虚拟腿四足机器人如何用单腿模型跑起来3.1 虚拟腿的抽象把四条腿等效成一条弹簧腿四足机器人如果每条腿都独立控制状态空间太大步态协调会变得极其复杂。Raibert 提出的虚拟腿概念是在机器人的质心正下方虚拟出一条“弹簧腿”这条腿的长度和方向由四条实际腿的合力决定。控制算法只针对这条虚拟腿设计——调它的弹跳高度、着地角度、推力方向——然后通过运动学把虚拟腿的指令分配到四条实际腿上。这个抽象之所以能 work是因为在奔跑步态中四条腿的着地时刻是错开的但它们的合力对质心的作用可以等效成一条腿在支撑。只要虚拟腿的等效刚度和阻尼设计合理实际腿的相位差不会破坏整体稳定性。文档附录 4A 给出了虚拟腿的力平衡推导核心是四条腿的地面反力之和等于虚拟腿的推力四条腿反力对质心的力矩之和等于虚拟腿的力矩。3.2 从虚拟腿到实际腿的力分配力分配不是简单地把虚拟腿推力除以四。因为四条腿的着地状态不同——有的在支撑相有的在摆动相——只有支撑腿才能出力。常见的分配策略是先根据步态相位确定哪些腿着地然后解一个带约束的优化问题让各腿出力的合力等于虚拟腿指令同时各腿出力不超过摩擦锥限制。# 虚拟腿力分配到实际支撑腿 # F_virtual: 虚拟腿推力向量 [Fx, Fy, Fz] # T_virtual: 虚拟腿力矩向量 [Tx, Ty, Tz] # support_legs: 当前着地的腿编号列表 # leg_positions: 各腿髋关节到质心的位置向量 def distribute_force(F_virtual, T_virtual, support_legs, leg_positions): # 构造力平衡方程sum(F_i) F_virtual # 力矩平衡方程sum(r_i × F_i) T_virtual # 用伪逆求解各腿力 F_i A [] b [] for leg in support_legs: r leg_positions[leg] # 力平衡行 A.append([1, 0, 0]) A.append([0, 1, 0]) A.append([0, 0, 1]) # 力矩平衡行r × F 的矩阵形式 A.append([0, -r[2], r[1]]) A.append([r[2], 0, -r[0]]) A.append([-r[1], r[0], 0]) b F_virtual T_virtual # 伪逆求解再按摩擦锥限幅 F_legs pseudo_inverse(A) b return clamp_to_friction_cone(F_legs)这段代码的关键在于A矩阵的构造每个支撑腿贡献 6 行方程3 个力平衡 3 个力矩平衡未知数是各腿的三维力向量。当支撑腿数量大于 2 时方程数多于未知数用伪逆求最小范数解。clamp_to_friction_cone是必须的否则解出的力可能要求腿“粘”在地面上实际会打滑。摩擦锥通常取摩擦系数 0.5~0.8对应锥角 26~38 度。3.3 对称步态与相位协调四足奔跑时对角腿通常同相形成“对角小跑”。虚拟腿的弹跳周期决定了步态频率而各腿的相位由步态发生器控制。文档第 5 章专门讨论了对称性如果步态关于质心对称虚拟腿的等效模型可以进一步简化因为左右腿的力偶相互抵消只剩合力。非对称步态如前后腿相位差不是 180 度会产生净偏航力矩需要姿态控制器额外补偿。实际调试时步态频率和虚拟腿弹跳频率必须匹配。如果步态频率低于弹跳频率会出现“一步多跳”的混乱高于弹跳频率腿来不及完成摆动相就再次着地导致拖地。常见的做法是把步态周期设为弹跳周期的整数倍通常取 1 或 2。4. 避坑与排查动态平衡调试中最容易翻车的五个点4.1 现象机器人弹跳高度越来越低最后趴在地上原因高度反馈增益K_h太小或者F_nominal没有正确补偿重力。每次着地时腿的弹性变形消耗了能量但蹬伸时注入的能量不足以补回损耗弹跳幅度逐周期衰减。解决先单独测试腿的弹跳不装机身手动给一个初始压缩量观察自由弹跳的衰减率。根据衰减率反推需要的能量注入量再设定F_nominal。K_h从 0.5 开始每次增加 0.1直到弹跳高度能稳定在期望值附近。4.2 现象速度控制一给指令机器人就前后剧烈晃动原因K_v太大落足点偏移量超过了腿的工作空间或者速度估计噪声被放大。速度估计通常来自腿的摆动周期如果触地检测有延迟估计速度会滞后导致反馈相位错误。解决先检查速度估计的延迟。在腿的足端装接触开关用示波器看触地信号和实际着地时刻的偏差。如果延迟超过弹跳周期的 10%需要改用惯性测量单元辅助估计。然后降低K_v到 0.1 以下观察晃动是否收敛。4.3 现象姿态角缓慢漂移几个周期后机器人侧翻原因姿态控制只用了角度反馈没有角速度阻尼。着地时的俯仰力矩扰动让机身获得一个角速度角度反馈虽然能产生恢复力矩但相位滞后角速度没有被及时抑制。解决在姿态控制器里加入角速度项形成 PD 控制。角速度可以用陀螺仪直接测量或者从角度差分得到。阻尼增益通常取比例增益的 0.1~0.3 倍按着地周期折算。注意角速度信号要低通滤波否则陀螺噪声会直接进入力矩指令。4.4 现象四足机器人对角小跑时虚拟腿力分配解算失败原因支撑腿数量少于 2 时力平衡方程欠定伪逆解不唯一可能解出负的垂直力即腿在“拉”地面。或者摩擦锥限幅后合力不再等于虚拟腿指令导致高度和姿态同时失控。解决在力分配前检查支撑腿数量。如果只有 1 条腿着地直接让该腿出力等于虚拟腿指令不进行力矩分配因为单腿无法独立控制力矩。如果 2 条腿着地优先保证力平衡力矩平衡可以放松。摩擦锥限幅后重新计算实际合力反馈给虚拟腿控制器做补偿。4.5 现象仿真里跑得好好的实物一上电就摔原因仿真通常假设地面是刚性的、足端接触是点接触、电机力矩是瞬时响应的。实物中地面会变形、足端有橡胶垫、电机有电流环延迟。这些因素让实际着地时间比仿真长弹跳周期偏移三通道控制器的相位全部错位。解决在仿真里加入地面刚度模型弹簧-阻尼足端接触模型用非线性弹簧电机力矩加一阶惯性环节。然后重新整定三个通道的增益。实物的弹跳周期通常比仿真长 10~20%步态频率要相应降低。第一次上电时用吊架保护只让机器人做原地弹跳确认高度稳定后再放开水平速度控制。5. 从三通道到表格控制设计取舍与验证方法Raibert 在文档第 7 章提出了“表格运行控制”本质上是对三通道控制器的一种替代方案。三通道分解的优点是结构清晰、参数少、可解释性强缺点是每个通道的增益需要手动整定而且对地面刚度和弹跳周期的变化比较敏感。表格控制的做法是离线用仿真或实验数据把状态空间高度误差、速度误差、姿态误差离散成网格每个网格点存一个最优控制量推力、落足点偏移、髋关节力矩运行时直接查表加插值。这两种方案的取舍很能说明动态平衡控制的核心矛盾模型精度 vs 实时计算量。三通道分解依赖对系统动力学的简化假设假设越强控制器越简单但鲁棒性越差表格控制不依赖显式模型但需要大量离线数据而且表格的泛化能力受限于采样密度。文档附录 7A 和 7B 给出了性能指标最小化的表格生成方法核心是用多项式逼近状态-控制映射把连续的最优控制问题转化成有限维参数拟合。我一般会这么理解如果你的机器人平台固定、地面条件已知三通道分解足够用调试周期短如果平台经常换腿长、换负载、换地面表格控制更省事但前期数据采集成本高。实际系统中两者可以混合——用三通道控制器生成初始数据再用这些数据训练一个表格或神经网络替代手工整定的增益。验证动态平衡是否真正 work不能只看机器人站不站得住。一个可靠的验证方法是给机器人一个侧向脉冲扰动比如用摆锤轻敲机身观察它能在几个弹跳周期内恢复。如果恢复周期数小于 3说明姿态和速度通道的耦合被有效抑制如果超过 5 个周期还在晃说明某个通道的增益不对或者通道之间的相位没对齐。另一个方法是让机器人从不同高度落下看它能否在着地后两个周期内回到期望弹跳高度——这检验的是高度通道的能量反馈是否收敛。从那以后我每次调动态平衡参数都强制走一遍“单腿弹跳→虚拟腿原地跳→对角小跑→脉冲扰动恢复”的流程不跳过任何一步。动态平衡的坑往往不在算法本身而在你对系统延迟和能量损耗的估计是否准确。希望帮到你。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?