OpenDoge 四足机器人的强化学习训练框架,衍生自 HIMLoco。
OpenDoge_train/
├── legged_gym/ # 核心训练框架
│ ├── envs/
│ │ ├── base/ # 基础类 (LeggedRobot, LeggedRobotCfg)
│ │ ├── opendoge/ # OpenDoge 训练配置
│ │ ├── a1/ # A1 训练配置
│ │ └── go1/ # Go1 训练配置
│ ├── scripts/
│ │ ├── train.py # 训练入口
│ │ └── play.py # 演示 & ONNX 导出
│ ├── utils/ # 工具 (task_registry, logger, terrain 等)
├── rsl_rl/ # HIMLoco PPO 算法实现
│ └── rsl_rl/
│ ├── algorithms/ # PPO, HIMPPO, AMP, HIM-AMP
│ ├── modules/ # HIMActorCritic, HIMEstimator
│ ├── runners/ # PPO/HIM/AMP runners
│ └── storage/ # HIMRolloutStorage
├── datasets/opendoge_motion/ # 已重定向到 OpenDoge URDF 的 S-DOG2 AMP 数据
├── datasets/sdog2_motion/ # 旧版 S-DOG2 AMP 数据,仅作对照保留
├── datasets/keypoint_datasets/ # HIMloco 的 AI4Animation 原始关键点数据
├── deploy/deploy_mujoco/ # 配置驱动的 MuJoCo 验证与诊断
├── resources/robots/
│ ├── Opendoge/ # OpenDoge URDF + MuJoCo XML + STL 网格
│ ├── g1_description/ # G1 描述
│ ├── go1/ go2/ # Go1 / Go2 模型
│ └── h1/ h1_2/ # H1 模型
├── Tool/ # 辅助工具
│ ├── check_urdf.py # URDF 验证
│ └── simplify_mesh.py # 网格减面
├── setup.py
└── LICENSE
# Python 3.8 + PyTorch 2.3.1 + CUDA 12.1 + MuJoCo
conda create -n himloco python=3.8
conda activate himloco
pip install torch==2.3.1 torchvision==0.18.1 torchaudio==2.3.1 --index-url https://download.pytorch.org/whl/cu121
pip install mujoco==3.2.3从 NVIDIA 官网 下载 Isaac Gym Preview 4,解压后安装:
conda activate himloco
pip install -e <isaacgym_path>/isaacgym/pythonIsaac Gym 需要 libpython3.8.so 和自身 lib 目录。创建 activate hook 使变量仅在 himloco 环境生效:
mkdir -p ${CONDA_PREFIX}/etc/conda/activate.d
cat > ${CONDA_PREFIX}/etc/conda/activate.d/env_vars.sh << 'EOF'
export LD_LIBRARY_PATH=${CONDA_PREFIX}/lib:<isaacgym_path>/isaacgym/lib:$LD_LIBRARY_PATH
EOF替换
<isaacgym_path>为 Isaac Gym 的实际路径,例如/home/lain/IsaacGym_Preview_4_Package。
conda activate himloco
cd OpenDoge_train
pip install -e .conda activate himloco
python -c "
import isaacgym
print(f'IsaacGym: ok')
import torch
print(f'PyTorch CUDA available: {torch.cuda.is_available()}')
print(f'PyTorch CUDA version: {torch.version.cuda}')
import mujoco
print(f'MuJoCo: {mujoco.__version__}')
print('===== 环境就绪 =====')
"预期输出:
IsaacGym: ok
PyTorch CUDA available: True
PyTorch CUDA version: 12.1
MuJoCo: 3.2.3
===== 环境就绪 =====
export PYTHONPATH=$PWD
python legged_gym/scripts/train.py --task=opendoge --headlessOpenDog V1.1 使用独立任务配置:
python legged_gym/scripts/train.py --task=opendoge_v1_1 --headlessOpenDoge 的任务已按 HIMloco 的训练阶段拆分,分别维护自己的地形、奖励、随机化和日志目录:
python legged_gym/scripts/train.py --task=opendoge_flat --headless
python legged_gym/scripts/train.py --task=opendoge_rough --headless
python legged_gym/scripts/train.py --task=opendoge_getup --headless
python legged_gym/scripts/train.py --task=opendoge_amp --headless
python legged_gym/scripts/train.py --task=opendoge_him_amp --headlessAMP 默认读取 datasets/opendoge_motion/*.json。这些片段由 HIMloco 的
S-DOG2/AI4Animation 关键点数据重定向到 OpenDoge URDF;重新生成数据:
python datasets/retarget_opendoge_motions.py从 checkpoint 继续训练:
python legged_gym/scripts/train.py --task=opendoge --resume --load_run <run_name> --checkpoint <model_number>| task | 机器人 |
|---|---|
opendoge |
OpenDoge |
opendoge_v1_1 |
OpenDog V1.1 |
opendoge_flat |
OpenDoge 平地行走预训练 |
opendoge_rough |
OpenDoge 粗糙地形课程训练 |
opendoge_getup |
OpenDoge 翻倒恢复 |
opendoge_amp |
OpenDoge AMP 行为先验训练 |
opendoge_him_amp |
OpenDoge HIM + AMP 训练 |
a1 |
Unitree A1 |
go1 |
Unitree Go1 |
| 参数 | 说明 | 默认值 |
|---|---|---|
--task |
任务名称 | 必选 |
--headless |
不渲染图形界面 | false |
--num_envs |
并行环境数 | 4096 |
--seed |
随机种子 | 1 |
--max_iterations |
最大迭代次数 | 300000 |
--resume |
继续训练 | false |
--load_run |
加载的运行名称 | -1 (最新) |
--checkpoint |
checkpoint 编号 | -1 (最新) |
--experiment_name |
实验名称 | 覆盖默认值 |
--run_name |
运行名称 | 覆盖默认值 |
--sim_device |
仿真设备 | cuda:0 |
--rl_device |
强化学习设备 | cuda:0 |
训练结果保存在 logs/<experiment_name>/<date_time>_<run_name>/model_<iteration>.pt。
加载训练好的模型进行仿真演示并导出 ONNX:
export PYTHONPATH=.
python legged_gym/scripts/play.py --task=opendoge --load_run <run_name> --checkpoint <model_number>导出的 ONNX 模型保存在 onnx/ 目录,TorchScript 模型保存在 logs/<experiment_name>/exported/policies/。
查看训练曲线:
tensorboard --logdir=./logs/训练完成后,在 MuJoCo 中实时验证策略迁移效果:
# OpenDoge 键盘可视化
python deploy/deploy_mujoco/deploy_mujoco.py opendoge.yaml --keyboard
# OpenDoge 固定速度运行和诊断
python deploy/deploy_mujoco/deploy_mujoco.py opendoge.yaml --no-keyboard --cmd_vx 1.0
# OpenDoge 策略验证
python deploy/deploy_mujoco/deploy_mujoco.py opendoge.yaml --validate --duration 5
# OpenDog V1.1 键盘可视化
python deploy/deploy_mujoco/deploy_mujoco.py opendoge_v1_1.yaml --keyboard
# OpenDog V1.1 HIMloco 风格 PyQt 内嵌界面(推荐)
python deploy/deploy_mujoco/opendoge_v1_1_panel.py
# 指定其他 V1.1 ONNX 模型
python deploy/deploy_mujoco/deploy_mujoco.py opendoge_v1_1.yaml \
--onnx onnx/opendoge_v1_1_directional_model_7600.onnx --keyboard| 前进 | 后退 | 左转 | 右转 | 左平移 | 右平移 | 暂停 |
|---|---|---|---|---|---|---|
| ↑ | ↓ | ← | → | Ctrl+← | Ctrl+→ | Space |
| 操作 | 映射 |
|---|---|
| 左摇杆 ↑↓ | 前进 / 后退 |
| 左摇杆 ←→ | 左 / 右平移 |
| 右摇杆 ←→ | 左转 / 右转 |
| START | 暂停 / 恢复 |
| BACK | 退出仿真 |
配置参数 (PD、缩放因子、默认角度等) 在 deploy/deploy_mujoco/configs/ 中与训练配置对齐。V1.1 的 PyQt 面板使用离屏 mujoco.Renderer 将画面嵌入 Qt 窗口,鼠标相机行为和 HIMloco 面板保持一致。
目前 deploy_real/ 中的实机部署脚本基于 Unitree SDK(Go2/G1/H1),OpenDoge 的实机部署通过 ROS2 固件仓库 OpenDoge_firmware 完成。
本项目衍生自 HIMLoco,同时参考了:
BSD-3-Clause,详见 LICENSE。
