% Adaptive Project - Quadcopter
% Adaptive Project - Quadcopter
O84 = zeros(8,4);
%% Set the desired State Values (Reference Signal that the 12 states
should track) global r; r = [1,1,1,0,0,0,0,0,0,0,0,0]’; % the desired state
values
hold off
hold off
% The desired values for the 6 position states % x1,x2,x3,x7,x8,x9 (in the
original coords) r_pos = [0;0;1;0;0;0];
e = xt - xm;
e = xt - xm;
ut = -K*x - Kr_lin_ctr*r;
T = Ka*sum(ut);
tau_x = Ka*l * (ut(4) - ut(2));
tau_y = Ka*l * (ut(1) - ut(3));
tau_z = Km * (ut(1) - ut(2) + ut(3) - ut(4));
xdot = zeros(12,1);
xdot(1) = x7;
xdot(2) = x8;
xdot(3) = x9;
xdot(4) = x10 + sin(x4)*tan(x5)*x11 + cos(x4)*tan(x5)*x12;
xdot(5) = cos(x4)*x11 - sin(x4)*x12;
xdot(6) = sin(x4)*x11/cos(x5) + cos(x4)*x12/cos(x5);
xdot(7) = -T * (cos(x4)*sin(x5)*cos(x6) + sin(x4)*sin(x6)) /
m;
xdot(8) = -T * (cos(x4)*sin(x5)*sin(x6) - sin(x4)*cos(x6)) /
m;
xdot(9) = -T * cos(x4) * cos(x5) / m + g;
xdot(10) = (Iy - Iz)*x11*x12/Ix + tau_x/Ix;
xdot(11) = (-Ix + Iz)*x10*x12/Iy + tau_y/Iy;
xdot(12) = (Ix - Iy)*x10*x11/Iz + tau_z/Iz;
end
x_prime = [x1_prime;x2_prime;x3_prime;x7_prime;x8_prime;x9_prime];
%x_prime = reshape(x(83:88),[6,1]);
% transform the desired ref states r from the original % coordinates to the
new transformed coordinates (prime) r1 = r_pos(1); r2 = r_pos(2); r3 =
r_pos(3); r7 = r_pos(4); r8 = r_pos(5); r9 = r_pos(6); r1_prime = r1 +
lambda(-cos(x4)sin(x5)cos(x6) - sin(x4)sin(x6)); r2_prime = r2 + lambda(-
cos(x4)sin(x5)sin(x6) + sin(x4)cos(x6)); r3_prime = r3 -
lambdacos(x4)cos(x5); r7_prime = r7 + lambda(sin(x4)sin(x5)cos(x6)x10 -
cos(x4)sin(x6)x10 - cos(x5)cos(x6)x11); r8_prime = r8 +
lambda(sin(x4)sin(x5)sin(x6)x10 + cos(x4)cos(x6)x10 -
cos(x5)sin(x6)x11); r9_prime = r9 + lambda(sin(x4)cos(x5)x10 +
sin(x5)x11); %r3_prime = r3 - lambda; r_prime =
[r1_prime;r2_prime;r3_prime;r7_prime;r8_prime;r9_prime];
xt = reshape(x(1:12),[12,1]); xm = reshape(x(13:18),[6,1]); Kx =
[x(19:22); x(23:26); x(27:30); x(31:34); x(35:38); x(39:42)]; Kr =
[x(43:46); x(47:50); x(51:54); x(55:58)]; alpha_hat = [x(59:62); x(63:66);
x(67:70); x(71:74) ; x(75:78) ; x(79:82)];
% The error signal for the position states (in the new transformed coords)
% xm1_prime = xm(1) + lambda(-cos(x4)sin(x5)cos(x6) - sin(x4)sin(x6));
% xm2_prime = xm(2) + lambda(-cos(x4)sin(x5)sin(x6) +
sin(x4)cos(x6)); % xm3_prime = xm(3) - lambdacos(x4)cos(x5); %
xm4_prime = xm(4) + lambda(sin(x4)sin(x5)cos(x6)x10 -
cos(x4)sin(x6)x10 - cos(x5)cos(x6)x11); % xm5_prime = xm(5) +
lambda(sin(x4)sin(x5)sin(x6)x10 + cos(x4)cos(x6)x10 -
cos(x5)sin(x6)x11); % xm6_prime = xm(6) + lambda(sin(x4)cos(x5)x10 +
sin(x5)x11); % xm_prime = [xm1_prime; xm2_prime; xm3_prime;
xm4_prime; xm5_prime; xm6_prime]; e_prime = x_prime - xm;
% The actual nonlinear dynamics for updating x(t) (in the original coords)
T = Ka * sum(ut); tau_x = Kal (ut(4) - ut(2)); tau_y = Kal (ut(1) - ut(3));
tau_z = Km * (ut(1) - ut(2) + ut(3) - ut(4)); xdot(1) = x7; xdot(2) = x8;
xdot(3) = x9; xdot(4) = x10 + sin(x4)tan(x5)x11 + cos(x4)tan(x5)x12;
xdot(5) = cos(x4)x11 - sin(x4)x12; xdot(6) = sin(x4)x11/cos(x5) +
cos(x4)x12/cos(x5); xdot(7) = -T * (cos(x4)sin(x5)cos(x6) +
sin(x4)sin(x6)) / m; xdot(8) = -T (cos(x4)sin(x5)sin(x6) - sin(x4)cos(x6)) /
m; xdot(9) = -T cos(x4) * cos(x5) / m + g; xdot(10) = (Iy - Iz)x11x12/Ix +
tau_x/Ix; xdot(11) = (-Ix + Iz)x10x12/Iy + tau_y/Iy; xdot(12) = (Ix -
Iy)x10x11/Iz + tau_z/Iz;
end