JuliaControl / JuliaControl/ControlSystems.jl

RFC: Implement a "Problem" style synthesis interface

Open
#307 6 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

hacktoberfest
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

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.