足式机器人:从仿真到真机部署,有哪些你不知道的‘坑’?

——把策略训得对、跑得稳

目录

01    一个动作的含义,要由整个控制系统共同决定

网络输出一个数,电机并不会天然理解这个数是什么意思。

数值含义对上了,还不等于策略看见了同一个世界。因为从仿真走向真机之后,信息的来源也变了。

相同的关节目标,如果持续时间不同,对身体产生的影响也会不同。

02    仿真中的好成绩,也可能依赖被简化的身体

03    现实总会变化,策略需要怎样的适应能力?

04    “已经部署成功”,还需要说明成功了多久、在什么条件下


每次训练结束后,一套运动策略最终会被保存成一个模型文件。接下来只要把模型装进真机,接上传感器和电机,就能把这套本领原样搬到现实?

真机部署最容易出问题的地方,正在于“原样搬过去”。

动作的数字怎么解释、观测的信息从哪来、指令什么时候到、身体的响应是否一致、走久了会发生什么……

沿着这个问题往下看,接口、时延、电机、地面和环境变化就不再是一串零散的“坑”,而是同一件事的不同侧面:

策略赖以成立的条件,到了真机上正在发生变化。

01    一个动作的含义,要由整个控制系统共同决定

先从最容易被忽略的一步说起。

网络输出一个数,电机并不会天然理解这个数是什么意思。

在常见的位置目标控制中,策略给出的往往不是“把膝关节转到多少度”,而是一个还需要解释的动作量:

  • 它要先经过缩放,再叠加机器人的默认站立姿态,才会变成底层控制器真正接收的关节目标;
  • 随后,控制器再根据目标位置和实际位置之间的差异,驱动电机完成动作。

换句话说,真正让腿动起来的从来不只是网络,而是“网络输出—动作转换—底层控制”共同组成的一条链路。

翻开宇树公开的Unitree-RL-GYM实物部署代码,可以看到网络输出需要先被转换成目标关节角;机器人反馈回来的状态,也要按照关节映射重新排列,对角度减去默认值,再对不同信息分别缩放,之后才会送入策略。

这意味着,即使模型权重完全相同,只要前后的解释方式变了,机器人的行为就可能完全不同。

比如,训练时的关节角表示“相对站立姿态偏了多少”,部署时送入的却是编码器直接读出的“绝对角度”。两边数组长度一样,程序也不会报错,但策略眼中的身体已经换了一个姿势。

动作缩放、关节顺序和控制增益也是如此——任何一处没有对齐,都会让同一个数字变成不同的运动。

▲图1 | 策略接收的是经过处理的观测,输出的是需要继续解释的动作。

数值含义对上了,还不等于策略看见了同一个世界。因为从仿真走向真机之后,信息的来源也变了。

在仿真中,身体速度、脚是否接触地面等状态可以直接读取;

现实里,机器人往往只能从 IMU、编码器和其他传感器的读数中把这些状态估计出来。

传感器真正测到的东西,与策略希望知道的东西之间,通常还隔着一层处理。

IMU 装在身体的哪个位置、采用哪个坐标系,都会影响姿态和角速度的含义;经过滤波和融合的状态,又有自己的更新节奏。如果训练时使用了真机无法直接获得的信息,部署时就必须找到相应的估计方式。

否则,训练端和部署端虽然都把某个变量叫作“速度”,背后代表的可能并不是同一种东西。

这种差别不只存在于身体状态里。机器人向外看时,同样要把传感器读数变成对地面的判断。

下面这组草丛中的画面就很直观:左边是真机经过的环境,右边是系统构建的高程地图。草叶被测到了,并不意味着那个高度就能承受机器人的重量。

▲图2 | 留意左侧的植被与右侧地图中的竖直起伏:传感器看到的表面,未必等于可靠的落脚支撑。右侧是估计地图,不是仿真真值。

“看见了什么”和“脚能踩在哪里”,中间仍然有距离。

而当信息内容终于对齐之后,下一个问题又来了:这些信息是什么时候到达的?

策略通常隔一段时间才更新一次,底层控制器则在两次更新之间继续执行上一条指令。

相同的关节目标,如果持续时间不同,对身体产生的影响也会不同。

比更新频率更隐蔽的,是信息到底“旧”了多久。

从采样、传输与状态处理,到策略推理、指令下发,每一段都在消耗时间;等指令送达,身体可能已经离开了采样时的位置。

只测网络推理耗时,看到的只是这段旅程中的一小截。

机器人控制中的“实时”,因此还要求每一轮都赶得上规定的截止时间,而且延迟尽量稳定。

ROS 2 的实时系统说明也区分了这两件事:平均算得快,不等于每一次都能及时完成。

到这里可以看到,所谓部署,并不是把一个模型文件从电脑 A 复制到电脑 B,而是把整条控制链搬到另一具身体上。

输入代表什么、输出怎样执行、反馈何时回来,三者必须同时成立。

