ARTICLE · INTELLIGENCE

战地情报 · 详情页

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

机器狗控制方法全解析:从关节控制到步态规划的四层架构

机器狗控制方法全解析:从关节控制到步态规划的四层架构

机器狗这几年从实验室里走出来得很快,展会、园区巡检、教学演示、甚至一些商业演出里都能见到它的身影。很多人第一次看到它蹦蹦跳跳、上下楼梯、被踹一脚还能站稳,第一反应是“这东西到底怎么控制的”。我接触四足机器人有些年头了,从早期只能走平地的样机,到后来能跑能跳、能扛扰动的平台,踩过的坑不算少。这篇就围绕“机器狗的控制方法有哪些”这个题目,把我理解的整套控制体系拆开讲清楚,从最底层的关节控制,到中间的步态规划,再到上层的任务决策,尽量把每一层的原理、参数、实操要点和常见问题都说到位。

如果你是完全的新手,看完至少能明白机器狗不是“一个算法”在控制,而是一整套分层协作的系统;如果你已经上手过某个平台,这里面的参数整定思路、步态切换逻辑和排查经验,应该能帮你少走一些弯路。我会尽量用生活化的类比解释复杂概念,同时把能直接抄作业的步骤和配置写出来。

1. 先搞清楚机器狗的控制到底分几层

很多人一上来就问“用什么算法控制机器狗”,这个问题其实问得不够精确。机器狗的控制是一个典型的分层结构,不同层解决的问题完全不同,混在一起谈就容易糊涂。我习惯把它分成四层:关节层、身体姿态层、步态规划层、任务决策层。这四层从上到下依次下发指令,从下到上依次反馈状态,像一家公司从老板到一线员工的指令传递。

1.1 四层控制架构的职责划分

关节层是最底层,直接面对电机。它关心的是“这个关节现在角度多少、要转到多少、用多大力矩”。这一层的控制频率最高,通常在1kHz到10kHz之间,因为电机响应快,控制周期必须足够短才能稳住。身体姿态层关心的是“机身现在是什么姿态、离地多高、有没有倾斜”,它把上层想要的机身状态翻译成四条腿各自该伸多长、该用多大力。步态规划层负责“怎么迈腿”,包括什么时候抬哪条腿、抬多高、落点在哪、身体怎么配合移动。任务决策层则是“往哪走、走多快、遇到障碍怎么办”,这一层可能跑在机载计算机上,也可能部分跑在远程操作端。

这四层的划分不是绝对的,有些平台会把姿态层和步态层合并,有些会把决策层拆得更细。但核心思想是一致的:越往下频率越高、越贴近硬件;越往上频率越低、越贴近任务。理解这一点,后面看任何控制方法都不会迷路。

1.2 为什么不能用一个算法包打天下

有人会想,既然有强化学习这种端到端的方法,能不能一个神经网络从摄像头输入直接输出关节力矩,把中间层全干掉?理论上可以,实际中也有人这么做,但工程上很少完全这么做。原因很实在:端到端模型的可解释性差,出了问题很难定位是感知错了、决策错了还是执行错了;而且训练一个能覆盖各种地形的端到端策略,数据量和算力成本都很高,调试周期长。分层结构的好处是每一层可以独立验证、独立替换,关节控制调好了就稳定了,步态换一种也不影响底层。这就像做菜,切菜、配料、火候分开管,哪一步出问题一目了然,全揉在一起炒糊了都不知道糊在哪。

所以下面我按层来讲,先讲最底层的关节控制,再往上走。

2. 关节层控制:机器狗动作的最小单元

关节层是整台机器狗动作的“肌肉”,这一层没调好,上面规划得再漂亮也白搭。机器狗的每条腿通常有3个关节(髋外摆、髋俯仰、膝俯仰),四条腿共12个关节,少数平台会多一个踝关节或腰部关节。每个关节一般由无刷电机加谐波减速器或行星减速器驱动,配合编码器反馈角度。

2.1 位置控制、速度控制与力矩控制怎么选

