ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

SuperMimic运动参考库详解: LAFAN1重采样、跟踪刚体FK与K帧目标编码的完整指南

SuperMimic运动参考库详解: LAFAN1重采样、跟踪刚体FK与K帧目标编码的完整指南

【免费下载链接】supermimic_vibed

vibe coded supermimic within 1h, LAFAN passed within 1.5 gpuh training

项目地址:https://gitcode.com/gh_mirrors/su/supermimic_vibed
点击查看免费下载

SuperMimic 是一个在 Isaac Lab 3(kit-less + MuJoCo-Warp)上复现的人形机器人全身运动跟踪项目:只用 1 张 GPU、约 1.5 小时训练,就得到一个能跟踪全部 40 条 LAFAN1 舞蹈/跑酷动作的 G1 运动策略,评估回报 0.829、0/40 失败。本文面向新手,逐层拆解它的运动参考库三大核心:LAFAN1 的 30→50 Hz 重采样、可微正向运动学(FK)计算的 14 个跟踪刚体,以及 K=10 帧的未来目标编码,并给出对应源码路径,方便你快速上手阅读。

一张图看懂结果:1.5 GPU 小时打平论文 18 小时

先看成绩。下图是主训练曲线:评估归一化回报在 1.24 h 达到 0.824(论文目标 0.82 @ 1.2 h, H100),1.47 h 时 40/40 动作全部跟踪成功。

完整训练日志:MILESTONES.md

这套"小成本"策略的底层,就是一个组织得非常干净的运动参考库(MotionLib)。它做的事只有三件:把原始动作数据变成 50 Hz 的帧序列、用同一套可微 FK 算出参考姿态与速度、把未来 K 帧打包成策略的目标向量。下面逐一拆解。

运动参考库是什么:MotionLib 与数据流

原始数据来自 40 条重定向到 G1(29 自由度)的 LAFAN1 动作 CSV(dance、jumps、fallAndGetUp、sprint 等,共 264,705 帧 @ 30 fps),每条包含:

字段列说明
根部位姿前 3 列pelvis 位置 (x, y, z)
根部四元数4~7 列姿态(xyzw 存储,内部转 wxyz)
关节角8~36 列29 个关节,顺序与 Unitree SDK 一致

MotionLib在 supermimic/motion.py 中一次性加载所有 CSV,拼接成一个大张量并建立索引:

  • clip_len/clip_start/clip_end:每条动作的帧数与起止帧;
  • clip_id:全局帧号 → 所属动作;
  • bin_clip/bin_start:1 秒一个 bin,用于后面"按回报采样重置点"。

数据流可以概括为:

40 × CSV(30Hz) ──重采样──▶ 50Hz 帧序列 ──中心差分──▶ 速度/角速度 │ ▼ 可微 FK(14个跟踪刚体位姿+速度) │ goal(f, K=10) ◀┘ ▼ 策略 π 的目标向量 g

LAFAN1 重采样详解:30 Hz 到 50 Hz 的关键一步

控制频率是 50 Hz(CONTROL_DT = 0.02,4 个 5 ms 子步),所以第一步就是把 30 fps 的原始数据重采样到 50 Hz。实现见 supermimic/motion.py#L28-L39:

  • 位置 / 关节角:按时间线性插值(Lerp);
  • 根部姿态:四元数用quat_slerp(球面插值)而不是线性插值,保证旋转路径平滑且单位长度不漂移;
  • 帧数:n = floor(dur / 0.02) + 1,每条动作末尾帧自然对齐到 50 Hz 网格。

插值之后再算速度,这一步直接决定了奖励信号的"干净程度":

  • 线速度v、关节速度qd用中心差分(_gradient,两端单侧差分),见 supermimic/motion.py#L116-L120;
  • 世界系角速度w由旋转矩阵差R[t+1]ᵀR[t-1]取so3_log再除以2dt得到,见 supermimic/motion.py#L51-L55。

