%% 误差 %% 头车 e0(1,k)=x_0(1)-xr(k); e0(2,k)=x_0(2)-dxr(k); %% 二车 e1(1,k)=x_1(1)-xr(k)+L; e1(2,k)=x_1(2)-dxr(k); %% 三车 e2(1,k)=x_2(1)-xr(k)+2*L; e2(2,k)=x_2(2)-dxr(k); %% 控制器 %% 头车 k_0=1; s0(k) = k_0*e0(1,k)+5000*e0(2,k); fx0=a0+b0*x_0(2)+c0*x_0(2)*x_0(2)+m0*g*sin(angle0)+600/R+0.0013*l0; p0(k)=s0(k) w0(k)=-h_0*sign(p0(k))-j_0*p0(k)-fx0; u0(k)=w0(k); if w0(k)>w0_max u0(k)=w0_max; elseif w0(k)<w0_min u0(k)=w0_min; elseif w0(k)>w0_min && w0(k)<w0_max u0(k)=w0(k); end deta0=u0(k)-w0(k); beta0=2*deta0/aerfa0-2*m0/aerfa0; p0(k)=s0(k)-beta0; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 参考位移、速度、加速度 x0(3,k)=(u0(k)/m0)-g*sin(angle0)-fx0/m0; x0(2,k)=x_0(2)+ts*(x_0(3)); x0(1,k)=x_0(1)+ts*(x_0(2)); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%初值迭代 x_0=x0(:,k);
时间: 2023-12-25 12:04:20 浏览: 25
这段代码的目的是计算三辆车与期望位移和期望速度之间的误差,并设计控制器u以减小误差。其中,头车、二车和三车分别计算其与期望位移和期望速度之间的误差,并将误差存储在e0、e1和e2变量中。控制器u根据误差来计算控制量u0,以减小头车与期望位移和期望速度之间的误差。控制器的具体实现方式是,根据误差计算出s0值,然后通过一系列计算,得到最终的控制量u0。最后,根据控制量u0计算出新的变量值x0,从而实现对期望位移和期望速度的跟踪。
相关问题
fx0 = -m0*ddxr(k)-m0*g*sin(angle0)-a0-b0*x_0(2)-c0*x_0(2)*x_0(2);
这行代码计算了头车需要施加的力,以使得车辆能够按照预定轨迹行驶。具体来说,它包括以下几个部分:
1. -m0*ddxr(k):表示车辆的加速度,其中ddxr(k)是车辆需要达到的加速度。
2. -m0*g*sin(angle0):表示重力对车辆的影响,其中g是重力加速度,angle0是车辆的倾斜角度。
3. -a0-b0*x_0(2)-c0*x_0(2)*x_0(2):表示摩擦力对车辆的影响,其中a0、b0、c0是摩擦力的系数,x_0(2)是车辆当前的速度,x_0(2)*x_0(2)表示速度的平方。
总的来说,fx0表示头车需要施加的总力,以使得车辆能够按照预定轨迹行驶。
u0(k)= -( fx0+ t0 +( U0+E0) * sign(s0(k))) /gx0;
这行代码是控制器的输出,用于计算头车需要施加的力。具体来说:
1. fx0:表示头车需要施加的力,这是通过计算头车的加速度、重力和摩擦力得到的。
2. t0:表示控制器中的一个项,用于计算头车需要施加的力。具体来说,它是根据车辆当前速度与预期速度的差距计算得到的。
3. U0和E0:这些是控制器的输入,用于调整控制器的输出。具体来说,U0表示头车的惯性力,E0表示外部干扰力,它们可以通过调整控制器参数来控制。
4. sign(s0(k)):表示滑模面的符号,用于调整控制器的输出。
5. gx0:表示头车的质量,用于计算头车的加速度。
最终,u0(k)表示头车需要施加的总力,用于控制车辆沿着预定轨迹行驶。