关节层最常用的三种控制模式是位置控制、速度控制和力矩控制,实际平台往往是这三种的组合,比如“位置+力矩”的串级模式。

位置控制最简单,给定目标角度,控制器算出需要多大电流去逼近这个角度。它的优点是稳定、好调,缺点是刚性太强,遇到冲击时电机硬扛,容易过流或损坏。速度控制给定目标转速,适合需要匀速转动的场景,但单独用速度控制很难让腿停在某个角度。力矩控制给定目标力矩,电机按指定力矩输出,柔顺性好,适合需要“软”响应的场景,比如落地缓冲,但纯力矩控制没有位置约束,容易漂移。

实际工程里最常见的是串级控制:外环是位置环,内环是速度环,最内是电流(力矩)环。位置环算出速度指令,速度环算出电流指令,电流环直接驱动电机。这种结构兼顾了定位精度和动态响应,是绝大多数商用平台的默认方案。我实测下来,位置环带宽给到几十赫兹、速度环给到几百赫兹、电流环给到上千赫兹,是比较稳妥的配置。

注意:不要一上来就把位置环增益拉得很高,机器狗腿部的惯量和负载会随姿态变化,增益过高在抬腿瞬间容易振荡,表现为腿“抖”或者“嗡嗡”响。

2.2 关节参数整定的实操思路

参数整定是关节层最费时间的活。我的做法是分三步走。第一步,先把电流环调好,这一步通常在驱动器厂商的工具里完成,给定一个阶跃电流指令,看实际电流的响应曲线,调整电流环比例和积分,让响应快且不超调。第二步,调速度环,把位置环暂时旁路,给速度阶跃指令,观察实际转速,速度环增益从低往高加,直到响应变快但还没出现明显振荡。第三步,调位置环,给角度阶跃指令,看关节到位时间和超调量,位置环增益一般比速度环低一个数量级。

这里有个容易忽略的点:关节在不同角度下的负载特性不一样。腿伸直时力臂长、负载大,腿弯曲时力臂短、负载小。所以整定参数时不能只在一个角度测,要在关节行程的几个典型位置分别测一遍,取一个折中的参数,或者做增益调度(gain scheduling),按角度分段用不同增益。我见过不少新手只在中间角度调好就上线,结果腿伸到极限位置时开始抖,查了半天以为是机械问题。

2.3 关节层的常见故障与排查

关节层出问题,表现往往很直接:腿不动、腿抖动、腿发软、异响。排查顺序我一般是这样:先看编码器读数是否正常,编码器线松了或者磁环脏了会导致读数跳变,表现为腿突然抽一下;再看驱动器是否报过流或过温,过流多半是增益太高或机械卡滞,过温多半是长时间大电流堵转;最后看机械连接,减速器有没有间隙、连杆有没有松动。下面这张表是我整理的关节层问题速查表,实际排查时对着看能省不少时间。

现象可能原因排查动作
关节不动使能未开、通信断、驱动器故障查使能状态、查通信指示灯、读驱动器错误码
关节抖动位置环增益过高、机械间隙降增益试、手动晃关节听间隙
关节发软力矩限幅过低、电流环异常查力矩限幅参数、测电流响应
运行异响减速器磨损、连杆干涉断电手动转、听声音定位
突然抽动编码器信号跳变查编码器线、清洁磁环

3. 身体姿态控制:让机身稳如老狗

关节调好了,机器狗能站住了,但站着不等于稳。你推它一下,它会不会倒,取决于身体姿态控制。这一层要解决的核心问题是:给定一个期望的机身高度、姿态角和移动速度,四条腿各自该伸多长、落点在哪、用多大力。

3.1 虚拟模型控制与机身刚度调节

虚拟模型控制(Virtual Model Control)是我认为最直观的一种思路。它的核心思想是“假装机身和地面之间连着虚拟的弹簧和阻尼器”,机器狗想保持某个高度,就相当于有一根虚拟弹簧把机身往上顶;想保持水平,就相当于有虚拟扭簧把机身掰正。腿的作用就是产生这些虚拟弹簧需要的力。

