%% 滑模控制2用于制导
% 原模型是二体相对运动,这道题简化为目标是静止的,导弹从高处往下投
% 为简化计算过程,预先将目标物相关量置0
% 假设控制系统无滞后am = ac
% ac只用于改变导弹速度方向,不改变导弹速度大小
% TODO: 加速度图与PPT不同
clear all;
clc;
%% 参数初始化
% dX = AX + Bc*ac + Bt*at
% 普通滑膜s=x2+c(x1-lambdaD), ds=-k*s-epsilon*sgn(s)
% 自适应滑膜s=x2+k1*(x1-lambdaD)/tgo, ds=[-k2*s-kappa*sgn(s)]/tgo
gainc = 0.2;
gaink = 0.2;
epsilon = 0.002;
gaink1 = 1;
gaink2 = 1;
kappa = 0.01;
disx = 6000; %导弹与目标水平距离(m)
disy = 3000; %导弹与目标高度距离(m)
disr = norm([disx, disy]); %导弹与目标的直线距离(m)
velM = 260; %导弹初始速度(m/s)
thetaM = 0; %导弹速度与水平夹角(rad)
etaM = -atan(disy/disx); %导弹速度与MT连线夹角(rad)
accelM = 0; %导弹加速度(m/s^2)
lambda = -atan(disy/disx); %视线角(rad)
lambdaDesire = -30/180*pi; %期望视线角(rad)
dLambda = velM*sin(etaM)/disr;
X = [lambda; dLambda]; %初始状态
dt = 0.01; %仿真步长(s)
T = 30; %仿真周期(s)
%% 画图记录量
time = 0:dt:T;
xyLog1 = zeros(2, T/dt+1);
xyLog2 = zeros(2, T/dt+1);
accelLog = zeros(2, T/dt+1);
lambdaLog = zeros(2, T/dt+1);
sLog = zeros(2, T/dt+1);
%% 普通滑模控制
for i = 1:1:T/dt+1
% 滑模控制量s和加速度accelC
dDisr = -velM*cos(etaM);
matA = [0, 1; 0, -2*dDisr/disr];
matBc = [0; -cos(etaM)/disr];
matC = [gainc, 1];
s = matC*X - matC(1)*lambdaDesire;
accelC = (-matC*matA*X -epsilon*sat(s) -gaink*s) / (matC*matBc);
% 状态方程
dX = matA*X + matBc*accelC;
% 状态递推
X = X + dX*dt;
lambda = X(1);
dLambda = X(2);
accelM = accelC;
dThetaM = accelM / velM;
thetaM = thetaM + dThetaM*dt;
etaM = lambda - thetaM;
disr = disr -velM*cos(etaM)*dt;
if disr <= 0
disr = 0;
% 写入剩下的数
for j = i:1:T/dt+1
xyLog1(:, j) = [disr*cos(lambda); disr*sin(lambda)];
accelLog(1, j) = accelM;
lambdaLog(1, j) = lambda*180/pi;
sLog(1, j) = s;
end
break;
end
% 记录
xyLog1(:, i) = [-disr*cos(lambda); -disr*sin(lambda)];
accelLog(1, i) = accelM;
lambdaLog(1, i) = lambda*180/pi;
sLog(1, i) = s;
end
%% 自适应滑模控制
disr = norm([disx, disy]); %导弹与目标的直线距离(m)
thetaM = 0; %导弹速度与水平夹角(rad)
etaM = -atan(disy/disx); %导弹速度与MT连线夹角(rad)
lambda = -atan(disy/disx); %视线角(rad)
dLambda = velM*sin(etaM)/disr;
X = [lambda; dLambda]; %初始状态
for i = 1:1:T/dt+1
% 滑模控制量s和加速度accelC
dDisr = -velM*cos(etaM);
tgo = -disr/dDisr;
matA = [0, 1; 0, -2*dDisr/disr];
matBc = [0; -cos(etaM)/disr];
matC = [gaink1/tgo, 1];
s = matC*X - matC(1)*lambdaDesire;
accelC = disr*( dLambda*(-2*dDisr/disr + (gaink1+gaink2)/tgo) +...
gaink1*(gaink2+1)*(lambda-lambdaDesire)/tgo^2 +...
kappa*sat(s)/tgo );
accelC = accelC / cos(etaM);
% 状态方程
dX = matA*X + matBc*accelC;
% 状态递推
X = X + dX*dt;
lambda = X(1);
dLambda = X(2);
accelM = accelC;
dThetaM = accelM / velM;
thetaM = thetaM + dThetaM*dt;
etaM = lambda - thetaM;
%disr = velM*sin(etaM)/dLambda; %不能用这条进行递推
disr = disr -velM*cos(etaM)*dt;
if disr<=0
disr = 0;
% 写入剩下的数
for j = i:1:T/dt+1
xyLog2(:, j) = [disr*cos(lambda); disr*sin(lambda)];
accelLog(2, j) = accelM;
lambdaLog(2, j) = lambda*180/pi;
sLog(2, j) = s;
end
break;
end
% 记录
xyLog2(:, i) = [-disr*cos(lambda); -disr*sin(lambda)];
accelLog(2, i) = accelM;
lambdaLog(2, i) = lambda*180/pi;
sLog(2, i) = s;
end
%% 画图
figure;
plot(xyLog1(1,:), xyLog1(2,:),'linewidth', 1.5);
hold on;
plot(xyLog2(1,:), xyLog2(2,:), 'linewidth', 1.5);
grid on;
title('导弹飞行轨迹图');
xlabel('x(m)');
ylabel('h(m)');
legend('普通', '自适应');
figure;
plot(time, accelLog, 'linewidth', 1.5);
hold on;
grid on;
title('导弹加速度变化图');
xlabel('time(s)');
ylabel('accelM(m/s^2)');
legend('普通', '自适应');
figure;
plot(time, lambdaLog, 'linewidth', 1.5);
hold on;
grid on;
title('视线角变化图');
xlabel('time(s)');
ylabel('lambda(°)');
legend('普通', '自适应');
figure;
plot(time, sLog, 'linewidth', 1.5);
hold on;
grid on;
title('s函数变化图');
xlabel('time(s)');
ylabel('s');
legend('普通', '自适应');
%% 小函数
function y = sat(x)
if x >= 0.1
y = 1;
elseif x <= -0.1
y = -1;
else
y = x/0.1;
end
end

