Loco-Manipulation 是一个基于 NVIDIA Isaac Gym 和 RSL-RL 的轮足移动操作机器人(Go2W + Piper)强化学习项目。仓库包含机器人资产、训练环境、PPO 训练代码、checkpoint 播放、策略导出和 MuJoCo 部署。
- Linux(建议 Ubuntu 20.04/22.04)
- NVIDIA GPU、兼容的 NVIDIA Driver 和 CUDA
- Python 3.8+
- NVIDIA Isaac Gym Preview
项目依赖由 setup.py 声明,主要包括 isaacgym、PyTorch、NumPy 1.22、TensorBoard 和 MuJoCo 3.2.3。请先按照 Isaac Gym 官方说明安装 Isaac Gym,再安装本项目。
git clone https://github.com/kai698/Loco-Manipulation.git
cd Loco-Manipulation
pip install -e .
pip install -e rsl_rl当前仓库注册的任务只有 go2w_piper:
python legged_gym/scripts/train.py --task go2w_piper --headless常用覆盖参数:
python legged_gym/scripts/train.py \
--task go2w_piper \
--headless \
--num_envs 4096 \
--max_iterations 15000 \
--seed 1 \
--run_name baseline--num_envs、--max_iterations、--seed 和 --run_name 会覆盖配置文件中的对应值。默认训练配置位于 go2w_piper_config.py。
播放脚本会加载最近一次运行的最新模型,也可以通过 --load_run 和 --checkpoint 指定:
python legged_gym/scripts/play.py \
--task go2w_piper \
--load_run <run-directory> \
--checkpoint 15000播放默认只创建一个环境、关闭噪声和域随机化,并导出 JIT actor、actor state dict 和历史编码器。使用已有 TorchScript:
python legged_gym/scripts/play.py --task go2w_piper --use_jitMuJoCo 部署使用 deploy/pre_train/go2w_piper_cost/ 下的 traced_actor.pt 和 traced_hist_encoder.pt,场景位于 deploy/deploy_mujoco/robots/go2w_piper/scene.xml:
python deploy/deploy_mujoco/deploy_mujoco.py如需替换策略或场景,请修改 deploy_mujoco/configs.py 中的 actor_path、hist_encoder_path 和 asset.file。
Loco-Manipulation/
├── legged_gym/
│ ├── envs/base/ # 通用腿式机器人环境与配置
│ ├── envs/go2w_piper/ # Go2W-Piper 环境、配置、奖励和代价
│ ├── scripts/train.py # PPO 训练入口
│ ├── scripts/play.py # checkpoint 播放与策略导出
│ └── utils/ # 参数解析、任务注册、日志和数学工具
├── rsl_rl/ # 仓库内维护的 RSL-RL PPO 实现
├── resources/robots/ # Isaac Gym 使用的 URDF 和网格
├── deploy/deploy_mujoco/ # MuJoCo 场景、控制器和部署入口
├── deploy/pre_train/ # MuJoCo 使用的 TorchScript 预训练策略
├── logs/ # 训练运行、checkpoint 和导出文件
├── setup.py
└── README.md
任务在 legged_gym/envs/init.py 注册:
task_registry.register("go2w_piper", Go2wPiper, Go2wPiperCfg(), Go2wPiperCfgPPO())新增任务时,需要同时注册环境类、环境配置和 PPO 配置。
训练默认输出目录为:
logs/<experiment_name>/<timestamp>_<run_name>/
├── model_<iteration>.pt
├── events.out.tfevents.*
└── params/
├── env.yaml
├── train.yaml
└── go2w_piper_config.py
params/env.yaml 和 params/train.yaml 保存创建该 run 时最终生效的环境与 PPO 配置,包括命令行覆盖后的参数。params/go2w_piper_config.py 是对应的 Python 配置源码快照,便于复现实验时核对配置逻辑。
播放脚本生成的导出文件位于实验目录(而不是带时间戳的 run 目录)下:
logs/<experiment_name>/exported/
├── policies/policy_1.pt
├── model_actor.pt
└── traced/
├── traced_actor.pt
└── traced_hist_encoder.pt
导出文件说明:
policies/policy_1.pt:由export_policy_as_jit()生成的完整 actor TorchScript,适合在 C++ 或其他 Python 进程中直接加载推理。policies/model_actor.pt:actor 网络的 PyTorchstate_dict,用于重新构造网络、检查权重或进行二次导出;它不是可直接调用的完整 TorchScript 模型。traced/traced_actor.pt:将 actor backbone、privileged encoder 和腿部/机械臂控制 head 组合后的 TorchScript actor,输入为当前 proprioception 与历史 latent。使用--use_jit播放时加载此文件。traced/traced_hist_encoder.pt:历史观测编码器的独立 TorchScript。运行时先将历史观测输入该文件得到 latent,再与当前 proprioception 拼接后输入traced_actor.pt。
运行 play.py 时默认会生成上述文件;--use_jit 只负责加载已有的 traced/ 文件,不会重新导出。
使用 --resume 恢复训练;默认从实验目录选择最近一次运行和最新 checkpoint:
python legged_gym/scripts/train.py \
--task go2w_piper \
--headless \
--resume \
--experiment_name go2w_piper_cost \
--load_run <run-directory> \
--checkpoint 5000训练日志由 TensorBoard SummaryWriter 写入 events.out.tfevents.* 文件,可用以下命令查看:
tensorboard --logdir logs环境 smoke test 会创建一个环境并执行零动作:
python legged_gym/tests/test_env.py --task go2w_piper --headless --num_envs 1