主题
火爆全网的春晚机器人舞蹈复刻教程指南
算力自由平台与Datawhale 社区合作第一时间把整个项目的安装、排错到最终跑通的关键步骤,全部整理成了这篇保姆级实战教程。不论你是想输入一段文本描述,还是直接丢一段视频进去,都能让机器人跟着动起来,甚至还支持多人轨迹和 MuJoCo 仿真录制! 同时感谢网友们的热情分享,
• 让没有任何编程经验的用户也能生成机器人舞蹈动作
• 支持多人轨迹(all tracks)与多机器人 MuJoCo 录制
• 打通从视频到仿真验证的完整流程
整理的搭建指南供参考:
- 技术流程
Plaintext ┌─────────────┐ ┌──────────────┐ ┌─────────┐ ┌──────────────┐ │ 视频/Prompt │ → │ PromptHMR │ → │ SMPL-X │ → │ GMR │ └─────────────┘ └──────────────┘ └─────────┘ └──────────────┘ ↓ ┌──────────────┐ │ 机器人动作 │ └──────────────┘
流程说明:
PromptHMR:将视频或文本描述转换为人体3D姿态(SMPL-X格式)
SMPL-X:一种参数化人体模型,包含身体、手势、面部表情
GMR:把人体动作"翻译"成机器人可执行的动作
1.2 技术栈
| 组件 | 说明 |
|---|---|
| PromptHMR | 文本/图像驱动的人体姿态估计 |
| SMPL-X | 人体3D姿态模型(身体+手势+表情) |
| GMR | 机器人动作生成模型 |
| Viser | Web可视化工具 |
| MuJoCo | 物理仿真引擎 |
| Unitree G1 | 目标机器人模型 |
- 部署环境
2.1 云端部署
2.1.1 关于容器
云算力平台(算力自由):https://www.gpufree.cn/
平台中有许多镜像仓库,我这边选择IsaacSim5.0 及 ROS2,方便之后可能有的额外开发

云平台服务器性能也能满足我们的开发,RTX4090 24G,同时可以根据需求增加一些数据盘容量

等待拉取成功就好。访问云服务器的端口时,可以直接通过VNC访问其图形界面,如果不需要可视化界面,只用终端的情况可以使用JupyterLab

2.1.2 部署课程仓库
步骤1 添加git代理
在容器中,关于Github相关内容可以参考https://www.gpufree.cn/docs/guide/tips/github.html
直接配置gh-proxy.org的为全局代理,后续所有的git操作都将通过gh-proxy.org进行加速。
使用ctrl+alt+t打开 JupyterLab 终端,或者点击下侧栏中的终端符号启动

复制下面代码
Plain
# 配置全局代理
git config --global url."https://gh-proxy.org/https://github.com/".insteadOf "https://github.com/"
步骤2 clone课程仓库
Plain
cd gpufree-data
git clone https://github.com/datawhalechina/every-embodied.git可以看到相关下载进度:

步骤3 clone GMR
通过“cd”命令到对应的路径中,可以复制,也可以使用tab补全
Plain
cd every-embodied/07-机器人操作、运动控制/Locomotion/video2robot/third_partyGMR 能 “学习” 人类的动作特征,再把这些特征转换为机器人关节能执行的运动轨迹,让机器人的动作更贴近人类、更流畅自然,而非机械的关节角度切换。

