[BeyondMimic]G1人形项目复现--细节

起兴

莫听穿林打叶声,何妨吟啸且徐行。竹杖芒鞋轻胜马,谁怕?一蓑烟雨任平生。
2026-01-03 17:12:58 星期六

写在前面

这篇博客方便知识点的记录和日后的学而时习之。笔者梦到哪里写到哪里,如有不对之处,请读者纠正见谅。
这里不系统性记录整个项目的复现过程,而是以碎片化细节的形式记录每一个小点和小坑。

正文

1 观测使用旋转矩阵的前两列

为什么不用四元数而用 6D?四元数有 符号二义性:q −q 表示同一个旋转(学习时会“跳变”)。且四元数要归一化,且在某些角度附近仍可能出现不连续梯度
6D 表示在欧氏空间里更“平滑”,对网络回归更友好(经验上更稳)。

2 armature

转子转动惯量,从负载侧观测到的电机的转子映射到当前视角下的额外的转动惯量,因为电机转动不仅带动转子(rotor)的旋转,还有负载的旋转,更细节的来说,还包括一些齿轮组的转动惯量的等效,下面是GPT对这一概念的详细解释。这个量是仿真层面电机物理参数的实际的物理量,含有一些能减小从sim2real的gap问题的解决方法。

img_v3_02ti_198cb7cd-c95d-4b93-87e6-a8d32c04c60g

img_v3_02ti_43ef9800-bc38-42d6-bd7c-2fe1df763f2g

一些代码细节,最上面的是电机的转子转动惯量,下面是电机的PD参数等。计算方法可以详见论文的这个部分:

image

ARMATURE_5020 = 0.003609725
ARMATURE_7520_14 = 0.010177520
ARMATURE_7520_22 = 0.025101925
ARMATURE_4010 = 0.00425

NATURAL_FREQ = 10 * 2.0 * 3.1415926535  # 10Hz
DAMPING_RATIO = 2.0

STIFFNESS_5020 = ARMATURE_5020 * NATURAL_FREQ**2
STIFFNESS_7520_14 = ARMATURE_7520_14 * NATURAL_FREQ**2
STIFFNESS_7520_22 = ARMATURE_7520_22 * NATURAL_FREQ**2
STIFFNESS_4010 = ARMATURE_4010 * NATURAL_FREQ**2

DAMPING_5020 = 2.0 * DAMPING_RATIO * ARMATURE_5020 * NATURAL_FREQ
DAMPING_7520_14 = 2.0 * DAMPING_RATIO * ARMATURE_7520_14 * NATURAL_FREQ
DAMPING_7520_22 = 2.0 * DAMPING_RATIO * ARMATURE_7520_22 * NATURAL_FREQ
DAMPING_4010 = 2.0 * DAMPING_RATIO * ARMATURE_4010 * NATURAL_FREQ

3 LAFAN动作数据集

数据集网址:https://www.modelscope.cn/datasets/AI-ModelScope/LAFAN1_Retargeting_Dataset
LAFAN是育碧发的一篇图形学顶会的工作:https://www.ubisoft.com/en-us/studio/laforge/news/1ERUZiYmmtUBYZ4KvVvmFP/robust-motion-inbetweening
宇树将这个方法映射到了G1等机器人上。
暂时认为数据集的root是pelvis的link。
包括了pos + quat + 29dof-pos + 29dof-vel

image

4. 一个细节

beyond mimic有一个很聪明的处理手段,来获取重定向后的所谓的锚点信息。当我们设置锚点位置的时候:
image

这时其实同时更改了motion和robot的root:
image
image

但是LAFAN数据集 的数据类型一般是这样的:

root-pos
root-quat
dof-pos
dof-vel

我先前误以为这个motion的锚点就是这个数据集里面的root-pos! 其实不然,是从body pos按照索引来获得的。而下面就是作者比较聪明的一点,一般想获得这个body pos都是需要通过运动学来计算出来的,即得到了root的pos和quat,通过各个关节的dof pos作FK(矩阵变换)算出来每一个body的pois和quat,而作者这里选择直接从仿真里面读!!这也就是为什么下面使用的isaac中的sim.render来做这件事的。。。直接从仿真里面读,确实之前没想到过,这里确实受教了。之前复现的时候还在思考完为什么做csv to npz的转换要出来一个仿真的可视化,现在终于明白了。。。。。

image

下次跑GMR的时候我也尽量这么做,从而得到关节速度信息、全局速度信息等。。。

原来作者给的锚点是torso,我这里改为pelvis,这样可以省去一步在mujoco和真机中从pelvis到torso转换的过程。。。

总结

一些细节等我写写再记录下来。。。
to be continued...

posted @ 2026-01-05 23:54  泪水下的笑靥  阅读(45)  评论(0)    收藏  举报