小细节:重采样后的根速、根角速度还会预转到根局部系(root_v_local/root_w_local),根帧投影重力root_gz也一并缓存(supermimic/motion.py#L67-L71),这些正是 10 帧历史观测里的字段。

跟踪刚体 FK:用一套可微运动学对齐模拟器

跟踪哪些部位?TRACKED_BODIES定义了14 个刚体:pelvis、左右髋/膝/踝 roll 连杆、torso、左右肩/肘/腕(见 supermimic/robot.py#L52-L58)。

项目的巧劲在于:它没有直接信任仿真器输出的 link 状态,而是在 supermimic/kinematics.py 里用 PyTorch 从零写了一套可微正向运动学G1Kinematics:

  • 从编译好的 MJCF(data/g1_description/g1_29dof.xml)读取 kinematic tree:每个 body 的父节点、关节轴axes、局部偏移offs_p/offs_R;
  • forward()沿树递推(supermimic/kinematics.py#L62-L89):
    • 位置pᵢ = p父 + R父·offᵢ,姿态Rᵢ = R父·R_off·Rot(axis, q);
    • 速度用刚体运动学递推:vᵢ = v父 + ω父 × (pᵢ − p父),ωᵢ = ω父 + q̇·axis_world。

同一套 FK 三处共用:参考动作、仿真器记录状态、世界模型预测。因此解析奖励头与仿真标注的奖励严格一致,且与模拟器的 link 位姿/速度对到 ~1e-6(可用 tools/test_env.py 验证)。这也是"一个可微世界模型"能稳定收敛的地基之一。

K 帧目标编码:未来 10 帧如何变成 73 维向量

策略的目标不是"下一帧姿态",而是未来 K=10 帧的参考运动序列(--goal_frames 10,supermimic/train.py#L23),由MotionLib.goal()生成,见 supermimic/motion.py#L94-L110:

  1. 取未来帧f+1 … f+K,并在动作末尾钳位到最后一帧(future_frames),避免越界;
  2. yaw 不变性:用当前参考根帧的yaw_mat(只保留朝向投影)把所有量变换到"去掉全局航向"的坐标系,策略无需知道机器人在世界里的绝对朝向;
  3. 每帧特征(73 维):
特征维度含义
Δp3未来帧相对当前参考帧的位移(yaw 系下)
6D 旋转6未来帧根姿态(mat_to_6d,连续且无万向锁)
root_v_local / root_w_local6未来帧根局部速度
q / 0.1·qd29 + 29未来帧关节角与(缩小 10 倍权重的)关节速度
  1. K帧 flatten 成730维向量g,与 10 帧历史观测o_hist一起送入运动编码器 MLP(2048→1024→512→256,输出 z∈R³²,tanh),见 supermimic/networks.py 与 README "Implementation" 一节。

为什么这样设计?目标只由参考数据构成,不依赖机器人当前状态——同一个编码的 z 可以被想象(imagined)rollout 反复使用,配合 32 步 BPTT 与世界模型即可在"脑内"更新策略,这正是 1.5 小时训完的关键。

彩蛋:1 秒 Bin 与"按回报采样"的重置

MotionLib还把每条动作按 1 秒切成 bin(BIN_FRAMES = 50,supermimic/motion.py#L72-L87),维护frame_bin反向索引。这是模拟器重置采样(supermimic/env.py)的基础:50% 均匀 + 40% softmax(−25·G_b/G_max) + 10% 偏向过去的采样,让训练时间优先花在"难但接近成功"的片段上,而不是平均用力。

小结:三个要点带走

  • 重采样:Lerp + Slerp 到 50 Hz,中心差分算速度,四元数转 wxyz,全部在加载时一次算完(supermimic/motion.py);
  • FK:一套 torch 可微正向运动学同时服务参考、仿真与世界模型,14 个跟踪刚体位姿+速度对齐到 1e-6(supermimic/kinematics.py);
  • 目标:K=10 帧、yaw 不变、73 维/帧的未来参考序列,让策略"看得见未来"(supermimic/motion.py#L100-L110)。

想复现完整流程:tools/setup.sh准备环境 →tools/download_data.sh拉取 LAFAN1 数据与 G1 模型 →CPUS=0-23 ./run_train.sh lafan1_main开训,最后用 tools/plot.py 画出你自己的成功曲线。

【免费下载链接】supermimic_vibed

vibe coded supermimic within 1h, LAFAN passed within 1.5 gpuh training

项目地址:https://gitcode.com/gh_mirrors/su/supermimic_vibed
点击查看免费下载

相关推荐

上一篇:openEuler/oemaker:从0到1打造专属Linux DVD镜像的终极工具
下一篇:不重启Codex也能用第三方模型:Codex-X的秘诀是什么

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

返回列表