news 2026/6/21 14:02:58

关于HoloMotion的使用

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
关于HoloMotion的使用

感谢科研工作者的劳动与开源!
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 ONNX

HoloMotion 的评估部分本质不是训练,而是:拿训练好的 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_error

mpjpe_g:全局位置误差。每一帧,机器人每个 body link 的全局位置和参考动作的全局位置做距离误差,然后对所有 body 求平均。

mpjpe_g=mean(norm(robot_global_translation - ref_global_translation))*1000

mpjpe_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_error:root 速度误差。它比较的是 root 位置差分后的速度误差。HoloMotion 的 metrics.py 里把它作为数据集级指标输出,显示单位转换为 m/s。机器人是不是跟参考动作同速运动。
root_height_error:root 高度误差。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_m=0.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 metric
motion_global_root_posroot position error
motion_global_root_oriroot roll/pitch/yaw error
motion_body_posglobal/local body position error
motion_body_oribody orientation error
motion_leg_posleg body position error
action smoothness rewardaction rate / torque jump
foot contact rewardfoot slip / contact toggle
应该照着做的是:
sim2sim 推理 + dump npz + calculate tracking metrics + render video
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 20:15:53

Codex 从AI编程工具已逐渐变成了一个超级AI智能体

如果说早期的 AI Coding 解决的是“帮人把代码写快一点”,那么今天的 Codex,已经明显走到了下一阶段。它正在从一个编程助手,进化成一个真正能承担任务、调用工具、处理多种信息、跨场景协作的 AI 超级智能体。尤其从 OpenAI 最新公布的 Code…

作者头像 李华
网站建设 2026/6/15 19:26:28

2026 异构算力工控机选型指南 AI 时代工业核心计算平台详解

作者:从业 17 年工控技术工程师发布时间:2026 年 6 月 5 日文章摘要随着工业大模型推理、机器视觉检测等 AI 应用的规模化落地,传统单一算力架构的工业计算机已无法满足低延迟、高并发的计算需求。异构算力工控机通过整合 CPU、GPU、NPU、FPG…

作者头像 李华