具体实现时,先根据机身期望位置和实际位置的偏差,算出一个虚拟力,再把虚拟力分配到四条腿上,通过雅可比矩阵转成各关节的力矩。这里的关键参数是虚拟刚度和虚拟阻尼。刚度大,机身就“硬”,抗扰动强但落地冲击大;刚度小,机身就“软”,落地柔和但容易被推歪。我一般把垂直刚度设得比水平刚度大,因为垂直方向要承重,水平方向要柔顺。实测下来,垂直刚度在几千牛每米量级、阻尼比在0.7左右,是比较舒服的起点。

提示:虚拟刚度不是越大越好。刚度过大时,机器狗落地会像一块砖砸下去,冲击直接传到关节,长期下来减速器磨损加快。刚度过小则站都站不稳,稍微一推就趴。

3.2 机身姿态的反馈来源与融合

姿态控制离不开准确的姿态估计。机器狗机身上通常装IMU(惯性测量单元),包含加速度计和陀螺仪,有的还加磁力计。加速度计能测重力方向,长期准但短期噪声大;陀螺仪测角速度,短期准但会漂移。所以要做融合,常见的是互补滤波或卡尔曼滤波。互补滤波简单,把加速度计的低频和陀螺仪的高频加权合并,调一个系数就行,适合资源有限的平台。卡尔曼滤波更严谨,能给出最优估计,但需要建模噪声特性,调参麻烦一些。

除了IMU,腿部的关节编码器也能提供信息。四条腿的着地状态和关节角度,可以反推出机身相对地面的姿态,这叫“腿部运动学估计”。实际中我通常把IMU和腿部估计做融合,IMU负责快速响应,腿部估计负责长期修正,两者互补。只靠IMU,时间长了会漂;只靠腿部,抬腿瞬间估计会跳。融合之后稳很多。

3.3 抗扰动恢复的实操要点

抗扰动是机器狗最出圈的技能,被踹一脚还能站稳。这背后是姿态控制在起作用:IMU检测到机身姿态突变,姿态控制器立刻算出恢复力,通过调整四条腿的支撑力和落点把机身拉回来。这里有几个实操要点。

第一,检测要快。扰动发生后,如果检测延迟超过几十毫秒,机器狗可能已经倾斜到无法恢复的角度。所以IMU数据要高频读取,姿态偏差的阈值要设得合理,太低会误触发,太高会漏检。第二,恢复动作要分优先级。轻微扰动靠调支撑力就能恢复,中等扰动需要迈一步调整支撑面,大扰动可能需要小跳一下重新找平衡。第三,落地缓冲要做好。恢复过程中腿落地如果太硬,反而会把机身弹起来,所以落地瞬间要切到柔顺模式,用低刚度吸收冲击。

我踩过的一个坑是:早期调抗扰动时只关注了恢复速度,把增益拉得很高,结果机器狗被推之后确实很快回正,但回正过头了,往反方向又倒过去,来回振荡。后来加了阻尼、限制了恢复力的变化率,才稳下来。所以恢复要快要稳,但不能过冲。

4. 步态规划:机器狗怎么迈腿才不摔

姿态控制解决的是“站着稳”,步态规划解决的是“走着稳”。机器狗走路不是简单地抬腿往前放,涉及支撑相和摆动相的时序、落点选择、身体重心配合,这一层是四足机器人控制里最有意思也最考验功力的部分。

4.1 常见步态类型与适用场景

机器狗的步态按同时着地的腿数来分,常见的有以下几种。

步态类型着地腿数特点适用场景
四足支撑4最稳,不能移动站立、调整姿态
爬行步态3慢但极稳,任意时刻三条腿着地崎岖地形、精细作业
对角步态2快,对角腿同时迈平地快速移动
跳跃步态0-2动态强,有腾空相跨越障碍、表演

