tambah 1st builder
							parent
							
								
									d55d7c2a5c
								
							
						
					
					
						commit
						b17e689911
					
				| 
						 | 
				
			
			@ -7,7 +7,7 @@ conRobot = [1 2 1;
 | 
			
		|||
            3 2 1;
 | 
			
		||||
            3 1 1;
 | 
			
		||||
           ];
 | 
			
		||||
length_d = .5;
 | 
			
		||||
length_d = 3;
 | 
			
		||||
dRobot = [ 1;
 | 
			
		||||
           1;
 | 
			
		||||
           1;
 | 
			
		||||
| 
						 | 
				
			
			@ -22,8 +22,8 @@ B = [
 | 
			
		|||
     0 0; 0 0;
 | 
			
		||||
     0 0; 0 0;
 | 
			
		||||
    ];
 | 
			
		||||
kp = 150;
 | 
			
		||||
ki = 3;
 | 
			
		||||
kp = 1;
 | 
			
		||||
ki = 0;
 | 
			
		||||
% fvref = fncSpeedRef('ysin',50,2,robStateLen);
 | 
			
		||||
% fvref = fncSpeedRef('xsin',50,2,robStateLen);
 | 
			
		||||
% fvref = fncSpeedRef('cw',-300,1,robStateLen);
 | 
			
		||||
| 
						 | 
				
			
			@ -31,44 +31,44 @@ ki = 3;
 | 
			
		|||
fvref = fncSpeedRef('s',0,0,robStateLen);
 | 
			
		||||
h = .01;
 | 
			
		||||
tspan = 1:h:10;
 | 
			
		||||
sys = formationControl2ndBuilder(conRobot,robStateLen,kp,kp,ki,ki,length_d,1);
 | 
			
		||||
% sys = formationControl2ndBuilder(conRobot,robStateLen,kp,kp,ki,ki,length_d,1);
 | 
			
		||||
% sys = formationControl1stBuilder(conRobot,robStateLen,kp,kp,ki,ki,length_d,1);
 | 
			
		||||
% sys = formationControl2ndModelBuilder(conRobot,omni.origin,kp,kp,ki,ki,length_d,1);
 | 
			
		||||
% sys = formationControl1stModelBuilder(conRobot,omni.origin,kp,kp,ki,ki,length_d,1);
 | 
			
		||||
sys = formationControl1stModelBuilder(conRobot,omni.origin,kp,kp,ki,ki,length_d,1);
 | 
			
		||||
 | 
			
		||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% config nang nduwur
 | 
			
		||||
 | 
			
		||||
[R,K,d] = rigidityMatrixFnc(conRobot,robStateLen);
 | 
			
		||||
_zero = zeros(size(R(corRobot,K),1),1);
 | 
			
		||||
_zero = zeros(size(sys.R(corRobot,sys.K),1),1);
 | 
			
		||||
sInit = [corRobot; _zero;];
 | 
			
		||||
sAnsInit =[_zero; _zero;];
 | 
			
		||||
s2ndInit = [corRobot;     %x1
 | 
			
		||||
           zeros(length(corRobot),1); %x2
 | 
			
		||||
           zeros(length(corRobot),1); %xi1
 | 
			
		||||
            _zero;]; %xi2
 | 
			
		||||
          %  _zero; zeros(length(corRobot),1);]; %x2*
 | 
			
		||||
s1stInit = [corRobot; zeros(size(corRobot)); zeros(size(dRobot))];
 | 
			
		||||
s2ndInit = [corRobot;zeros(length(corRobot),1); zeros(length(corRobot),1); _zero;]; 
 | 
			
		||||
s2ndModelInit = [corRobot; zeros(length(corRobot),1); zeros(length(corRobot),1); _zero; zeros(length(corRobot),1);]; 
 | 
			
		||||
 | 
			
		||||
% state_init = s2ndInit;
 | 
			
		||||
% state_init = sInit;
 | 
			
		||||
state_init = s2ndInit;
 | 
			
		||||
% state_init = s1stInit;
 | 
			
		||||
% state_init = s2ndModelInit;
 | 
			
		||||
state_init = s1stInit;
 | 
			
		||||
 | 
			
		||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% start solving
 | 
			
		||||
printf("Mulai memecakan masalah \n\n");
 | 
			
		||||
startExe = tic;
 | 
			
		||||
 | 
			
		||||
% continue
 | 
			
		||||
% dydt = @(t, y) sys.ss(y,fvref(t));
 | 
			
		||||
% [t,y] = ode45(dydt, tspan, state_init);
 | 
			
		||||
dydt = @(t, y) sys.ss(y,fvref(t));
 | 
			
		||||
[t,y] = ode45(dydt, tspan, state_init);
 | 
			
		||||
 | 
			
		||||
% discrate taylor methode
 | 
			
		||||
dydt = @(t, y) sys.dss(y, h, fvref(t))
 | 
			
		||||
t(1,:) = tspan(1);
 | 
			
		||||
y(1,:) = dydt(t(1), state_init); 
 | 
			
		||||
