本文档记录本仓库从安装、排错到最终可运行的关键步骤,目标是让新同学尽量少踩坑。
视频教程(官网):https://www.datawhale.cn/learn/content/258/6228
视频教程(B站):https://www.bilibili.com/video/BV1gBfCBpEEb
补充文档: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-allgit 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 --pruneconda 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]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较多如果自动安装失败,可用手动方案(见下文“手动配置方案”)。
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
conda activate gmr
cd /root/gpufree-data/every-embodied/07-机器人操作、运动控制/Locomotion/video2robot
python scripts/convert_to_robot.py --project data/video_001 --all-trackspython scripts/visualize.py --project data/video_001 --robot-viser --robot-allconda 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.mp4python 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秒/超短视频”问题,按帧数严格控制时长
- 已修复“画面只见地面看不到机器人”问题,相机会跟随多机器人中心
- 动作映射精度:从视频提取的 SMPL-X 姿态到机器人关节的映射(Retargeting)存在物理限制。
- 环境感知缺失:目前主要是开环动作复刻,缺乏对实际地面摩擦、碰撞和障碍物的实时反馈。
- 动力学约束:视频中的人类动作可能超出机器人的电机扭矩或平衡极限。例如在马年春晚武术机器人表演中,高难度的腾空与受力对伺服响应要求极高。
未来我们将引入 IsaacSim 进行强化学习训练:
- 优势:极高的物理仿真精度,支持复杂的碰撞检测、摩擦力模型和传感器仿真。
- 价值:本项目主要完成“动作映射”,IsaacSim 则负责“动作稳健性训练”。
已在主仓库任务运行器中修复,支持自动探测 CONDA_EXE。
优先使用固定端口:export VISER_FIXED_PORT=8789。
执行:pip install -U "imageio[ffmpeg]"。
针对 PyTorch 2.4+,需将 .type() 修改为 .scalar_type()。
- 模型文件阶段(最核心问题)
在运行
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.本地下载并验证(示例)
- 下载(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 会增加失效风险。 - 团队希望“教程与代码同仓”,降低新同学切换仓库的成本。
- 后续修改可直接在主仓提交、评审和发布。
- 主仓库:
030f3410dac3cb15a2570376dca6a0f46c2d158c - PromptHMR:
4f8915c5b9603344c56e95fadb9a01a23ba2272d - GMR:
069b4fd48f440e813b2b4d69255c70f53e5f83fb
hope5hope/video2robot 作为历史仓保留参考,不再作为主开发与交付仓库。
在“源机器”导出:
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 + 模型下载脚本三件套一起交付,复刻成功率最高。
# 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下载相关模型权重(推荐方案):
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如果你是在原始仓库基础上进行同步,可以使用以下命令合并补丁:
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