可即使这条链路完全接对了,真机仍然可能走不好。因为策略面对的不只是数字和时钟,还有一具在仿真中被大幅简化过的身体。

02    仿真中的好成绩,也可能依赖被简化的身体

强化学习很擅长在给定规则中找到有效动作。训练环境允许它做什么、奖励鼓励它做什么,最后都会写进步态里。

如果仿真中的关节总能迅速跟上目标,策略就可能习惯用频繁、急促的调整维持平衡;

如果可用力矩设置得过于宽松,它也可能学会一些真实电机只能偶尔做到、却无法持续完成的动作。

训练曲线能够说明策略适应了这套仿真规则,却不会替我们检查这些规则是否符合硬件。

这类偏差很容易藏在一个“看起来已经很像”的机器人模型中。

外形、关节数量和运动范围都对得上,并不代表它和真机有同样的反应。新增的传感器会改变重量分布,传动系统会有摩擦和形变,电机的输出能力还会随速度和工作状态变化。

归根结底,问题仍是那一句话:同一条指令,能不能在两个世界里产生相近的运动?

  • 早期的 ANYmal 强化学习工作之所以专门学习一个“执行器模型”,正是为了回答这个问题。

研究人员先让真实关节执行动作,记录目标与实际位置的偏差、运动速度和最终产生的力矩,再让一个模型去学习其中的响应关系;之后,训练策略面对的就不再是一个随叫随到的理想电机,而是一个更接近真实硬件反应的关节。

从该研究给出的对比也能看到,理想模型预测的力矩与真实测量之间存在明显差别,而学习得到的执行器模型更接近真实响应。

这里的意义不只是一条曲线更准,而是策略终于在训练阶段感受到了真机电机的“脾气”。

▲图3 | 青色虚线为实测力矩,红线为学习模型预测,橙色点划线为理想模型预测;下方紫线是对应的目标关节角。相同目标如何变成实际力矩,是策略与身体之间的重要联系。

当然,这并不意味着必须在仿真里复刻现实世界的“每一颗螺丝”。更实际的做法,是先找出哪些差异真的会改变目标任务中的动作结果:

比较仿真和真机关节的实际轨迹,标定影响明显的参数,再观察误差是否会随速度、载荷和动作幅度变化。

模型需要准确到什么程度,应该由任务来回答。

下面的分屏把真机与仿真中的行走放在了一起,提供了一个直观的观察窗口。不过,画面看起来接近仍只是起点:究竟哪里对齐了,还要回到关节轨迹、响应时序和实验记录中检查。

▲图4 | 上方为真机,下方为仿真,可以看到在地面材质接近仿真环境时,机器人的行走姿态和关节变化也能够和仿真保持一致,从而获取比较好的迁移效果。

关节自身的响应还只是第一层。摆动时少转一点,也许只是轨迹不够准确;腿一旦落地支撑,同样的偏差就可能改变身体姿态,进而影响下一轮动作。

这条反馈既可能把偏差压下去,也可能让偏差继续扩大。

  • 而支撑关系,还会被地面本身改变。

仿真里常用摩擦系数描述一块刚性平面,但现实中的草地、软土和会形变的足垫,并不只是“摩擦力换了一个数”。

看下面这段从硬板走上泡沫的过程:落脚之后,支撑面本身也在变化。即使视觉上都是平地,脚掌会不会下陷、怎样获得支撑,都可能不同。

▲图5 | 可以观察到机器狗的脚落在黄色泡沫上时,材料随受力变形的情况和木板不一致,从而给机器人的足部带来了不一样的物理反馈,这种没有见过的反馈最终导致机器狗的运动控制出现问题。它直观说明了为什么“换一种地面”不总能简化成“换一个摩擦系数”。

  • 训练中的奖励也遵循同样的逻辑。

速度跟踪、姿态保持、动作平滑和力矩代价,都在告诉策略“什么样的走法更好”。加大某项惩罚,可能压住一种不希望出现的动作,也可能让机器人连必要的调整都不敢做。

最终要看的仍然不是某一项分数,而是完整步态是否既完成任务,又落在真机能够执行的范围里。

只有当仿真允许的动作逐渐接近真实身体能够执行的动作,训练成绩才有了更可靠的物理基础。

但模型再准确,也只能描述某个时刻、某些条件下的机器人;真正运行起来以后,身体和环境还会继续变化。

03    现实总会变化,策略需要怎样的适应能力?

机器人可能换一块地面、背上新的载荷,脚垫也会慢慢磨损;传感器读数有噪声,外界还会突然推它一下。

再精细的固定模型,也只能描述其中一部分情况。

一种常见做法,是不让策略只在一个固定世界里练习:主动改变质量、摩擦等条件,这就是域随机化。

这个思路很好理解:既然无法把现实预测得分毫不差,就让策略提前见过更多变化。但它也很容易被误解成“随机得越多越安全”。

