本项目是将 HimLoco 从 IsaacGym 移植到 Isaac Lab。
HimLoco 是一个基于强化学习的四足机器人步态控制器,采用双网络架构设计。通过本项目,您可以在 Isaac Lab 环境中训练、导出和部署 HimLoco 策略。
himlocolab/
├── scripts/ # 脚本文件
│ ├── himloco_rsl_rl/
│ │ ├── train.py # 训练脚本
│ │ ├── play.py # 批量推理和策略导出
│ │ ├── play_interactive.py # 交互式控制脚本
│ │ └── cli_args.py
│ ├── list_envs.py # 列出可用环境
│ ├── zero_agent.py
│ └── random_agent.py
│
├── source/himlocolab/ # 主要源代码
│ └── himlocolab/
│ ├── tasks/ # 任务定义
│ │ └── locomotion/
│ │ ├── mdp/ # 观测、动作、奖励、终止项
│ │ └── robots/go2/ # 训练 配置
│ │
│ ├── rsl_rl/ # HimLoco 算法实现
│ │ ├── config/ # 算法配置
│ │ ├── modules/ # HIMActorCritic, HIMEstimator 网络
│ │ ├── algorithms/ # HIMOnPolicyRunner 训练逻辑
│ │ ├── wrappers/ # HimlocoVecEnvWrapper 环境适配 Isaaclab 接口
│ │ └── env/ # VecEnv 接口
│ │
│ ├── utils/ # 工具函数
│ │ └── export_policy.py # JIT 和 ONNX 导出工具
│ │
│ └── assets/ # 资产文件
│ └── unitree/ # Unitree Go2 URDF 和配置
│
├── deploy/ # 机器人部署代码
│ └── robots/go2/ # Go2 控制器实现
│
└── README_CN.md # 本文件
本仓库使用git submodule 维护子仓库isaaclab,故如需使用docker构建训练环境,按照如下克隆本仓库:
git clone --recursive https://github.com/hyyyyyyz/HIMLocoLab.git进入HIMLocoLab项目根目录下,执行如下命令:
sudo chmod +x docker/build.sh
./docker/build.sh
如果没有构建过容器,执行该脚本会自动构建容器,如果构建过,会自动进入容器。 如果想删除本地镜像以及容器,执行如下命令:
./docker/build.sh -c
在 Unitree Go2 上训练 HIMLoco 策略:
python scripts/himloco_rsl_rl/train.py --task Unitree-Go2-Velocity运行已训练的策略进行批量推理:
python scripts/himloco_rsl_rl/play.py --task Unitree-Go2-Velocity-Play使用键盘在isaaclab中实时控制机器人:
# 启动交互式控制
python scripts/himloco_rsl_rl/play_interactive.py --task Unitree-Go2-Velocity-Play
# 键盘控制说明:
# Numpad 8 / ↑ : 前进
# Numpad 2 / ↓ : 后退
# Numpad 4 / ← : 向右平移
# Numpad 6 / → : 向左平移
# Numpad 7 / Z : 逆时针旋转
# Numpad 9 / X : 顺时针旋转将训练好的模型导出用于部署:
python scripts/himloco_rsl_rl/play.py --task Unitree-Go2-Velocity-Play 脚本会在log下生成文件,生成的文件包括:
policy.pt- TorchScript JIT 模型(单文件部署)encoder.onnx&policy.onnx- ONNX 格式(分离模型)
模型训练完成后,需要在 Mujoco 中对训练好的策略进行模拟验证(Sim2Sim),测试模型性能。 然后才能进行真实机器人部署(Sim2Real)。
# 安装依赖库
sudo apt install -y libyaml-cpp-dev libboost-all-dev libeigen3-dev libspdlog-dev libfmt-dev
# 安装 unitree_sdk2
git clone git@github.com:unitreerobotics/unitree_sdk2.git
cd unitree_sdk2
mkdir build && cd build
cmake .. -DBUILD_EXAMPLES=OFF # 安装到 /usr/local 目录
sudo make install
# Compile the robot_controller
cd HIMLocoLab/deploy/robots/go2
mkdir build && cd build
cmake .. && make安装 unitree_mujoco.
- Set the
robotat/simulate/config.yamlto go2 - Set
domain_idto 0 - Set
enable_elastic_handto 1 - Set
use_joystckto 1.
启动 Mujoco 模拟环境
cd unitree_mujoco/simulate/build
./unitree_mujoco启动控制器:
cd himloco_lab/deploy/robots/go2/build
./go2_ctrl --network lo # lo 的 ip 地址是 127.0.0.1 表示本地环回通信可以使用此程序直接控制真实机器人,但需要确保已关闭机器人上的运控程序。
./go2_ctrl --network eth0 # eth0 is the network interface name.