JuliaControl / JuliaControl/ControlSystems.jl
RFC: Implement a "Problem" style synthesis interface
Nobody has claimed this yet.
- Dominant language
- Julia
- Stars
- 582
- Forks
- 92
- Avg merge
- 1h 12m
- Merged PRs (30d)
- 2
Description
I was thinking about how the synthesis functions are setup currently, and I think currently they are still very "Matlab-y," which I at least find somewhat awkward to work with because you have to pass around every matrix as an argument (this can grow to a very large number of arguments if you start doing things like linear predictive control, where I have written functions with 7 or more different arguments). On the other hand, I think the LQG type is somewhat too much, where it even does the controller design for you in the constructor instead of in a separate function like you have to do for the rest of the controller types.
I have found that I think I like the idea that the differential equations packages use, where they define problem types that contain the parameters for the problem, and then pass those into the solver functions. I think that would be a nice direction to move to, and possibly then also support a single design function that each type overloads to design the controller. That provides a nice consistent interface (for instance, it removes the need for me to remember whether the function I wanted was lqr, dlqr, lqrd, lqg, etc. and their argument orders since I define everything when I create the problem instance).
Specifically I am thinking of an initial type hierarchy of:
Abstract type ControlProblem
--> Concrete type LQR
--> Concrete type LQG
Then for instance the LQR type has fields for sys, Q, R, S, P, N, and then the synthesis functions have all the information they need inside this type to do the problem synthesis and return the controller matrix. The synthesis functions then take their sampling time from the included system (as is currently done by the overloaded lqr(sys, Q, R) function).
@baggepinnen @mfalt @olof3 Thoughts?
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
The issue names no files or tests. Start by reviewing the existing synthesis functions and LQR/LQG interfaces described in the issue, then compare them with the proposed problem-type approach. Done requires an agreed scope and API for the ControlProblem hierarchy and design interface before implementation can be assessed.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- julia
- Domain
- tooling
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100