Official Implementation for Agile But Safe: Learning Collision-Free High-Speed Legged Locomotion.
Robotics: Science and Systems (RSS) 2024
Tairan He*, Chong Zhang*, Wenli Xiao, Guanqi He, Changliu Liu, Guanya Shi
This codebase is under CC BY-NC 4.0 license, with inherited license in Legged Gym and RSL RL from ETH Zurich, Nikita Rudin and NVIDIA CORPORATION & AFFILIATES. You may not use the material for commercial purposes, e.g., to make demos to advertise your commercial products.
Please read through the whole README.md before cloning the repo.
Note: Before running our code, it's highly recommended to first play with RSL's Legged Gym version to get a basic understanding of the Isaac-LeggedGym-RslRL framework.
Create environment and install torch
conda create -n xxx python=3.8 # or use virtual environment/docker
pip3 install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu116
# used version during this work: torch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2
# for older cuda ver:
pip3 install torch==1.10.0+cu113 torchvision==0.11.1+cu113 torchaudio==0.10.0+cu113 -f https://download.pytorch.org/whl/cu113/torch_stable.html
Install Isaac Gym preview 4 release https://developer.nvidia.com/isaac-gym
unzip files to a folder, then install with pip:
cd isaacgym/python && pip install -e .
check it is correctly installed by playing:
cd examples && python 1080_balls_of_solitude.py
Clone this codebase and install our rsl_rl
in the training folder
pip install -e rsl_rl
Install our legged_gym
pip install -e legged_gym
Ensure you have installed the following packages:
Try training.
can use "--headless" to disable gui, press "v" to pause/resume gui play.
for go1, in legged_gym/legged_gym
,
# agile policy
python scripts/train.py --task=go1_pos_rough --max_iterations=4000
# agile policy, lagrangian ver
python scripts/train.py --task=go1_pos_rough_ppo_lagrangian --max_iterations=4000
# recovery policy
python scripts/train.py --task=go1_rec_rough --max_iterations=1000
Play the trained policy
python scripts/play.py --task=go1_pos_rough
python scripts/play.py --task=go1_rec_rough
Use the testbed, and train/test Reach-Avoid network:
# try testbed
python scripts/testbed.py --task=go1_pos_rough [--load_run=xxx] --num_envs=1
# train RA (be patient it will take time to converge)
# make sure you have at least exported one policy by play.py so the exported folder exists
python scripts/testbed.py --task=go1_pos_rough --num_envs=1000 --headless --trainRA
# test RA (only when you have trained one RA)
python scripts/testbed.py --task=go1_pos_rough --num_envs=1 --testRA
# evaluate
python scripts/testbed.py --task=go1_pos_rough --num_envs=1000 --headless [--load_run=xxx] [--testRA]
Sample dataset for ray-prediction network training
python scripts/camrec.py --task=go1_pos_rough --num_envs=3
shift
value in Line 93 and the log_root
in Line 87 to collect different dataset files in parallel (so you can merge them by simply moving the files), and manually change the obstacles in env_cfg.asset.object_files
in Line 63.train_depth_resnet.py
to train the ray-prediction network, but using what you like for training CV models is highly encouraged!
Low Level Control Mode for Unitree Go1: L2+A
-> L2+B
-> L1+L2+Start
Network Configuration for Orin NX:
192.168.123.15
255.255.255.0
Convert the .pt
files of agile/recovery policy, RA value to .onnx
files using src/abs_src/onnx_model_converter.py
Modify the path of (.onnx or .pt) models in publisher_depthimg_linvel.py
and depth_obstacle_depth_goal_ros.py
roscore
: Activate ROS Noetic Envriomentcd src/abs_src/
: Enter the ABS scripts filepython publisher_depthimg_linvel.py
: Publish ray prediction results and odometry results for navigation goalspython led_control_ros.py
: Control the two LED lights based on RA valuespython depth_obstacle_depth_goal_ros.py
: Activate the Go1 using the agile policy and the recovery policyB
: Emergence stopDefault
: Go1 Running ABS based on goal commandL2
: Turn leftR2
: Turn rightDown
: BackUp
: StandA
: Turn aroundX
: Back to initial positionYou can create an issue if you meet any bugs, except:
If our work does help you, please consider citing us and the following works:
@inproceedings{AgileButSafe,
author = {He, Tairan and Zhang, Chong and Xiao, Wenli and He, Guanqi and Liu, Changliu and Shi, Guanya},
title = {Agile But Safe: Learning Collision-Free High-Speed Legged Locomotion},
booktitle = {Robotics: Science and Systems (RSS)},,
year = {2024},
}
We used codes in Legged Gym and RSL RL, based on the paper:
Previsou works that heavily inspired the policy training designs:
Previsou works that heavily inspired the RA value design:
Previsou works that heavily inspired the perception design: