This is the simulated environment and real-robot interface for the A1 robot. The codebase can be installed directly as a PIP package, or cloned for further configurations.
The codebase also includes a whole-body controller that can walk the robot in both simulation and real world.
To start, just clone the codebase, and install the dependencies using
pip install -r requirements.txt
Then, you can explore the environments by running:
python -m locomotion.examples.test_env_gui \
--robot_type=A1 \
--motor_control_mode=Position \
--on_rack=True
The three commandline flags are:
robot_type
: choose between A1
and Laikago
for different robot.
motor_control_mode
: choose between Position
,Torque
for different motor control modes.
on_rack
: whether to fix the robot's base on a rack. Setting on_rack=True
is handy for debugging visualizing open-loop gaits.
Additionally, the codebase can be directly installed as a pip package. Just run:
pip install git+https://github.com/yxyang/locomotion_simulation@master#egg=locomotion_simulation
Then, you can directly invoke the default gym environment in Python:
import gym
env = gym.make('locomotion:A1GymEnv-v1')
Note that the pybullet rendering is slightly different from Mujoco. To enable GUI rendering and visualize the training process, you can call:
import gym
env = gym.make('locomotion:A1GymEnv-v1', render=True)
which will pop up the standard pybullet renderer.
And you can always call env.render(mode='rgb_array') to generate frames.
Since the SDK from Unitree is implemented in C++, we find the optimal way of robot interfacing to be via C++-python interface using pybind11.
To start, build the python interface by running the following:
cd third_party/unitree_legged_sdk
mkdir build
cd build
cmake ..
make
Then copy the built robot_interface.XXX.so
file to the main directory (where you can see this README.md file).
Since the Unitree SDK requires memory locking and high process priority, root priority with sudo
is usually required to execute commands. As an alternative, adding the following lines to /etc/security/limits.confg
might allow you to run the SDK without sudo
.
<username> soft memlock unlimited
<username> hard memlock unlimited
<username> soft nice eip
<username> hard nice eip
You may need to reboot the computer for the above changes to get into effect.
Test the python interfacing by running:
python -m locomotion.examples.test_robot_interface
If the previous steps were completed correctly, the script should finish without throwing any errors.
Note that this code does not do anything on the actual robot.
It's also recommended to try running:
python -m locomotion.examples.a1_robot_exercise
which executes open-loop sinusoidal position commands so that the robot can stand up and down.
To see the whole-body controller, run:
python -m locomotion.examples.whole_body_controller_example --use_gamepad=False --show_gui=True --use_real_robot=False --max_time_secs=10
There are 4 commandline flags:
use_real_robot
: True
for using the real robot, False
for using the simulator.
show_gui
: (simulation only) whether to visualize the simulated robot in GUI.
use_gamepad
: whether to control the robot using a gamepad (e.g. Logitech F710), or let the robot follow a demo trajectory.
max_time_secs
: the amount of time to execute the controller. For real robot testing, it's recommended to start with a small value of max_time_secs
and gradually increase it.
The codebase is derived from the Laikago simulation environment in the motion_imitation project.
The underlying simulator used is Pybullet.