步骤4 Clone PromptHMR
Plain
git clone --depth 1 https://github.com/taeyoun811/PromptHMR.git PromptHMR
至此,两个关键包已下载完成。
步骤5 应用patch
如果你拿到的是 patch 交付包,再应用 3 个 patch:
Plain
cd ..
git apply patches/main.patch
git -C third_party/PromptHMR apply ../../patches/prompthmr.patch
git -C third_party/GMR apply ../../patches/gmr.patch
提醒:trailing whitespace(尾行空白)警告,本质是:补丁文件(prompthmr.patch)中部分代码行的末尾多了空格 / 制表符 / 换行符,Git 在应用补丁时检测到了这种不规范的代码格式,所以给出警告,但并不会中断补丁应用。
✅ 无功能影响,所以我们可以放心使用。
2.1.3 conda环境安装
步骤1 安装GMR 环境
conda在我的这个镜像中已经安装了,所以直接使用就可以,下述pip库均在gmr环境中
Plain
conda create -n gmr python=3.10 -y
conda activate gmr
cd /root/every-embodied/07-机器人操作、运动控制/Locomotion/video2robot
pip install -e .
# gmr下还需要安装
pip install loop-rate-limiters
pip install smplx
pip install imageio
pip install mink
pip install rich
pip install imageio[ffmpeg]步骤2 安装PromptHMR 环境
由于PromptHMR 需要较多的工程依赖,版本的影响因素比较大,所以采用部分手动下载源码,大部分采用一键安装库文件的形式,过程约20-30分钟,下述pip库均在phmr环境中
步骤2.1 创建conda环境
Plain
conda create -n phmr python=3.10 -y
conda activate phmr
cd /root/every-embodied/07-机器人操作、运动控制/Locomotion/video2robot/third_party/PromptHMR
pip install -r requirements.txt步骤2.2 添加路径到bashrc
Markdown
# 在 bashrc 中加入
echo 'export PYTHONPATH=$PYTHONPATH:/root/gpufree-data/every-embodied/07-机器人操作、运动控制/Locomotion/video2robot/third_party/PromptHMR' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH="/root/gpufree-data/conda_envs/phmr/lib/python3.10/site-packages/torch/lib:/usr/lib/x86_64-linux-gnu:/usr/local/cuda/lib64:/usr/lib64:/usr/local/lib"' >> ~/.bashrc
source ~/.bashrc步骤2.3 安装chumpy
Plain
# 在PromptHMR下make
mkdir -p python_libs
git clone https://github.com/Arthur151/chumpy python_libs/chumpy
python -m pip install -e python_libs/chumpy --no-build-isolation步骤2.4 lietorch
Plain
# 编译 lietorch
cd ../../python_libs/
git clone https://github.com/princeton-vl/lietorch.git
cd lietorch
git submodule update --init --recursive
python setup.py install步骤2.5 安装droidcalib
Plain
conda install -c conda-forge eigen -y
# 编译droidcalib
source /opt/conda/etc/profile.d/conda.sh
conda activate phmr
conda install -c conda-forge eigen -y
export CPATH="$CONDA_PREFIX/include/eigen3:${CPATH:-}"
cd ~root/gpufree-data/every-embodied/07-机器人操作、运动控制/Locomotion/video2robot/third_party/PromptHMR/pipeline/droidcalib
python setup.py install步骤2.6 detectron2
Plain
# 安装 detectron2
cd ..
git clone https://github.com/facebookresearch/detectron2.git
cd detectron2
pip install -e . --no-build-isolation步骤2.7 安装 SAM2
Plain
# 安装 SAM2
cd ..
git clone https://github.com/facebookresearch/segment-anything-2.git
cd segment-anything-2
pip install -e . --no-build-isolation适配代码
Bash
# 适配代码
sed -i 's/load_video_frames, load_video_frames_from_np/load_video_frames/g' /root/gpufree-data/every-embodied/07-机器人操作、运动控制/Locomotion/video2robot/third_party/PromptHMR/pipeline/detector/sam2_video_predictor.py
#补充pip包
python -m pip install -U torch-scatter --no-build-isolation #这个命令运行较久,请耐心等待
python -m pip install -U xformers步骤2.8 安装剩余依赖
注释phmr.yml文件中和我们系统路径不一致的地方(包括上述已完整的包也注释一下),文件路径为 root/every-embodied/07-机器人操作、运动控制/Locomotion/video2robot/envs/phmr.yml

