better observer

This commit is contained in:
2018-11-13 15:29:20 +01:00
parent 1e676bcd18
commit 7e867b9316
7 changed files with 58 additions and 10 deletions

View File

@@ -16,7 +16,7 @@ function [ssc]=StateSpaceControlDesign(mot)
%
% https://www.youtube.com/watch?v=Lax3etc837U
ssPlt=mot.ssMdl;%ssPlt; %real plant (model of real plant)
ssPlt=mot.ssPlt;%ssPlt; %real plant (model of real plant)
ssPlt.Name='open loop plant';
ssMdl=mot.ssMdl;%ssMdl; %simplified model (observable,controlable) for observer
ssMdl.Name='open loop model';
@@ -63,7 +63,7 @@ function [ssc]=StateSpaceControlDesign(mot)
p1=-6300+280i;
p2=-6200+150i;
P=[p1 p1' p2 p2'];
P=[-4000 -4100 -1500+10j -1500-10j];
P=[-4100 -4000 -1500+10j -1500-10j];
else
p1=-3300+2800i;
p2=-2700+500i;
@@ -80,6 +80,7 @@ function [ssc]=StateSpaceControlDesign(mot)
p1=-6300+2800i;
p2=-6200+1500i;
P=[p1 p1' p2 p2'];
P=[-2500 -2800 -1500+10j -1500-10j];
else
p1=-3300+2800i;
p2=-1900+130i;
@@ -171,14 +172,16 @@ function [ssc]=StateSpaceControlDesign(mot)
ss_oz = c2d(ss_o,Ts);
[Aoz,Boz,Coz,Doz]=ssdata(ss_oz);
mdlName='observer';
open(mdlName);
%open(mdlName);
%discrete prefilter
prefiltz=c2d(mot.prefilt,Ts);
numVz=prefiltz.Numerator{1};
denVz=prefiltz.Denominator{1};
%state space controller
ssc=struct();
for k=["Ts","At","Bt","Ct","Dt","Atz","Btz","Ctz","Dtz","Ap","Bp","Cp","Dp","Am","Bm","Cm","Dm","Ao","Bo","Co","Do","Apz","Bpz","Cpz","Dpz","Aoz","Boz","Coz","Doz","V","K","L","ss_cl","ss_o","ss_oz","numV","denV"]
for k=["Ts","At","Bt","Ct","Dt","Atz","Btz","Ctz","Dtz","Ap","Bp","Cp","Dp","Am","Bm","Cm","Dm","Ao","Bo","Co","Do","Apz","Bpz","Cpz","Dpz","Aoz","Boz","Coz","Doz","V","K","L","ss_cl","ss_o","ss_oz","numV","denV","numVz","denVz"]
ssc=setfield(ssc,k,eval(k));
end
save(sprintf('/tmp/ssc%d.mat',mot.id),'-struct','ssc');
@@ -187,6 +190,26 @@ end
%code snipplets from an example on youtube (see reference at top)
function SCRATCH()
%import numpy as np
%fh=np.load('mode1.npz')
%import scipy.io
%scipy.io.savemat('mode1.mat',fh,do_compression=True)
%matlab:
load('mode1.mat');
plot(pts(:,1),pts(:,2),'.');hold on;
plot(rec(:,5),rec(:,6),'-');%despos
plot(rec(:,2),rec(:,3),'-');%actPos
%sig.time = [0 1 1 5 5 8 8 10];
%sig.signals.values = [0 0 2 2 2 3 3 3]';
%sig.signals.dimensions = 1;
sig.time=0:2E-4:(length(rec)-1)*2E-4;
sig.signals.values=rec(:,5);
sig.signals.dimensions = 1;
sum(desPos_actPos.Data(:,1)-desPos_actPos.Data(:,2))
A = [ 0 1 0
980 0 -2.8
0 0 -100 ];