Skip to content

Latest commit

 

History

History
422 lines (317 loc) · 14.7 KB

File metadata and controls

422 lines (317 loc) · 14.7 KB

春晚舞蹈机器人复刻:完整实战记录(2026 版)

本文档记录本仓库从安装、排错到最终可运行的关键步骤,目标是让新同学尽量少踩坑。

视频教程(官网):https://www.datawhale.cn/learn/content/258/6228

视频教程(B站):https://www.bilibili.com/video/BV1gBfCBpEEb

视频教学补充: https://www.bilibili.com/video/BV1mjcXzLEGC/?share_source=copy_web&vd_source=cc2570142da6f3f02e6aba37bd88f313

补充文档:https://my.feishu.cn/docx/OzdvdvZ3LoSUfSxziNCcFWYFnqa?from=from_copylink

一、项目目标

  • 输入:文本动作描述或已有视频
  • 输出:机器人动作(robot_motion*.pkl)与可视化(Web/viser/MuJoCo)
  • 支持多人轨迹(all tracks)与多机器人 MuJoCo 录制

二、核心流程

Prompt / Video -> PromptHMR -> SMPL-X -> GMR -> Robot Motion

常用命令:

python scripts/generate_video.py --model seedance --action "动作序列:角色向前走四步"
python scripts/extract_pose.py --project data/video_001
python scripts/convert_to_robot.py --project data/video_001 --all-tracks
python scripts/visualize.py --project data/video_001 --robot-viser --robot-all

三、环境安装(推荐)

0) 新机器复刻(先做这一步)

git clone https://github.com/datawhalechina/every-embodied.git
cd every-embodied/07-机器人操作、运动控制/Locomotion/video2robot
cd third_party
# 3. 克隆 GMR 
git clone --depth 1 https://github.com/taeyoun811/GMR.git GMR
# 4. 克隆 PromptHMR 
git clone --depth 1 https://github.com/taeyoun811/PromptHMR.git PromptHMR
cd ..

说明:

  • 本章节所有命令默认在 every-embodied/07-机器人操作、运动控制/Locomotion/video2robot 目录执行。

如果你拿到的是 patch 交付包,再应用 3 个 patch:

git apply patches/main.patch
git -C third_party/PromptHMR apply ../../patches/prompthmr.patch
git -C third_party/GMR apply ../../patches/gmr.patch

然后用 YAML 一键创建环境:

conda env create -f envs/gmr.yml
conda config --add envs_dirs /root/gpufree-data/conda_envs
# 第一个环境安装在系统盘,第二个安装在数据盘,避免超过磁盘负荷(系统和数据盘分别为30G和50G)
conda env create -f envs/phmr.yml

若环境名已存在:

conda env update -n gmr -f envs/gmr.yml --prune
conda env update -n phmr -f envs/phmr.yml --prune

1) GMR 环境

conda create -n gmr python=3.10 -y
conda activate gmr
cd /root/gpufree-data/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 环境(4090 场景)

conda create -n phmr python=3.10 -y
conda activate phmr
cd /root/gpufree-data/every-embodied/07-机器人操作、运动控制/Locomotion/video2robot/third_party/PromptHMR
# bash scripts/install.sh --pt_version=2.4 不推荐使用默认一键安装,bug较多

如果自动安装失败,可用手动方案(见下文“手动配置方案”)。

四、Web UI 启动(稳定版)

conda activate phmr
python -m pip install -U fastapi "uvicorn[standard]" jinja2 python-multipart

pkill -f "video2robot/visualization/robot_viser.py"
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

说明:

  • 固定 VISER_FIXED_PORT 是为了避免 iframe 随机端口拒绝连接

  • Web 已支持中文界面、Seedance、上传视频、铁皮/彩色切换

  • 豆包网页端生成机器人视频prompt:帮我生成图片:帮我生成图片:帮我优化prompt,生成中国武术视频,人物需要完全在视频范围内

  • 上传视频执行即可,详见视频教程

  • 运行时会自动下载一些torch的小模型,如果下载失败,尝试手动

    mkdir -p /root/.cache/torch/hub/checkpoints && rm -f /root/.cache/torch/hub/v0.10.0.zip.*.partial && wget -O /root/.cache/torch/hub/v0.10.0.zip https://github.com/pytorch/vision/zipball/v0.10.0 && wget -O /root/.cache/torch/hub/checkpoints/deeplabv3_resnet50_coco-cd0a2569.pth https://download.pytorch.org/models/deeplabv3_resnet50_coco-cd0a2569.pth && ls -lh /root/.cache/torch/hub/v0.10.0.zip /root/.cache/torch/hub/checkpoints/deeplabv3_resnet50_coco-cd0a2569.pth
    

五、多人轨迹与可视化

1) 生成多轨机器人动作

