% main - hlavni skript clear all; % oznaceni: s ... system % k ... kalman (EKF) % l ... rizeni (LQR) % KONSTANTY T = 40000; %horizont dt = 0.000125; %casovy krok % Rs = 0.28; % Ls = 0.003465; % psipm = 0.1989; % B = 0; % kp = 1.5; % pp = 4.0; % J = 0.04; % Lq = 1.05*Ls; % Ld = 0.95*Ls; a = 0.9898; b = 0.0072; c = 0.0361; d = 1.0; e = 0.0149; Ls = 0.003465; psipm = 0.1989; % ref_profile = [0, -1, 3, 6, 9, 6, 3, 0, 0, 0, 0, 0, 0,-3, -6, -3];%/9*200; ref_profile = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; %kovariance EKF na stavu % Q_k = diag([0.001, 0.00001]); % R_k = diag([0.015, 0.015]); Q_k = diag([0.01, 0.0001]); R_k = diag([0.15, 0.15]); %hodnoty sumu v systemu nQ = diag([0.0013, 0.0013, 5.0e-6, 1.0e-10]); nR = diag([0.0006, 0.0006]); iter_l = 10;% pocet iteraci ve vypoctu rizeni % B_l = zeros(3,2); % B_l = zeros(2,2); % B_l(1,1) = c; % B_l(2,2) = c; Q_l = diag([1 0 0]); % % Q_l = diag([0 0 1 0 0]); r = 0.01; R_l = diag([r, r]); % PROMENNE x_s = zeros(4,T); %stav y_s = zeros(2,T); %mereni x_k = zeros(2,T); %odhad stavu P_k = zeros(2); %kovariance stavu u_l = zeros(2,T); %rizeni % S_l = zeros(3); %jadro ztraty S_l = zeros(2); % POCATECNI HODNOTY noise = 1; %prepinac sumu % noise = 0; theta0 = 1.5;%1.7; %pocatecni poloha P0 = eye(2); %odhad pocatecni kovariance stavu (apriorni) % ST = zeros(3); %koncova ztrata ST = ones(3); % INICIALIZACE x_s(4,1) = theta0; % x_s(3,1) = 5; P_k = P0; S_l = ST; ref_ome = zeros(1, T); for k = 1:T, index = floor(k*dt); if(index>0) lower = ref_profile(index); else lower = 0; end if(index 100 u_l(1,t+1) = 100; elseif u_l(1,t+1) < -100 u_l(1,t+1) = -100; end if u_l(2,t+1) > 100 u_l(2,t+1) = 100; elseif u_l(2,t+1) < -100 u_l(2,t+1) = -100; end % u_l(:,t+1) = 0; % Vyvoj systemu [x_s(:,t+1), y_s(:,t+1)] = evolSys(x_s(:,t), u_l(:,t+1), nQ, nR, noise); %!!! % x_k(:,t+1) = tmp; end figure; subplot(2,1,1); plot(1:T,x_k(1,:),1:T,x_s(3,:),1:T,ref_ome); subplot(2,1,2); plot(1:T,atan2(sin(x_k(2,:)),cos(x_k(2,:))),1:T,atan2(sin(x_s(4,:)),cos(x_s(4,:))));