运行自动脚本安装pip库
Bash
conda env update -n phmr -f envs/phmr.yml --prune2.1.4 下载PromptHMR相关资源
资源整合包:需要的smpl暂时不知道在哪里下的,我的经验为下载路径是~PromptHMR/data,过程约30分钟,要下载14G左右的资源
步骤 1:创建下载脚本
Plain
cd /root/every-embodied/07-机器人操作、运动控制/Locomotion/video2robot/third_party/PromptHMR
touch download_hf_repo.py步骤 2:写入以下代码(复制粘贴)
Plain
import os
from huggingface_hub import snapshot_download
# 配置国内镜像(关键)
os.environ["HF_ENDPOINT"] = "https://hf-mirror.com"
os.environ["HF_HUB_ENABLE_HF_TRANSFER"] = "1"
# 核心下载逻辑
if __name__ == "__main__":
# 仓库ID
repo_id = "Datawhale/spring-festival-wushu-robot-replication-model"
# 本地保存路径(可修改为你需要的路径)
local_dir = "spring-festival-wushu-robot-replication-model"
print("开始下载仓库,支持断点续传...")
snapshot_download(
repo_id=repo_id,
local_dir=local_dir,
resume_download=True, # 断点续传
local_dir_use_symlinks=False, # 所见即所得
force_download=False) # 已下载文件不重复下载
print(f"✅ 下载完成!文件保存在:{os.path.abspath(local_dir)}")步骤 3:运行脚本
Plain
# 用python3执行(避免python2兼容问题)
python3 download_hf_repo.py• 该脚本无需依赖 huggingface-cli 命令,直接通过 Python 调用 API 下载,兼容性 100%。

