1. 项目概述:从人类动作到机器人舞蹈的技术实现
这个项目实现了一个完整的动作捕捉与机器人控制流程,能够将人类动作描述或视频转换为机器人可执行的动作序列。核心流程分为四个关键阶段:
- 输入处理:接受文本动作描述(如"角色向前走四步")或直接输入视频文件
- 姿态估计:通过PromptHMR模型提取人体三维姿态(SMPL-X格式)
- 动作转换:使用GMR(Generalized Motion Retargeting)将人体动作适配到机器人关节空间
- 可视化输出:生成机器人动作文件(.pkl)并通过Web UI、robot-viser或MuJoCo进行可视化
技术难点:人体动作与机器人运动学的差异处理是关键挑战。人体有244个自由度(SMPL-X模型),而目标机器人Unitree G1只有20个关节,需要进行运动学映射和物理可行性验证。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境部署全流程详解
2.1 服务器选择与配置建议
对于没有本地高性能设备的开发者,推荐使用云服务器方案。实测配置建议:
- 最低配置:NVIDIA RTX 3060(12GB显存)
- 推荐配置:NVIDIA RTX 4090(24GB显存)
- 系统要求:Ubuntu 20.04+,CUDA 11.7+
选择服务器时特别注意:
- 检查磁盘空间(系统盘+数据盘≥80GB)
- 确认已安装NVIDIA驱动和CUDA工具包
- 推荐选择预装Docker环境的服务商
2.2 基础环境搭建
bash复制# 克隆主仓库(使用加速镜像)
git clone https://ghproxy.org/https://github.com/datawhalechina/every-embodied.git
cd every-embodied/07-机器人操作、运动控制/Locomotion/video2robot
# 安装第三方依赖
cd third_party
git clone --depth 1 https://ghproxy.org/https://github.com/taeyoun811/GMR.git
git clone --depth 1 https://ghproxy.org/https://github.com/taeyoun811/PromptHMR.git
常见问题解决:
- 克隆失败时尝试更换镜像源(如替换ghproxy.org为ghps.cc)
- 网络不稳定时可使用
--depth 1只克隆最新提交 - 磁盘空间不足时修改conda默认环境路径:
bash复制
conda config --add envs_dirs /your/path/to/large/disk
2.3 双环境配置方案
项目需要两个独立环境:
| 环境名 | 用途 | 关键依赖 | 硬件需求 |
|---|---|---|---|
| gmr | 机器人运动重定向 | PyTorch 1.12+, SMPLX, MinkowskiEngine | CPU/GPU |
| phmr | 人体姿态估计 | PyTorch 2.0+, Detectron2, SAM2 | 必须GPU |
GMR环境安装实录:
bash复制conda create -n gmr python=3.10 -y
conda activate gmr
pip install torch==1.12.1+cu113 --extra-index-url https://download.pytorch.org/whl/cu113
pip install -e . # 安装项目主包
# 特殊依赖处理
pip install loop-rate-limiters smplx mink==0.5.4 rich imageio[ffmpeg]
PromptHMR环境避坑指南:
- 不要使用官方install.sh脚本(存在版本冲突)
- 必须手动安装chumpy:
bash复制git clone https://github.com/Arthur151/chumpy python_libs/chumpy pip install -e python_libs/chumpy --no-build-isolation - Eigen库必须从conda-forge安装:
bash复制
conda install -c conda-forge eigen -y
3. 模型权重获取与处理
3.1 推荐下载方案
bash复制# 安装git-lfs(大文件支持)
git lfs install
git lfs clone https://huggingface.co/Datawhale/spring-festival-wushu-robot-replication-model
3.2 备用下载方案
当主链接不可用时,使用脚本下载SMPL-X模型:
- 修改
fetch_smplx.sh脚本:bash复制
vim third_party/PromptHMR/scripts/fetch_smplx.sh - 添加补充下载链接(示例):
bash复制
gdown --folder -O ./data/ https://drive.google.com/drive/folders/1JU7CuU2rKkwD7WWjvSZJKpQFFk_Z6NL7
实测数据:完整模型权重约8.7GB,下载时间视网络状况约30-120分钟
4. 核心功能使用指南
4.1 单视频处理流程
bash复制# 姿态提取(phmr环境)
conda activate phmr
python scripts/extract_pose.py --project data/video_001
# 转换为机器人动作(gmr环境)
conda activate gmr
python scripts/convert_to_robot.py --project data/video_001
# 可视化(可选方式)
python scripts/visualize.py --project data/video_001 --robot-viser
4.2 多人动作处理
bash复制# 生成多轨迹(需先提取各视频姿态)
python scripts/convert_to_robot.py --project data/group_dance --all-tracks
# 多机器人可视化
python scripts/visualize.py --project data/group_dance --robot-all --record_video
参数说明:
--robot-all:显示所有机器人轨迹--max_seconds 10:限制视频时长--camera_azimuth 45:设置视角角度
4.3 Web UI交互模式
启动服务:
bash复制export VISER_FIXED_PORT=8789
python -m uvicorn web.app:app --host 0.0.0.0 --port 8000
功能特点:
- 支持中文界面
- 可上传视频或输入文本描述
- 实时预览机器人动作
- 铁皮/彩色皮肤切换
5. 常见问题解决方案
5.1 环境配置问题
问题1:ImportError: libcudart.so.11.0: cannot open shared object file
- 原因:CUDA版本不匹配
- 解决:
bash复制
conda install cudatoolkit=11.7 -c nvidia
问题2:smplx运行时错误
- 原因:SMPL模型路径错误
- 检查:确认
data/body_models/下有smpl、smplh、smplx三个子目录
5.2 模型运行问题
问题3:PromptHMR输出异常姿态
- 可能原因:
- 视频中人物过小
- 快速运动导致模糊
- 解决方案:
- 预处理视频(裁剪、放大)
- 使用
--tracking_frames 5增加跟踪帧数
问题4:机器人动作不自然
- 优化方法:
python复制# 在convert_to_robot.py中添加 args.optimize_joints = True # 启用关节优化 args.smooth_window = 5 # 滑动平均窗口
6. 性能优化技巧
-
视频预处理:
- 将视频转为30FPS(ffmpeg命令):
bash复制
ffmpeg -i input.mp4 -r 30 -vf scale=640:-1 output.mp4
- 将视频转为30FPS(ffmpeg命令):
-
批量处理模式:
bash复制# 使用parallel工具并行处理 ls data/*.mp4 | parallel -j 2 "python scripts/extract_pose.py --project {}" -
缓存机制:
- 修改
config.py启用磁盘缓存:python复制CACHE_ENABLED = True CACHE_DIR = "/tmp/video2robot_cache"
- 修改
-
MuJoCo渲染加速:
bash复制# 在visualize.py中添加 render_args = { 'height': 480, # 降低分辨率 'quality': 'medium', # 画质预设 'max_batch_size': 16 # 批量渲染 }
7. 进阶应用方向
-
自定义机器人模型:
- 在
third_party/GMR/robot_configs/中添加新机型 - 需提供URDF文件和关节限制配置
- 在
-
动作风格迁移:
python复制# 在convert_to_robot.py中修改 style_params = { 'aggressiveness': 0.7, # 动作幅度系数 'smoothness': 0.3 # 平滑度系数 } -
实时控制接口:
python复制# 建立WebSocket服务 import websockets async def handle_motion(websocket): while True: motion = await websocket.recv() save_motion(motion) # 保存为pkl文件
项目后续可扩展方向包括:舞蹈动作生成、体育训练辅助、影视特效预演等。在实际使用中发现,对于复杂动作序列(如后空翻),需要额外添加物理约束验证模块以避免机器人失去平衡。
