second order builder done
parent
02f9ae1bbf
commit
64e56ec5d8
|
@ -0,0 +1,2 @@
|
|||
*.data
|
||||
*.csv
|
Binary file not shown.
|
@ -1,48 +0,0 @@
|
|||
# Created by Octave 5.1.0, Tue Dec 17 11:11:50 2019 WIB <adnr@morilin.fedo>
|
||||
# name: yans
|
||||
# type: matrix
|
||||
# rows: 41
|
||||
# columns: 20
|
||||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
|
||||
|
|
@ -1,4 +1,5 @@
|
|||
clear -all
|
||||
graphics_toolkit('gnuplot')
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% config nang kene
|
||||
conRobot = [1 2 1;
|
||||
3 2 1;
|
||||
|
@ -23,9 +24,11 @@ ki = 1;
|
|||
% fvref = fncSpeedRef('ysin',50,2);
|
||||
% fvref = fncSpeedRef('xsin',50,2);
|
||||
% fvref = fncSpeedRef('cw',-300,1);
|
||||
fvref = fncSpeedRef('s',50,50);
|
||||
fvrefans = fncSpeedRef('s',0,0);
|
||||
tspan = 1:0.1:10;
|
||||
% fvref = fncSpeedRef('s',50,50);
|
||||
fvref = fncSpeedRef('s',0,0);
|
||||
h = .1;
|
||||
tspan = 1:h:10;
|
||||
sys = formationControl2ndBuilder(conRobot,kp,kp,ki,ki,length_d,1);
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% config nang nduwur
|
||||
|
||||
[R,K,d] = rigidityMatrixFnc(conRobot);
|
||||
|
@ -41,14 +44,8 @@ s2ndInit = [corRobot; %x1
|
|||
printf("Mulai memecakan masalah \n\n");
|
||||
startExe = tic;
|
||||
|
||||
dydt = @(t, y) systm_2nd_order_robot(t, y,(dRobot*length_d), R,K, kp,kp, ki,ki, B, fvref(t));
|
||||
dydt = @(t, y) sys.ss(y,fvref(t));
|
||||
[t,y] = ode45(dydt, tspan, s2ndInit);
|
||||
cntr = 1;
|
||||
bypassCntr = @(c) cntr;
|
||||
plusPlusCntr = @(c) cntr++;
|
||||
|
||||
dyansdt = @(t, yin) systm_anlys_robot(t, yin, y(:,1:(2*numNodes(edgeL2adj(conRobot)))) ,bypassCntr, plusPlusCntr ,(dRobot*6), R, K, kp, ki, B, fvref(t));
|
||||
[t,yans] = ode45(dyansdt, tspan, sAnsInit);
|
||||
|
||||
endExe = toc(startExe);
|
||||
printf("Membutuhkan waktu %i menit, %i detik \n untuk memecahkan masalah mu \n\n",
|
||||
|
@ -108,33 +105,7 @@ str_tmp =strcat(str_tmp,sprintf("\"R%i \" )",++i));
|
|||
eval(str_tmp)
|
||||
title("Motion dari Robot");
|
||||
|
||||
figure(2)
|
||||
% Plot analisis error secara keseluruhan
|
||||
ddYans = zeros(size(yans,1),1);
|
||||
for i = 1:size(yans,1)
|
||||
ddYans(i) = norm(yans(i,1:(size(yans,2)/2)));
|
||||
endfor
|
||||
|
||||
plot([1:length(ddYans)],ddYans )
|
||||
hold on
|
||||
% Plot analisis error setiap robot
|
||||
str_tmp = "plot(";
|
||||
for i = 1:length(dRobot)-1
|
||||
str_tmp = strcat(str_tmp,sprintf("[1:length(yans'(%i,:))], yans'(%i,:),",i,i));
|
||||
endfor
|
||||
str_tmp = strcat(str_tmp,sprintf("[1:length(yans'(%i,:))], yans'(%i,:));",i+1,i+1));
|
||||
eval(str_tmp);
|
||||
|
||||
str_tmp = "legend(";
|
||||
str_tmp = strcat(str_tmp,sprintf("\"All\", "));
|
||||
for i = 1:numNodes(edgeL2adjL(conRobot))-1;
|
||||
str_tmp =strcat(str_tmp,sprintf("\"R%i \", ",i));
|
||||
endfor
|
||||
str_tmp =strcat(str_tmp,sprintf("\"R%i \" )",++i));
|
||||
eval(str_tmp)
|
||||
title("Norm error setiap edge robot")
|
||||
|
||||
csvwrite("DataOutMotion.csv", [t' y'])
|
||||
csvwrite("DataOutMotion.csv", [t y])
|
||||
% save DataOutMotion.data y
|
||||
% save DataErrorEdge.data yans
|
||||
|
||||
|
|
|
@ -0,0 +1,37 @@
|
|||
function obj = formationControl2ndBuilder(edgeL,kp1,kp2,ki1,ki2,dScale,nNodeVref)
|
||||
addpath("./networks-toolbox");
|
||||
obj = struct();
|
||||
[obj.R, obj.K, obj.d] = rigidityMatrixFnc(edgeL);
|
||||
obj.m = length(obj.d);
|
||||
obj.n = numNodes(edgeL);
|
||||
obj.stateLength = 3 * 2*obj.n + obj.m;
|
||||
|
||||
% build matrix sistem
|
||||
obj.A1 = @(st) [zeros(2*obj.n), eye(2*obj.n), zeros(2*obj.n), zeros(obj.n*2,obj.m)];
|
||||
obj.A2 = @(st) [-kp2*obj.R(st(1:(2*obj.n)),obj.K)'*obj.R(st(1:(2*obj.n)),obj.K), -kp1*eye(2*obj.n), -eye(2*obj.n), -obj.R(st(1:(2*obj.n)),obj.K)'];
|
||||
obj.A3 = @(st) [zeros(2*obj.n), ki1*eye(2*obj.n), zeros(2*obj.n), zeros(obj.n*2,obj.m)];
|
||||
obj.A4 = @(st) [ki2*obj.R(st(1:(2*obj.n)),obj.K), zeros(obj.m,obj.n*2), zeros(obj.m,obj.n*2), zeros(obj.m)];
|
||||
obj.A = @(st) [obj.A1(st); obj.A2(st); obj.A3(st); obj.A4(st)];
|
||||
obj.sizeA = size(obj.A(ones(obj.stateLength,1)));
|
||||
|
||||
% build matrix input
|
||||
obj.B = @(st) [zeros(2*obj.n,obj.m); kp2*obj.R(st(1:(2*obj.n)),obj.K)'; zeros(2*obj.n,obj.m); -ki2*eye(obj.m,obj.m)]
|
||||
obj.sizeB = size(obj.B(ones(obj.stateLength,1)));
|
||||
|
||||
%build state space
|
||||
obj.Kb = zeros(obj.n*3,1);
|
||||
obj.Kb(obj.n+nNodeVref) = 1;
|
||||
obj.Kb = [kron(obj.Kb,eye(2)); zeros(obj.m,2)];
|
||||
obj.d = obj.d*dScale;
|
||||
obj.ssDisc = @(st,vRef,h) (eye(obj.sizeA) + (obj.A(st)*h))*st + obj.B(st)*h*obj.d + obj.Kb*vRef;
|
||||
obj.ss = @(st,vRef) obj.A(st)*st + obj.B(st)*obj.d + obj.Kb*vRef;
|
||||
|
||||
printf("============== Formation Control ============ \n");
|
||||
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
|
Binary file not shown.
|
@ -4,10 +4,10 @@
|
|||
%% t -> time
|
||||
%% x -> state
|
||||
%% d -> distance antara robot nya
|
||||
%% R, K -> return dari fungsi rigidityMatrixFnc()
|
||||
%% r, k -> return dari fungsi rigiditymatrixfnc()
|
||||
%% kp -> konstanta proporsional
|
||||
%% ki -> konstanta integral
|
||||
%% B -> matrix selctor vref
|
||||
%% b -> matrix selctor vref
|
||||
%% vref -> kecepatan refrensi
|
||||
function dxdt = systm_2nd_order_robot(t,x,d,R,K,kp1,kp2,ki1,ki2,B,vref)
|
||||
n = length(K(1,:))/2;
|
||||
|
|
Loading…
Reference in New Issue