随机化能教会策略什么,取决于训练环境真正改变了什么。

  • 扩大摩擦系数范围,可以让机器人经历更多容易打滑的情况,却不会凭空产生软土的下陷;
  • 给观测叠加噪声,也不等于让策略体验一条在通信队列里等待过久的状态消息。表面上都是“不确定”,背后的物理过程却不一样。

训练是否覆盖了关键问题,要看变化的形成方式。

随机化很多与任务相距很远的条件,反而会增加学习难度;至于单位不一致、关节映射错误等有明确答案的问题,更应该直接修正。

可仅仅在训练阶段见过变化,还不一定足够。如果机器人背上的载荷突然增加,它还需要在运行过程中发现:刚才那条指令执行下去,身体的反应和以前不一样了。

最近一段时间的动作和反馈,便成了判断当前状况的线索。

  • RMA 的出发点正是如此。

它没有要求机器人先精确测出“现在增加了多少重量”或者“地面的摩擦系数是多少”,而是把近期的身体状态和动作历史压缩成一份环境摘要,再交给运动策略调整下一步。机器人不需要停下来重新训练,而是边走边根据反馈改变动作。

▲图6 | RMA:留意载荷被放到背上前后,机器人仍在持续迈步。动作与身体响应的近期历史,可以为适应模块提供变化线索。

但“边走边适应”并不意味着机器人已经能够应付任何环境。它可以根据身体反馈察觉变化,却未必能提前知道前方有什么;只靠本体感知,也无法保证识别所有障碍。

RMA 的实验中同样出现了较大扰动和复杂障碍导致的失败。

把前面的处理方式放在一起,就能看清它们各自在解决什么问题:

这些方法可以配合使用。

重点是先辨清差异从哪里来,再决定该修正什么、覆盖什么,以及运行中还需要判断什么。

而“继续走下去”本身,也比一段成功演示更值得追问。因为部署中的许多问题,不会在机器人迈出第一步时出现。

04    “已经部署成功”,还需要说明成功了多久、在什么条件下

一段真机视频能够证明,机器人在当时的条件下确实走了起来。

但如果要判断它是否已经具备可用的任务能力,还需要继续问:它背了多重的载荷,走在什么地面上,持续了多久,机载计算机是否还在同时运行感知和规划?

时间一拉长,短回合里看不见的问题就会慢慢冒出来。电机持续工作会积累热量,驱动器可能因为温度或电流限制而降低输出。刚开始能够轻松跟上的关节目标,后来可能越来越吃力。温度保护本身也许完全正常,但对运动策略来说,它面对的已经不是开机时的那具身体。

  • 类似的变化也会发生在计算系统里。

单独运行运动策略时,数据来得足够及时;一旦把视觉、地图和日志任务全部打开,调度与队列等待就可能改变。真正需要验证的,不是一个孤立算法的速度,而是机器人执行完整任务时,控制链是否仍能按节奏运转。

因此,真机测试要让每一次变化都有清楚的含义:换地面看接触,加载荷看身体响应,延长时间看逐渐积累的变化。

再把这些条件与当次版本、运行记录绑定,结果才有比较的基础。

▲图7 | 测试的价值不只在于记录成功或失败,还在于用真实响应修正此前的假设,并在可对照的条件下复测。真机测试应配备适合平台的安全保护。

相比倒地后的画面,失效发生前的数据往往更有价值。

机器人一旦失稳,姿态、关节速度和接触状态会同时变得异常,这些结果很容易遮住最早出现的偏差。如果能够看到目标动作、实际响应和信息时间戳是怎样一步步错开的,就更有机会找到问题最初从哪里发生。

这处偏差会决定下一轮该改哪里:补上身体模型遗漏的响应,调整训练覆盖的条件,还是修正信息的含义与时序。

沿着图中的回路反复验证,Sim2Real 才成为仿真和现实之间持续往返的过程。

通用的四足强化学习技能:

  • 训练时不挑硬件:CPU能跑,GPU能跑,Windows能跑,macOS能跑,Linux当然也能跑。
  • 部署时不挑生态:训出来的策略,宇树能用,小米能用,智元能用,国外的也能用,不绑定任何一家硬件平台。
  • 仿真到真机不翻车:碎石、斜坡、台阶,仿真里什么样,真机上就什么样。

真正理解四足机器人底层物理本质,再用RL控制它!

公众号小店👇(秒占名额)

至此,我们可以尝试“下一个结论”:

足式机器人在仿真里学会的,并不是一种脱离条件、随处都能使用的“走路本领”,而是一套在特定身体、信息和环境中产生有效动作的方法。

从仿真走向真机,就是逐一弄清这些条件发生了什么变化,再让策略、模型和控制系统共同消化这些变化。

只有当机器人能够在目标载荷、地面和工作时长下反复完成任务,我们才有充分理由,把仿真里的表现称为已经落到真实世界中的能力。

IROS2025冠军亲授 · 8周掌握四足全栈技术 | MATRiX可微仿真 · RL运动控制 · Sim2Real迁移

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