- Notifications
You must be signed in to change notification settings - Fork441
Add two MRAC siso examples#914
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
Uh oh!
There was an error while loading.Please reload this page.
Conversation
This PR will break once#916 is merged. The changes needed to use the new I/O system structure ar straightforward (eg, replace |
coveralls commentedJun 19, 2023 • edited
Loading Uh oh!
There was an error while loading.Please reload this page.
edited
Uh oh!
There was an error while loading.Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
This PR needs to be rebased on top of the current main branch to catch the changes in#916, which eliminates theLinearIOSystem
class and adds act.nlsys
factory function. In addition, it would be good to replace calls to the class constructors (NonlinearIOSystem
,InterconnectedSystem
, etc) with calls to factor functions (ct.nlsys
,ct.interconnect
, etc).
doc/examples.rst Outdated
mrac_siso_direct_mit_rule_statespace | ||
mrac_siso_direct_lya_rule_statespace |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Perhaps use shorter filenames? It seems likemrac_siso_mit
andmrac_siso_lyapunov
would fit the bill.
@@ -0,0 +1,15 @@ | |||
Model-Reference Adaptive Control (MRAC) siso, direct lyapunov rule |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
I would change "siso" to "SISO" (since it is an acronym) and capitalize Lyapunov (since it is a proper name).
@@ -0,0 +1,185 @@ | |||
# mrac_siso_direct_lya_rule_statespace.py | |||
# June 2023 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Add author information?
G_plant_ss = ct.StateSpace(A,B,C,D) | ||
io_plant = ct.LinearIOSystem( | ||
G_plant_ss, | ||
inputs=('u'), | ||
outputs=('x'), | ||
states=('x'), | ||
name='plant' | ||
) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
This can all be done by a single call toct.ss
:
io_plant = ct.ss(A, B, C, D, inputs='u', outputs='x', states='x', name='plant')
G_model_ss = ct.StateSpace(Am,Bm,Cm,Dm) | ||
io_ref_model = ct.LinearIOSystem( | ||
G_model_ss, | ||
inputs=('r'), | ||
outputs=('xm'), | ||
states=('xm'), | ||
name='ref_model' | ||
) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
As above, usess
instead.
) | ||
# Overall closed loop system | ||
io_closed = ct.InterconnectedSystem( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Usect.interconnect
rather than calling the class constructor.
G_plant_ss = ct.StateSpace(A,B,C,D) | ||
io_plant = ct.LinearIOSystem( | ||
G_plant_ss, | ||
inputs=('u'), | ||
outputs=('x'), | ||
states=('x'), | ||
name='plant' | ||
) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Replace with call toct.ss
.
G_model_ss = ct.StateSpace(Am,Bm,Cm,Dm) | ||
io_ref_model = ct.LinearIOSystem( | ||
G_model_ss, | ||
inputs=('r'), | ||
outputs=('xm'), | ||
states=('xm'), | ||
name='ref_model' | ||
) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Replace with call toct.ss
.
params={"gam":1, "Am":Am, "Bm":Bm, "signb":np.sign(B)} | ||
io_controller = ct.NonlinearIOSystem( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Replace with call toct.nlsys
.
) | ||
# Overall closed loop system | ||
io_closed = ct.InterconnectedSystem( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Replace with call toct.interconnect
.
Thanks for the review. I will incorporate your suggestions. |
I need help. In fact, I'm not sure about the recent commits of this PR. I think I did something wrong. The old files have been merged back into the branch "mrac-examples" by "git rebase main". In steps 8 of the manual, (https://github.com/python-control/python-control/wiki/How-to-contribute-with-a-pull-request) Current situation of "mrac-examples".
Not sure how to fix this. |
doc/examples.rst Outdated
<<<<<<< HEAD | ||
mrac_siso_mit | ||
mrac_siso_lyapunov | ||
======= | ||
mrac_siso_direct_mit_rule_statespace | ||
mrac_siso_direct_lya_rule_statespace | ||
>>>>>>> refs/remotes/origin/mrac-examples |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
This is an artifact of a merge, which must be fixed
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Oops I was looking at an intermediate commit. Please rebase so that it does not appear in the commit history.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
In reference to your comment: Do agit rebase -i main
and "squash" some commits.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Thx, I will trygit rebase -i main
.
In steps 8 of the manual, (https://github.com/python-control/python-control/wiki/How-to-contribute-with-a-pull-request)
which branch must be updated & synchronized, main or feature?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Both. First get your local main branch in sync with upstream and then rebase feature onto your synced local main
examples based on Aström & Wittenmark