Add B-splines and solve_flat_ocp to flatsys by murrayrm · Pull Request #763 · python-control/python-control

Conversation

@murrayrm

This PR extends the flatsys module to include two new elements:

  • flatsys.BSplineFamily adds B-splines as a new type of basis for solving trajectory generation problems (within flatsys or optimal).

  • flatsys.solve_flat_ocp() allows solution of optimal control problems for differentially flat systems with trajectory and terminal costs and constraints, mirroring the functionality of optimal.solve_ocp().

In the process of making these additions, a few other changes:

  • The flatsys.BSplineFamily introduces the ability to have multi-variable basis functions (where each flat output uses a different basis function from a selected family). This is useful if you have a differentially flat system in which you would like to have different degrees for different variables.
  • Fixed a bug in the computation of derivatives for the Bezier family of basis functions with rescaled final time, and implemented a final time rescaling for the polynomial family of basis functions.
  • Added a more descriptive __repr__ for basis functions (show the family + information on attributes).
  • New documentation (sphinx + docstring) and units tests for the added functionality.
* add initial_guess functionality to solve_flat_ocp
* pre-compute collocation matrices in point_to_point, solve_flat_ocp
* updated return values for solve_flat_ocp
* add __repr__ for flat basis functions
* docstring improvements
* additional unit tests + examples

@coveralls

Coverage Status

Coverage increased (+0.03%) to 94.766% when pulling 47262f5 on murrayrm:bspline-04Aug2022 into d4c1f14 on python-control:main.

@murrayrm

Merging this in since the functionality is pretty specialized and so not something that is going to break anything for others (plus I have additional updates coming that build on this one).

@bnavigator

Hi @murrayrm, I started to look through it a few days ago but wasn't done completely. I might have a few review comments later on, if that is okay.

@murrayrm

Thanks for looking through this, @bnavigator. Comments are definitely welcome and I'm happy to address in a separate PR.

I'm working in putting some numba capability into python-control to allow for more efficient optimization, and this PR was in support of that. The changes are very specialized, so won't affect 99% of users (and perhaps 99.9% of users -:).