Matlab仿真实验室
- 粉丝: 4w+
- 资源: 2478
最新资源
- 汽车系统升级更新,诺威达k2201升级包,解决系统卡顿问题 优化开机 音质提升
- Classic Control Theory - 11 Bode Plots by Hand – Poles and Zeros at the Origin (第11课笔记-中文版)
- 永磁同步电机电流内环PR控制Simulink仿真模型:矢量控制、转速外环PI调节、可直接运行与波形完美的实践研究报告,永磁同步电机电流内环PR控制Simulink仿真模型:矢量控制、转速外环PI调节、
- 多算法优化策略下的带时间窗物流路径规划与车辆路径优化问题研究,基于多算法优化的带时间窗物流路径规划:粒子群算法、遗传算法与模拟退火等多重策略车辆路径优化研究,基于matlab的粒子群算法求解带时间窗的
- Character Editor Megapack 5.0
- 电力系统日前优化调度中的需求侧资源灵活性刻画-基于虚拟电池模型的Python实现(论文复现含代码及详细解释)
- 微信小程序实现头像上传下载
- 深度解析:完整的整车Simulink七自由度模型设计与实现,整车Simulink七自由度模型详解:构建、应用与优化,完整的整车simulink七自由度模型 ,七自由度模型; 整车simulink模型
- 自用zhy-vm11111111111
- 次声波号空天飞机 .zip
- 初代乌钢条(1).zip
- yang21o.pdf
- 大伊万.zip
- 德尔塔ⅣM.zip
- 地球大气燃烧拓展包1.5.zip
- 登火.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈


