tambah 1st builder
							parent
							
								
									d55d7c2a5c
								
							
						
					
					
						commit
						b17e689911
					
				| 
						 | 
					@ -7,7 +7,7 @@ conRobot = [1 2 1;
 | 
				
			||||||
            3 2 1;
 | 
					            3 2 1;
 | 
				
			||||||
            3 1 1;
 | 
					            3 1 1;
 | 
				
			||||||
           ];
 | 
					           ];
 | 
				
			||||||
length_d = .5;
 | 
					length_d = 3;
 | 
				
			||||||
dRobot = [ 1;
 | 
					dRobot = [ 1;
 | 
				
			||||||
           1;
 | 
					           1;
 | 
				
			||||||
           1;
 | 
					           1;
 | 
				
			||||||
| 
						 | 
					@ -22,8 +22,8 @@ B = [
 | 
				
			||||||
     0 0; 0 0;
 | 
					     0 0; 0 0;
 | 
				
			||||||
     0 0; 0 0;
 | 
					     0 0; 0 0;
 | 
				
			||||||
    ];
 | 
					    ];
 | 
				
			||||||
kp = 150;
 | 
					kp = 1;
 | 
				
			||||||
ki = 3;
 | 
					ki = 0;
 | 
				
			||||||
% fvref = fncSpeedRef('ysin',50,2,robStateLen);
 | 
					% fvref = fncSpeedRef('ysin',50,2,robStateLen);
 | 
				
			||||||
% fvref = fncSpeedRef('xsin',50,2,robStateLen);
 | 
					% fvref = fncSpeedRef('xsin',50,2,robStateLen);
 | 
				
			||||||
% fvref = fncSpeedRef('cw',-300,1,robStateLen);
 | 
					% fvref = fncSpeedRef('cw',-300,1,robStateLen);
 | 
				
			||||||
| 
						 | 
					@ -31,44 +31,44 @@ ki = 3;
 | 
				
			||||||
fvref = fncSpeedRef('s',0,0,robStateLen);
 | 
					fvref = fncSpeedRef('s',0,0,robStateLen);
 | 
				
			||||||
h = .01;
 | 
					h = .01;
 | 
				
			||||||
tspan = 1:h:10;
 | 
					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 = 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
 | 
					%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% config nang nduwur
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[R,K,d] = rigidityMatrixFnc(conRobot,robStateLen);
 | 
					_zero = zeros(size(sys.R(corRobot,sys.K),1),1);
 | 
				
			||||||
_zero = zeros(size(R(corRobot,K),1),1);
 | 
					 | 
				
			||||||
sInit = [corRobot; _zero;];
 | 
					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))];
 | 
					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 = sInit;
 | 
				
			||||||
state_init = s2ndInit;
 | 
					% state_init = s2ndModelInit;
 | 
				
			||||||
% state_init = s1stInit;
 | 
					state_init = s1stInit;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% start solving
 | 
					%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% start solving
 | 
				
			||||||
printf("Mulai memecakan masalah \n\n");
 | 
					printf("Mulai memecakan masalah \n\n");
 | 
				
			||||||
startExe = tic;
 | 
					startExe = tic;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
% continue
 | 
					% continue
 | 
				
			||||||
% dydt = @(t, y) sys.ss(y,fvref(t));
 | 
					dydt = @(t, y) sys.ss(y,fvref(t));
 | 
				
			||||||
% [t,y] = ode45(dydt, tspan, state_init);
 | 
					[t,y] = ode45(dydt, tspan, state_init);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
% discrate taylor methode
 | 
					% discrate taylor methode
 | 
				
			||||||
dydt = @(t, y) sys.dss(y, h, fvref(t))
 | 
					% dydt = @(t, y) sys.dss(y, h, fvref(t))
 | 
				
			||||||
t(1,:) = tspan(1);
 | 
					% t(1,:) = tspan(1);
 | 
				
			||||||
y(1,:) = dydt(t(1), state_init); 
 | 
					% 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))]';
 | 
					% 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)
 | 
					for i = 2:length(tspan)
 | 
				
			||||||
  t(i,:) = tspan(i);
 | 
					  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))]';
 | 
				
			||||||
  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))]';
 | 
					 | 
				
			||||||
endfor
 | 
					endfor
 | 
				
			||||||
 | 
					
 | 
				
			||||||
endExe = toc(startExe);
 | 
					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
 | 
					    % pilih robot mana yang ingin dijalankan dengan mengganti 0 menjadi 1
 | 
				
			||||||
    %                                                       r  1 2 3                                    r   1 2 3
 | 
					    %                                                       r  1 2 3                                    r   1 2 3
 | 
				
			||||||
    %                                                          v v v                                        v v v
 | 
					    %                                                          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.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.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)));
 | 
					    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