✅下载好后将上述下载中的data数据放置在PromptHMR/data中!
2.1.5 模型资源放置
- Vision v0.10.0(PyTorch官方视觉库)
支撑DeepLabV3人体分割,在进行视频提取姿态时,会运用到,如果没有会自动下载,速度会比较慢,所以为了避免触发下载,可以先将其放置好,关键名字要对(v0.10.0)。
- 参考:https://github.com/pytorch/vision/archive/refs/tags/v0.10.0.tar.gz
- 放置位置:
/root/.cache/torch/hub/v0.10.0
我们根据参考链接下载到本地后,可以通过JupyterLab将压缩包上传到服务器上。
Bash
mkdir -p /root/.cache/torch/hub/
mv [你的Vision v0.10.0库] /root/.cache/torch/hub/然后我们只要创建好cache中torch调用的库文件路径,将对应库放置进去就可以了,使用命令创建和移动或者图形化拖拽过去也可以。然后查看是否在对应路径上就可以了。
Bash
# 如果要解压
cd /root/.cache/torch/hub/
unzip v0.10.0- CLIP ViT-L-14(metaclip_fullcc)
文本/图像特征编码,支撑PromptHMR的文本引导姿态估计。处理逻辑和上述的Vision v0.10.0同理,提前放置好,本地下载(复制链接到浏览器,需科学上网)
下载链接:https://huggingface.co/timm/vit_large_patch14_clip_224.metaclip_2pt5b/resolve/main/open_clip_model.safetensors ✅ 验证:文件名为 open_clip_model.safetensors,大小约 1.6GB。
下载好后,上传到云服务器,我用的JupyterLab的文件传输的方式,直接拖过去就可以。
放置位置:/root/.cache/huggingface/hub/models--timm--vit_large_patch14_clip_224.metaclip_2pt5b/snapshots/main/open_clip_model.safetensors
Bash
# 1. 创建缓存目录(固定路径,不能改)
mkdir -p /root/.cache/huggingface/hub/models--timm--vit_large_patch14_clip_224.metaclip_2pt5b/snapshots/main/
# 2. 复制文件到指定路径
cp /root/open_clip_model.safetensors /root/.cache/huggingface/hub/models--timm--vit_large_patch14_clip_224.metaclip_2pt5b/snapshots/main/
# 3. 验证:查看文件是否存在
ls -lh /root/.cache/huggingface/hub/models--timm--vit_large_patch14_clip_224.metaclip_2pt5b/snapshots/main/open_clip_model.safetensors- Metric3D(DroidCalib相机校准)
相机运动估计、内参优化,支撑视频的3D姿态提取。
- 参考:这个在资源包中也有,或者参考https://github.com/YvanYin/Metric3D
- 放置位置:
/root/gpufree-data/every-embodied/07-机器人操作、运动控制/Locomotion/video2robot/data/pretrain/droidcalib.pth
Bash
# 1. 创建目标目录(和脚本路径对应)
mkdir -p /root/gpufree-data/every-embodied/07-机器人操作、运动控制/Locomotion/video2robot/data/pretrain/
# 2. 移动文件
mv /root/droidcalib.pth /root/gpufree-data/every-embodied/07-机器人操作、运动控制/Locomotion/video2robot/data/pretrain/
# 3. 验证
ls -lh /root/gpufree-data/every-embodied/07-机器人操作、运动控制/Locomotion/video2robot/data/pretrain/droidcalib.pth- PromptHMR权重
PromptHMR的主权重(人体网格估计核心),支撑人体3D网格/姿态估计。
- 参考:这个同样在资源包中也有
- 放置位置:
/root/every-embodied/07-机器人操作、运动控制/Locomotion/video2robot/data/pretrain/phmr/checkpoint.ckpt
Bash
# 1. 创建目标目录
mkdir -p /root/gpufree-data/every-embodied/07-机器人操作、运动控制/Locomotion/video2robot/data/pretrain/phmr/
# 2. 移动文件,图形化拖拽过去也行
mv [你的checkpoint.ckpt路径] /root/gpufree-data/every-embodied/07-机器人操作、运动控制/Locomotion/video2robot/data/pretrain/phmr/
# 3. 验证
ls -lh /root/gpufree-data/every-embodied/07-机器人操作、运动控制/Locomotion/video2robot/data/pretrain/phmr/checkpoint.ckpt✅以下是其他参考权重文件:https://drive.google.com/drive/folders/1V2q1lWTba5hOcT-bEDTv6Cxx3fbltJyg(相关资料),暂时先待定,可以不用下载。
| 权重文件 | 适配场景 | 核心用途 |
|---|---|---|
| phmr_b1.ckpt | PromptHMR Base1 版本 | 基础版人体网格重建,轻量、推理快 |
| phmr_b1b2.ckpt | PromptHMR Base1+Base2 融合版 | 精度更高,适配复杂人体姿态 |
| hmr_b2.ckpt | 传统 HMR Base2 版本 | 仅适配原始 HMR,不兼容 PromptHMR |
将其中的phmr_b1.ckpt修改为checkpoint.ckpt
Bash
# 1. 创建目标目录
mkdir -p /root/every-embodied/07-机器人操作、运动控制/Locomotion/video2robot/data/pretrain/phmr/
# 2. 移动文件
mv /root/checkpoint.ckpt /root/gpufree-data/every-embodied/07-机器人操作、运动控制/Locomotion/video2robot/data/pretrain/phmr/
# 3. 验证
ls -lh /root/gpufree-data/every-embodied/07-机器人操作、运动控制/Locomotion/video2robot/data/pretrain/phmr/checkpoint.ckpt2.1.6 测试部署是否成功
运行提取姿态的程序,从中可以判断还缺少哪些库
Bash
conda activate phmr
cd /root/gpufree-data/every-embodied/07-机器人操作、运动控制/Locomotion/video2robot
python scripts/extract_pose.py --project data/video_001仔细看报错信息中,有没有显示缺少某个库文件的情况,然后检查是否在上述步骤中有同名的,再次运行就好。
注意:在phmr的conda环境中,像pip库的,要先conda activate phmr进入到conda环境后再进行安装。
2.2 本地部署
根据教程复刻步骤,注意需要科学上网,整体步骤与上文差不多,主要是路径的区别,所以就提供查看本地内存与安装建议
Plain
git clone https://github.com/datawhalechina/every-embodied.git
Plain
cd every-embodied/07-机器人操作、运动控制/Locomotion/video2robot
cd third_partyGMR 能 “学习” 人类的动作特征,再把这些特征转换为机器人关节能执行的运动轨迹,让机器人的动作更贴近人类、更流畅自然,而非机械的关节角度切换。
Plain
git clone --depth 1 https://github.com/taeyoun811/GMR.git GMRClone PromptHMR
Plain
git clone --depth 1 https://github.com/taeyoun811/PromptHMR.git PromptHMR✅本章节所有命令默认在 every-embodied/07-机器人操作、运动控制/Locomotion/video2robot 目录执行。
切换到上一层,注意查看
Plain
cd ..如果你拿到的是 patch 交付包,再应用 3 个 patch:
Plain
git apply patches/main.patch
git -C third_party/PromptHMR apply ../../patches/prompthmr.patch
git -C third_party/GMR apply ../../patches/gmr.patch
这些
trailing whitespace(尾行空白)警告,本质是:补丁文件(prompthmr.patch)中部分代码行的末尾多了空格 / 制表符 / 换行符,Git 在应用补丁时检测到了这种不规范的代码格式,所以给出警告,但并不会中断补丁应用。✅ 无功能影响,所以我们可以放心使用
由于配置环境所需的存储空间较大(约80g),所以需要确保自身的存储空间够大,以下是针对我自身的存储空间的查询情况,详细如下
Plainconda config --show envs_dirs
查询空间大小
Plaindf -h /home/nx_ros/miniconda3/envs
如上我的就只剩下12G,显然是不够的,所以查询所有的硬盘空间
Plaindf -h
可以看到我路径下/develop的空间较多,所以将conda安装的后续环境替换到此路径下
Plain# 创建 conda 环境目录(路径可自定义,比如 /develop/conda_envs) sudo mkdir -p /develop/conda_envs # 修改目录所有者为你的用户(nx_ros),避免权限问题 sudo chown -R nx_ros:nx_ros /develop/conda_envs # 确认权限(输出应为 nx_ros nx_ros) ls -ld /develop/conda_envs
将
/develop/conda_envs添加到 conda 的环境目录列表首位(优先级最高):Plain# 添加新路径到 conda 配置(prepend 表示加到列表最前面) conda config --prepend envs_dirs /develop/conda_envs # 验证配置是否生效(输出中第一个路径应为 /develop/conda_envs) conda config --show envs_dirs
这样就可以放心安装conda环境了。
然后用 YAML 一键创建环境,由于我的安装路径和作者的不一样,所以在yaml中修改部分内容:

注释已报错的片段后,执行conda环境安装,需要安装两个不同名称的环境gmr和phmr
Plain
conda env create -f envs/gmr.yml
conda env create -f envs/phmr.yml如果我们在安装过程中出错,导致需要再次执行conda环境安装时,可以使用以下更新步骤
Plain
conda env update -n gmr -f envs/gmr.yml --prune
conda env update -n phmr -f envs/phmr.yml --prune- 启动炫酷的 Web UI(稳定版)
Plain
conda activate phmr
python -m pip install -U fastapi "uvicorn[standard]" jinja2 python-multipart切换到 video2robot 的工程路径下
Plain
cd /root/gpufree-data/every-embodied/07-机器人操作、运动控制/Locomotion/video2robot
export VISER_FIXED_PORT=8789
python -m uvicorn web.app:app --host 0.0.0.0 --port 8000
打开浏览器访问 http://localhost:8000

这里可以选择一些已有的视频进行转换,如video_004, 点击提取姿态,等待进度条提取成功(在模型已经放置成功好的情况下,使用4090约5分钟)

提取成功姿态后,进行转机器人: 选项由灰转白

提取成功,机器人的可视化:






