【H2O系列】关于H2O和OmniH2O代码安装及代码解读摘要`

news/2025/2/24 13:07:48/文章来源:https://www.cnblogs.com/myleaf/p/18715051

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简介

文章要求两个数据集代码:SMPLAMASS
SMPL是人体骨骼点以及mesh参数化的数据集,只包含个体,不包含motion
image

AMASS是包含SMPL的,包含了人体动作的motions

  • 性质:SMPL是生成3D人体网格的模型,AMASS是包含SMPL参数的运动捕捉数据集。
  • 功能:SMPL用于建模,AMASS用于提供运动数据。
  • 应用场景:SMPL用于生成静态或动态人体模型,AMASS用于分析和合成人体运动。
    image

AMASS是一个由不同的光学标记运动捕捉数据集统一表示在一个公共框架和参数化下的大型人体运动数据库¹。它包含了超过40小时的运动数据,涵盖了300多个主体和11000多个运动¹。它使用了SMPL²人体模型,它是一种基于混合形状和姿态空间的生成式人体模型,可以用少量的参数来描述人体的形状和姿态²。

AMASS使用了一种新的方法MoSh++⁴,它可以将运动捕捉数据转换为由刚性身体模型表示的逼真的3D人体网格⁴。这种方法可以适用于任意的标记集,同时恢复软组织动力学和逼真的手部运动⁴。AMASS数据集是经过严格筛选和质量控制的,它提供了人体运动的丰富和多样的样本,可以用于训练和评估人体姿态和形状估计的方法。

AMASS数据库是一个JSON格式的文件,它存储了每个运动捕捉数据集的元数据和SMPL人体模型的参数。每个文件的文件名是由数据集名称、主体编号和运动编号组成的,例如CMU_01_01.json表示来自CMU数据集的第一个主体的第一个运动1

下图中的一些参数在代码里也有用到,乍看下可能不是很理解为什么,这回总结了下比较容易看懂。。
image

2.2.2 dataset代码

SMPL:需要注册
https://smpl.is.tue.mpg.de/login.php
下载解压完是这些:image
修改名字备用:
image
AMASS:也需要注册
image
模型格式:
image

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/
image

2. 论文代码

在主要代码的legged_gym.py里面有很多的观察值,我这里作一个简单的总结:
local_ref_body_posref_body_posroot_pos的差值
diff_local_body_posref_body_posbody_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机器人关节和默认关节的比较:
image
所以需要更改default的joint,因为原来是H1的关节角度。
image

4.2

SMPL只映射了腿,手臂和pelvis盆骨,和torso啥的没关系。。。以及手或者头。。
image
image
这是;训练的测试图,可以看到还有一定的差距
image
这样对比就可以解决我最开始疑惑的点了,到底在文件中修不修改torso_linK为waits_yaw_link,现在看来可能不需要了。因为key_points追踪的是pelvis,这是H1和G1共有的。
不过头部;略微有点高了。。。。

4.3

改变了高度和手部的长度后,感觉抖动有明显的改善。。。
image

4.4 motion

初步理清了motion的一些量的具体涵义。。
/home/zhushiyu/文档/H2O_Git_version/h2o/H2O/human2humanoid-main/phc/phc/utils/motion_lib_g1.py文件目录下:
image
这些是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

这篇博客暂时记录到这里,日后我会继续补充。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/888973.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1小时搭建好的智能车间生产看板长什么样?

大家一提到生产看板搭建,可能脑袋里第一反应就是“哎,这个得花大钱买专业软件吧”或者“搭建起来肯定超级复杂”。 其实,真没那么难! 只要找对方法,学会用对工具,搭建一套生产看板其实很简单。 那天,我就亲自试了一下,结果不到两三小时,就做出了一套智能生产看板。 但…

MCN公司如何打造爆款内容?内容创新与品质提升的秘诀

MCN(多频道网络)管理优化是一个涉及多个方面的复杂过程,旨在提升MCN公司的运营效率、增强市场竞争力并实现可持续发展。以下是一些关键的MCN管理优化策略: 一、市场定位与品牌建设 精准市场定位 ○ 深入了解目标受众,包括他们的兴趣、需求和行为模式。 ○ 对自身资源和优势…

JavaScript代码混淆入门

JavaScript代码混淆是一种提升Web应用安全性的策略,旨在使代码难以阅读和理解,从而增加逆向工程的难度。这对于保护知识产权、防止抄袭及减少恶意攻击尤为重要。本文将深入浅出地介绍JavaScript代码混淆的基础概念、重要性、主要方法以及实际应用技巧。 JavaScript代码混淆的…

【解决Deepseek服务器繁忙问题】Chatbox + 硅基流动API调用deepseek-R1满血版教程,搭建本地AI助手

1. 解决Deepseek服务器繁忙问题,无需等待使用Deepseek:Chatbox本地部署 + 硅基流动API调用,绕过官方限流无限速调用 2. 两个简单步骤:从配置到运行全部有截图​ 一、硅基流动官网注册 + 获取密钥 官网链接:https://cloud.siliconflow.cn/i/kKzwdArg填写手机号,获取验证码…

LLM大模型:kimi k1.5 VS deepseek R1

2025春节期间IT圈最火爆的莫过于deepseek了,R1模型利用reinforcement learning掀起了滔天巨浪,一时间deepseek无人不知,无人不晓!但其实和R1同一时间发布的还有kimi k1.5,也是通过强化学习提升reasoning性能的,但可能是因为deepseek做了部分开源,而kimi没有,导致两者的热…

创建WinPE维护系统

电脑出现硬件问题啦,想使用以前备份实现恢复,希望成功....准备工作,做一个WinPE:下载: https://learn.microsoft.com/en-us/windows-hardware/get-started/adk-install#download-the-adk-101261002454-december-2024 (时间久远,有可以访问不到原有的内容)然后安装:安装…

用户说 | 通义灵码2.0,跨语言编码+自动生成单元测试+集成DeepSeek模型且免费使用

作者:小鱼 引言 通义灵码是我一直使用的编码协助工具,我也愿称之为国内程序员的”饭搭子”。 通义灵码,作为国内首个 AI 程序员,从最开始的内测到公测,再到通义灵码正式发布第一时间使用,再到后来使用企业定制版的通义灵码,再再再到现在通义灵码2.0,我可以说“用着”通…

Esp32_Link调试笔记(Vol.3)

这是一个标题 前面两章网上大多都有教程且难度不大,重点是记录学习一下@FASTSHIFT大佬的"页面生命周期管理"和"消息订阅发布框架"。当然LVGL API从8.3升级至了9.2。 当然接下来的程序是基于屏幕正常显示,触摸驱动正常情况下。(即显示方向与期望相同,滑…

集合幂级数学习笔记

集合幂级数学习笔记 一、集合幂级数基础 类比形式幂级数将序列对应为一个多项式,我们可以用类似的方法,把一个集合及其所有子集变为一个多项式的形式,对于集合 \(U\) 标准形式如下: \[F(x)=\sum_{S\subseteq U}f_{S}x^S \]这里 \(x^S\) 只是一个占位符,就像形式幂级数的 \…

赛前启航 | 微软 AI 开发者挑战赛三场指导直播联袂来袭!

三场直播,为你的参赛之路注入强劲动力随着微软 AI 开发者挑战赛的火热进行,赛前指导直播已成为众多参赛者获取技术干货、灵感碰撞和实战技巧的绝佳平台。继前两期的精彩呈现,第三、四、五期直播即将接连登场,为开发者们带来更加深入的 AI 技术剖析和项目实战指引。无论你是…

Java基础学习(十九)

Java基础学习(十九):动态代理 目录Java基础学习(十九):动态代理概念使用 本文为个人学习记录,内容学习自 黑马程序员概念作用:可以无侵入式地给代码增加额外的功能 代理内部就是对象要被代理的方法 实际步骤:调用者先调用代理中的方法,实现一些额外的功能,再由代理去…

安川机器人伺服电机维修

在现代工业生产中,安川机器人发挥着至关重要的作用。然而,就像任何机械设备一样,它们也会面临各种故障。机器人故障的出现会严重影响生产效率,增加生产成本。例如,当安川机器人伺服电机出现问题时,可能导致机器人无法精准执行任务,这在自动化生产线上是非常严重的情况。…