Gradient-based trajectory optimisation is a powerful tool for robotic manipulation, enabling complex manipulation tasks to be solved. However, these optimisers take significant time for contact-interaction tasks, particularly in cluttered scenes. A large contributor to this is that calculating dynamics derivatives via numerical methods, such as finite-differencing, is computationally time-consuming when querying expensive physics simulators. In this paper, we propose a general method of speeding up trajectory optimisation by only calculating dynamics gradients at key-points with a computationally expensive method (finite-differencing or automatic-differentiation) and then using cheap linear interpolation in-between for the remaining derivatives. The result is a significant decrease in trajectory optimisation times without affecting the quality of the final solution noticeably.
Here are a few example of contact-based manipulation tasks solved with trajectory optimisation. We show the final converged trajectories generated by our method, TrajOptKP, on the left compared with the baseline on the right. In all instances our method is able to find a similar final solution to the baseline, whilst significantly reducing the optimisation time.
Push moderate clutter (Simulator = MuJoCo, Optimiser = iLQR, Gradients = finite-differencing): Push a green cylinder to a goal location (green silhouette) through clutter (red obstacles).
TrajOptKP, optimisation time: 7.1 s
Baseline, optimisation time: 123.1 s
Box sweep (Simulator = MuJoCo, Optimiser = iLQR, Gradients = finite-differencing): Sweep a heavy box to a goal location (green silhouette).
TrajOptKP, optimisation time: 2.5 s
Baseline, optimisation time: 19.9 s
Sphere push forward (Simulator = Drake, Optimiser = iLQR, Gradients = automatic-differentiation): Slide a sphere forwards to a goal pose. Task provided by Vince Kurtz from this repository.
Ours, optimisation time: 15.7 s
Baseline, optimisation time: 110.2 s
Box slide (Simulator = MuJoCo, Optimiser = SCVX, Gradients = finite-differencing): Slide a box to a goal location (green silhouette). Task provided by Aykut Önol from this repository.
TrajOptKP, optimisation time: 14.0 s
Baseline, optimisation time: 22.0 s
Our key-point methods also work for contact-implicit locomotion trajectory optimisation. We ran two different locomotion tasks using MPC and our key-point methods. Our key-point methods enable one of two ideas, either maintaining the same control frequency and extending the optimisation horizon, or, maintaining the same optimisation horizon and running MPC at a higher control frequency.
Walker locomotion (Simulator = MuJoCo, Optimiser = iLQR, Gradients = finite-differencing): Keep walker model upright at a target height whilst moving forward at some target velocity. MPC control, optimisation horizon = 80 time-steps.
TrajOptKP (MPC-live)
Baseline (MPC-live)
Mini-cheetah locomotion (Simulator = Drake, Optimiser = iLQR, Gradients = automatic-differentiation): Keep mini-cheetah body upright whilst moving forward at some target velocity. Task provided by Vince Kurtz from this repository.
TrajOptKP, optimisation time: 375 s
Baseline, optimisation time: 1101 s
Feel free to reach out with questions about this work! For questions specific about the codebase/implementation, please direct them towards David Russell.
Thank you to Vince Kurtz for providing his implementation of iLQR in Python using Drake's automatic differentiation and support understanding his repository.
@article{Rusell_TrajOptKP_2024,
title = {Efficient Contact-based Trajectory Optimisation via Approximated Derivatives},
author = {Russell, David and Papallas, Rafael and \"{O}nol, Aykut \"{O}zg\"{u}n and Dogar, Mehmet},
journal = {ToBeConfirmed},
year = {2024},
}