conda activate gmr
cd /root/gpufree-data/every-embodied/07-机器人操作、运动控制/Locomotion/video2robot
python scripts/convert_to_robot.py --project data/video_001 --all-tracks

2) robot-viser 显示所有轨迹

python scripts/visualize.py --project data/video_001 --robot-viser --robot-all

六、MuJoCo 视频导出

单机器人

conda activate gmr
cd /root/gpufree-data/every-embodied/07-机器人操作、运动控制/Locomotion/video2robot/third_party/GMR
python scripts/vis_robot_motion.py \
  --robot unitree_g1 \
  --robot_motion_path /root/gpufree-data/every-embodied/07-机器人操作、运动控制/Locomotion/video2robot/data/video_005/robot_motion.pkl \
  --record_video \
  --video_path /root/gpufree-data/every-embodied/07-机器人操作、运动控制/Locomotion/video2robot/data/video_005/mujoco_robot.mp4

多机器人(新增脚本)

python scripts/vis_robot_motion_multi.py \
  --robot unitree_g1 \
  --robot_motion_paths \
    /root/gpufree-data/every-embodied/07-机器人操作、运动控制/Locomotion/video2robot/data/video_005/robot_motion_track_1.pkl \
    /root/gpufree-data/every-embodied/07-机器人操作、运动控制/Locomotion/video2robot/data/video_005/robot_motion_track_2.pkl \
  --record_video \
  --max_seconds 10 \
  --camera_azimuth 0 \
  --video_path /root/gpufree-data/every-embodied/07-机器人操作、运动控制/Locomotion/video2robot/data/video_005/mujoco_multi_robot_10s_front.mp4

说明:

  • 已修复“0秒/超短视频”问题,按帧数严格控制时长
  • 已修复“画面只见地面看不到机器人”问题,相机会跟随多机器人中心

七、落地难点与 IsaacSim 仿真展望

实际落地难点

  1. 动作映射精度:从视频提取的 SMPL-X 姿态到机器人关节的映射(Retargeting)存在物理限制。
  2. 环境感知缺失:目前主要是开环动作复刻,缺乏对实际地面摩擦、碰撞和障碍物的实时反馈。
  3. 动力学约束:视频中的人类动作可能超出机器人的电机扭矩或平衡极限。例如在马年春晚武术机器人表演中,高难度的腾空与受力对伺服响应要求极高。

IsaacSim 仿真优势

未来我们将引入 IsaacSim 进行强化学习训练:

  • 优势:极高的物理仿真精度,支持复杂的碰撞检测、摩擦力模型和传感器仿真。
  • 价值:本项目主要完成“动作映射”,IsaacSim 则负责“动作稳健性训练”。

八、常见问题速查与 Debug 记录

Q1: conda 找不到(Web任务秒退)

已在主仓库任务运行器中修复,支持自动探测 CONDA_EXE

Q2: robot-viser 偶发 localhost 拒绝连接

优先使用固定端口:export VISER_FIXED_PORT=8789

Q3: MuJoCo 录制报 imageio backend 缺失

执行:pip install -U "imageio[ffmpeg]"

Q4: 编译错误(lietorch/droid_backends)

针对 PyTorch 2.4+,需将 .type() 修改为 .scalar_type()

Q5:遇到文件下载不了,在本地进行下载

  1. 模型文件阶段(最核心问题) 在运行python scripts/extract_pose.py --project data/video_001容易反复遇到的报错本质是同一类:
  • invalid load key, 'v'
  • UnpicklingError
  • weights_only ... Unsupported operand 118
  • Cannot load file ... allow_pickle=False 表示下载下来的文件无法正常使用 2.本地下载并验证(示例)
  1. 下载(HF 单文件)
$env:HF_ENDPOINT="https://hf-mirror.com"
$env:HF_HUB_DISABLE_XET="1"

python - << 'PY'
from huggingface_hub import hf_hub_download
p = hf_hub_download(
    repo_id="Datawhale/spring-festival-wushu-robot-replication-model",
    filename="data/pretrain/phmr/checkpoint.ckpt",
    repo_type="model",
    local_dir=r"E:\...\model_tmp",
    force_download=True
)
print("saved:", p)
PY

本地运行可能无法正常运行上述python代码,需要另起一个文件

from huggingface_hub import hf_hub_download
p = hf_hub_download(
    repo_id="Datawhale/spring-festival-wushu-robot-replication-model",
    filename="data/pretrain/phmr/checkpoint.ckpt",
    repo_type="model",
    local_dir=r"E:\...\model_tmp",
    force_download=True
)
print("saved:", p)

保存为test.py文件 python test.py 2) 本地验证(必须通过)

import torch
p=r"E:\...\model_tmp\data\pretrain\phmr\checkpoint.ckpt"
with open(p,'rb') as f:
    print("first16:", f.read(16))
obj=torch.load(p, map_location='cpu', weights_only=False)
print("torch.load OK:", type(obj))

验证标准

  • first16 不能是 b'version https://'
  • torch.load OK 正常输出 3)服务器验证 和上述验证方法类似

九、仓库组织建议(并入主仓,废弃旧仓)

建议将 video2robot 作为主仓内普通目录维护,不再使用 submodule(这是当前唯一推荐方案)。

原因:

  • 旧仓 hope5hope/video2robot 即将废弃,继续 submodule 会增加失效风险。
  • 团队希望“教程与代码同仓”,降低新同学切换仓库的成本。
  • 后续修改可直接在主仓提交、评审和发布。

记录基线 commit

  • 主仓库:030f3410dac3cb15a2570376dca6a0f46c2d158c
  • PromptHMR:4f8915c5b9603344c56e95fadb9a01a23ba2272d
  • GMR:069b4fd48f440e813b2b4d69255c70f53e5f83fb

十、仓库状态说明

hope5hope/video2robot 作为历史仓保留参考,不再作为主开发与交付仓库。

十一、YAML 导出与跨机复刻说明

在“源机器”导出:

cd /root/gpufree-data/every-embodied/07-机器人操作、运动控制/Locomotion/video2robot
mkdir -p envs
conda env export -n gmr > envs/gmr.yml
conda env export -n phmr > envs/phmr.yml

在“目标机器”导入:

git clone https://github.com/datawhalechina/every-embodied.git
cd every-embodied/07-机器人操作、运动控制/Locomotion/video2robot
conda env create -f envs/gmr.yml
conda env create -f envs/phmr.yml

再应用 3 个 patch(如你的复刻依赖本地改动):

git apply patches/main.patch
git -C third_party/PromptHMR apply ../../patches/prompthmr.patch
git -C third_party/GMR apply ../../patches/gmr.patch

说明:

  • YAML 不会自动带上“未提交源码改动”和“模型权重文件”。
  • 因此推荐:YAML + patch + 模型下载脚本 三件套一起交付,复刻成功率最高。

附录:手动配置方案参考(phmr环境)

# Clone main repo
git clone https://github.com/datawhalechina/every-embodied.git
cd every-embodied/07-机器人操作、运动控制/Locomotion/video2robot


conda create -n phmr python=3.10 -y
conda activate phmr
cd /root/gpufree-data/every-embodied/07-机器人操作、运动控制/Locomotion/video2robot/third_party/PromptHMR
pip install -r requirements.txt

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

# 在 bashrc 中加入
export PYTHONPATH=$PYTHONPATH:/root/gpufree-data/every-embodied/07-机器人操作、运动控制/Locomotion/video2robot/third_party/PromptHMR
echo 'export PYTHONPATH=$PYTHONPATH:/root/gpufree-data/every-embodied/07-机器人操作、运动控制/Locomotion/video2robot/third_party/PromptHMR' >> ~/.bashrc
source ~/.bashrc


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
# 编译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

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

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

# 编译 lietorch
mkdir -p python_libs
cd python_libs
git clone https://github.com/princeton-vl/lietorch.git
cd lietorch
git submodule update --init --recursive
python setup.py install
cd ../..

# 安装 detectron2
git clone https://github.com/facebookresearch/detectron2.git
cd /root/gpufree-data/detectron2
pip install -e . --no-build-isolation

# 安装 SAM2
git clone https://github.com/facebookresearch/segment-anything-2.git
cd segment-anything-2
pip install -e . --no-build-isolation

# 适配代码
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

更新一下下载脚本: https://github.com/hope5hope/video2robot/blob/main/%E6%96%87%E4%BB%B6%E6%9B%B4%E6%96%B0%E8%AF%B4%E6%98%8E.md

下载相关模型权重(推荐方案):

git-lfs install
git lfs clone https://huggingface.co/Datawhale/spring-festival-wushu-robot-replication-model
或者国内镜像
git lfs clone https://hf-mirror.com/Datawhale/spring-festival-wushu-robot-replication-model

下载相关模型权重(替代方案):

cd /root/gpufree-data/every-embodied/07-机器人操作、运动控制/Locomotion/video2robot/third_party/PromptHMR
bash scripts/fetch_smplx.sh
bash scripts/fetch_data.sh

合并 Patch 命令(快速同步改动)

如果你是在原始仓库基础上进行同步,可以使用以下命令合并补丁:

cd /root/gpufree-data/every-embodied/07-机器人操作、运动控制/Locomotion/video2robot

# 1. 确保子模块已初始化
git submodule update --init --recursive

# 2. 应用主仓库补丁
git apply patches/main.patch

# 3. 应用 PromptHMR 补丁
git -C third_party/PromptHMR apply ../../patches/prompthmr.patch

# 4. 应用 GMR 补丁
git -C third_party/GMR apply ../../patches/gmr.patch