爬行步态是最保守的,一次只抬一条腿,另外三条撑着,重心始终在支撑三角形内,几乎不会摔,但速度慢。对角步态(trot)是最常用的,对角的两条腿一组,交替迈步,速度快、能耗低,但对控制要求高,因为任意时刻只有两条腿着地,重心必须动态平衡。跳跃步态更激进,有腾空阶段,适合展示和特殊场景,但落地冲击大,对关节和结构要求高。

选步态的逻辑很简单:地形越复杂、对稳定性要求越高,就越往爬行步态靠;地形平坦、追求效率,就用对角步态。实际平台通常支持多种步态切换,切换时要平滑过渡,不能突然从爬行跳到对角,否则容易失稳。

4.2 摆动相轨迹设计与落点选择

摆动相就是腿抬起来在空中移动的阶段。这条轨迹怎么设计,直接影响走路的平顺性和越障能力。最基础的是用多项式或摆线生成一条从起点到终点的平滑曲线,抬腿高度可调。抬得太低容易绊到小障碍,抬得太高浪费能量还增加落地冲击。我一般把抬腿高度设在腿长的百分之十到十五之间,具体看地形。

落点选择更关键。理想情况下,落点应该在机身重心投影的前方合适距离,这样支撑面能覆盖重心。但实际中要考虑速度:走得快,落点要往前放,否则跟不上;走得慢,落点可以保守一些。还要考虑地形:如果前方有台阶,落点要抬高到台阶面上。有些平台用简单的固定落点加偏移,有些用基于机身速度的预测落点,后者更平滑但需要准确的速度估计。

注意:落点不要设得太靠外,否则腿伸得太直,关节接近极限位置,抗扰动能力下降。留一点弯曲余量,腿才有调整空间。

4.3 支撑相力分配与重心转移

支撑相是腿踩在地上承重的阶段。四条腿怎么分担机身重量,直接影响稳定性和能耗。最简单的是平均分配,但机器狗在加速、减速、转弯时重心会偏移,平均分配就不够了。更好的做法是按重心投影位置动态分配,重心偏向哪条腿,那条腿就多承重。

重心转移是步态规划里的精髓。机器狗迈腿之前,要先把重心移到支撑腿上,让要抬的那条腿“卸力”,这样抬腿才轻松,机身也不会晃。这个转移过程要平滑,用插值慢慢移,不能瞬间跳。我调试时常用的方法是:在抬腿前预留一段重心转移时间,占整个步态周期的百分之二十左右,转移轨迹用S形曲线,起止都平滑。

这里有个经验:重心转移的幅度要跟步态速度匹配。走得慢,转移可以充分;走得快,转移时间短,幅度要相应减小,否则重心还没移到位腿就抬了,机身会侧倾。我见过有人用同一套重心参数跑所有速度,结果慢速很稳、快速就晃,就是没做速度适配。

5. 上层任务控制:从“会走”到“会干活”

底层把走路解决了,机器狗要真正有用,还得会执行任务:按路线巡逻、避开障碍、跟随目标、上下楼梯。这一层更接近传统机器人导航和决策的范畴,但和底层控制耦合很紧。

5.1 速度指令与运动学映射

最上层的接口通常很简单:给一个前进速度、侧移速度、转向角速度,机器狗就按这个速度走。这三个量怎么变成四条腿的动作,就是运动学映射。对于对角步态,机身速度决定了步频和步幅:速度快,步频高或步幅大。步频太高电机跟不上,步幅太大腿够不着,所以要在一个合理范围内组合。

我一般先定步频,再根据速度算步幅。步频受关节最大角速度限制,步幅受腿长和关节行程限制。比如腿长半米左右,步幅一般不超过腿长的一半,再大落地就不稳了。转向靠左右两侧腿的步幅差实现,差速转向,和履带车类似。

5.2 感知与步态的自适应切换

机器狗要自主行走,得知道脚下是什么地形。常见配置是机身前方装深度相机或激光雷达,往下看地面,识别台阶、坑洼、斜坡。感知到地形后,步态规划层要相应调整:遇到台阶,抬腿高度加大、落点抬高;遇到斜坡,机身姿态要跟着倾斜,腿的伸缩要补偿高度差;遇到松软地面,落地要柔、支撑力要控制,防止陷下去。

这里的关键是感知和控制的延迟要匹配。感知算出地形需要时间,如果延迟太大,等机器狗走到跟前才调整就来不及了。所以感知要往前看,提前规划。我实测下来,感知延迟控制在几十毫秒内、提前看一到两个步态周期的距离,是比较合理的。

5.3 远程操作与自主模式的配合

很多商用场景是远程操作加自主辅助的混合模式。操作员给大方向,机器狗自己处理平衡和避障。这种模式下,操作指令要经过一层“安全过滤”:操作员让往前走,但前方有障碍,机器狗要能拒绝或减速;操作员让快速转向,但当前姿态不稳,机器狗要先稳住再转。这层过滤本质上是把底层的能力边界暴露给上层,让上层指令不超出底层能执行的范围。

我个人的体会是,混合模式比纯自主更容易落地。纯自主对感知和决策要求太高,场景稍微一变就失效;纯远程操作员累,而且延迟一大就难控制。混合模式把操作员的判断和机器狗的底层能力结合起来,容错率高。

6. 进阶控制方法:从模型到学习

前面讲的是比较经典的分层控制,这几年学习类方法在四足控制上进展很快,值得单独说说。

6.1 模型预测控制的思路与取舍

模型预测控制(MPC)在四足上用得不少。它的思路是:用机器狗的动力学模型,预测未来一小段时间内不同控制指令的效果,选一个最优的指令执行。优点是能显式处理约束,比如关节力矩上限、摩擦锥约束,而且能提前规划,走得更顺。缺点是计算量大,模型不准时效果打折。

实际用MPC,模型精度是命门。四足动力学模型要考虑机身惯量、腿的质量分布、足地接触模型,建模越细计算越慢。所以工程上常用简化模型,比如单刚体模型加腿的等效,牺牲一点精度换实时性。我试过在机载计算机上跑MPC,控制频率只能到几十赫兹,配合底层的高频关节控制,整体效果还不错,但调模型参数花了不少时间。

6.2 强化学习策略的训练与部署要点

强化学习(RL)这两年在四足上很火,尤其是sim-to-real(仿真到现实)的迁移。思路是在仿真里训练一个神经网络策略,输入机身状态和指令,输出关节目标,然后部署到真机上。优点是能学到一些传统方法难写的复杂行为,比如复杂地形下的自适应步态;缺点是对仿真环境要求高,仿真和现实的差距(sim-to-real gap)会导致真机表现下降。

部署RL策略有几个实操要点。第一,域随机化要做足。训练时随机化地面摩擦、机身质量、电机延迟、传感器噪声,让策略对这些变化鲁棒,迁移到真机才稳。第二,动作平滑要做。网络输出的动作如果跳变,真机上会抖,所以要加低通滤波或动作变化率限制。第三,安全兜底要有。RL策略是黑盒,万一输出异常动作,要有底层保护机制接管,比如姿态偏差过大就切回传统控制器。我见过直接部署没做兜底的,真机一个异常动作就摔了。

6.3 传统方法与学习方法的融合趋势

现在比较务实的做法是融合:底层关节控制用传统方法保证稳定,中层步态用RL学出来的策略增强适应性,上层任务用传统规划保证可控。这样既有学习的灵活性,又有传统的可靠性。我个人倾向于这种混合架构,纯端到端在实验室很惊艳,但落地到真实场景,分层加学习的组合更稳。

7. 实操调试中的经验与避坑清单

讲了这么多方法,最后落到实操。控制方法选得再好,调试不到位一样白搭。这一节我把这些年踩过的坑和总结的经验集中说一下。

7.1 从站立到行走的分阶段调试法

调试机器狗千万别一上来就让它走。我的习惯是分阶段:先调单关节,再调单腿,再调四条腿站立,再调原地踏步,最后才调行走。每个阶段稳了再进下一个。

单关节阶段,验证每个关节的正反转、限位、编码器方向都对。单腿阶段,把腿悬空,验证腿的伸缩、摆动轨迹正常,没有干涉。站立阶段,四条腿撑地,调虚拟刚度和阻尼,让机身稳、不晃、不沉。原地踏步阶段,不前进,只抬腿落地,验证步态时序和重心转移。行走阶段,从慢速开始,逐步加速。这个顺序看着笨,但能快速定位问题在哪一层,比一上来就走然后摔了不知道哪出问题强得多。

7.2 参数整定的优先级与联动关系

参数很多,不能眉毛胡子一把抓。我的优先级是:先关节参数,再姿态参数,再步态参数,最后任务参数。因为下层不稳,上层调了也白调。而且参数之间有联动:关节增益变了,姿态控制的刚度可能要跟着调;步态速度变了,重心转移参数要跟着调。所以调参不是一次性的,改了下层要回头验证上层。

提示:每次只改一个参数,改完测一组固定动作,记录结果。同时改多个参数,出了问题根本不知道是哪个引起的。

7.3 安全保护机制的必要配置

机器狗力量不小,调试时该有的保护不能省。硬件上,急停按钮必须有,而且要在手边;调试架或吊装带在早期阶段很有用,腿悬空转,摔不下来。软件上,要有姿态保护(倾斜过大自动趴下)、力矩限幅(防止过流)、通信超时保护(指令断了自动停)。这些保护在调试时可能觉得碍事,但真出问题时能救机器狗一命。

我印象很深的一次,调一个快速转向动作,参数给激进了,机器狗原地打转越转越快,眼看要甩出去,急停拍下去才停住。从那以后我调任何激进动作都先上吊装带。

7.4 常见问题速查与排查思路

除了前面关节层的表,整机层面也有几个高频问题。走路跑偏,多半是四条腿参数不一致或落点不对称;走路上下颠,多半是步态周期和机身固有频率接近,产生了共振,改步频或加阻尼能缓解;抬腿拖地,多半是抬腿高度不够或摆动相轨迹不平滑;落地冲击大,多半是支撑相刚度太高或落地瞬间没做缓冲。排查时先看现象属于哪个阶段(摆动还是支撑),再往对应层的参数上找。

整机现象优先排查方向调整手段
走路跑偏腿参数一致性、落点对称性校准单腿、对称落点
上下颠簸步频与固有频率共振改步频、加阻尼
抬腿拖地抬腿高度、摆动轨迹提高抬腿、平滑轨迹
落地冲击大支撑刚度、落地缓冲降刚度、加缓冲相
转向不稳差速幅度、重心转移减小差速、加转移时间

这些经验很多是文档里不会写的,都是实际调出来的。控制方法本身是公开的,难的是把方法落到具体平台上,把参数调到合适,把异常处理到位。

8. 不同场景下控制方法的选型建议

最后说说选型。同样是机器狗,用在园区巡逻和用在教学演示,控制方法的侧重点完全不同。

园区巡逻这类场景,地形相对规整但有行人、有台阶,重点是稳定和续航。控制上建议以对角步态为主,配合感知做台阶自适应,姿态控制刚度适中,保证长时间行走不累。上层用远程操作加自主避障的混合模式,操作员管大方向,机器狗管细节。

教学演示场景,重点是展示效果和安全性。可以多展示爬行步态、抗扰动恢复、跳跃等动作,控制参数可以调得保守一些,保证不摔。上层多用预设动作序列,减少实时决策的风险。

崎岖地形作业,比如灾后探查这类,重点是越障能力和鲁棒性。步态上爬行和对角结合,遇到难走的地方切爬行,好走的地方切对角。姿态控制要能适应大坡度,感知要能识别坑洼和松软地面。这种场景对控制的要求最高,也是各家平台拉开差距的地方。

我个人在实际操作中的体会是,没有一种控制方法能通吃所有场景,关键是理解每一层的能力边界,根据场景组合使用。底层稳、中层活、上层聪明,三者配合好了,机器狗才真正好用。踩过的坑告诉我,别迷信某一个“先进算法”,把基础的分层控制调扎实,比追新概念实在得多。

RELATED READING

延伸阅读

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