Dd(1,:) = [norm((K*y(1,1:9)')(1:3)) norm((K*y(1,1:9)')(4:6)) norm((K*y(1,1:9)')(7:9))]';
 | 
			
		||||
% dydt = @(t, y) sys.dss(y, h, fvref(t))
 | 
			
		||||
% t(1,:) = tspan(1);
 | 
			
		||||
% y(1,:) = dydt(t(1), state_init); 
 | 
			
		||||
% for i = 2:length(tspan)
 | 
			
		||||
%   t(i,:) = tspan(i);
 | 
			
		||||
%   y(i,:) = dydt(t(i),y(i-1,:)');
 | 
			
		||||
% endfor
 | 
			
		||||
 | 
			
		||||
Dd(1,:) = [norm((sys.K*y(1,1:9)')(1:3)) norm((sys.K*y(1,1:9)')(4:6)) norm((sys.K*y(1,1:9)')(7:9))]';
 | 
			
		||||
for i = 2:length(tspan)
 | 
			
		||||
  t(i,:) = tspan(i);
 | 
			
		||||
  y(i,:) = dydt(t(i),y(i-1,:)');
 | 
			
		||||
  Dd(i,:) = [norm((K*y(i,1:9)')(1:3)) norm((K*y(i,1:9)')(4:6)) norm((K*y(i,1:9)')(7:9))]';
 | 
			
		||||
  Dd(i,:) = [norm((sys.K*y(i,1:9)')(1:3)) norm((sys.K*y(i,1:9)')(4:6)) norm((sys.K*y(i,1:9)')(7:9))]';
 | 
			
		||||
endfor
 | 
			
		||||
 | 
			
		||||
endExe = toc(startExe);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,30 @@
 | 
			
		|||
function obj = formationControl2ndBuilder(edgeL,robStateLen,kp1,kp2,ki1,ki2,dScale,nNodeVref)
 | 
			
		||||
    addpath("./networks-toolbox");
 | 
			
		||||
    obj = struct();
 | 
			
		||||
    [obj.R, obj.K, obj.d] = rigidityMatrixFnc(edgeL,robStateLen);
 | 
			
		||||
    obj.m = length(obj.d);
 | 
			
		||||
    obj.d = obj.d *dScale;
 | 
			
		||||
    obj.n = numNodes(edgeL);
 | 
			
		||||
    obj.nodeStateLength = robStateLen*obj.n;
 | 
			
		||||
    obj.stateLength = 3 * obj.nodeStateLength + obj.m;
 | 
			
		||||
 | 
			
		||||
    %build matrix system
 | 
			
		||||
    obj.A = @(st) [-kp1*obj.R(st(1:(obj.nodeStateLength)),obj.K)'*obj.R(st(1:(obj.nodeStateLength)),obj.K) obj.R(st(1:(obj.nodeStateLength)),obj.K)'; ki1*obj.R(st(1:(obj.nodeStateLength)),obj.K) zeros(obj.m, obj.n)];
 | 
			
		||||
    obj.sizeA = size(obj.A(ones(obj.stateLength,1)));
 | 
			
		||||
 | 
			
		||||
    obj.B = @(st) [kp1*obj.R(st(1:(obj.nodeStateLength)),obj.K)'; -ki1*ones(obj.m)];
 | 
			
		||||
    obj.sizeB = size(obj.B(ones(obj.stateLength,1)));
 | 
			
		||||
 | 
			
		||||
    obj.dss = @(st,h,vRef) (eye(obj.sizeA) + (obj.A(st)*h))*st + (obj.B(st)*h)*obj.d ;
 | 
			
		||||
    obj.ss = @(st,vRef) obj.A(st)*st + obj.B(st)*obj.d ;
 | 
			
		||||
 | 
			
		||||
    printf("============== Formation Control ============ \n");
 | 
			
		||||
    printf("    state model : %i \n", obj.nodeStateLength);
 | 
			
		||||
    printf("           Node : %i \n", obj.n);
 | 
			
		||||
    printf("           Edge : %i \n", obj.m);
 | 
			
		||||
    printf("Dimention State : %i \n", obj.stateLength);
 | 
			
		||||
    printf("    Dimention A : %i x %i \n", obj.sizeA);
 | 
			
		||||
    printf("    Dimention B : %i x %i \n", obj.sizeB);
 | 
			
		||||
    printf("============================================= \n");
 | 
			
		||||
 | 
			
		||||
endfunction
 | 
			
		||||
| 
						 | 
				
			
			@ -13,7 +13,7 @@ function obj = formationControl1stModelBuilder(edgeL,model,kp1,kp2,ki1,ki2,dScal
 | 
			
		|||
    % pilih robot mana yang ingin dijalankan dengan mengganti 0 menjadi 1
 | 
			
		||||
    %                                                       r  1 2 3                                    r   1 2 3
 | 
			
		||||
    %                                                          v v v                                        v v v
 | 
			
		||||
    obj.A = kron([zeros(obj.n) zeros(obj.n);zeros(obj.n) diag([1 0 0])],model.A) + kron([zeros(obj.n) diag([1 0 0]);zeros(obj.n) zeros(obj.n)],eye(obj.n));
 | 
			
		||||
    obj.A = kron([zeros(obj.n) zeros(obj.n);zeros(obj.n) diag([1 1 1])],model.A) + kron([zeros(obj.n) diag([1 1 1]);zeros(obj.n) zeros(obj.n)],eye(obj.n));
 | 
			
		||||
    obj.B = kron([zeros(obj.n); eye(obj.n)],model.B);
 | 
			
		||||
    obj.Ksgn = kron([zeros(obj.n) zeros(obj.n);zeros(obj.n) eye(obj.n)],model.K);
 | 
			
		||||
    obj.controller = @(set_point,st) arrayfun(model.limit_motor,_nst * set_point + _kst * st(1:(2 * obj.nodeStateLength)));
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
										
											Binary file not shown.
										
									
								
							
		Loading…
	
		Reference in New Issue