强化学习真机部署:机器人在仿真里,究竟学会了什么?

足式机器人:从仿真到真机部署,有哪些你不知道的‘坑’?
——把策略训得对、跑得稳
目录
数值含义对上了,还不等于策略看见了同一个世界。因为从仿真走向真机之后,信息的来源也变了。
相同的关节目标,如果持续时间不同,对身体产生的影响也会不同。
每次训练结束后,一套运动策略最终会被保存成一个模型文件。接下来只要把模型装进真机,接上传感器和电机,就能把这套本领原样搬到现实?

真机部署最容易出问题的地方,正在于“原样搬过去”。
动作的数字怎么解释、观测的信息从哪来、指令什么时候到、身体的响应是否一致、走久了会发生什么……
沿着这个问题往下看,接口、时延、电机、地面和环境变化就不再是一串零散的“坑”,而是同一件事的不同侧面:
策略赖以成立的条件,到了真机上正在发生变化。
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迁移
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)