-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdynamics_final.m
More file actions
27 lines (20 loc) · 875 Bytes
/
Copy pathdynamics_final.m
File metadata and controls
27 lines (20 loc) · 875 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
function dstate = dynamics_final(t, state, x_hat, m_true, k_p, k_d, gamma)
x = state(1:2); v = state(3:4);
m_hat = state(5); f_hat = state(6); d_hat = state(7);
% Reference Trajectory
xd = [10*t; 10*t]; xdd = [10; 10];
z = x - xd; dz = v - xdd;
% DEAD-ZONE: Stop adaptation if error is negligible to prevent drift
if norm(z) < 1e-3, z = [0;0]; end
% Control input (Crucial: Use x_hat for control)
u = m_hat * (0 - k_p*(x_hat - xd) - k_d*dz) + f_hat*norm(v) + d_hat;
% Physical System
dx = v;
dv = (u - 0.5*v + 0.5*sin(t)) / m_true;
% Adaptation Laws with Clamping
dm_hat = -gamma(1) * (z' * [0;0]);
if (m_hat < 0.1 && dm_hat < 0) || (m_hat > 10 && dm_hat > 0), dm_hat = 0; end % Clamp mass
df_hat = -gamma(2) * (z' * v);
dd_hat = -gamma(3) * sum(z);
dstate = [dx; dv; dm_hat; df_hat; dd_hat];
end