加载中...
加载中...
在机器人技术快速发展的今天,如何让机器人自然地模仿人类的动作,一直是人形机器人领域面临的核心挑战之一。无论是实现全身遥操作、生成自然的机器人动画,还是为强化学习提供高质量的训练数据,都需要将人类的动作数据转换为机器人可以执行的运动指令。然而,人类和机器人在身体结构、关节配置、运动范围等方面存在显著差异,这使得动作重定向(Motion Retargeting)成为一个复杂且关键的技术问题。
传统的动作重定向方法往往存在诸多局限性:它们可能只针对特定的机器人平台设计,缺乏通用性;可能无法处理人类和机器人之间的身体差异,导致重定向后的动作不自然;可能计算复杂度高,无法满足实时应用的需求;可能忽略了机器人的物理约束,导致生成的动作不可执行。这些局限性限制了动作重定向技术在机器人应用中的广泛应用。
GMR(General Motion Retargeting,通用动作重定向)的出现,为这一挑战提供了一个革命性的解决方案。作为由斯坦福大学等机构开发的开源框架,GMR 不仅实现了高质量的动作重定向,更通过精心设计的算法架构,实现了实时性能、多机器人支持和多格式兼容。GMR 的核心创新在于其四个关键技术组件:人-机器人关键身体匹配、笛卡尔空间静息姿态对齐、非均匀局部缩放,以及两阶段逆运动学优化。这些技术的结合,使得 GMR 能够在 CPU 上实现 35-70 FPS 的实时重定向性能,同时保持高质量的运动保真度。
GMR 的价值不仅体现在其技术先进性上,更体现在其实际应用中。它被集成到 TWIST(Teleoperated Whole-Body Imitation System)系统中,实现了实时全身遥操作,为人形机器人的远程控制提供了强大的支持。GMR 支持超过 17 种人形机器人平台,包括 Unitree G1/H1、Booster T1/K1、Fourier N1 等主流机器人,同时支持 SMPLX、BVH、FBX、PICO 等多种输入格式,为不同应用场景提供了灵活的解决方案。
本文将带您全面深入地了解 GMR 的方方面面,从动作重定向的基础概念到 GMR 的技术架构,从核心算法的详细解析到实际应用的实践指南。无论您是刚开始接触动作重定向的新手,还是希望深入了解 GMR 技术细节的资深开发者,都能从本文中获得有价值的知识和实践指导。我们将重点关注技术原理和实际应用,提供详细的技术分析、算法说明和使用案例,帮助您在实际项目中快速应用 GMR 的强大功能。
动作重定向(Motion Retargeting)是指将源角色(通常是人类)的动作数据转换为目标角色(通常是机器人或虚拟角色)可以执行的运动指令的过程。这个过程涉及将源角色的关节角度、身体姿态、运动轨迹等信息,通过适当的映射和转换,适配到目标角色的身体结构和运动学约束上。
动作重定向的核心目标
动作重定向的核心目标是在保持源动作的语义和风格的同时,生成适合目标角色身体结构的自然动作。这包括:
运动语义保持:重定向后的动作应该保持源动作的意图和含义,例如走路、跳跃、抓取等动作的本质特征应该被保留。
自然性:重定向后的动作应该看起来自然,符合目标角色的运动学特性,不应该出现不合理的关节角度或身体姿态。
可执行性:重定向后的动作必须满足目标角色的物理约束,包括关节角度限制、速度限制、平衡约束等。
实时性:对于实时应用(如遥操作),动作重定向必须能够在有限的时间内完成,通常需要达到 30 FPS 以上的处理速度。
动作重定向的应用场景
动作重定向技术在多个领域有着广泛的应用:
机器人遥操作:将操作员的动作实时重定向到机器人上,实现远程控制。这对于危险环境作业、远程手术等应用至关重要。
机器人动画生成:将人类动作数据转换为机器人动画,用于演示、测试或训练数据生成。
强化学习训练:为强化学习算法提供高质量的动作参考数据,帮助机器人学习复杂的运动技能。
虚拟角色动画:在游戏、电影等应用中,将动作捕捉数据适配到不同的虚拟角色上。
机器人行为设计:通过重定向人类专家的动作,为机器人设计复杂的行为模式。
动作重定向面临的主要挑战源于人类和机器人之间的身体差异和运动学差异:
1. 身体结构差异
人类和机器人在身体结构上存在显著差异:
关节配置不同:人类的关节配置(如肩关节、髋关节)与机器人的关节配置可能完全不同。例如,人类有锁骨和肩胛骨,而机器人可能只有简单的旋转关节。
自由度差异:人类身体有更多的自由度,而机器人的自由度通常更少。例如,人类手臂有 7 个自由度,而某些机器人手臂可能只有 4-5 个自由度。
身体比例不同:人类和机器人的身体比例(如臂长、腿长、躯干长度)可能完全不同,这会影响动作的缩放和适配。
2. 运动学约束
机器人受到严格的运动学约束:
关节角度限制:机器人的每个关节都有角度限制,不能像人类那样自由运动。
速度限制:机器人的关节速度受到电机和传动系统的限制,不能像人类那样快速运动。
加速度限制:机器人的关节加速度也受到限制,影响动作的流畅性。
平衡约束:人形机器人必须保持平衡,这限制了某些动作的执行。
3. 实时性要求
对于实时应用(如遥操作),动作重定向必须在有限的时间内完成:
计算复杂度:逆运动学(IK)求解是计算密集型任务,需要高效的算法。
延迟要求:系统延迟必须足够低,通常要求小于 33 毫秒(对应 30 FPS)。
CPU 资源:对于 CPU 实时处理,算法必须足够高效。
4. 动作保真度
在满足约束的同时,还需要保持动作的保真度:
运动风格保持:重定向后的动作应该保持源动作的风格特征。
细节保留:重要的动作细节(如手部动作、脚步位置)应该被保留。
时间一致性:动作的时间特性应该被保持,避免动作过快或过慢。
根据不同的分类标准,动作重定向方法可以分为以下几类:
按映射方式分类
直接映射:直接将源角色的关节角度映射到目标角色的对应关节上。这种方法简单但可能不适用于身体结构差异较大的情况。
基于关键点的映射:识别源角色和目标角色的关键身体部位(如手、脚、头),通过关键点的位置和方向进行映射。
基于学习的映射:使用机器学习方法学习源角色和目标角色之间的映射关系。
按优化方式分类
基于优化的方法:通过优化目标函数来找到最佳的重定向结果,通常使用逆运动学(IK)求解。
基于学习的方法:使用神经网络等机器学习方法学习重定向映射。
混合方法:结合优化和学习方法,利用各自的优势。
按实时性分类
离线重定向:预先处理动作数据,生成完整的机器人动作序列。适用于动画生成、训练数据准备等场景。
在线重定向:实时处理动作数据,生成机器人动作指令。适用于遥操作等实时应用。
按通用性分类
特定机器人方法:针对特定机器人平台设计,可能无法直接应用于其他机器人。
通用方法:设计为可以应用于多种机器人平台,如 GMR。
GMR(General Motion Retargeting,通用动作重定向)是一个开源的、通用的动作重定向框架,旨在将人类动作数据实时重定向到多种人形机器人平台。GMR 由斯坦福大学等机构开发,于 2024 年首次发布,并持续更新以支持更多的机器人平台和输入格式。
GMR 的核心特点
GMR 具有以下核心特点:
通用性:支持超过 17 种人形机器人平台,包括 Unitree G1/H1、Booster T1/K1、Fourier N1、HighTorque Hi 等主流机器人。
多格式支持:支持 SMPLX(AMASS、OMOMO)、BVH(LAFAN1、Nokov)、FBX(OptiTrack)、PICO(XRoboToolkit)等多种输入格式。
实时性能:在 CPU 上实现 35-70 FPS 的实时重定向性能,满足实时应用需求。
高质量重定向:通过精心设计的算法,实现高质量的运动保真度,接近闭源商业解决方案的水平。
易于集成:提供 Python API,易于集成到现有系统中。
开源免费:采用 MIT 许可证,完全开源免费。
GMR 的设计理念
GMR 的设计遵循以下理念:
以数据为中心:GMR 将人类动作数据作为输入,通过标准化的处理流程,生成机器人动作数据。
模块化设计:GMR 的核心算法由四个独立的模块组成,每个模块负责特定的处理任务,便于理解和维护。
约束优先:GMR 优先考虑机器人的物理约束,确保生成的动作是可执行的。
性能优化:GMR 针对实时性能进行了优化,使用高效的算法和数据结构。
GMR 的系统架构可以分为三个主要部分:输入处理、核心重定向算法和输出生成。
输入处理
GMR 支持多种输入格式,每种格式都需要经过预处理转换为统一的内部表示:
SMPLX 格式:SMPLX 是一种参数化的人体模型,GMR 从 SMPLX 参数中提取身体姿态和形状信息。
BVH 格式:BVH 是一种常见的动作捕捉格式,GMR 解析 BVH 文件中的关节层次结构和动作数据。
FBX 格式:FBX 是 Autodesk 开发的 3D 模型和动画格式,GMR 通过 FBX SDK 提取动作数据。
PICO 格式:PICO 是 XRoboToolkit 使用的格式,GMR 支持实时流式输入。
核心重定向算法
GMR 的核心重定向算法由四个关键技术组件组成:
人-机器人关键身体匹配(Human-Robot Key Body Matching):建立人类和机器人关键身体部位之间的映射关系,并分配位置和方向误差权重。
笛卡尔空间静息姿态对齐(Cartesian Space Rest Pose Alignment):通过初始方向偏移,将人类身体部位对齐到机器人的静息姿态,减少重定向误差。
非均匀局部缩放(Non-Uniform Local Scaling):根据源人类骨架的高度计算全局缩放因子,并为每个关键身体部位调整局部缩放因子,保持身体比例。
两阶段逆运动学(Two-Stage Inverse Kinematics):通过两阶段优化,找到最佳匹配重定向人类动作的机器人运动,同时满足机器人的物理约束。
输出生成
GMR 的输出是机器人动作数据,包括:
机器人基座位置和方向:机器人在世界坐标系中的位置和方向。
机器人关节角度:每个关节的目标角度,可以直接用于机器人控制。
可选的速度和加速度信息:用于更平滑的运动控制。
GMR 是 TWIST(Teleoperated Whole-Body Imitation System)系统的核心组件之一。TWIST 是一个实时全身遥操作系统,允许操作员通过动作捕捉设备控制人形机器人。
TWIST 系统架构
TWIST 系统包括以下组件:
动作捕捉:使用 OptiTrack、GVHMR 或其他动作捕捉系统获取操作员的动作数据。
动作重定向(GMR):将操作员的动作重定向到目标机器人。
机器人控制:将重定向后的动作发送到机器人执行。
反馈系统:将机器人的状态反馈给操作员,形成闭环控制。
GMR 在 TWIST 中的作用
GMR 在 TWIST 系统中负责将操作员的动作转换为机器人可以执行的运动指令。GMR 的实时性能和高保真度对于 TWIST 系统的成功至关重要:
实时性:GMR 的实时性能使得操作员可以实时控制机器人,延迟足够低,不会影响操作体验。
保真度:GMR 的高保真度确保机器人的动作能够准确反映操作员的意图。
通用性:GMR 的通用性使得 TWIST 系统可以支持多种机器人平台,提高了系统的灵活性。
人-机器人关键身体匹配(Human-Robot Key Body Matching)是 GMR 的第一个关键技术组件,它建立了人类和机器人关键身体部位之间的映射关系。
关键身体部位的选择
GMR 选择以下关键身体部位进行匹配:
末端执行器:手、脚等末端执行器,这些部位的位置和方向对于动作的语义至关重要。
主要关节:肩、肘、髋、膝等主要关节,这些关节的位置影响整个肢体的姿态。
身体中心:头部、躯干中心等,这些部位的位置影响整体身体姿态。
映射策略
GMR 使用基于语义的映射策略,将人类的关键身体部位映射到机器人的对应部位:
直接映射:对于结构相似的部位(如手、脚),直接建立映射关系。
近似映射:对于结构不同的部位(如肩关节),找到最接近的机器人部位进行映射。
组合映射:对于复杂的部位(如躯干),可能需要多个机器人部位组合来表示。
误差权重分配
GMR 为每个关键身体部位分配位置误差权重和方向误差权重:
位置误差权重:控制位置匹配的重要性。对于末端执行器(如手、脚),位置误差权重通常较高;对于中间关节,位置误差权重可能较低。
方向误差权重:控制方向匹配的重要性。对于需要精确方向的部位(如手部抓取),方向误差权重较高;对于其他部位,方向误差权重可能较低。
这些权重在后续的逆运动学优化中用于构建目标函数,确保重要的部位得到更精确的匹配。
笛卡尔空间静息姿态对齐(Cartesian Space Rest Pose Alignment)是 GMR 的第二个关键技术组件,它通过初始方向偏移,将人类身体部位对齐到机器人的静息姿态。
静息姿态的定义
静息姿态(Rest Pose)是指机器人在不执行任何动作时的默认姿态。不同的机器人有不同的静息姿态,例如:
Unitree G1:双腿微屈,双臂自然下垂,身体略微前倾。
Unitree H1:双腿直立,双臂自然下垂,身体直立。
对齐的必要性
人类和机器人的静息姿态可能不同,这会导致直接重定向时出现不自然的动作。例如,如果人类的脚是自然外展的,而机器人的脚是平行的,直接重定向可能导致机器人出现"内八字"或"外八字"的问题。
对齐算法
GMR 的对齐算法包括以下步骤:
计算初始偏移:对于每个关键身体部位,计算人类静息姿态和机器人静息姿态之间的方向差异。
应用偏移:在重定向过程中,将初始偏移应用到人类动作数据上,使得重定向后的动作从机器人的静息姿态开始。
平滑过渡:确保偏移的应用是平滑的,避免突然的姿态变化。
对齐的效果
通过静息姿态对齐,GMR 可以:
减少重定向误差:对齐后的动作更接近机器人的自然运动范围,减少了重定向误差。
提高动作自然性:对齐后的动作更符合机器人的运动学特性,看起来更自然。
避免异常姿态:对齐可以避免出现不合理的关节角度或身体姿态。
非均匀局部缩放(Non-Uniform Local Scaling)是 GMR 的第三个关键技术组件,它根据源人类骨架的高度计算全局缩放因子,并为每个关键身体部位调整局部缩放因子。
全局缩放因子
GMR 首先计算全局缩放因子,用于将人类动作的整体尺寸适配到机器人:
基于高度的缩放:GMR 使用源人类骨架的高度作为参考,计算与目标机器人高度的比例,得到全局缩放因子。
保持比例:全局缩放因子应用于所有身体部位,保持人类身体的比例关系。
局部缩放因子
然而,简单的全局缩放可能不够精确,因为人类和机器人的身体比例可能不同。例如,人类的手臂相对较长,而某些机器人的手臂相对较短。因此,GMR 为每个关键身体部位计算局部缩放因子:
基于身体部位长度:对于每个关键身体部位(如手臂、腿部),GMR 计算该部位在人类和机器人中的长度比例,得到局部缩放因子。
平滑过渡:局部缩放因子在相邻身体部位之间平滑过渡,避免突然的尺寸变化。
缩放的应用
缩放因子应用于人类动作数据的位置信息:
位置缩放:将人类关键身体部位的位置乘以相应的缩放因子,得到适配后的位置。
保持方向:缩放只影响位置,不影响方向,保持动作的方向特性。
缩放的优势
非均匀局部缩放的优势在于:
精确适配:通过局部缩放,可以更精确地将人类动作适配到机器人上。
保持比例:局部缩放保持了人类身体的比例关系,使得重定向后的动作更自然。
灵活性:不同的身体部位可以使用不同的缩放因子,适应不同的机器人结构。
两阶段逆运动学(Two-Stage Inverse Kinematics)是 GMR 的第四个关键技术组件,它通过两阶段优化,找到最佳匹配重定向人类动作的机器人运动,同时满足机器人的物理约束。
逆运动学问题
逆运动学(IK)问题是给定末端执行器的目标位置和方向,求解机器人关节角度的问题。对于动作重定向,IK 问题可以表述为:
给定重定向后的人类关键身体部位的目标位置和方向,求解机器人的关节角度,使得机器人的对应部位尽可能接近目标位置和方向,同时满足机器人的物理约束。
两阶段优化策略
GMR 使用两阶段优化策略来解决 IK 问题:
第一阶段:粗匹配
第一阶段的目标是快速找到一个粗略的解决方案:
简化约束:暂时忽略一些次要约束,如速度限制、加速度限制等。
快速求解:使用高效的 IK 求解算法,快速找到一个可行的解。
初始估计:第一阶段的解作为第二阶段的初始估计。
第二阶段:精细优化
第二阶段的目标是在第一阶段的基础上进行精细优化:
完整约束:考虑所有物理约束,包括关节角度限制、速度限制、加速度限制、平衡约束等。
精确求解:使用更精确的优化算法,找到最优解。
误差最小化:最小化位置误差和方向误差,同时满足所有约束。
优化目标函数
GMR 的优化目标函数包括以下项:
位置误差项:衡量机器人关键身体部位位置与目标位置的差异,使用加权欧氏距离。
方向误差项:衡量机器人关键身体部位方向与目标方向的差异,使用四元数距离或旋转矩阵距离。
约束惩罚项:对违反物理约束的情况进行惩罚,如关节角度超出限制、速度过快等。
平滑项:鼓励相邻帧之间的动作平滑过渡,避免突然的变化。
约束处理
GMR 通过以下方式处理机器人的物理约束:
关节角度限制:在优化过程中,确保每个关节的角度在允许范围内。
速度限制:限制关节速度不超过电机和传动系统的限制(默认使用 3π rad/s 作为速度限制)。
加速度限制:限制关节加速度,确保动作的平滑性。
平衡约束:对于人形机器人,确保机器人的重心在支撑多边形内,保持平衡。
求解算法
GMR 使用基于梯度的优化算法求解 IK 问题:
梯度计算:计算目标函数对关节角度的梯度。
迭代优化:使用梯度下降或其他优化算法,迭代优化关节角度。
收敛判断:当目标函数值不再显著下降或达到最大迭代次数时,停止优化。
两阶段优化的优势
两阶段优化策略的优势在于:
效率:第一阶段快速找到粗略解,第二阶段在此基础上精细优化,提高了整体效率。
鲁棒性:即使第一阶段找到的解不够好,第二阶段也能通过精细优化得到更好的解。
约束满足:两阶段优化确保最终解满足所有物理约束。
GMR 支持超过 17 种人形机器人平台,涵盖了主流的人形机器人产品。以下是部分支持的机器人:
Unitree 系列
Unitree G1:29 自由度(腿部 2×6 + 腰部 3 + 手臂 2×7),支持手部(可选 43 自由度)。
Unitree H1:19 自由度(腿部 2×5 + 腰部 1 + 手臂 2×4)。
Unitree H1 2:27 自由度(腿部 2×6 + 腰部 1 + 手臂 2×7)。
Booster 系列
Booster T1:支持标准配置和 29 自由度配置。
Booster K1:22 自由度(颈部 2 + 手臂 2×4 + 腿部 2×6)。
其他机器人
Fourier N1:傅里叶智能的人形机器人。
HighTorque Hi:25 自由度(头部 2 + 手臂 2×5 + 腰部 1 + 腿部 2×6)。
Galaxea R1 Pro:24 自由度(基座 6 + 躯干 4 + 手臂 2×7),轮式人形机器人。
Kuavo S45:28 自由度(头部 2 + 手臂 2×7 + 腿部 2×6)。
Berkeley Humanoid Lite:22 自由度(腿部 2×6 + 手臂 2×5)。
PND Adam Lite:25 自由度(腿部 2×6 + 腰部 3 + 手臂 2×5)。
Tienkung:20 自由度(腿部 2×6 + 手臂 2×4)。
PAL Robotics' Talos:30 自由度(头部 2 + 手臂 2×7 + 腰部 2 + 腿部 2×6)。
Stanford ToddlerBot:斯坦福大学的幼儿机器人。
EngineAI PM01:EngineAI 的人形机器人。
机器人配置要求
要使用 GMR 重定向到特定机器人,需要提供以下文件:
机器人模型文件:XML 格式(MuJoCo)或 URDF 格式的机器人模型文件。
网格文件:机器人的 3D 网格文件,用于可视化。
配置文件:可选的 IK 配置文件,用于自定义逆运动学参数。
GMR 支持多种输入格式,适应不同的动作捕捉系统和数据源:
SMPLX 格式
SMPLX 是一种参数化的人体模型,广泛用于动作捕捉和动画生成:
AMASS 数据集:AMASS(Archive of Motion Capture as Surface Shapes)是一个大规模的动作捕捉数据集,使用 SMPLX 格式。
OMOMO 数据集:OMOMO 是另一个使用 SMPLX 格式的动作数据集。
数据特点:SMPLX 格式包含身体姿态参数(pose parameters)和形状参数(shape parameters),可以精确描述人体姿态。
BVH 格式
BVH(Biovision Hierarchy)是一种常见的动作捕捉格式:
LAFAN1 数据集:LAFAN1 是 Ubisoft 发布的动作数据集,使用 BVH 格式。
Nokov 格式:Nokov(度量科技)的动作捕捉系统也使用 BVH 格式。
数据特点:BVH 格式包含关节层次结构和每帧的关节角度数据,是动作捕捉的经典格式。
FBX 格式
FBX 是 Autodesk 开发的 3D 模型和动画格式:
OptiTrack 导出:OptiTrack 动作捕捉系统可以导出 FBX 格式的动作数据。
数据特点:FBX 格式支持复杂的动画数据,包括关键帧、约束、变形等。
PICO 格式
PICO 是 XRoboToolkit 使用的格式:
实时流式输入:PICO 格式支持实时流式输入,适用于实时遥操作。
TWIST2 集成:GMR 支持通过 PICO 格式与 TWIST2 系统集成。
数据格式转换
GMR 提供了多种脚本,用于将不同格式的动作数据转换为 GMR 可以处理的格式:
SMPLX 转机器人:scripts/smplx_to_robot.py 用于将 SMPLX 格式的动作数据重定向到机器人。
BVH 转机器人:scripts/bvh_to_robot.py 用于将 BVH 格式的动作数据重定向到机器人。
FBX 转机器人:scripts/fbx_offline_to_robot.py 用于将离线 FBX 文件重定向到机器人。
批量处理:scripts/smplx_to_robot_dataset.py 和 scripts/bvh_to_robot_dataset.py 用于批量处理动作数据。
人类动作数据格式
每帧人类动作数据通常表示为字典格式,包含:
身体部位名称:如 "left_hand"、"right_foot"、"head" 等。
3D 全局位置:身体部位在世界坐标系中的 3D 位置(x, y, z)。
全局旋转:身体部位在世界坐标系中的旋转,通常使用四元数表示(wxyz 顺序,与 MuJoCo 对齐)。
机器人动作数据格式
每帧机器人动作数据表示为元组格式,包含:
机器人基座位置:机器人在世界坐标系中的位置(x, y, z)。
机器人基座旋转:机器人在世界坐标系中的旋转(四元数)。
机器人关节角度:每个关节的目标角度(弧度)。
GMR 的设计支持轻松添加新的机器人平台和输入格式:
添加新机器人
要添加新的机器人支持,需要:
提供机器人文件:提供机器人的 XML/URDF 文件和网格文件。
配置 IK 参数:可选地提供 IK 配置文件,自定义逆运动学参数。
测试验证:使用测试动作验证重定向效果。
添加新输入格式
要添加新的输入格式支持,需要:
实现数据解析器:编写代码解析新格式的动作数据。
转换为标准格式:将新格式转换为 GMR 的内部表示格式。
集成到处理流程:将新格式集成到 GMR 的处理流程中。
GMR 的一个重要优势是其出色的实时性能。根据官方基准测试,GMR 在不同 CPU 上的性能表现如下:
CPU 性能基准
这些性能指标表明,GMR 可以在主流 CPU 上实现实时动作重定向,满足实时遥操作等应用的需求。
性能优化策略
GMR 通过以下策略实现高性能:
高效算法:使用高效的 IK 求解算法,减少计算复杂度。
两阶段优化:第一阶段快速找到粗略解,第二阶段精细优化,平衡了速度和精度。
CPU 优化:针对 CPU 架构进行了优化,充分利用 CPU 的并行计算能力。
代码优化:使用高效的数值计算库(如 NumPy),减少不必要的计算。
GMR 在多个数据集上与其他动作重定向方法进行了对比评估:
对比方法
PHC:一种基于学习的动作重定向方法。
ProtoMotions:另一种动作重定向方法。
闭源商业解决方案:作为参考基准。
评估指标
评估使用以下指标:
跟踪性能:衡量机器人动作与人类动作的匹配程度。
运动保真度:衡量重定向后动作的保真度,即是否保持了源动作的特征。
策略成功率:在强化学习跟踪策略中的成功率。
评估结果
根据评估结果,GMR 在以下方面表现出色:
跟踪性能:GMR 的跟踪性能优于现有的开源方法,接近闭源商业解决方案的水平。
运动保真度:GMR 的运动保真度较高,能够很好地保持源动作的特征。
策略成功率:GMR 生成的动作数据在强化学习跟踪策略中取得了较高的成功率,表明其质量适合用于机器人学习。
优势分析
GMR 相比其他方法的优势:
通用性:GMR 支持多种机器人平台,而其他方法可能只针对特定平台。
实时性:GMR 的实时性能优于许多其他方法。
开源免费:GMR 完全开源免费,而商业解决方案需要付费。
易于使用:GMR 提供了友好的 Python API,易于集成和使用。
运动保真度是衡量动作重定向质量的重要指标。GMR 通过以下方式保证运动保真度:
位置保真度
末端执行器精度:GMR 对末端执行器(手、脚)的位置匹配精度较高,确保重要动作的准确性。
身体比例保持:通过非均匀局部缩放,GMR 保持了人类身体的比例关系。
方向保真度
关键方向保持:GMR 对关键身体部位的方向匹配精度较高,特别是需要精确方向的部位(如手部抓取)。
整体姿态保持:GMR 保持了整体身体姿态的特征,使得重定向后的动作看起来自然。
时间保真度
动作节奏保持:GMR 保持了源动作的时间特性,不会出现动作过快或过慢的问题。
动作流畅性:通过平滑项和约束处理,GMR 确保了动作的流畅性。
虽然 GMR 在大多数情况下表现良好,但仍存在一些已知问题和限制:
设计挑战
通用配置的局限性:设计一个适用于所有不同人类的单一配置并非易事。GMR 观察到某些动作可能产生较差的重定向结果。
极端动作:对于极端动作(如大幅度的跳跃、翻滚),重定向效果可能不够理想。
改进方向
GMR 团队正在收集有问题的动作案例(记录在 TEST_MOTIONS.md 中),并持续改进算法。如果用户观察到较差的重定向结果,可以向团队反馈。
系统要求
GMR 在以下系统上测试通过:
安装步骤
conda create -n gmr python=3.10 -y
conda activate gmr
pip install -e .
如果使用 SMPLX 格式,需要:
assets/body_models/smplx/ 目录smplx/body_models.py 中的 ext 从 npz 改为 pkl如果遇到渲染问题,可以安装:
conda install -c conda-forge libstdcxx-ng -y
数据准备
SMPLX 数据
scripts/convert_omomo_to_smplx.py 转换为 SMPL-X 格式BVH 数据
FBX 数据
third_party/poselib/fbx_importer.py 从 FBX 文件提取动作数据单动作重定向
SMPLX 到机器人
python scripts/smplx_to_robot.py \
--smplx_file <path_to_smplx_data> \
--robot <robot_name> \
--save_path <path_to_save_robot_data.pkl> \
--rate_limit
参数说明:
--smplx_file:SMPLX 动作数据文件路径--robot:机器人名称(如 unitree_g1)--save_path:保存路径--rate_limit:限制重定向速度,与人类动作保持一致--record_video:可选,录制视频--video_path:可选,视频保存路径BVH 到机器人
python scripts/bvh_to_robot.py \
--bvh_file <path_to_bvh_data> \
--robot <robot_name> \
--save_path <path_to_save_robot_data.pkl> \
--rate_limit \
--format lafan1 # 或 nokov
批量处理
SMPLX 批量处理
python scripts/smplx_to_robot_dataset.py \
--src_folder <path_to_dir_of_smplx_data> \
--tgt_folder <path_to_dir_to_save_robot_data> \
--robot <robot_name>
BVH 批量处理
python scripts/bvh_to_robot_dataset.py \
--src_folder <path_to_dir_of_bvh_data> \
--tgt_folder <path_to_dir_to_save_robot_data> \
--robot <robot_name>
可视化保存的动作
python scripts/vis_robot_motion.py \
--robot <robot_name> \
--robot_motion_path <path_to_save_robot_data.pkl> \
--record_video # 可选
--video_path <your_video_path.mp4> # 可选
批量可视化
python scripts/vis_robot_motion_dataset.py \
--robot <robot_name> \
--robot_motion_folder <path_to_save_robot_data_folder>
在 MuJoCo 可视化窗口中,可以使用以下键盘控制:
[:播放上一个动作]:播放下一个动作space:播放/暂停切换OptiTrack 实时流
GMR 支持使用 OptiTrack 动作捕捉系统进行实时流式重定向:
python scripts/optitrack_to_robot.py \
--server_ip <server_ip> \
--client_ip <client_ip> \
--use_multicast False \
--robot unitree_g1
GVHMR 集成
GMR 支持使用 GVHMR 从单目视频中提取人体姿态并重定向到机器人:
按照 GVHMR 官方说明安装。
cd path/to/GVHMR
python tools/demo/demo.py --video=docs/example_video/tennis.mp4 -s
这将生成 GVHMR/outputs/demo/tennis/hmr4d_results.pt 文件。
python scripts/gvhmr_to_robot.py \
--gvhmr_pred_file <path_to_hmr4d_results.pt> \
--robot unitree_g1 \
--record_video
TWIST2 集成(PICO 流)
GMR 支持通过 PICO 格式与 TWIST2 系统集成:
bash teleop.sh
这将打开 MuJoCo 窗口,显示重定向后的机器人动作。
FBX 离线文件处理
按照官方说明安装 FBX SDK(可能需要单独的 Conda 环境)。
cd third_party
python poselib/fbx_importer.py \
--input <path_to_fbx_file.fbx> \
--output <path_to_save_motion_data.pkl> \
--root-joint <root_joint_name> \
--fps <fps>
conda activate gmr
python scripts/fbx_offline_to_robot.py \
--motion_file <path_to_saved_motion_data.pkl> \
--robot <robot_name> \
--save_path <path_to_save_robot_data.pkl> \
--rate_limit
问题 1:SMPLX 模型加载失败
解决方案:
assets/body_models/smplx/smplx/body_models.py 中的 ext 参数问题 2:渲染窗口无法显示
解决方案:
libstdcxx-ng:conda install -c conda-forge libstdcxx-ng -y问题 3:重定向结果不理想
解决方案:
问题 4:性能问题
解决方案:
--rate_limit 参数以获得最快速度问题 5:添加新机器人支持
解决方案:
GMR 最重要的应用之一是 TWIST(Teleoperated Whole-Body Imitation System)实时全身遥操作系统。TWIST 允许操作员通过动作捕捉设备实时控制人形机器人,实现远程操作。
TWIST 系统特点
实时性:TWIST 系统实现了低延迟的实时控制,操作员可以实时看到机器人的动作反馈。
全身控制:TWIST 支持全身控制,不仅包括手臂和腿部,还包括头部、躯干等所有身体部位。
高保真度:通过 GMR 的高质量重定向,TWIST 能够准确地将操作员的动作转换为机器人动作。
多机器人支持:TWIST 支持多种机器人平台,通过 GMR 的通用性实现。
TWIST 应用场景
危险环境作业:在核电站、化工厂等危险环境中,操作员可以远程控制机器人执行任务。
远程手术:在医疗领域,医生可以远程控制机器人进行手术操作。
机器人训练:通过遥操作,可以为机器人收集高质量的训练数据。
演示和测试:通过遥操作,可以快速测试机器人的新功能或新动作。
GMR 生成的机器人动作数据可以用于强化学习训练,帮助机器人学习复杂的运动技能。
训练数据生成
高质量参考动作:GMR 生成的动作数据可以作为强化学习算法的参考动作,指导机器人学习。
多样化动作:通过重定向不同的人类动作,可以生成多样化的训练数据。
真实动作风格:GMR 保持了人类动作的真实风格,使得训练出的机器人动作更自然。
跟踪策略训练
GMR 特别适合用于训练动作跟踪策略,即让机器人跟踪参考动作。通过 GMR 生成的高质量参考动作,强化学习算法可以学习到更好的跟踪策略。
评估结果
根据评估,使用 GMR 生成的动作数据训练的跟踪策略,在跟踪性能和策略成功率方面都表现良好,接近使用高质量闭源数据训练的策略。
GMR 可以用于生成机器人动画,用于演示、测试或娱乐应用。
应用场景
产品演示:机器人制造商可以使用 GMR 生成产品演示动画。
动作测试:在物理机器人上测试新动作之前,可以先在仿真中生成动画进行验证。
内容创作:游戏、电影等娱乐应用可以使用 GMR 生成机器人角色动画。
优势
快速生成:GMR 可以快速将人类动作转换为机器人动画。
高质量:GMR 生成的动作质量高,看起来自然。
批量处理:GMR 支持批量处理,可以快速生成大量动画。
GMR 项目正在持续发展,未来可能的方向包括:
技术改进
算法优化:持续改进重定向算法,提高质量和性能。
更多机器人支持:支持更多的人形机器人平台。
更多输入格式:支持更多的动作捕捉格式和数据源。
实时性能提升:进一步优化实时性能,支持更高帧率。
功能扩展
手部动作支持:更好地支持手部和手指动作的重定向。
表情和头部动作:支持面部表情和头部动作的重定向。
多机器人协作:支持多个机器人同时重定向,实现协作动作。
应用拓展
虚拟现实集成:与 VR 系统集成,实现沉浸式遥操作。
增强现实应用:在 AR 应用中显示重定向后的机器人动作。
云端服务:提供云端动作重定向服务,降低使用门槛。
GMR 是一个开源项目,欢迎社区贡献:
贡献方式
报告问题:如果发现 bug 或问题,可以在 GitHub 上创建 Issue。
提交改进:可以提交 Pull Request 改进代码或文档。
添加机器人支持:可以提供新机器人的文件,请求添加支持。
添加格式支持:可以实现新输入格式的支持。
社区资源
许可证
GMR 采用 MIT 许可证,完全开源免费,可以自由使用、修改和分发。
GMR(General Motion Retargeting)是一个强大的、通用的动作重定向框架,它通过精心设计的算法架构,实现了高质量、实时的动作重定向。GMR 的核心创新在于其四个关键技术组件:人-机器人关键身体匹配、笛卡尔空间静息姿态对齐、非均匀局部缩放,以及两阶段逆运动学优化。这些技术的结合,使得 GMR 能够在 CPU 上实现 35-70 FPS 的实时性能,同时保持高质量的运动保真度。
GMR 的价值不仅体现在其技术先进性上,更体现在其实际应用中。它支持超过 17 种人形机器人平台,支持多种输入格式,被广泛应用于 TWIST 遥操作系统、强化学习训练、机器人动画生成等领域。GMR 的开源特性和易用性,使得它成为机器人动作重定向领域的重要工具。
随着机器人技术的不断发展,动作重定向技术将变得越来越重要。GMR 作为这一领域的领先开源解决方案,将继续发展和改进,为机器人应用提供更好的支持。无论是研究人员、工程师还是开发者,都可以从 GMR 中获得价值,推动机器人技术的发展。
发表评论
请登录后发表评论
评论 (0)