人形机器人整机延迟如何系统治理:从关节内环、策略闭环到 Sim2Real / Real2Sim
前言
在人形机器人整机调试中,我们经常用“延迟”解释一些难以复现的问题:仿真中动作干净,实机上却出现落脚发软、触地回弹、关节振荡;同一套策略更换一批关节模组后表现明显变化;主控侧增加几毫秒推理时间似乎没有明显影响,模组内部增加一两个控制周期却会让动作产生肉眼可见的差异。
这些现象容易让人产生一个误区:只要测出“策略到电机”的端到端延迟,再想办法把这个数字降下来,就能解决问题。
实际上,延迟对系统的影响并不只由毫秒数决定,更取决于两个问题:
- 延迟发生在闭环的什么位置;
- 延迟相对于该闭环的带宽有多大。
对于系统负责人而言,真正需要管理的不是一个笼统的“总延迟”,而是一套完整的延迟拓扑、延迟预算、测量方法、仿真模型和验收标准。本文结合人形机器人常见的“低频策略 + 高频关节阻抗控制”架构,对整机延迟问题进行系统梳理,并重点讨论它对策略部署、Sim2Real 和 Real2Sim 的影响。
一、先建立一个正确认识:延迟的危害不等于延迟的毫秒数
以常见的关节力位混合控制为例,上层向关节模组发送:
- 目标位置 qdq_dqd;
- 目标速度 q˙d\dot q_dq˙d;
- 位置增益 KpK_pKp;
- 速度增益 KdK_dKd;
- 前馈力矩 τff\tau_{ff}τff。
关节最终执行的控制律通常可以写成:
τcmd=τff+Kp(qd−q)+Kd(q˙d−q˙) \tau_{cmd} =\tau_{ff} +K_p(q_d-q) +K_d(\dot q_d-\dot q) τcmd=τff+Kp(qd−q)+Kd(q˙d−q˙)
从机械效果看,这相当于在关节上构造一个虚拟的“弹簧—阻尼器”:
- KpK_pKp 决定关节偏离目标后被拉回去的力度,即虚拟刚度;
- KdK_dKd 抑制运动和振荡,即虚拟阻尼;
- τff\tau_{ff}τff 提供主动的前馈输出。
在这种架构下,上层指令晚到 5 ms,与关节反馈和力矩执行晚 5 ms,并不是同一件事。
1. 上层延迟:目标来晚了
如果策略输出或通信存在延迟,关节可能暂时仍在执行上一周期的目标:
τ(t)=Kp[qd(t−Tu)−q(t)]−Kdq˙(t)+τff(t−Tu) \tau(t) =K_p[q_d(t-T_u)-q(t)]-K_d\dot q(t)+\tau_{ff}(t-T_u) τ(t)=Kp[qd(t−Tu)−q(t)]−Kdq˙(t)+τff(t−Tu)
此时,目标 qdq_dqd 是旧的,但关节位置和速度反馈仍然是当前的。模组内部闭环仍在稳定工作,只是在稳定地追踪一个稍旧的参考目标。
因此,这类延迟通常首先表现为:
- 动作整体相位滞后;
- 轨迹跟踪误差增加;
- 前馈力矩与运动时序发生偏移;
- 接触切换和快速响应不够及时。
它主要影响的是“跟踪是否及时”,不一定直接破坏关节的局部稳定性。
2. 内环延迟:纠偏做晚了
如果关节控制器使用的是过去的位置和速度:
τ(t)=Kp[qd(t)−q(t−Td)]+Kd[q˙d(t)−q˙(t−Td)] \tau(t) =K_p[q_d(t)-q(t-T_d)] +K_d[\dot q_d(t)-\dot q(t-T_d)] τ(t)=Kp[qd(t)−q(t−Td)]+Kd[q˙d(t)−q˙(t−Td)]
那么控制器实际上是在根据关节过去的运动状态,决定现在应该输出什么力矩。
对于较小的延迟,可以近似写成:
q(t−Td)≈q(t)−Tdq˙(t) q(t-T_d)\approx q(t)-T_d\dot q(t) q(t−Td)≈q(t)−Tdq˙(t)
只看位置反馈,有:
−Kpq(t−Td)≈−Kpq(t)+KpTdq˙(t) -K_pq(t-T_d) \approx -K_pq(t)+K_pT_d\dot q(t) −Kpq(t−Td)≈−Kpq(t)+KpTdq˙(t)
而正常的阻尼力矩应该是 −Kdq˙-K_d\dot q−Kdq˙。因此,延迟的刚度反馈会产生一项与正常阻尼方向相反的作用。低频近似下,可以理解为:
Kd,eff≈Kd−KpTd K_{d,\mathrm{eff}}\approx K_d-K_pT_d Kd,eff≈Kd−KpTd
这意味着:
- KpK_pKp 越高,同样的延迟越敏感;
- KdK_dKd 越小,越容易出现阻尼不足;
- 原本用于稳定关节的反馈,可能在部分运动阶段向系统注入能量;
- 最终表现为超调、回弹、振荡,严重时甚至失稳。
因此,可以用一句话概括两者区别:
上层延迟是“目标来晚了”,主要影响跟踪;内环延迟是“纠偏做晚了”,会直接改变关节的等效阻抗和闭环稳定性。
二、为什么模组内部 1~2 ms,可能比上层 5~10 ms 更敏感
纯延迟在频域中可以表示为:
e−sT e^{-sT} e−sT
它不直接改变幅值,却会引入与频率成正比的相位滞后:
Δϕ=−ωT=−360∘fT \Delta\phi=-\omega T=-360^\circ fT Δϕ=−ωT=−360∘fT
例如,同样是 2 ms 延迟:
- 对 2 Hz 运动只引入约 1.44∘1.44^\circ1.44∘ 相位滞后;
- 对 20 Hz 响应引入约 14.4∘14.4^\circ14.4∘;
- 对 50 Hz 响应引入约 36∘36^\circ36∘;
- 对 100 Hz 响应引入约 72∘72^\circ72∘。
在人形机器人中,上层策略通常运行在 50 Hz 左右,一个控制周期约为 20 ms,动作主体频率可能只有几 Hz;但关节局部控制、触地冲击、结构弹性和电流响应涉及的频率往往高得多。
所以,不能直接比较“上层 10 ms”和“模组内 2 ms”哪个更大,而应比较:
ωT \boxed{\omega T} ωT
也就是延迟相对于所在闭环带宽的大小。
延迟会持续侵蚀闭环相位裕度。若要在延迟不变的情况下恢复稳定裕度,通常只能降低闭环带宽或减小控制增益,代价则是关节响应变慢、刚度下降。控制系统中的时延与相位裕度之间存在直接关系,这也是高性能伺服系统特别重视“采样—计算—PWM 更新”链路延迟的原因。
三、作为系统负责人,需要建立整机延迟拓扑
整机延迟不能只按硬件模块划分,更应该按信号在控制闭环中的作用划分。
1. 观测链路延迟
包括:
- 编码器、IMU、力传感器等硬件采样;
- 传感器内部滤波;
- 驱动器状态回传;
- 总线传输与数据接收;
- 中间件转发;
- 状态估计、坐标变换和观测拼接。
它决定策略在时刻 ttt 看到的状态,实际上对应的是多久以前的机器人。
如果观测延迟为 ToT_oTo,策略真正获得的可能是:
ot≈o(t−To) o_t \approx o(t-T_o) ot≈o(t−To)
这会破坏训练时默认的“当前观测对应当前状态”的假设,使策略面临隐含的部分可观测问题。
2. 策略计算延迟
包括:
- 神经网络推理;
- CPU/GPU 数据搬运;
- 线程调度;
- 控制周期等待;
- 推理完成后等待下一次发送窗口。
需要特别注意:推理耗时并不等于策略延迟。假如一次推理只用了 2 ms,但任务刚好错过发送周期,又等待了 18 ms,那么实际控制年龄远大于模型的纯推理时间。
3. 指令传输与生效延迟
包括:
- 数据序列化;
- DDS、共享内存、Zenoh 或自研中间件转发;
- CAN、EtherCAT、RS-485 等总线调度;
- 驱动器接收、解析和寄存器更新;
- 指令是否立即生效,还是等待下一个内部控制周期。
这部分延迟主要决定新参考目标何时进入关节内环。
4. 关节反馈与阻抗计算延迟
它描述从关节真实运动发生变化,到新的 PD 力矩指令被计算出来所经历的时间。
这是影响关节等效刚度、阻尼和稳定裕度的关键延迟之一,尤其需要关注:
- 位置反馈的新鲜度;
- 速度估计使用了多长的差分窗口;
- 低通滤波带来了多少群延迟;
- PD 任务的实际执行周期是否稳定;
- 反馈和控制输出是否属于同一个时间截面。
5. 力矩执行延迟
它描述从目标力矩产生,到实际电流和机械力矩建立起来的时间,包括电流环、PWM 更新以及电机电气动态等综合效果。
即使 PD 使用的是最新状态,如果实际力矩晚到,机械闭环中仍然存在执行侧相位滞后。
6. 多关节同步误差与延迟抖动
人形机器人不能只看单个关节的平均延迟,还要关注:
- 左右腿指令是否同一时刻生效;
- 不同总线或不同驱动板之间是否同步;
- 关节状态是否来自同一个采样时刻;
- 延迟是固定值,还是在一个范围内随机变化;
- 是否存在偶发长尾延迟和丢周期。
固定的 2 ms 延迟通常可以被辨识、建模和补偿;在 0.5~4 ms 之间随机跳动的延迟更难处理,因为策略面对的是一个不断变化的系统。对整机而言,延迟的方差、长尾和跨轴不一致性,有时比平均值更重要。
四、延迟对策略与 Sim2Real 的主要影响
1. 破坏训练环境中的时序假设
大多数强化学习环境默认每个控制周期执行以下过程:
- 读取当前状态;
- 根据当前状态计算动作;
- 动作立即作用于仿真模型;
- 仿真向前推进一个控制周期。
而实机更接近:
- 读取不同时间戳的传感器状态;
- 状态经过滤波和拼接;
- 策略根据旧观测计算动作;
- 动作经过调度和总线传输;
- 模组在稍后的内部周期中应用目标;
- 实际力矩再经过电流和机械响应建立。
因此,仿真中的 ot→at→τto_t\rightarrow a_t\rightarrow\tau_tot→at→τt,在实机中可能变成:
o(t−To)→a(t−To−Tp)→τ(t−To−Tp−Ta) o(t-T_o) \rightarrow a(t-T_o-T_p) \rightarrow \tau(t-T_o-T_p-T_a) o(t−To)→a(t−To−Tp)→τ(t−To−Tp−Ta)
这不仅是动作晚了,而是观测、动作和力矩已经不再属于同一个物理时刻。
2. 改变策略所面对的真实动力学
如果训练时关节力矩可以立即响应,而实机存在反馈延迟、力矩建立延迟和速度滤波,那么实机关节的等效阻抗已经不同于仿真。
策略在训练中学到的是:
输出某个目标位置后,关节会以某种刚度、阻尼和响应速度工作。
但实机可能表现为:
- 等效阻尼更低;
- 触地后下沉更多;
- 力矩峰值到达更晚;
- 关节存在额外振荡;
- 左右腿或不同关节响应不同步。
即使质量、惯量、摩擦和电机峰值参数全部准确,延迟模型错误仍然会造成明显的 Sim2Real gap。
3. 接触状态下的误差会被全身耦合放大
在人形机器人上,延迟影响最明显的往往不是空中摆动,而是:
- 足底触地;
- 单双支撑切换;
- 快速起步和停止;
- 跳跃落地;
- 外力扰动恢复。
触地冲击包含较高频率成分。某个踝关节或膝关节晚几毫秒输出力矩,可能改变足端等效阻抗和地面反作用力,随后进一步影响膝、髋、躯干姿态和质心状态。单关节的局部时序误差,最终会被放大为全身运动差异。
4. 导致策略分布外运行
策略训练时可能从未见过“位置已经越过目标,但力矩仍在按越过前的方向输出”的状态组合。延迟造成的状态—动作错位会把机器人推入训练数据之外的状态分布,策略随后给出的动作可能进一步放大误差。
因此,延迟并不只是增加固定的轨迹误差,它还可能通过闭环递归累积,最终演化为明显的动作失真或失稳。
五、Real2Sim:先辨识真实系统,再决定仿真中应该建模什么
面对延迟问题,我更倾向于优先采用 Real2Sim 思路,而不是一开始就要求所有环节必须达到理想性能。
原因很现实:
- 不同供应商模组的闭环实现不可见;
- 供应商给出的控制频率不代表实际闭环带宽;
- 标称 1 kHz 不能说明反馈年龄、滤波延迟和力矩建立时间;
- 部分延迟在短期内无法通过主控侧优化消除;
- 机器人最终需要适应的,是已经采购并装配完成的真实系统。
所以第一步不是猜测内部实现,而是从系统输入输出关系上辨识它。
1. 建立分段延迟测量
至少应区分以下三类:
| 测量项 | 起点 | 终点 | 主要意义 |
|---|---|---|---|
| 指令生效延迟 | 指令发送或到达驱动器 | 新参考目标开始生效 | 描述参考侧延迟 |
| 反馈控制延迟 | 关节状态发生变化 | PD/目标电流发生响应 | 描述机械反馈闭环延迟 |
| 力矩执行延迟 | 目标电流或目标力矩变化 | 实际电流/力矩建立 | 描述执行侧延迟 |
如果暂时无法直接读取模组内部变量,也可以将模组视为黑箱,通过小幅阶跃、扫频、扰动恢复和外部测量,辨识其整体响应。
2. 不只记录平均延迟
建议至少记录:
- 平均值;
- 标准差;
- 最大值与高分位值,如 P95、P99;
- 周期性抖动;
- 偶发丢周期;
- 不同关节之间的相对延迟;
- 空载、带载、不同速度和不同总线负载下的变化。
3. 建立延迟预算表
系统负责人需要把整机控制路径明确到可验收的程度,例如:
| 环节 | 目标周期/延迟 | 实测平均值 | P99 | 抖动 | 是否进入仿真 |
|---|---|---|---|---|---|
| 传感器采样与状态回传 | 待定义 | 实测 | 实测 | 实测 | 是 |
| 状态估计与观测拼接 | 待定义 | 实测 | 实测 | 实测 | 是 |
| 策略推理 | 待定义 | 实测 | 实测 | 实测 | 是 |
| 中间件与总线发送 | 待定义 | 实测 | 实测 | 实测 | 是 |
| 模组目标生效 | 待定义 | 实测 | 实测 | 实测 | 是 |
| 关节反馈与力矩建立 | 待定义 | 实测 | 实测 | 实测 | 是 |
这张表的意义不是追求所有数字越小越好,而是把延迟从“调试经验”变成系统参数和产品指标。
六、Sim2Real:延迟必须插在正确的位置
很多训练环境只通过延迟 action 模拟实机延迟,例如把历史动作放入队列,若干周期后再执行。这样只能模拟“参考目标晚到”,不能完整模拟反馈延迟和力矩执行延迟。
至少应区分以下几类模型。
1. 观测延迟
策略读取历史观测:
otpolicy=ot−do o_t^{policy}=o_{t-d_o} otpolicy=ot−do
用于模拟状态回传、滤波和观测构建造成的信息年龄。
2. 动作或目标延迟
关节收到历史动作:
atjoint=at−da a_t^{joint}=a_{t-d_a} atjoint=at−da
用于模拟策略计算、调度、总线传输和目标寄存器生效延迟。
3. 关节反馈延迟
仿真 PD 使用历史位置和速度:
τt=Kp(qd,t−qt−df)+Kd(q˙d,t−q˙t−df)+τff,t \tau_t =K_p(q_{d,t}-q_{t-d_f}) +K_d(\dot q_{d,t}-\dot q_{t-d_f}) +\tau_{ff,t} τt=Kp(qd,t−qt−df)+Kd(q˙d,t−q˙t−df)+τff,t
用于模拟模组内部反馈、速度估计和阻抗计算的综合滞后。
4. 力矩执行动态
最终作用于仿真的力矩不应始终等于瞬时计算力矩,可以使用纯延迟、低通动态或二者组合:
τreal(t)=Gactuator(s)e−sTττcmd(t) \tau_{real}(t) =G_{actuator}(s)e^{-sT_\tau}\tau_{cmd}(t) τreal(t)=Gactuator(s)e−sTττcmd(t)
其中 Gactuator(s)G_{actuator}(s)Gactuator(s) 可以用于描述电流环、力矩建立、限幅以及模组等效响应。
5. 延迟随机化
训练时应根据实测分布随机化,而不是随意给一个很大的均匀分布。建议分别建模:
- 固定基线延迟;
- 小范围周期抖动;
- 少量长尾延迟;
- 不同关节之间的差异;
- 不同观测通道的时间戳差异。
随机化范围过小,无法提高鲁棒性;范围过大,则会迫使策略过度保守,降低动作精度和动态性能。合理做法是以实测分布为中心,再保留一定工程裕量。
七、策略层可以如何适应延迟
在真实延迟暂时无法完全消除时,可以从策略和状态表达上提高鲁棒性。
1. 引入历史观测或循环网络
单帧观测无法区分“状态本身如此”和“状态因为延迟看起来如此”。加入历史观测、历史动作,或者使用 LSTM/GRU,可以帮助策略隐式估计速度、趋势和延迟状态。
2. 向策略提供上一时刻动作
由于当前关节可能仍在执行历史动作,把最近若干步 action 纳入观测,有助于策略理解当前系统实际受到了什么控制输入。
3. 基于时间戳进行状态外推
如果每个状态量都有可靠时间戳,可以根据位置、速度和必要的动力学模型,将旧状态外推到当前时刻。它不能替代低延迟反馈,但可以降低观测年龄带来的状态错位。
4. 参考轨迹适当前瞻
对于已知未来的动作模仿轨迹,可以向策略提供未来若干帧参考,或按照已辨识的延迟对参考相位进行前移,使动作到达实机时更接近正确时刻。
但需要注意,前瞻可以补偿确定性的参考延迟,不能真正修复关节反馈闭环的稳定性问题。
5. 对延迟进行条件化
如果不同机器人、不同关节或不同工况的延迟差异较大,可以将估计延迟、模组类型或执行器状态作为策略条件,让同一策略学会适配不同执行特性。
八、延迟优化:先处理高风险闭环,再优化端到端数字
Sim2Real 和 Real2Sim 是为了让策略能够在现有系统上可靠工作,但这并不意味着不需要优化真实延迟。正确的优先级应该是:
- 先测量并确定延迟发生在哪里;
- 优先处理位于高带宽闭环中的延迟;
- 将暂时无法消除的部分准确建模到仿真;
- 再逐步优化主控、通信和计算效率。
1. 架构层
- 将高带宽反馈闭环尽可能放在靠近执行器的位置;
- 明确上层策略与底层阻抗控制的带宽分工;
- 避免上层和模组内部同时实现相互冲突的滤波与控制;
- 建立统一时钟、时间戳和多轴同步机制。
2. 主控与软件层
- 使用实时优先级、CPU 绑核和合理的任务调度;
- 减少不必要的数据复制、序列化和跨进程转发;
- 避免多级队列和隐式缓存;
- 将推理完成时刻与总线发送时刻统一分析;
- 监控周期抖动、偶发阻塞和长尾延迟,而不是只看平均推理时间。
3. 通信层
- 明确总线调度周期和指令生效时刻;
- 控制总线负载,避免拥塞导致的不确定延迟;
- 对多关节进行同步发送和同步生效;
- 对丢包、旧包和重复包建立明确处理机制。
4. 驱动与控制层
- 减少不必要的反馈滤波和过长的速度估计窗口;
- 在噪声与群延迟之间做系统权衡;
- 根据真实延迟重新设计 KpK_pKp、KdK_dKd 和闭环带宽;
- 避免只通过提高 KdK_dKd 粗暴补偿,因为速度噪声和延迟同样会被放大;
- 将反馈延迟、力矩执行延迟作为模组选型和供应商验收指标。
九、建议建立的测试与验收体系
延迟治理最终需要落实到可重复的测试流程,而不是依赖某位工程师“感觉这个模组响应更快”。
1. 单关节基础测试
- 小幅位置阶跃;
- 速度阶跃;
- 力矩或电流阶跃;
- 正弦扫频;
- 外力扰动后的自由衰减;
- 不同 Kp/KdK_p/K_dKp/Kd 下的响应对比;
- 空载与典型负载对比。
关注指标包括:
- 上升时间;
- 超调量;
- 稳态误差;
- 相位滞后;
- 共振峰;
- 扰动衰减速度;
- 指令与实际电流/力矩的时序关系。
2. 整机动态测试
- 原地站立扰动;
- 慢速与快速踏步;
- 不同地面硬度下的触地;
- 跑步、急停和落地;
- 不同总线负载和主控负载下的重复测试。
3. 仿真对齐测试
同一条参考动作分别在仿真与实机中执行,统一比较:
- qd−qq_d-qqd−q;
- q˙d−q˙\dot q_d-\dot qq˙d−q˙;
- 目标力矩与实际电流/估计力矩;
- 触地时刻;
- 足端速度;
- IMU 角速度和姿态;
- 关键关节的频响和衰减特征。
如果加入延迟模型后,仿真中的超调、相位和触地响应更接近实机,说明 Real2Sim 模型正在逼近真实系统;如果只是整体轨迹晚了一点,而关节振荡特征仍然不同,则说明可能只模拟了 action delay,没有覆盖反馈和执行动态。
十、系统负责人的最终关注点
从整机角度看,延迟问题不应被简单归属给算法、软件、通信或关节模组中的某一个团队。它贯穿传感器、主控、策略、中间件、总线、驱动器、电流环和机械系统,是典型的跨模块系统问题。
系统负责人真正需要把控的是以下几件事:
- 闭环位置:延迟发生在参考输入侧、观测侧,还是高带宽反馈和执行侧;
- 频率关系:延迟相对于所在闭环带宽有多大,而不是只比较毫秒数;
- 时间一致性:观测、动作和力矩是否对应同一物理时间;
- 统计特征:不仅看平均值,也看抖动、长尾和多轴差异;
- 仿真映射:不同延迟必须被插入仿真中的正确位置;
- 工程优先级:优先治理会破坏阻尼和稳定裕度的内环延迟,再优化影响跟踪及时性的上层延迟;
- 闭环验证:通过 Real2Sim 辨识、Sim2Real 训练和实机复测持续迭代,而不是一次性设定参数。
最终目标并不是把整机所有延迟都降到理论最小,而是做到:
延迟可测量、来源可定位、影响可解释、仿真可复现、策略可适应、指标可验收。
当延迟从一个模糊的“实机效果问题”转化为明确的系统参数后,很多原本依赖反复试错的 Sim2Real 调试,就能够进入可建模、可对比、可迭代的工程流程。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)