| 1 | function smc_motor(N,n)
|
|---|
| 2 | system.P=[1 3 3];
|
|---|
| 3 | system.I=[0.00375 0.5 0.5];
|
|---|
| 4 | system.S=zeros(1,3);
|
|---|
| 5 |
|
|---|
| 6 | system.a=0.9898;
|
|---|
| 7 | system.b=0.0072;
|
|---|
| 8 | system.c=0.0361;
|
|---|
| 9 | system.d=1;
|
|---|
| 10 | system.e=0.0149;
|
|---|
| 11 | system.deltat=0.000125;
|
|---|
| 12 | system.Q=diag([0.0013,0.0013,5*10^(-3),10^(-5)],0);
|
|---|
| 13 | system.R=(diag([0.006,0.006],0));
|
|---|
| 14 | system.B=[system.c 0
|
|---|
| 15 | 0 system.c
|
|---|
| 16 | 0 0
|
|---|
| 17 | 0 0];
|
|---|
| 18 | system.C=[1 0 0 0
|
|---|
| 19 | 0 1 0 0];
|
|---|
| 20 | system.sigma_v=0.1;
|
|---|
| 21 | system.x=[-0.05; -0.05;0.01;pi/4];
|
|---|
| 22 | system.x_opt=[0; 0; 10.1; 0];
|
|---|
| 23 |
|
|---|
| 24 | system.ksi=[0 0 0 0
|
|---|
| 25 | 0 0 0 0
|
|---|
| 26 | 0 0 1 0
|
|---|
| 27 | 0 0 0 0];
|
|---|
| 28 | v=0.1;
|
|---|
| 29 | system.gamma=[v 0
|
|---|
| 30 | 0 v];
|
|---|
| 31 |
|
|---|
| 32 | N_tresh=N/2;
|
|---|
| 33 |
|
|---|
| 34 | apriori=[0 0.2 0 0 0
|
|---|
| 35 | 0 0 0.2 0 0
|
|---|
| 36 | 0 0 0 0.3 0
|
|---|
| 37 | 0 0 0 0 2];
|
|---|
| 38 | H=apriori;
|
|---|
| 39 |
|
|---|
| 40 | x_1=apriori(:,1)*ones(1,N)+apriori(:,2:5)*(0.5-rand(4,N));
|
|---|
| 41 | vahy=1/N*ones(1,N);
|
|---|
| 42 |
|
|---|
| 43 | stav=[];
|
|---|
| 44 | hranice=stav;
|
|---|
| 45 | u=ones(2,n);
|
|---|
| 46 | ztrata=0;
|
|---|
| 47 |
|
|---|
| 48 | A=diag(sqrt(system.C'*system.R*system.R*system.C+system.Q*system.Q));
|
|---|
| 49 |
|
|---|
| 50 | for i=1:n
|
|---|
| 51 | x_0=my_sample(vahy,x_1);
|
|---|
| 52 |
|
|---|
| 53 | u(:,i)=control(system,x_0*vahy',0);
|
|---|
| 54 | u(:,1:10)=[ones(1,10);-ones(1,10)];
|
|---|
| 55 |
|
|---|
| 56 | x_1=model(x_0,u(:,i)*ones(1,N),system);
|
|---|
| 57 |
|
|---|
| 58 | system.x=model(system.x,u(:,i),system);
|
|---|
| 59 | system.pozorovani=system.x([1 2])+sqrt(system.R)*randn(2,1);
|
|---|
| 60 |
|
|---|
| 61 | reziduum=system.pozorovani*ones(1,N)-x_1([1 2],:);
|
|---|
| 62 | p_v=exp(-sum(reziduum.^2/system.R(1,1))/2);
|
|---|
| 63 | S=sum(p_v);
|
|---|
| 64 | %if (S<10^-10)
|
|---|
| 65 | %apriori=[mean(x_1,2) diag(max(x_1,[],2)-min(x_1,[],2))];
|
|---|
| 66 | % x_1=apriori(:,1)*ones(1,N)+apriori(:,2:5)*(0.5-rand(4,N));
|
|---|
| 67 | % vahy=1/N*ones(1,N);
|
|---|
| 68 | %else
|
|---|
| 69 | vahy=p_v./S;
|
|---|
| 70 | % end
|
|---|
| 71 |
|
|---|
| 72 | %porovnani(x_1,vahy,system.x);
|
|---|
| 73 |
|
|---|
| 74 | if (1/(vahy*vahy')<N_tresh)
|
|---|
| 75 | % [x_1 vahy]=my_resample(x_1,vahy);
|
|---|
| 76 | % porovnani(x_1(1,:),vahy,system.x(1));
|
|---|
| 77 |
|
|---|
| 78 | end
|
|---|
| 79 |
|
|---|
| 80 | %x_0=my_sample(vahy,x_1);
|
|---|
| 81 | H=kalman_filter(H,u(:,i),system);
|
|---|
| 82 |
|
|---|
| 83 | stav=[stav [system.x; x_1*vahy';H(:,1)]];
|
|---|
| 84 | hranice=[hranice [min(x_1,[],2); max(x_1,[],2)]];
|
|---|
| 85 |
|
|---|
| 86 | %ztrata= ztrata+u'*system.gamma*u+(system.x-system.x_opt)'*system.ksi*(system.x-system.x_opt);
|
|---|
| 87 |
|
|---|
| 88 | end
|
|---|
| 89 | %plot(abs(stav(1,:)-stav(2,:))); hold on
|
|---|
| 90 | kresli(stav,hranice)
|
|---|
| 91 | end |
|---|