GMR(General Motion Retargeting)仓库详细解析

1)综述:

GMR 是一个通用的运动重定向框架,专注于将人类运动数据高精度、实时地重定向到多款人形机器人,同时适配 RL 跟踪策略优化,支持多类人类运动格式和人形机器人型号。

以下从仓库结构核心文件 / 目录脚本文件功能三个维度进行超详细解析

复制代码
GMR/
├── .gitignore                # Git忽略规则:指定无需版本控制的文件(如缓存、日志、依赖包)
├── CLAUDE.md                 # 与Claude大模型相关的说明(如prompt、集成方式)
├── DOC.md                    # 核心文档:IK配置、机器人参数、运动重定向关键参数说明
├── LICENSE                   # 开源许可证:MIT协议(自由使用、修改、分发)
├── README.md                 # 仓库主说明:功能、更新、演示、快速开始(核心入口)
├── TEST_MOTIONS.md           # 运动测试文档:测试用例、运动数据格式校验、结果评估
├── setup.py                  # 安装配置文件:定义包依赖、安装方式、版本信息
├── third_party/              # 第三方依赖目录
│   └── poselib/              # 姿态处理库:提供人体/机器人姿态估计、IK/FK计算核心能力
├── scripts/                  # 核心脚本目录:各类格式转换、可视化、实时流处理
│   ├── batch_gmr_pkl_to_csv.py
│   ├── bvh_to_robot.py
│   ├── bvh_to_robot_dataset.py
│   ├── convert_omomo_to_smplx.py
│   ├── fbx_offline_to_robot.py
│   ├── gvhmr_to_robot.py
│   ├── optitrack_to_robot.py
│   ├── smpl_to_smplx.py
│   ├── smplx_to_robot.py
│   ├── smplx_to_robot_dataset.py
│   ├── vis_robot_motion.py
│   ├── vis_robot_motion_dataset.py
│   ├── vis_robot_urdf.py
│   ├── xsens_bvh_to_robot.py
│   └── xsens_live_streaming.py
├── assets/                   # 静态资源:图片(banner、流程图)、视频演示、机器人URDF/XML文件
│   ├── GMR.png               # GMR框架logo/封面图
│   └── ...(其他资源:如机器人模型、测试运动数据)
└── general_motion_retargeting/  # 核心源码目录:运动重定向算法、机器人接口、数据解析
    └── ...(核心模块:如GMR核心类、IK求解器、机器人适配层)

核心文件:

1,配置/说明类文件

