感谢科研工作者的劳动与开源https://horizonrobotics.github.io/robot_lab/holomotion/地平线开源的一套“人形机器人全身动作跟踪 / 模仿学习”框架目标是让机器人根据参考人体动作生成稳定的全身控制策略。它不是单纯的 BVH/SMPL 播放器而是从动作数据 → 重定向 → 强化学习训练 → 评估 → MuJoCo 可视化 → ONNX 部署的完整流程。目前官方给出的基本流程是人体动作数据 ↓ Motion Retargeting ↓ HoloMotion npz ↓ HDF5 数据集 ↓ PPO Motion Tracking 训练 ↓ 离线评估 / MuJoCo 可视化 ↓ ONNX 导出 / 部署师兄给出的指示是参考nolomotion的eval写一个工具这个是用来策略评估的单独sim2sim的推理的计算单动作跟踪的跟踪误差。HoloMotion 评估流程包括Trained Checkpoints ↓ Offline Evaluation ↓ Calculate Metrics ↓ MuJoCo Visualization ↓ Export ONNXHoloMotion 的评估部分本质不是训练而是拿训练好的 policy 跑一遍参考动作把机器人实际执行结果 dump 成 .npz然后离线计算跟踪误差和稳定性指标最后用 MuJoCo 渲染视频检查。也就是checkpoint 评估数据集 eval 配置 → 跑 sim/eval → 生成 npz → 算指标 → 渲染视频 → 导出 ONNX。holomotion在评估什么动作跟踪误差也就是机器人实际动作和参考动作之间的差距。HoloMotion 的 metrics.py 里要求 .npz 至少包含这些关键数据ref_dof_pos ref_dof_vel ref_global_translation ref_global_rotation_quat ref_global_velocity ref_global_angular_velocity robot_dof_pos robot_dof_vel robot_global_translation robot_global_rotation_quat robot_global_velocity robot_global_angular_velocity也就是说它不是只看关节角而是同时看参考机器人关节角 参考机器人 body 全局位置 参考机器人 body 全局姿态 参考机器人 body 速度 机器人实际关节角 机器人实际 body 全局位置 机器人实际 body 姿态 机器人实际 body 速度这些字段必须是 ref_ 和 robot_ 成对存在的。HoloMotion 的评估代码明确从 .npz 里读取 ref_global_translation、robot_global_translation、ref_global_rotation_quat、robot_global_rotation_quat、ref_dof_pos、robot_dof_pos 来计算误差。核心的跟踪指标HoloMotion 主要算这些指标mpjpe_g mpjpe_l mpjpe_pa vel_dist accel_dist whole_body_joints_dist root_r_error root_p_error root_y_error root_vel_error root_height_errormpjpe_g全局位置误差。每一帧机器人每个 body link 的全局位置和参考动作的全局位置做距离误差然后对所有 body 求平均。mpjpe_gmean(norm(robot_global_translation - ref_global_translation))*1000mpjpe_l局部姿态误差。不直接比较世界坐标位置而是先以 root 为中心把 body 位置转到 root 局部坐标系再比较机器人和参考动作的 body 形状误差。这个指标比 mpjpe_g 更关注 姿态结构不太受机器人整体漂移影响。whole_body_joints_dist关节角误差。机器人实际关节角 robot_dof_pos 和参考关节角 ref_dof_pos 的平均绝对误差。28 个关节跟参考动作差多少。root_r_error /root_p_error /root_y_error roll 误差/ pitch 误差 / yaw 误差。ref root quaternion 和 robot root quaternion 求相对旋转 然后转成 xyz Euler 分别取 roll/pitch/yaw 的绝对误差root_vel_errorroot 速度误差。它比较的是 root 位置差分后的速度误差。HoloMotion 的 metrics.py 里把它作为数据集级指标输出显示单位转换为 m/s。机器人是不是跟参考动作同速运动。root_height_errorroot 高度误差。robot root z - ref root z也就是身体高度误差。vel_dist/accel_dist分别是速度和加速度误差。这个比单帧位置误差更能反映动作是否“顺”。它们来自 body link 位置的连续差分。稳定性指标这部分对 sim2sim 很重要HoloMotion 不只评估“像不像”还评估“稳不稳”。它有这些稳定性指标mean_dof_vel mean_dof_acc mean_dof_torque mean_torque_jump_norm mean_torque_jump_ratio p95_torque_jump_norm p95_torque_jump_ratio torque_chatter_hf_ratio torso_rp_hf_ratio torso_rp_angacc_p95 foot_contact_toggle_rate foot_impact_force_p95 stance_slip_speed_p95指标意义对应问题mean_dof_vel平均关节速度动作是否过快mean_dof_acc平均关节加速度动作是否抖动mean_dof_torque平均力矩控制是否费力torque_jump_ratio力矩突变程度sim2sim 是否不稳定torso_rp_angacc_p95躯干 roll/pitch 角加速度 95 分位身体是否晃动foot_contact_toggle_rate足端接触频繁切换率脚是否抖动/频繁离地stance_slip_speed_p95支撑脚滑动速度脚底是否打滑foot_impact_force_p95落脚冲击力脚落地是否砸地根据师兄的要求应该重点关注这几类1. root position error2. root orientation error3. body position error4. dof position error5. foot contact / foot slip6. torque / action smoothness成功率定义它有一个 failure 阈值--failure_pos_err_thresh_m0.25。默认是 0.25 m。在脚本里calc_offline_eval_metrics.sh 调用 metrics.py 时传了这个参数。也就是说如果某个 clip 的误差超过阈值它会被认为失败。HoloMotion 的代码里会记录success max_body_pos_err failure_threshold_m success_rate怎么做moya的评估不需要完整迁移 HoloMotion。你需要抽取它的思想写一个专门适配你当前 moya01 sim2sim_mjlab.py 的工具。流程是输入 policy.onnx / policy.pt moya01 xml 单个动作 npz例如 摇摆.npz motion fps sim2sim 推理 每一帧读取参考动作 policy 输出 action MuJoCo step 记录机器人实际状态 保存 ref_dof_pos ref_global_translation ref_global_rotation_quat robot_dof_pos robot_global_translation robot_global_rotation_quat robot_dof_vel robot_dof_torque foot_contact action 离线计算 dof error body position error root pos/orientation error foot slip torque jump action rate 输出 json csv mp4针对moya01的eval npz 最好包含这些字段metadata fps dt joint_names body_names ref_dof_pos(T,28)ref_dof_vel(T,28)ref_root_pos(T,3)ref_root_quat(T,4)ref_global_translation(T, B,3)ref_global_rotation_quat(T, B,4)robot_dof_pos(T,28)robot_dof_vel(T,28)robot_root_pos(T,3)robot_root_quat(T,4)robot_global_translation(T, B,3)robot_global_rotation_quat(T, B,4)robot_action(T,28)robot_dof_torque(T,28)robot_foot_contact(T,4)或(T,2)robot_foot_pos(T, nfoot,3)robot_foot_vel(T, nfoot,3)最少要有ref_dof_pos robot_dof_pos ref_global_translation robot_global_translation ref_global_rotation_quat robot_global_rotation_quat目前可以先实现8个指标1. mean_dof_error_rad2. mean_root_pos_error_m3. mean_root_ori_error_rad4. mean_body_pos_error_m5. max_body_pos_error_m6. mean_foot_slip_mps7. mean_action_rate8. mean_torque_jump_ratio参考命令可以是python viz_motion_npz_mujoco.py\--xmlMoya01_V2_sim2sim.xml\--npzoutputs/eval/摇摆/rollouts/摇摆_eval.npz\--key-prefix robot_\--outoutputs/eval/摇摆/video/robot.mp4和训练中的reward是有区别的。建立一定的对应关系可以更好的判断reward 高到底是真的动作好还是 reward 设计有偏。训练 rewardeval metricmotion_global_root_posroot position errormotion_global_root_oriroot roll/pitch/yaw errormotion_body_posglobal/local body position errormotion_body_oribody orientation errormotion_leg_posleg body position erroraction smoothness rewardaction rate / torque jumpfoot contact rewardfoot slip / contact toggle应该照着做的是sim2sim 推理 dump npz calculate tracking metrics render video
关于HoloMotion的使用
发布时间:2026/6/6 3:14:21
感谢科研工作者的劳动与开源https://horizonrobotics.github.io/robot_lab/holomotion/地平线开源的一套“人形机器人全身动作跟踪 / 模仿学习”框架目标是让机器人根据参考人体动作生成稳定的全身控制策略。它不是单纯的 BVH/SMPL 播放器而是从动作数据 → 重定向 → 强化学习训练 → 评估 → MuJoCo 可视化 → ONNX 部署的完整流程。目前官方给出的基本流程是人体动作数据 ↓ Motion Retargeting ↓ HoloMotion npz ↓ HDF5 数据集 ↓ PPO Motion Tracking 训练 ↓ 离线评估 / MuJoCo 可视化 ↓ ONNX 导出 / 部署师兄给出的指示是参考nolomotion的eval写一个工具这个是用来策略评估的单独sim2sim的推理的计算单动作跟踪的跟踪误差。HoloMotion 评估流程包括Trained Checkpoints ↓ Offline Evaluation ↓ Calculate Metrics ↓ MuJoCo Visualization ↓ Export ONNXHoloMotion 的评估部分本质不是训练而是拿训练好的 policy 跑一遍参考动作把机器人实际执行结果 dump 成 .npz然后离线计算跟踪误差和稳定性指标最后用 MuJoCo 渲染视频检查。也就是checkpoint 评估数据集 eval 配置 → 跑 sim/eval → 生成 npz → 算指标 → 渲染视频 → 导出 ONNX。holomotion在评估什么动作跟踪误差也就是机器人实际动作和参考动作之间的差距。HoloMotion 的 metrics.py 里要求 .npz 至少包含这些关键数据ref_dof_pos ref_dof_vel ref_global_translation ref_global_rotation_quat ref_global_velocity ref_global_angular_velocity robot_dof_pos robot_dof_vel robot_global_translation robot_global_rotation_quat robot_global_velocity robot_global_angular_velocity也就是说它不是只看关节角而是同时看参考机器人关节角 参考机器人 body 全局位置 参考机器人 body 全局姿态 参考机器人 body 速度 机器人实际关节角 机器人实际 body 全局位置 机器人实际 body 姿态 机器人实际 body 速度这些字段必须是 ref_ 和 robot_ 成对存在的。HoloMotion 的评估代码明确从 .npz 里读取 ref_global_translation、robot_global_translation、ref_global_rotation_quat、robot_global_rotation_quat、ref_dof_pos、robot_dof_pos 来计算误差。核心的跟踪指标HoloMotion 主要算这些指标mpjpe_g mpjpe_l mpjpe_pa vel_dist accel_dist whole_body_joints_dist root_r_error root_p_error root_y_error root_vel_error root_height_errormpjpe_g全局位置误差。每一帧机器人每个 body link 的全局位置和参考动作的全局位置做距离误差然后对所有 body 求平均。mpjpe_gmean(norm(robot_global_translation - ref_global_translation))*1000mpjpe_l局部姿态误差。不直接比较世界坐标位置而是先以 root 为中心把 body 位置转到 root 局部坐标系再比较机器人和参考动作的 body 形状误差。这个指标比 mpjpe_g 更关注 姿态结构不太受机器人整体漂移影响。whole_body_joints_dist关节角误差。机器人实际关节角 robot_dof_pos 和参考关节角 ref_dof_pos 的平均绝对误差。28 个关节跟参考动作差多少。root_r_error /root_p_error /root_y_error roll 误差/ pitch 误差 / yaw 误差。ref root quaternion 和 robot root quaternion 求相对旋转 然后转成 xyz Euler 分别取 roll/pitch/yaw 的绝对误差root_vel_errorroot 速度误差。它比较的是 root 位置差分后的速度误差。HoloMotion 的 metrics.py 里把它作为数据集级指标输出显示单位转换为 m/s。机器人是不是跟参考动作同速运动。root_height_errorroot 高度误差。robot root z - ref root z也就是身体高度误差。vel_dist/accel_dist分别是速度和加速度误差。这个比单帧位置误差更能反映动作是否“顺”。它们来自 body link 位置的连续差分。稳定性指标这部分对 sim2sim 很重要HoloMotion 不只评估“像不像”还评估“稳不稳”。它有这些稳定性指标mean_dof_vel mean_dof_acc mean_dof_torque mean_torque_jump_norm mean_torque_jump_ratio p95_torque_jump_norm p95_torque_jump_ratio torque_chatter_hf_ratio torso_rp_hf_ratio torso_rp_angacc_p95 foot_contact_toggle_rate foot_impact_force_p95 stance_slip_speed_p95指标意义对应问题mean_dof_vel平均关节速度动作是否过快mean_dof_acc平均关节加速度动作是否抖动mean_dof_torque平均力矩控制是否费力torque_jump_ratio力矩突变程度sim2sim 是否不稳定torso_rp_angacc_p95躯干 roll/pitch 角加速度 95 分位身体是否晃动foot_contact_toggle_rate足端接触频繁切换率脚是否抖动/频繁离地stance_slip_speed_p95支撑脚滑动速度脚底是否打滑foot_impact_force_p95落脚冲击力脚落地是否砸地根据师兄的要求应该重点关注这几类1. root position error2. root orientation error3. body position error4. dof position error5. foot contact / foot slip6. torque / action smoothness成功率定义它有一个 failure 阈值--failure_pos_err_thresh_m0.25。默认是 0.25 m。在脚本里calc_offline_eval_metrics.sh 调用 metrics.py 时传了这个参数。也就是说如果某个 clip 的误差超过阈值它会被认为失败。HoloMotion 的代码里会记录success max_body_pos_err failure_threshold_m success_rate怎么做moya的评估不需要完整迁移 HoloMotion。你需要抽取它的思想写一个专门适配你当前 moya01 sim2sim_mjlab.py 的工具。流程是输入 policy.onnx / policy.pt moya01 xml 单个动作 npz例如 摇摆.npz motion fps sim2sim 推理 每一帧读取参考动作 policy 输出 action MuJoCo step 记录机器人实际状态 保存 ref_dof_pos ref_global_translation ref_global_rotation_quat robot_dof_pos robot_global_translation robot_global_rotation_quat robot_dof_vel robot_dof_torque foot_contact action 离线计算 dof error body position error root pos/orientation error foot slip torque jump action rate 输出 json csv mp4针对moya01的eval npz 最好包含这些字段metadata fps dt joint_names body_names ref_dof_pos(T,28)ref_dof_vel(T,28)ref_root_pos(T,3)ref_root_quat(T,4)ref_global_translation(T, B,3)ref_global_rotation_quat(T, B,4)robot_dof_pos(T,28)robot_dof_vel(T,28)robot_root_pos(T,3)robot_root_quat(T,4)robot_global_translation(T, B,3)robot_global_rotation_quat(T, B,4)robot_action(T,28)robot_dof_torque(T,28)robot_foot_contact(T,4)或(T,2)robot_foot_pos(T, nfoot,3)robot_foot_vel(T, nfoot,3)最少要有ref_dof_pos robot_dof_pos ref_global_translation robot_global_translation ref_global_rotation_quat robot_global_rotation_quat目前可以先实现8个指标1. mean_dof_error_rad2. mean_root_pos_error_m3. mean_root_ori_error_rad4. mean_body_pos_error_m5. max_body_pos_error_m6. mean_foot_slip_mps7. mean_action_rate8. mean_torque_jump_ratio参考命令可以是python viz_motion_npz_mujoco.py\--xmlMoya01_V2_sim2sim.xml\--npzoutputs/eval/摇摆/rollouts/摇摆_eval.npz\--key-prefix robot_\--outoutputs/eval/摇摆/video/robot.mp4和训练中的reward是有区别的。建立一定的对应关系可以更好的判断reward 高到底是真的动作好还是 reward 设计有偏。训练 rewardeval metricmotion_global_root_posroot position errormotion_global_root_oriroot roll/pitch/yaw errormotion_body_posglobal/local body position errormotion_body_oribody orientation errormotion_leg_posleg body position erroraction smoothness rewardaction rate / torque jumpfoot contact rewardfoot slip / contact toggle应该照着做的是sim2sim 推理 dump npz calculate tracking metrics render video