AboutDownloadsDocumentsForumsIssuesNews

Code to solve trajectory optimization problems with OpenSim, direct collocation, and algorithmic differentiation .


This repository contains code and data to generate OpenSim-based trajectory optimization of human movement while exploiting algorithmic differentiation (AD) as described in: Falisse A, Serrancoli G, Dembia C, Gillis J, De Groote F, (2019). Algorithmic differentiation improves the computational efficiency of OpenSim-based trajectory optimization of human movement. PLoS ONE 14(10): e0217730, https://doi.org/10.1371/journal.pone.0217730.

We enabled the use of AD in OpenSim through a custom source code transformation tool named Recorder and through the operator overloading tool ADOL-C. For this purpose, we modified the source code of OpenSim and Simbody (https://github.com/antoinefalisse/opensim-core/tree/AD-recorder).

We then developed an interface between OpenSim and CasADi to solve trajectory optimization problems. CasADi is a tool for nonlinear optimization and algorithmic differentiation.

We compared the computational efficiency of using standard finite differences (FD) versus AD, implemented through Recorder (AD-Recorder) and ADOL-C (AD-ADOLC), when solving a series of trajectory optimization problems. These problems consisted of simulations of perturbed balance, two-dimensional predictive simulations of walking, and three-dimensional tracking simulations of walking. We found that using AD through Recorder was between 1.8 ± 0.1 and 17.8 ± 4.9 times faster than using FD, and between 3.6 ± 0.3 and 12.3 ± 1.3 times faster than using AD through ADOL-C. The larger the problem the larger the computational benefit of using AD instead of FD.

In this repository, we provide code necessary to perform the simulations with AD-Recorder and FD. We also provide code for analyzing the results and reproducing the figures presented in the associated paper.

This repository is actively maintained on GitHub: https://github.com/antoinefalisse/algodiff

Thanks for citing our work in any derived publication. Feel free to reach us for any questions: antoine.falisse@kuleuven.be | antoinefalisse@gmail.com | friedl.degroote@kuleuven.be | gil.serrancoli@upc.edu.

This code has been developed on Windows using MATLAB2017b. There is no guarantee that it runs smooth on other platforms. Please let us know if you run into troubles.

NOTE:
The repository has been split into three parts to meet the file size requirements. Make sure you reconstruct the full repository as described in the README.

Feedback