文件名称 核心功能与细节
.gitignore 标准 Git 忽略配置,通常包含:- Python 缓存(__pycache__/*.pyc)- 系统缓存(.DS_Store*.log)- 依赖包(venv/env/)- 大型数据文件(*.pkl*.bvh*.fbx,除非是测试用例)- IDE 配置(.vscode/.idea/
CLAUDE.md 大概率是使用 Claude 辅助开发的记录:- 可能包含 Prompt 工程(如生成机器人 IK 配置、代码重构提示)- Claude 调试的问题记录、解决方案- 大模型辅助处理运动数据的脚本示例
DOC.md 核心技术文档,重点是IK 配置(仓库更新日志明确提及):- 不同机器人的 IK 参数(如关节权重、求解器类型、迭代次数)- 运动重定向的关键参数(如速度限制、姿态对齐阈值)- 机器人 DoF(自由度)/Body/Motor 名称与 ID 映射表- 常见问题排查(如 IK 求解失败、运动抖动)
LICENSE MIT 许可证文本:- 允许商业 / 非商业使用、修改、分发- 免责声明:作者不承担使用风险- 要求保留版权声明和许可证文件
README.md 仓库总入口,包含:- 项目定位(通用运动重定向、实时遥操作、RL 适配)- 核心特性(多机器人 / 多格式支持、速度限制、RL 友好)- 更新日志(新增机器人 / 格式、功能优化)- 演示视频(多机器人运动重定向效果)- 快速开始(安装、基础使用)- 贡献方式(新增机器人 / 格式的提交流程)
TEST_MOTIONS.md 运动测试规范:- 测试数据集(如 LAFAN1 舞蹈数据、Xsens BVH 数据)- 测试指标(运动平滑度、关节限位合规性、RL 跟踪精度)- 测试流程(单帧 / 序列测试、多机器人对比测试)- 测试结果可视化方法
setup.py Python 包安装配置:- 依赖声明(如 poselib、PyBullet、NumPy、SMPlX、XRoboToolkit)- 包版本(0.2.0)- 安装命令(pip install -e .)- 可选依赖(如 GVHMR、Xsens SDK)

2,第三方依赖目录 third_party

third_party/poselib/

Poselib 是姿态处理核心库,为 GMR 提供:

  • 人体姿态估计(如 SMPL/SMPLX 模型解析)
  • 机器人 FK(前向运动学)/IK(逆运动学)求解
  • 姿态插值、平滑处理(解决运动抖动问题)
  • 关节限位、速度限制的约束处理
  • 与 PyBullet/ROS 的接口适配

3.scripts/目录:核心脚本逐文本就诶西

该目录是 GMR 的工具集,覆盖「格式转换、运动重定向、可视化」三大核心场景,每个脚本均为独立可执行文件,以下是逐文件详解:

a. 格式转换类脚本

脚本名称 核心功能 输入 / 输出 关键细节
batch_gmr_pkl_to_csv.py 批量将 GMR 格式的 pickle 文件转为 CSV(适配 beyondmimic 框架) 输入:GMR .pkl(含机器人关节数据)输出:CSV(关节 ID / 角度 / 速度) - 支持批量处理文件夹下所有 pkl- CSV 列:时间戳、关节 ID、关节角度、角速度- 适配 beyondmimic 的数据集格式
convert_omomo_to_smplx.py 将 Omomo 格式的人体运动数据转为 SMPLX 格式 输入:Omomo .npy/.pkl输出:SMPLX .pkl/.npz - Omomo 是特定人体运动数据集格式- 补全 SMPLX 缺失的手部 / 足部细节- 姿态对齐(根节点、朝向统一)
smpl_to_smplx.py 将 SMPL(无手部 / 少关节)转为 SMPLX(全身体关节,含手部 / 面部) 输入:SMPL .pkl/.obj输出:SMPLX .pkl - 填充手部 21DoF、足部 6DoF- 保持根关节、躯干姿态一致- 支持批量转换数据集

b.运动重定向类脚本(核心)

这类脚本的核心逻辑是「解析源运动数据 → 调用 GMR 核心算法 → 输出机器人可执行的关节数据」,支持多类输入格式和机器人型号。

脚本名称 核心功能 输入格式 适配场景 关键参数 / 特性
bvh_to_robot.py 单文件 BVH(人体运动捕获)数据重定向到机器人 BVH(如 Nokov/Xsens 离线 BVH) 单段运动测试(如舞蹈、行走) - 指定机器人型号(如--robot unitree_h1)- 启用速度限制(--use_velocity_limit)- 输出 GMR .pkl/ 机器人关节 .csv
bvh_to_robot_dataset.py 批量 BVH 数据集重定向到机器人 文件夹下所有 BVH 文件 大规模数据集生成(如 RL 训练数据) - 多进程处理(加速批量转换)- 自动过滤异常帧(如关节超限)- 输出数据集索引文件
fbx_offline_to_robot.py OptiTrack 导出的离线 FBX 运动数据重定向到机器人 FBX(含人体骨骼动画) 动捕室离线数据处理 - 解析 FBX 骨骼层级(对齐人体 - 机器人关节)- 补全 FBX 缺失的根节点速度- 支持 OptiTrack 动捕系统标定参数
gvhmr_to_robot.py 基于 GVHMR 从单目视频提取人体姿态,并重定向到机器人 单目视频(.mp4/.avi) 无动捕设备场景(仅视频) - 调用 GVHMR 模型提取 SMPLX 姿态- 实时 / 离线模式切换- 视频帧率适配(如 30fps→机器人控制频率 100Hz)
optitrack_to_robot.py OptiTrack 实时 / 离线数据重定向到机器人 OptiTrack SDK 数据 / CSV 实时遥操作、动捕室在线测试 - 对接 OptiTrack NatNet SDK- 低延迟(<50ms)实时重定向- 支持多刚体跟踪(如手持物体)
smplx_to_robot.py 单文件 SMPLX 人体姿态数据重定向到机器人 SMPLX .pkl/.npz 合成人体姿态测试(如算法生成的运动) - 自定义 SMPLX - 机器人关节映射- 手部精细重定向(如 Dex31 手)- 姿态平滑(减少抖动)
smplx_to_robot_dataset.py 批量 SMPLX 数据集重定向到机器人 SMPLX 数据集文件夹 RL 训练数据集生成 - 数据集划分(训练 / 验证 / 测试)- 关节角度归一化- 兼容 HuggingFace 数据集格式
xsens_bvh_to_robot.py Xsens 专用 BVH 离线数据重定向到机器人 Xsens BVH(含 IMU 校准数据) Xsens 动捕系统离线处理 - 解析 Xsens IMU 数据(补偿姿态漂移)- 适配 Xsens 骨骼命名规则- 支持全身 / 上半身重定向
xsens_live_streaming.py Xsens 实时 BVH 数据流重定向到机器人 Xsens Live SDK 数据流 实时遥操作(如人形机器人在线控制) - 低延迟数据流解析(<30ms)- 断线重连机制- 支持 TWIST2/XRoboToolkit 对接

c.可视化类脚本

用于验证运动重定向结果,直观查看机器人运动效果,调试IK/关节限位问题

脚本名称 核心功能 输入格式 可视化方式 关键特性
vis_robot_motion.py 可视化单段机器人运动数据(如重定向后的 GMR .pkl) GMR .pkl/ 机器人关节 .csv/BVH 3D 可视化(PyBullet/Matplotlib) - 实时播放 / 暂停 / 调速- 显示关节角度曲线(排查超限)- 切换机器人模型渲染- 保存视频 / 截图
vis_robot_motion_dataset.py 批量可视化机器人数据集,对比多段运动效果 数据集文件夹(含多个.pkl/.csv) 批量播放、统计可视化 - 自动生成运动统计报告(如平均关节速度、抖动率)- 多机器人同屏对比- 支持数据集筛选(如仅看行走运动)
vis_robot_urdf.py 可视化机器人 URDF 模型,校验关节 / 连杆结构 机器人 URDF/.xml 文件 3D 模型预览(PyBullet) - 显示关节 DoF/ID/ 限位- 手动拖动关节测试运动范围- 校验模型碰撞体 / 视觉体- 输出机器人结构报告

4.asserts/目录

存储仓库运行所需的静态资源,核心内容包括:

  1. 图片资源GMR.png(框架封面)、GMR_pipeline.png(运动重定向流程图)、机器人外观贴图;
  2. 机器人模型:各型号机器人的 URDF/.xml 文件、网格模型(.obj/.stl)、碰撞体配置;
  3. 测试数据:少量示例 BVH/SMPLX/FBX 文件(用于快速测试脚本);
  4. 演示视频:README 中引用的运动重定向演示视频(如 LAFAN1 舞蹈重定向到 5 款机器人)。

5.general_motion_retargeting/核心源码目录(逻辑分析)

该目录是 GMR 的算法核心,虽未展示具体文件,但结合 README 和脚本功能,可推断核心模块:

  1. core/
    • general_motion_retargeting.py:定义GeneralMotionRetargeting核心类,实现:
      • 人体 - 机器人关节映射(SMPLX→机器人 DoF);
      • IK 求解(带速度限制、关节限位);
      • 姿态平滑、根节点对齐、重力补偿;
      • 多机器人适配接口(如 Unitree H1、Talos、Galexea R1 Pro)。
    • ik_solver.py:定制化 IK 求解器(适配不同机器人的关节权重、迭代策略);
    • motion_smoother.py:运动平滑算法(如低通滤波、样条插值,解决抖动)。
  2. robots/
    • 各机器人的适配文件(如unitree_h1.pytalos.py):定义关节映射、限位、速度限制、URDF 路径;
    • robot_registry.py:机器人注册表(新增机器人需注册到此处)。
  3. data/
    • 各格式解析器(bvh_parser.pysmplx_parser.pyfbx_parser.py);
    • 数据预处理(如姿态归一化、异常帧过滤)。
  4. utils/
    • 通用工具(如日志、文件 IO、3D 变换);
    • 与第三方库对接(如 Poselib、GVHMR、XRoboToolkit)。

6.核心特性与技术亮点

  • 多机器人适配:支持 17 + 款人形机器人(如 Unitree H1、Talos、Galexea R1 Pro),仅需修改参数即可切换;
  • 多格式支持:覆盖 BVH(Xsens/Nokov)、FBX(OptiTrack)、SMPL/SMPLX、单目视频(GVHMR);
  • 实时性:支持低延迟(<50ms)实时遥操作(如 Xsens Live、OptiTrack 实时流);
  • RL 友好:针对 RL 跟踪策略调优,支持速度限制、运动平滑,降低训练难度;
  • 可扩展性:支持新增机器人 / 运动格式(提交 URDF / 数据格式即可适配)。

7.典型使用流程

  1. 安装:pip install -e .
  2. 单文件测试:python scripts/bvh_to_robot.py --bvh_path test.bvh --robot unitree_h1
  3. 可视化结果:python scripts/vis_robot_motion.py --motion_path output.pkl
  4. 批量生成数据集:python scripts/bvh_to_robot_dataset.py --bvh_dir bvh_dataset --robot talos --output_dir robot_dataset
  5. 实时遥操作:python scripts/xsens_live_streaming.py --robot galaxea_r1_pro

该仓库的核心价值是降低人形机器人运动重定向的门槛,无需从零开发 IK / 关节映射,仅需调用脚本即可完成从各类人体运动数据到多款机器人的重定向,同时适配 RL 训练和实时遥操作场景。

2)机器人 FK 前向运动学 & IK 逆运动学通俗

GMR 做人体动作转到机器人本体,底层全靠 FK+IK

FK:已知各个关节转角 → 算出末端 / 连杆在世界坐标系空间位置

IK:想要末端到达指定空间坐标 → 反推每个关节该转多少角度

一、FK 前向运动学 Forward Kinematics

1. 核心定义

输入:所有关节角度 θ₁,θ₂...θₙ 输出:机器人各连杆、躯干、手脚末端在全局 3D 坐标 (x,y,z)+ 旋转姿态 依靠D-H 参数法 / URDF 坐标系逐级坐标变换(齐次变换矩阵 T)

2. 数学原理:齐次变换矩阵

每一个关节对应一个 4×4 变换矩阵:

Ti​=[R3×3​ P3×1

0​ ​1​]

  • R:连杆旋转
  • P:连杆偏移 从基座一路乘到末端: Tbase→end=T1⋅T2⋅T3...Tn 矩阵最后一列前三行就是末端坐标 xyz

3. GMR 中 FK 用途

  1. 给定 IK 算出的机器人关节角度,用 FK 算出机器人手脚实际位置,和人体 SMPLX 手脚坐标做误差对比
  2. 碰撞校验:通过 FK 算出所有连杆空间位置,判断自碰撞;
  3. 可视化:PyBullet 渲染机器人靠 FK 实时更新各连杆位置。

4. FK 特点

  • 唯一解:一组关节角只会得到唯一末端位置
  • 计算快:纯矩阵乘法,无迭代

二、IK 逆运动学 Inverse Kinematics

(1)解析 IK(闭式解)

少数结构(6 自由度机械臂、3R 串联腿)可以用三角函数直接推公式,一步算出精确解。 缺点:人形机器人(H1/Talos 二三十个 DOF 冗余)基本无法写出解析解。

(2)数值迭代 IK(GMR、poselib 在用主流方案)

雅各比矩阵 Jacobian 迭代优化,不断微调关节角,缩小「FK 算出当前末端位置」和「目标人体末端位置」的误差。

迭代逻辑:
  1. 当前关节角→FK 得到当前末端Pcurr
  2. 误差ΔP=Ptarget−Pcurr
  3. 雅各比 J:末端位置随关节角变化的偏导矩阵 ΔP=J⋅Δθ
  4. 求解:Δθ=J+⋅ΔP(J 伪逆),更新θ=θ+α⋅Δθ,α 步长
  5. 循环直到误差小于阈值

GMR 加约束:迭代时强制关节上下限位、最大角速度限制,避免跑出机械极限。

3. 冗余自由度(人形机器人关键)

人形机器人单条腿 6~7DOF、全身 20~30+DOF > 末端 6 维约束 (3 位置 + 3 旋转) → 无穷多组关节解可以满足同一个手脚目标位置 GMR 优化策略(poselib 内置):

  1. 最小关节运动量(尽量贴近上一帧姿态,运动平滑不跳变)
  2. 关节限位硬约束
  3. 躯干姿态跟随人体 SMPLX 躯干朝向

4. IK 缺点

  1. 多解、无解(目标超出机器人可达空间→IK 发散)
  2. 奇异位形:J 矩阵奇异,迭代抖动(GMR 加阻尼伪逆 Damped Least Squares 防止) Δθ=JT(JJT+λI)−1ΔP λ 阻尼系数,GMR 配置文件可调。

三、GMR 运动重定向完整链路(FK&IK 串联)

BVH/SMPLX人体动捕 → 人体手脚3D目标坐标

【IK求解】:以人体3D点位为目标,求解机器人全身关节角

【FK校验】:用解出的关节角正向算出机器人手脚实际坐标,对比误差 ↓ 约束滤波(限速、限位、平滑)→ 最终机器人关节指令 → 导出pkl/csv或下发真机

四、一句话区分 FK/IK

  • FK:给角度,算在哪(正算)
  • IK:想要在哪,求角度(反算)

五、补充:GMR 中 poselib 封装细节

poselib 内部:

  1. 加载机器人 URDF 自动生成 D-H / 变换树
  2. FK 模块预计算各连杆变换
  3. IK 封装带约束阻尼最小二乘迭代,支持多目标(左右手 + 双脚 + 躯干同时约束),正是 GMR 实现全身运动重定向的底层。
相关推荐
刘大猫.7 小时前
智造短剧新引擎:火山引擎上线「火山剧创 1.0」,制作效率提升 80%
人工智能·ai·chatgpt·机器人·大模型·火山引擎·短剧新引擎
哥布林学者10 小时前
深度学习进阶(二十六)现代 LLM 的核心架构设计其一:RMSNorm
机器学习·ai
zhangfeng113311 小时前
AI 每日动态推送|2026-05-30 codidng 机器人方向
人工智能·机器人
计算机安禾13 小时前
【算法分析与设计】第26篇:参数化算法与固定参数可解性理论
大数据·人工智能·算法·机器学习·剪枝
AI科技星14 小时前
基于**v=c(空间光速螺旋运动)唯一第一性原理**重新完整求导证明
人工智能·线性代数·算法·机器学习·架构·概率论·学习方法
心之所向52115 小时前
机器人领域 Physical Intelligence π 系列论文综述
机器人
阿里云大数据AI技术15 小时前
逐际动力 x 阿里云 PAI:携手开启具身智能走向物理世界新篇章
人工智能·机器人
莫陌尛.15 小时前
Possibilistic fuzzy c-means with partial supervision (SPFCM)
机器学习
morning_judger15 小时前
Agent系列(二)-记忆系统的设计
开发语言·python·机器学习