RL MPC 运动控制
本仓库旨在通过动态预测MPC控制器的权重参数,为四足机器人运动控制任务提供快速仿真和强化学习训练框架。控制框架是一个分层控制器,由高层策略网络和低层模型预测控制器组成。
MPC控制器参考了Cheetah Software,但用Python重写,并完全开放了传感器数据和电机命令之间的接口,因此控制器可以轻松移植到任何主流仿真器中。
强化学习训练利用NVIDIA Isaac Gym并行进行,使用Unitree Robotics Aliengo模型,并将其从仿真转移到真实的Aliengo机器人上(本代码库不包含仿真到现实的部分)。
框架
依赖
- Python - 3.8
- PyTorch - 1.10.0 with CUDA 11.3
- Isaac Gym - Preview 4
安装
- 克隆此仓库
git clone git@github.com:silvery107/rl-mpc-locomotion.git
- 初始化子模块
或在第1步克隆时使用git submodule update --init
--recurse
选项同时克隆子模块。 - 创建conda环境:
conda env create -f environment.yml
- 在
<extern>
文件夹下安装commit为2ad79cf的rsl_rl
cd extern/rsl_rl pip install -e .
- 编译MPC求解器的Python绑定:
pip install -e .
快速开始
-
在Aliengo上运行MPC控制器:
python RL_MPC_Locomotion.py --robot=Aliengo
所有支持的机器人类型有
Go1
、A1
和Aliengo
。注意,你需要插入类Xbox的游戏手柄来控制它,或者传入
--disable-gamepad
。 控制器模式默认为Fsm
(有限状态机),你也可以尝试Min
模式,即不带FSM的最小MPC控制器。-
游戏手柄按键映射
按
LB
在Trot
、Walk
和Bound
步态之间切换。按
RB
在Locomotion
和Recovery Stand
FSM状态之间切换。
-
-
训练新策略:
cd RL_Environment python train.py task=Aliengo headless=False
按
v
键禁用查看器更新,再次按下恢复。 设置headless=True
可以在不渲染的情况下训练。支持Tensorboard,运行
tensorboard --logdir runs
。 -
加载预训练检查点:
python train.py task=Aliengo checkpoint=runs/Aliengo/nn/Aliengo.pth test=True num_envs=4
设置
test=False
可以继续训练。 -
在Aliengo上运行预训练的MPC控制器权重策略: 在
<MPC_Controller/Parameters.py>
中将bridge_MPC_to_RL
设置为False
python RL_MPC_Locomotion.py --robot=Aliengo --mode=Policy --checkpoint=path/to/ckpt
如果未给出
checkpoint
,将加载最新的运行结果。
路线图
- [x] **MPC控制器** - [四足机器人](https://github.com/silvery107/rl-mpc-locomotion/blob/main/MPC_Controller/common/Quadruped.py, - [机器人运行器](https://github.com/silvery107/rl-mpc-locomotion/blob/main/MPC_Controller/robot_runner/RobotRunnerFSM.py -> - [腿部控制器](https://github.com/silvery107/rl-mpc-locomotion/blob/main/MPC_Controller/common/LegController.py, - [状态估计器](https://github.com/silvery107/rl-mpc-locomotion/blob/main/MPC_Controller/common/StateEstimator.py, - [控制有限状态机](https://github.com/silvery107/rl-mpc-locomotion/blob/main/MPC_Controller/FSM_states/ControlFSM.py -> - [FSM状态恢复站立](https://github.com/silvery107/rl-mpc-locomotion/blob/main/MPC_Controller/FSM_states/FSM_State_RecoveryStand.py, - [FSM状态运动](https://github.com/silvery107/rl-mpc-locomotion/blob/main/MPC_Controller/FSM_states/FSM_State_Locomotion.py -> - [凸优化MPC运动](https://github.com/silvery107/rl-mpc-locomotion/blob/main/MPC_Controller/convex_MPC/ConvexMPCLocomotion.py -> - [足部摆动轨迹](https://github.com/silvery107/rl-mpc-locomotion/blob/main/MPC_Controller/common/FootSwingTrajectory.py, - [步态](https://github.com/silvery107/rl-mpc-locomotion/blob/main/MPC_Controller/convex_MPC/Gait.py, - [C语言MPC求解器](https://github.com/silvery107/rl-mpc-locomotion/blob/main/MPC_Controller/convex_MPC/mpc_osqp.cc- 强化学习环境
- [游戏手柄读取器](https://github.com/silvery107/rl-mpc-locomotion/blob/main/RL_Environment/gamepad_reader.py,
- [仿真工具](https://github.com/silvery107/rl-mpc-locomotion/blob/main/RL_Environment/sim_utils.py,
- [权重策略](https://github.com/silvery107/rl-mpc-locomotion/blob/main/RL_Environment/WeightPolicy.py,
- [训练](https://github.com/silvery107/rl-mpc-locomotion/blob/main/RL_Environment/train.py ->
用户说明
- [在Isaac Gym中设置仿真](https://github.com/silvery107/rl-mpc-locomotion/blob/main/docs/3-isaac_api_note.md
- [安装MIT猎豹软件](https://github.com/silvery107/rl-mpc-locomotion/blob/main/docs/1-MIT_cheetah_installation.md
- [OSQP、qpOASES和CVXOPT求解器说明](https://github.com/silvery107/rl-mpc-locomotion/blob/main/docs/6-qp_solver.md
- [开发日志](https://github.com/silvery107/rl-mpc-locomotion/blob/main/docs/2-development_log.md