滑模控制器为: u_i=-h_1sign(σ)-h_2σ-a-bv-cv^2-(m_igsinθ+600/R+0.0013L_s)
时间: 2024-02-15 15:02:57 浏览: 177
好的,如果您的滑模控制器为:
```
u_i = -h_1*sign(sigma) - h_2*sigma - a - b*v - c*v^2 - (m*g*sin(theta) + 600/R + 0.0013*Ls)
```
其中 `i` 表示列车的编号,`sigma` 表示当前位置偏差,`v` 表示当前速度,`theta` 表示坡度,`m` 表示列车重量,`Ls` 表示列车长度,`R` 表示列车半径,`g` 表示重力加速度,`a`、`b`、`c`、`h_1`、`h_2` 表示待调参数。那么可以将代码修改为以下形式:
```
clc;
clear all;
% 系统参数
m = 50000; % 质量
k1 = 200000; % 弹簧刚度
k2 = 18000; % 减震器刚度
c1 = 1000; % 弹簧阻尼
c2 = 5000; % 减震器阻尼
R = 0.5; % 列车半径
Ls = 20; % 列车长度
g = 9.81; % 重力加速度
a = 100; % 待调参数
b = 10; % 待调参数
c = 0.1; % 待调参数
h1 = 100; % 待调参数
h2 = 10; % 待调参数
% 参考轨道
xr = 10*sin(0:0.1:10); % 期望位移
dxr = diff(xr)/0.1; % 期望速度
ddxr = diff(dxr)/0.1; % 期望加速度
% 初值
x1_0 = [0; 0]; % 列车1的初值
x2_0 = [-5; 0]; % 列车2的初值
x3_0 = [-10; 0]; % 列车3的初值
% 控制器
u1 = 0; % 控制量1
u2 = 0; % 控制量2
u3 = 0; % 控制量3
for i=1:length(xr)-1
% 列车1的控制
x1 = [x1_0(1); x1_0(2)];
e1 = x1(1) - xr(i);
de1 = x1(2) - dxr(i);
u1 = -h1*sign(e1) - h2*de1 - a - b*x1(2) - c*x1(2)^2 - (m*g*sin(theta) + 600/R + 0.0013*Ls);
x1_0 = x1_0 + ts*[0 1; -k1/m -c1/m]*x1_0 + ts*[0; 1/m]*u1;
% 列车2的控制
x2 = [x2_0(1); x2_0(2)];
e2 = x2(1) - xr(i);
de2 = x2(2) - dxr(i);
u2 = -h1*sign(e2) - h2*de2 - a - b*x2(2) - c*x2(2)^2 - (m*g*sin(theta) + 600/R + 0.0013*Ls);
x2_0 = x2_0 + ts*[0 1; -k1/m -c1/m]*x2_0 + ts*[0; 1/m]*(u2 - u1);
% 列车3的控制
x3 = [x3_0(1); x3_0(2)];
e3 = x3(1) - xr(i);
de3 = x3(2) - dxr(i);
u3 = -h1*sign(e3) - h2*de3 - a - b*x3(2) - c*x3(2)^2 - (m*g*sin(theta) + 600/R + 0.0013*Ls);
x3_0 = x3_0 + ts*[0 1; -k1/m -c1/m]*x3_0 + ts*[0; 1/m]*(u3 - u2);
end
% 画出实际运动轨迹和期望轨迹的对比图
figure;
plot(0:ts:TT-ts, x1(1,:), 'r', 0:ts:TT-ts, x2(1,:), 'g', 0:ts:TT-ts, x3(1,:), 'b', 0:ts:TT-ts, xr(1:end-1), 'k');
xlabel('时间');
ylabel('位移');
legend('列车1', '列车2', '列车3', '期望位移');
```
在这段代码中,我们根据您提供的滑模控制器公式,将控制器部分的代码进行修改。在控制器中,我们计算出当前位置偏差 `e` 和当前速度偏差 `de`,然后根据滑模控制器公式计算出控制量 `u`。在代码中,我们使用了待调参数 `a`、`b`、`c`、`h1`、`h2`,您可以根据具体场景进行调整。同时,在计算控制量时,我们还考虑了列车的重力、空气阻力和曲线半径等因素。最后,画出实际运动轨迹和期望轨迹之间的对比图。
请根据您的具体应用场景,对代码进行修改和调整,以满足您的要求。
阅读全文