Overconstrained Locomotion
October 9, 2025 ยท View on GitHub
Overview
This repo provides a model predictive controller (MPC) based on the single rigid body model in PyBullet for our quadruped with Overconstrained Robotic Limbs (ORLs). A complete kinematic and dynamic model of the ORLs is developed to reach better locomotion performances over complex terrains.
In this simulation, a series of locomotion tasks across various challenging terrains are conducted to validate the proposed control method:
- omidirectional locomotion: the quadruped successfully executed forward trotting, lateral trotting, and turning on the spots separately on flat ground.
- gravel terrain: the quadruped is able to travers the gravel terrain at a sustained velocity of 0.5m/s, highlighting the controller's adaptibility to irregular ground conditions.
- sloped/stairs terrain: the quadruped is able to estimate and adapt to slopes or stairs through real-time gait and posture adjustments.
- push recovery: after being subjected to a lateral impulse of 140 N for 0.2 s at its CoM, the robot regained a stable stance within 2.0 s, verifying the system's stability.
This simulation also evaluates the energy efficiency of the Overconstrained Robotic Limbs (ORLs) using the Cost of Transport (COT) metric. Comparative simulations demonstrate that the overconstrained design exhibits superior energy efficiency over a conventional planar 4-bar leg design, particularly during lateral trotting and at larger foothold distances.
The simulation results validate the efficacy and robustness of the proposed control framework. While logistical challenges prevented hardware validation on the original prototype, a next-generation hardware platform has been developed. This new robot successfully implements all three limb architectures (planar, overconstrained, and spherical) and serves as the testbed for our current research on learning-based control strategies. We will continue the validation of the MPC framework on this new platform and intend to release its design and code as open source in the future.
Instal and run simulation
Create a conda environment (highly recommended)
conda create -n ov_loco python=3.8
conda activate ov_loco # Or source activate ov_loco
Install pinocchio
Follow the installation guide provided in: https://stack-of-tasks.github.io/pinocchio/download.html Remember to source the bashrc file after setting the environment variables:
source ~/.bashrc
Install osqp-eigen
Use the following command to install the library as recommended in https://github.com/robotology/osqp-eigen
conda install -c conda-forge osqp-eigen
Built leg_kine_dyna_pybind
cd leg_kine_dyna_pybind
mkdir built # Delele built if it already exists
cd built
cmake ..
make
Build
cd convex_mpc_pybind
mkdir built # Delele built if it already exists
cd built
cmake ..
make
Install other required python libraries
pip install matplotlib pin scipy drake
Run simulation
python src/main_simulation.py