Tailoring Solution Accuracy for Fast Whole-body Model Predictive Control of Legged Robots
<|reference_start|>Tailoring Solution Accuracy for Fast Whole-body Model Predictive Control of Legged Robots: Thanks to recent advancements in accelerating non-linear model predictive control (NMPC), it is now feasible to deploy whole-body NMPC at real-time rates for humanoid robots. However, enforcing inequality constraints in real time for such high-dimensional systems remains challenging due to the need for additional iterations. This paper presents an implementation of whole-body NMPC for legged robots that provides low-accuracy solutions to NMPC with general equality and inequality constraints. Instead of aiming for highly accurate optimal solutions, we leverage the alternating direction method of multipliers to rapidly provide low-accuracy solutions to quadratic programming subproblems. Our extensive simulation results indicate that real robots often cannot benefit from highly accurate solutions due to dynamics discretization errors, inertial modeling errors and delays. We incorporate control barrier functions (CBFs) at the initial timestep of the NMPC for the self-collision constraints, resulting in up to a 26-fold reduction in the number of self-collisions without adding computational burden. The controller is reliably deployed on hardware at 90 Hz for a problem involving 32 timesteps, 2004 variables, and 3768 constraints. The NMPC delivers sufficiently accurate solutions, enabling the MIT Humanoid to plan complex crossed-leg and arm motions that enhance stability when walking and recovering from significant disturbances.<|reference_end|>
@article{khazoom2024tailoring,
    title={Tailoring Solution Accuracy for Fast Whole-body Model Predictive Control
  of Legged Robots},
    author={Charles Khazoom, Seungwoo Hong, Matthew Chignoli, Elijah Stanger-Jones
  and Sangbae Kim},
    journal={IEEE Robotics and Automation Letters (2024)},
    year={2024},
    doi={10.1109/LRA.2024.3455907},
    archivePrefix={arXiv},
    eprint={2407.10789},
    primaryClass={cs.RO}
}