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/ # HIMPPO, PPO
│ ├── modules/ # HIMActorCritic, HIMEstimator
│ ├── runners/ # HIMOnPolicyRunner
│ └── storage/ # HIMRolloutStorage
├── resources/robots/
│ ├── Opendoge/ # OpenDoge URDF + MuJoCo XML + STL 网格
│ ├── g1_description/ # G1 描述
│ ├── go1/ go2/ # Go1 / Go2 模型
│ └── h1/ h1_2/ # H1 模型
├── sim2sim/ # MuJoCo Sim2Sim 迁移测试 (键盘/手柄)
│ ├── _common.py # 共享工具 (观测构建, PD控制, 四元数)
│ ├── onnx_utils.py # ONNX 路径解析
│ ├── configs/
│ │ └── opendoge.yaml # Sim2Sim 配置 (PD/缩放/默认角度)
│ ├── sim2sim_keyboard.py # 键盘控制前端
│ └── sim2sim_xbox.py # XBOX 手柄控制前端
├── 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 --headless从 checkpoint 继续训练:
python legged_gym/scripts/train.py --task=opendoge --resume --load_run <run_name> --checkpoint <model_number>| task | 机器人 |
|---|---|
opendoge |
OpenDoge |
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 中实时验证策略迁移效果:
# 键盘控制
python sim2sim/sim2sim_keyboard.py
# XBOX 手柄控制
python sim2sim/sim2sim_xbox.py
# 指定 ONNX 模型
python sim2sim/sim2sim_keyboard.py --onnx onnx/flat_opendoge_9000_omni.onnx| 前进 | 后退 | 左转 | 右转 | 左平移 | 右平移 | 暂停 |
|---|---|---|---|---|---|---|
| ↑ | ↓ | ← | → | Ctrl+← | Ctrl+→ | Space |
| 操作 | 映射 |
|---|---|
| 左摇杆 ↑↓ | 前进 / 后退 |
| 左摇杆 ←→ | 左 / 右平移 |
| 右摇杆 ←→ | 左转 / 右转 |
| START | 暂停 / 恢复 |
| BACK | 退出仿真 |
配置参数 (PD、缩放因子、默认角度等) 在 sim2sim/configs/opendoge.yaml 中与训练配置对齐。
目前 deploy_real/ 中的实机部署脚本基于 Unitree SDK(Go2/G1/H1),OpenDoge 的实机部署通过 ROS2 固件仓库 OpenDoge_firmware 完成。
本项目衍生自 HIMLoco,同时参考了:
BSD-3-Clause,详见 LICENSE。
