0. 前言
这篇博客主要用于过程记录H2O
代码部分的参数解读部分。
一方面便于日后自己的温故学习,另一方面也便于大家的学习和交流。
如有不对之处,欢迎评论区指出错误,你我共同进步学习!
1. 论文&项目
项目地址:https://omni.human2humanoid.com/
我自己总结的论文摘要:https://www.cnblogs.com/myleaf/p/18727733
论文题目:
OmniH2O: Universal and Dexterous Human-to-Humanoid Whole-Body Teleoperation and Learning
2.2 Dataset
2.2.1 dataset简介
文章要求两个数据集代码:SMPL
和AMASS
SMPL
是人体骨骼点以及mesh参数化的数据集,只包含个体,不包含motion
AMASS
是包含SMPL的,包含了人体动作的motions
- 性质:SMPL是生成3D人体网格的模型,AMASS是包含SMPL参数的运动捕捉数据集。
- 功能:SMPL用于建模,AMASS用于提供运动数据。
- 应用场景:SMPL用于生成静态或动态人体模型,AMASS用于分析和合成人体运动。
AMASS是一个由不同的光学标记运动捕捉数据集统一表示在一个公共框架和参数化下的大型人体运动数据库¹。它包含了超过40小时的运动数据,涵盖了300多个主体和11000多个运动¹。它使用了SMPL²人体模型,它是一种基于混合形状和姿态空间的生成式人体模型,可以用少量的参数来描述人体的形状和姿态²。
AMASS使用了一种新的方法MoSh++⁴,它可以将运动捕捉数据转换为由刚性身体模型表示的逼真的3D人体网格⁴。这种方法可以适用于任意的标记集,同时恢复软组织动力学和逼真的手部运动⁴。AMASS数据集是经过严格筛选和质量控制的,它提供了人体运动的丰富和多样的样本,可以用于训练和评估人体姿态和形状估计的方法。
AMASS数据库是一个JSON格式的文件,它存储了每个运动捕捉数据集的元数据和SMPL人体模型的参数。每个文件的文件名是由数据集名称、主体编号和运动编号组成的,例如CMU_01_01.json表示来自CMU数据集的第一个主体的第一个运动1
下图中的一些参数在代码里也有用到,乍看下可能不是很理解为什么,这回总结了下比较容易看懂。。
2.2.2 dataset代码
SMPL
:需要注册
https://smpl.is.tue.mpg.de/login.php
下载解压完是这些:
修改名字备用:
AMASS
:也需要注册
模型格式:
https://amass.is.tue.mpg.de/register.php
详情参考自:https://blog.csdn.net/qq_53930200/article/details/137646272
2.2.3 PHC
Perpetual Humanoid Control for Real-time Simulated Avatars
H2O的共一作者,铺垫工作是人体retargeted的。。。。。
项目地址:https://github.com/ZhengyiLuo/PHC/
2. 论文代码
在主要代码的legged_gym.py
里面有很多的观察值,我这里作一个简单的总结:
local_ref_body_pos
是ref_body_pos
和root_pos
的差值
diff_local_body_pos
是ref_body_pos
和body_pos
的差值
body_pos[:,0,:]
是root_pos
下面将一些函数的观测值进行列出:
个人认为这些观测值的内容主要是进行坐标系的变换,比如ref的部分从global坐标系变换到pelvis坐标系下,也就是上半身的坐标系。
2.1 compute_imitation_observations:
obs.append(diff_local_body_pos_flat.view(B, time_steps, -1)) # 1 * timestep * J * 3obs.append(torch_utils.quat_to_tan_norm(diff_local_body_rot_flat).view(B, time_steps, -1)) # 1 * timestep * J * 6obs.append(diff_local_root_vel.view(B, time_steps, -1)) # timestep * J * 3obs.append(diff_local_root_ang_vel.view(B, time_steps, -1)) # timestep * J * 3obs.append(local_ref_body_pos.view(B, time_steps, -1)) # timestep * J * 3obs.append(local_ref_body_rot.view(B, time_steps, -1)) # timestep * J * 6obs.append(dof_diff.view(B, time_steps, -1)) # timestep * J * 3obs.append(dof_vel_diff.view(B, time_steps, -1)) # timestep * J * 3
2.2 compute_imitation_observations_teleop:
obs.append(local_ref_body_pos.view(B, time_steps, -1)) # timestep * J * 3
2.3 compute_imitation_observations_teleop_max:
obs.append(diff_local_body_pos_flat.view(B, time_steps, -1)) # 1 * timestep * J * 3obs.append(local_ref_body_pos.view(B, time_steps, -1)) # timestep * J * 3
2.4 compute_imitation_observations_teleop_max_heading:
obs.append(diff_local_body_pos_flat.view(B, time_steps, -1)) # 1 * timestep * J * 3obs.append(local_ref_body_pos.view(B, time_steps, -1)) # timestep * J * 3obs.append(diff_local_heading_rot_flat.view(B, time_steps, -1)) # 1 * timestep * J * 3
2.5 compute_imitation_observations_max_full:
obs.append(diff_local_body_pos_flat.view(B, time_steps, -1)) # 1 * timestep * J * 3obs.append(torch_utils.quat_to_tan_norm(diff_local_body_rot_flat).view(B, time_steps, -1)) # 1 * timestep * J * 6obs.append(diff_local_vel.view(B, time_steps, -1)) # timestep * J * 3obs.append(diff_local_ang_vel.view(B, time_steps, -1)) # timestep * J * 3obs.append(local_ref_body_pos.view(B, time_steps, -1)) # timestep * J * 3obs.append(local_ref_body_rot.view(B, time_steps, -1)) # timestep * J * 6
2.6 compute_humanoid_observations:
obs_list += [local_body_pos, local_body_rot_obs, local_body_vel, local_body_ang_vel, dof_pos, dof_vel] # [23x3-3,23x6,1x3,1x3,23x1,23x1]
2.7 compute_humanoid_observations_max_full:
obs_list += [local_body_pos, local_body_rot_obs, local_body_vel, local_body_ang_vel] # [23x3-3 , 23x6 ,23x3 , 23x3 ] = 342
3. 正文2
def compute_self_and_task_obs(self, ):
这个函数里记录了关于不同观测值的调用,下面我来简单的总计一下:
对比一下不同version的观测值的不同。
3.1 v1
self_obs = compute_humanoid_observations(body_pos, body_rot, root_vel, root_ang_vel, dof_pos, dof_vel, True, True) # 122task_obs = compute_imitation_observations(root_pos, root_rot, body_pos, body_rot, root_vel, root_ang_vel, dof_pos, dof_vel, ref_body_pos, ref_body_rot, ref_root_vel, ref_root_ang_vel, ref_joint_pos, ref_joint_vel, 1)obs = torch.cat([self_obs, task_obs, self.projected_gravity, self.actions], dim = -1)
3.2 v-min
obs = torch.cat([dof_pos, dof_vel, base_vel, base_ang_vel, base_gravity, delta_base_pos, delta_heading,ref_dof_pos, ref_dof_vel, ref_base_vel, ref_base_ang_vel,ref_base_gravity,self.actions], dim = -1)
3.3 v-min2
obs = torch.cat([dof_pos, dof_vel, base_vel, base_ang_vel, base_gravity, delta_base_pos, delta_heading,ref_dof_pos, self.actions], dim = -1)
3.4 v-teleop
obs = torch.cat([dof_pos, dof_vel, base_vel, base_ang_vel, base_gravity, delta_base_pos, delta_heading, # 19dim + 19dim + 3dim + 3dim + 3dim + 2dim + 1dimtask_obs, # 3xselected_dim = 18dimself.actions], dim = -1) # 19dim
3.5 v-teleop-clean
obs = torch.cat([dof_pos, dof_vel, base_vel, base_ang_vel, base_gravity, # 19dim + 19dim + 3dim + 3dim + 3dim task_obs, # 3xselected_dim = 18dimself.actions], dim = -1) # 19dim
3.6 v-teleop-superclean
obs = torch.cat([dof_pos, dof_vel, # 19dim + 19dim task_obs, # 3xselected_dim = 18dimself.actions], dim = -1) # 19dim
3.7 v-teleop-extend
obs = torch.cat([dof_pos, dof_vel, base_vel, base_ang_vel, base_gravity, # 19dim + 19dim + 3dim + 3dim + 3dim task_obs, # 3xselected_dim = 18dimself.actions], dim = -1) # 19dim
3.8 v-teleop-extend-nolinvel
obs = torch.cat([dof_pos, dof_vel, base_ang_vel, base_gravity, # 19dim + 19dim + 3dim + 3dim task_obs, # 3xselected_dim = 24dimself.actions], dim = -1) # 19dim
3.9 v-teleop-extend-max
obs = torch.cat([dof_pos, dof_vel, base_vel, base_ang_vel, base_gravity, # 19dim + 19dim + 3dim + 3dim + 3dim task_obs, # self.actions], dim = -1) # 19dim
3.10 v-teleop-extend-max_no_vel
obs = torch.cat([dof_pos, dof_vel, base_ang_vel, base_gravity, # 19dim + 19dim + 3dim + 3dim task_obs, # self.actions,history_to_be_append], dim = -1) # 19dimelse:obs = torch.cat([dof_pos, dof_vel, base_ang_vel, base_gravity, # 19dim + 19dim + 3dim + 3dim task_obs, # self.actions], dim = -1) # 19dim
3.11 v-teleop-extend-vr-max
obs = torch.cat([dof_pos, dof_vel, base_vel, base_ang_vel, base_gravity, # 19dim + 19dim + 3dim + 3dim task_obs, # self.actions,history_to_be_append], dim = -1) # 19dimelse:obs = torch.cat([dof_pos, dof_vel, base_vel, base_ang_vel, base_gravity, # 19dim + 19dim + 3dim + 3dim task_obs, # self.actions], dim = -1) # 19dim
3.12 v-teleop-extend-vr-max-nolinvel
obs = torch.cat([dof_pos, dof_vel, base_ang_vel, base_gravity, # 19dim + 19dim + 3dim + 3dim task_obs, # self.actions,history_to_be_append], dim = -1) # 19dimelse:obs = torch.cat([dof_pos, dof_vel, base_ang_vel, base_gravity, # 19dim + 19dim + 3dim + 3dim task_obs, # self.actions], dim = -1) # 19dim
3.13 v-teleop-extend-vr-max-nolinvel-heading
obs = torch.cat([dof_pos, dof_vel, base_ang_vel, base_gravity, # 19dim + 19dim + 3dim + 3dim task_obs, # self.actions,history_to_be_append], dim = -1) # 19dimelse:obs = torch.cat([dof_pos, dof_vel, base_ang_vel, base_gravity, # 19dim + 19dim + 3dim + 3dim task_obs, # self.actions], dim = -1) # 19dim
3.14 v-teleop-extend-max-full
obs = torch.cat([ self_obs, task_obs, # self.actions], dim = -1) # 342 + 552 + 19 = 913
3.15 v-teleop-extend-max-nolinvel
obs = torch.cat([dof_pos, dof_vel, base_ang_vel, base_gravity, # 19dim + 19dim + (no 3dim) + 3dim + 3dim task_obs, # self.actions], dim = -1) # 19dim
3.16 v-teleop-extend-max-acc
obs = torch.cat([dof_pos, dof_vel, base_acc, base_ang_vel, base_gravity, # 19dim + 19dim + 3dim + 3dim + 3dim task_obs, # self.actions], dim = -1) # 19dim
3.17 num_privileged_obs
if self.cfg.env.num_privileged_obs is not None:# privileged obs# 总共正好77self.privileged_info = torch.cat([self._base_com_bias,#3self._ground_friction_values[:, self.feet_indices],#2self._link_mass_scale,#len(self.cfg.domain_rand.randomize_link_body_names)#8self._kp_scale,#19self._kd_scale,#19self._rfi_lim_scale,#19self.contact_forces[:, self.feet_indices, :].reshape(self.num_envs, 6),#6torch.clamp_max(self._recovery_counter.unsqueeze(1), 1),#1], dim=1)# 所以这步在原来基础上加了77维,e.g.:913 + 77 = 990privileged_obs_buf = torch.cat([obs_buf_denoise, self.privileged_info], dim=1)
4.代码解读&问题解决
4.1
G1机器人关节和默认关节的比较:
所以需要更改default的joint,因为原来是H1的关节角度。
4.2
SMPL只映射了腿,手臂和pelvis盆骨,和torso啥的没关系。。。以及手或者头。。
这是;训练的测试图,可以看到还有一定的差距
这样对比就可以解决我最开始疑惑的点了,到底在文件中修不修改torso_linK为waits_yaw_link,现在看来可能不需要了。因为key_points追踪的是pelvis,这是H1和G1共有的。
不过头部;略微有点高了。。。。
4.3
改变了高度和手部的长度后,感觉抖动有明显的改善。。。
4.4 motion
初步理清了motion的一些量的具体涵义。。
在/home/zhushiyu/文档/H2O_Git_version/h2o/H2O/human2humanoid-main/phc/phc/utils/motion_lib_g1.py
文件目录下:
这些是load_motion的主要返回值。。
- '
root_pos
': tensor([[-0.4469, 1.0703, 0.8083]] - '
root_rot'
: tensor([[ 0.0281, -0.0135, 0.2446, 0.9691]] - '
dof_pos
': tensor([[-0.0842, 0.2612, -0.0268, 0.1347, 0.0000, 0.0384, -0.3478, -0.1618, 0.2350, 0.0000, 0.1514, -1.0371, 0.9073, 0.3638, 0.7175, -1.3636, -0.3033, 0.4266, 0.4514]] - '
root_vel
': tensor([[0.0178, 0.0134, 0.0032]] - '
root_ang_vel
': tensor([[-0.0021, 0.0019, 0.0455]]
上面这些是pelvis的估计,也就是盆骨的位置的估计。 - '
dof_vel
': tensor([[ 0.0724, -0.0061, -0.0271, -0.0121, 0.0000, 0.1166, 0.0555, 0.0856,
-0.0610, 0.0000, -0.0454, 0.0103, -0.0722, -0.0209, -0.0070, 0.0695,
0.0324, -0.0042, 0.0509]], device='cuda:0' - '
motion_aa
': tensor([[0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]], - '
rg_pos
': tensor([[[-0.4468, 1.0705, 0.8083],
[-0.4762, 1.1334, 0.7089],
[-0.4983, 1.1821, 0.6812],
[-0.4639, 1.2430, 0.5756],
[-0.5133, 1.2829, 0.3925],
[-0.5613, 1.3588, 0.1062],
[-0.4149, 1.0202, 0.7027],
[-0.3908, 0.9758, 0.6698],
[-0.3337, 0.9648, 0.5573],
[-0.3547, 0.9058, 0.3739],
[-0.3861, 0.8180, 0.0887],
[-0.4468, 1.0705, 0.8083],
[-0.5105, 1.1327, 1.1037],
[-0.5242, 1.1703, 1.1095],
[-0.5137, 1.2721, 1.0949],
[-0.4983, 1.3527, 1.0962],
[-0.3898, 0.9729, 1.0954],
[-0.3566, 0.9508, 1.1022],
[-0.2674, 1.0011, 1.0883],
[-0.2042, 1.0535, 1.0885]]] - '
rb_rot
': tensor([[[ 0.0280, -0.0131, 0.2451, 0.9690],
[ 0.0385, -0.0545, 0.2437, 0.9676],
[ 0.1838, -0.1065, 0.2554, 0.9432],
[ 0.1850, -0.1038, 0.2434, 0.9464],
[ 0.1453, 0.0434, 0.2690, 0.9511],
[ 0.1453, 0.0434, 0.2690, 0.9511],
[ 0.0233, 0.0054, 0.2456, 0.9691],
[-0.1227, -0.1199, 0.2253, 0.9591],
[-0.1128, -0.1293, 0.1483, 0.9739],
[-0.1405, 0.0708, 0.1224, 0.9799],
[-0.1405, 0.0708, 0.1224, 0.9799],
[ 0.0269, -0.0155, 0.3173, 0.9478],
[ 0.2945, -0.4384, 0.1961, 0.8262],
[ 0.5352, -0.3563, 0.3216, 0.6952],
[ 0.4610, -0.4478, 0.4426, 0.6253],
[ 0.2767, -0.2003, 0.5760, 0.7426],
[ 0.1148, -0.6396, 0.3088, 0.6945],
[ 0.1065, -0.6433, 0.3012, 0.6958],
[ 0.0318, 0.6512, -0.4414, -0.6165],
[-0.1295, -0.4975, 0.4228, 0.7463]]] - '
body_vel
': tensor([[[ 0.0178, 0.0134, 0.0032],
[ 0.0144, 0.0116, 0.0031],
[ 0.0115, 0.0102, 0.0029],
[ 0.0087, 0.0088, 0.0012],
[ 0.0058, 0.0033, 0.0008],
[ 0.0044, -0.0027, -0.0006],
[ 0.0204, 0.0148, 0.0034],
[ 0.0212, 0.0151, 0.0035],
[ 0.0142, 0.0191, -0.0005],
[ 0.0069, 0.0132, 0.0023],
[ 0.0078, 0.0073, 0.0040],
[ 0.0178, 0.0134, 0.0032],
[ 0.0189, 0.0141, 0.0033],
[ 0.0191, 0.0142, 0.0035],
[ 0.0216, 0.0139, 0.0033],
[ 0.0238, 0.0134, 0.0032],
[ 0.0190, 0.0142, 0.0033],
[ 0.0190, 0.0142, 0.0032],
[ 0.0187, 0.0146, 0.0029],
[ 0.0185, 0.0149, 0.0026]]] - '
body_ang_vel
': tensor([[[-2.1039e-03, 1.8841e-03, 4.5471e-02],
[-8.3861e-03, 1.4360e-02, 4.5459e-02],
[-2.9610e-02, 3.4142e-03, 3.7804e-02],
[-2.7399e-02, 1.5296e-02, 1.2052e-02],
[-1.9519e-02, 2.5494e-03, 6.2424e-03],
[-1.9519e-02, 2.5494e-03, 6.2424e-03],
[-2.8170e-02, 5.0234e-02, 4.7453e-02],
[ 2.3433e-03, 6.7622e-02, 5.4932e-02],
[-1.9520e-02, 8.2082e-02, 1.2913e-01],
[-6.9687e-03, 3.7918e-02, 1.4132e-01],
[-6.9687e-03, 3.7918e-02, 1.4132e-01],
[-1.8195e-03, 5.0354e-03, -1.5386e-03],
[ 8.8561e-03, -8.9086e-03, -7.8141e-03],
[-1.5617e-03, -8.9112e-03, -2.2340e-02],
[ 3.5846e-03, 6.9349e-03, -2.3747e-02],
[ 4.2980e-02, 6.2602e-05, -3.1284e-02],
[ 2.7790e-03, -5.5849e-04, 3.6141e-04],
[ 2.6334e-03, 2.8605e-04, 7.0803e-04],
[ 2.7811e-03, -3.3474e-04, 2.5788e-04],
[ 9.7772e-03, -9.8729e-03, 1.0061e-02]]] - '
motion_bodies
': tensor([[0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]] - '
motion_limb_weights
': tensor([[0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]]
4.5
10. 附录
关于g1的基础参数配置:
点击查看g1的所有参数的配置yaml文件
# @package _global_defaults:- robot_baserobot:# Observation parametersnum_bodies: 24dof_obs_size: 23actions_dim: 23lower_body_actions_dim: 15 # Yuanhangupper_body_actions_dim: 8 # Yuanhangpolicy_obs_dim: -1 # Jiaweicritic_obs_dim: -1# policy_obs_dim: 45 # Jiawei# critic_obs_dim: 238# policy_obs_dim: 45 # Jiawei# policy_obs_dim: 241 # Jiawei# self_obs_max_coords: 298 # ${eval:1+20*(3+6+3+3)-3}key_bodies: ["left_ankle_roll_link", "right_ankle_roll_link"]contact_bodies: [ "left_ankle_roll_link", "right_ankle_roll_link" ]num_feet: 2right_foot_name: "right_ankle_roll_link"left_foot_name: "left_ankle_roll_link"foot_name: "ankle_roll_link"knee_name: "knee_link"has_torso: Truetorso_name: "torso_link"has_upper_body_dof: Truedof_names: ['left_hip_pitch_joint', 'left_hip_roll_joint', 'left_hip_yaw_joint', 'left_knee_joint', 'left_ankle_pitch_joint', 'left_ankle_roll_joint','right_hip_pitch_joint', 'right_hip_roll_joint', 'right_hip_yaw_joint', 'right_knee_joint', 'right_ankle_pitch_joint', 'right_ankle_roll_joint','waist_yaw_joint', 'waist_roll_joint', 'waist_pitch_joint','left_shoulder_pitch_joint', 'left_shoulder_roll_joint', 'left_shoulder_yaw_joint', 'left_elbow_joint', 'right_shoulder_pitch_joint', 'right_shoulder_roll_joint', 'right_shoulder_yaw_joint', 'right_elbow_joint']upper_dof_names: ['left_shoulder_pitch_joint', 'left_shoulder_roll_joint', 'left_shoulder_yaw_joint', 'left_elbow_joint','right_shoulder_pitch_joint', 'right_shoulder_roll_joint', 'right_shoulder_yaw_joint', 'right_elbow_joint']upper_left_arm_dof_names: ['left_shoulder_pitch_joint', 'left_shoulder_roll_joint', 'left_shoulder_yaw_joint', 'left_elbow_joint']upper_right_arm_dof_names: ['right_shoulder_pitch_joint', 'right_shoulder_roll_joint', 'right_shoulder_yaw_joint', 'right_elbow_joint']lower_dof_names: ['left_hip_pitch_joint', 'left_hip_roll_joint', 'left_hip_yaw_joint', 'left_knee_joint', 'left_ankle_pitch_joint', 'left_ankle_roll_joint','right_hip_pitch_joint', 'right_hip_roll_joint', 'right_hip_yaw_joint', 'right_knee_joint', 'right_ankle_pitch_joint', 'right_ankle_roll_joint','waist_yaw_joint', 'waist_roll_joint', 'waist_pitch_joint']waist_dof_names: ['waist_yaw_joint', 'waist_roll_joint', 'waist_pitch_joint']dof_pos_lower_limit_list: [-2.5307, -0.5236, -2.7576, -0.087267, -0.87267, -0.2618, -2.5307, -2.9671, -2.7576, -0.087267, -0.87267, -0.2618, -2.618, -0.52, -0.52,-3.0892, -1.5882, -2.618, -1.0472, -3.0892, -2.2515, -2.618, -1.0472]dof_pos_upper_limit_list: [2.8798, 2.9671, 2.7576, 2.8798, 0.5236, 0.2618, 2.8798, 0.5236, 2.7576, 2.8798, 0.5236, 0.2618, 2.618, 0.52, 0.52,2.6704, 2.2515, 2.618, 2.0944,2.6704, 1.5882, 2.618, 2.0944]dof_vel_limit_list: [32.0, 32.0, 32.0, 20.0, 37.0, 37.0, 32.0, 32.0, 32.0, 20.0, 37.0, 37.0, 32.0, 37.0, 37.0, 37.0, 37.0, 37.0, 37.0, 37.0, 37.0, 37.0, 37.0]dof_effort_limit_list: [88.0, 88.0, 88.0, 139.0, 50.0, 50.0, 88.0, 88.0, 88.0, 139.0, 50.0, 50.0, 88.0, 50.0, 50.0,25.0, 25.0, 25.0, 25.0, 25.0, 25.0, 25.0, 25.0]# only apply for isaacsimdof_armature_list: [0.03, 0.03, 0.03, 0.03, 0.03, 0.03,0.03, 0.03, 0.03, 0.03, 0.03, 0.03,0.03, 0.03, 0.03,0.03, 0.03, 0.03, 0.03,0.04, 0.03, 0.03, 0.03]# only apply for isaacsimdof_joint_friction_list: [0.03, 0.03, 0.03, 0.03, 0.03, 0.03,0.03, 0.03, 0.03, 0.03, 0.03, 0.03,0.03, 0.03, 0.03,0.03, 0.03, 0.03, 0.03,0.03, 0.03, 0.03, 0.03]body_names: ['pelvis', 'left_hip_pitch_link', 'left_hip_roll_link', 'left_hip_yaw_link', 'left_knee_link', 'left_ankle_pitch_link', 'left_ankle_roll_link','right_hip_pitch_link', 'right_hip_roll_link', 'right_hip_yaw_link', 'right_knee_link', 'right_ankle_pitch_link', 'right_ankle_roll_link','waist_yaw_link', 'waist_roll_link', 'torso_link','left_shoulder_pitch_link', 'left_shoulder_roll_link', 'left_shoulder_yaw_link', 'left_elbow_link','right_shoulder_pitch_link', 'right_shoulder_roll_link', 'right_shoulder_yaw_link', 'right_elbow_link']terminate_after_contacts_on : ["pelvis", "shoulder", "hip"]penalize_contacts_on: ["pelvis", "shoulder", "hip"]init_state:pos: [0.0, 0.0, 0.8] # x,y,z [m]rot: [0.0, 0.0, 0.0, 1.0] # x,y,z,w [quat]lin_vel: [0.0, 0.0, 0.0] # x,y,z [m/s]ang_vel: [0.0, 0.0, 0.0] # x,y,z [rad/s]default_joint_angles: # = target angles [rad] when action = 0.0left_hip_pitch_joint: -0.1left_hip_roll_joint: 0.left_hip_yaw_joint: 0.left_knee_joint: 0.3left_ankle_pitch_joint: -0.2left_ankle_roll_joint: 0.right_hip_pitch_joint: -0.1right_hip_roll_joint: 0.right_hip_yaw_joint: 0.right_knee_joint: 0.3right_ankle_pitch_joint: -0.2right_ankle_roll_joint: 0.waist_yaw_joint : 0.waist_roll_joint : 0.waist_pitch_joint : 0.left_shoulder_pitch_joint: 0.left_shoulder_roll_joint: 0.left_shoulder_yaw_joint: 0.left_elbow_joint: 0.right_shoulder_pitch_joint: 0.right_shoulder_roll_joint: 0.right_shoulder_yaw_joint: 0.right_elbow_joint: 0.randomize_link_body_names: ['pelvis', 'left_hip_yaw_link', 'left_hip_roll_link', 'left_hip_pitch_link', 'left_knee_link','right_hip_yaw_link', 'right_hip_roll_link', 'right_hip_pitch_link', 'right_knee_link',]control:control_type: P# PD Drive parameters:stiffness: # [N*m/rad]hip_yaw: 100hip_roll: 100hip_pitch: 100knee: 200ankle_pitch: 20ankle_roll: 20waist_yaw: 400waist_roll: 400waist_pitch: 400shoulder_pitch: 90shoulder_roll: 60shoulder_yaw: 20elbow: 60damping: # [N*m/rad] # [N*m*s/rad]hip_yaw: 2.5hip_roll: 2.5hip_pitch: 2.5knee: 5.0ankle_pitch: 0.2ankle_roll: 0.1waist_yaw: 5.0waist_roll: 5.0waist_pitch: 5.0shoulder_pitch: 2.0shoulder_roll: 1.0shoulder_yaw: 0.4elbow: 1.0# action scale: target angle = actionScale * action + defaultAngleaction_scale: 0.25action_clip_value: 100.0clip_torques: Trueasset:collapse_fixed_joints: True # merge bodies connected by fixed joints. Specific fixed joints can be kept by adding " <... dont_collapse="true">replace_cylinder_with_capsule: Trueflip_visual_attachments: Falsearmature: 0.001 # isaacgym armature is set by thisthickness: 0.01max_angular_velocity: 1000.max_linear_velocity: 1000.density: 0.001angular_damping: 0.linear_damping: 0.urdf_file: "g1/${robot.asset.robot_type}.urdf"usd_file: "g1/${robot.asset.robot_type}.usd"xml_file: "g1/${robot.asset.robot_type}.xml"# xml_file: "g1/${robot.asset.robot_type}_fitmotionONLY.xml"robot_type: g1_29dof_anneal_23dofself_collisions: 1 # 1 to disable, 0 to enable self collisionsdefault_dof_drive_mode: 3fix_base_link: False # TEST: fix base link to worldmotion:motion_file : 'humanoidverse/data/motions/g1_29dof_anneal_23dof/v1/amass_all.pkl'# motion_file : 'humanoidverse/data/motions/g1_29dof/v1/singles/0-ACCAD_Male2General_c3d_A6- Box lift_poses.pkl'asset:assetRoot: "humanoidverse/data/robots/g1/"# assetFileName: "g1_29dof_anneal_23dof.xml"assetFileName: "g1_29dof_anneal_23dof_fitmotionONLY.xml"urdfFileName: "g1_29dof_anneal_23dof.urdf"humanoid_type: g1_29dof_anneal_23dofbias_offset: Falsehas_self_collision: Truehas_mesh: Falsehas_jt_limit: Falsehas_dof_subset: Truehas_upright_start: Truehas_smpl_pd_offset: Falseremove_toe: False # For humanoid's geom toemotion_sym_loss: Falsesym_loss_coef: 1big_ankle: Truehas_shape_obs: falsehas_shape_obs_disc: falsehas_shape_variation: Falsemasterfoot: Falsefreeze_toe: falsefreeze_hand: Falsebox_body: Truereal_weight: Truereal_weight_porpotion_capsules: Truereal_weight_porpotion_boxes: Truebody_names: ['pelvis', 'left_hip_pitch_link', 'left_hip_roll_link', 'left_hip_yaw_link', 'left_knee_link', 'left_ankle_pitch_link', 'left_ankle_roll_link', 'right_hip_pitch_link', 'right_hip_roll_link', 'right_hip_yaw_link', 'right_knee_link', 'right_ankle_pitch_link', 'right_ankle_roll_link', 'waist_yaw_link', 'waist_roll_link', 'torso_link','left_shoulder_pitch_link', 'left_shoulder_roll_link', 'left_shoulder_yaw_link', 'left_elbow_link','right_shoulder_pitch_link', 'right_shoulder_roll_link', 'right_shoulder_yaw_link', 'right_elbow_link']limb_weight_group: - ['left_hip_pitch_link', 'left_hip_roll_link', 'left_hip_yaw_link', 'left_knee_link', 'left_ankle_pitch_link', 'left_ankle_roll_link']- ['right_hip_pitch_link', 'right_hip_roll_link', 'right_hip_yaw_link', 'right_knee_link', 'right_ankle_pitch_link', 'right_ankle_roll_link']- ['pelvis', 'waist_yaw_link', 'waist_roll_link', 'torso_link']- ['left_shoulder_pitch_link', 'left_shoulder_roll_link', 'left_shoulder_yaw_link', 'left_elbow_link']- ['right_shoulder_pitch_link', 'right_shoulder_roll_link', 'right_shoulder_yaw_link', 'right_elbow_link']dof_names: ['left_hip_pitch_link', 'left_hip_roll_link', 'left_hip_yaw_link', 'left_knee_link', 'left_ankle_pitch_link', 'left_ankle_roll_link', 'right_hip_pitch_link', 'right_hip_roll_link', 'right_hip_yaw_link', 'right_knee_link', 'right_ankle_pitch_link', 'right_ankle_roll_link', 'waist_yaw_link', 'waist_roll_link', 'torso_link','left_shoulder_pitch_link', 'left_shoulder_roll_link', 'left_shoulder_yaw_link', 'left_elbow_link','right_shoulder_pitch_link', 'right_shoulder_roll_link', 'right_shoulder_yaw_link', 'right_elbow_link']right_foot_name: 'r_foot_roll'left_foot_name: 'l_foot_roll'nums_extend_bodies: 3extend_config:- joint_name: "left_hand_link"parent_name: "left_elbow_link"pos: [0.25, 0.0, 0.0]rot: [1.0, 0.0, 0.0, 0.0] # w x y z- joint_name: "right_hand_link"parent_name: "right_elbow_link"pos: [0.25, 0.0, 0.0]rot: [1.0, 0.0, 0.0, 0.0] # w x y z- joint_name: "head_link"parent_name: "torso_link"pos: [0.0, 0.0, 0.42]rot: [1.0, 0.0, 0.0, 0.0] # w x y zmotion_tracking_link:- "left_hand_link"- "right_hand_link"- "head_link"lower_body_link:- "pelvis"- "left_hip_pitch_link"- "left_hip_roll_link"- "left_hip_yaw_link"- "left_knee_link"- "left_ankle_pitch_link"- "left_ankle_roll_link"- "right_hip_pitch_link"- "right_hip_roll_link"- "right_hip_yaw_link"- "right_knee_link"- "right_ankle_pitch_link"- "right_ankle_roll_link"- "waist_yaw_link"- "waist_roll_link"- "torso_link"upper_body_link:- "left_shoulder_pitch_link"- "left_shoulder_roll_link"- "left_shoulder_yaw_link"- "left_elbow_link"- "right_shoulder_pitch_link"- "right_shoulder_roll_link"- "right_shoulder_yaw_link"- "right_elbow_link"- "left_hand_link"- "right_hand_link"- "head_link"pelvis_link: "pelvis"base_link: "torso_link"hips_link:- "left_hip_pitch_link"- "left_hip_roll_link"- "left_hip_yaw_link"- "right_hip_pitch_link"- "right_hip_roll_link"- "right_hip_yaw_link"joint_matches:- ["pelvis", "Pelvis"]- ["left_hip_pitch_link", "L_Hip"]- ["left_knee_link", "L_Knee"]- ["left_ankle_roll_link", "L_Ankle"]- ["right_hip_pitch_link", "R_Hip"]- ["right_knee_link", "R_Knee"]- ["right_ankle_roll_link", "R_Ankle"]- ["left_shoulder_roll_link", "L_Shoulder"]- ["left_elbow_link", "L_Elbow"]- ["left_hand_link", "L_Hand"]- ["right_shoulder_roll_link", "R_Shoulder"]- ["right_elbow_link", "R_Elbow"]- ["right_hand_link", "R_Hand"]- ["head_link", "Head"]smpl_pose_modifier:- Pelvis: "[np.pi/2, 0, np.pi/2]"- L_Shoulder: "[0, 0, -np.pi/2]"- R_Shoulder: "[0, 0, np.pi/2]"- L_Elbow: "[0, -np.pi/2, 0]"- R_Elbow: "[0, np.pi/2, 0]"visualization:customize_color : Truemarker_joint_colors : - [0.929, 0.867, 0.437] # pelvis- [0.929, 0.867, 0.437] # left_hip_yaw_joint- [0.929, 0.867, 0.437] # left_hip_roll_joint- [0.929, 0.867, 0.437] # left_hip_pitch_joint- [0.929, 0.867, 0.437] # left_knee_joint- [0.929, 0.867, 0.437] # left_ankle_pitch_joint- [0.929, 0.867, 0.437] # left_ankle_roll_joint- [0.929, 0.867, 0.437] # right_hip_yaw_joint- [0.929, 0.867, 0.437] # right_hip_roll_joint- [0.929, 0.867, 0.437] # right_hip_pitch_joint- [0.929, 0.867, 0.437] # right_knee_joint- [0.929, 0.867, 0.437] # right_ankle_pitch_joint- [0.929, 0.867, 0.437] # right_ankle_roll_joint- [0.929, 0.867, 0.437] # waist_yaw_joint- [0.929, 0.867, 0.437] # waist_roll_joint- [0.929, 0.867, 0.437] # torso_joint (waist_pitch_link)- [0.929, 0.867, 0.437] # left_shoulder_pitch_joint- [0.929, 0.867, 0.437] # left_shoulder_roll_joint- [0.929, 0.867, 0.437] # left_shoulder_yaw_joint- [0.929, 0.867, 0.437] # left_elbow_joint- [0.929, 0.867, 0.437] # right_shoulder_pitch_joint- [0.929, 0.867, 0.437] # right_shoulder_roll_joint- [0.929, 0.867, 0.437] # right_shoulder_yaw_joint- [0.929, 0.867, 0.437] # right_elbow_joint- [0, 0.351, 0.613] # left_elbow_joint_extend- [0, 0.351, 0.613] # right_elbow_joint_extend- [0, 0.351, 0.613] # head_link# Override motion lib default to use the adapted H1 variant
# motion_lib:
# _target_: phys_anim.utils.motion_lib_h1.H1_MotionLib# Override simulation config to use the adapted H1 variant
# env:
# config:
# simulator:
# sim:
# fps: 200 # 1/dt , dt = 0.005
# control_freq_inv: 4 # decimation
# substeps: 1
这篇博客暂时记录到这里,日后我会继续补充。