a_11 = -0.0857343575298716;
a_12 = -4.83449522782224;
a_21 = 0.000139892812156308;
a_22 = -0.101382544341573;
A = [ 1+a_11*dt, a_12*dt, 0, 0, 0;
a_21*dt, 1+a_22*dt, 0, 0, 0;
-sin(x(3))*dt, 0, -u0*dt*sin(x(3))-cos(x(3))*dt*x(1), 1, 0;
cos(x(3))*dt, 0, u0*dt*cos(x(3))-sin(x(3))*dt*x(1), 0, 1];
data = xlsread('data_dubins.xlsx');
data_est = xlsread('data_estimasi.xlsx');
xref(1,:) = data_est(1,:);
xref(2,:) = abs(data_est(2,:));
[K, P] = lqr(A, B, Q, R);
[L,~,~] = lqe(A, Qw, C, Qw, Rv);
X_log = zeros(n,length(t));
Xhat_log= zeros(n,length(t));
U_log = zeros(m,length(t));
ur = B\(A*xr - diff([xr, xr], 1, 2)/dt);
u = - K*(xhat - xr) + ur;
w = mvnrnd(zeros(n,1), Qw)';
v = mvnrnd(zeros(n,1), Rv)';
x = x + dt*(A*x + B*u + w);
xhat = xhat + dt*(A*xhat + B*u + L*(y - C*xhat));
plot(X_log(1,:), X_log(3,:), 'b', 'LineWidth', 2); hold on;
plot(xref(1,:), xref(3,:), 'r--', 'LineWidth', 2);
xlabel('x (m)'); ylabel('y (m)');
title('LQG Tracking of 2D Path');
legend('Actual Path','Reference Path');