基于MATLAB实现追踪法、比例导引法和平行接近法三种典型导引律弹道仿真
一、核心算法实现
1. 追踪法(Proportional Navigation)
function [missile_pos, missile_vel] = pursuit_guidance(target_pos, target_vel, missile_pos, missile_vel, dt, K)
% 参数说明:
% target_pos: 目标位置 [x,y,z]
% target_vel: 目标速度 [vx,vy,vz]
% missile_pos: 导弹初始位置
% missile_vel: 导弹初始速度
% dt: 时间步长
% K: 导引系数(追踪法K=1)
rel_pos = target_pos - missile_pos;
rel_vel = target_vel - missile_vel;
% 视线角速度计算
q_dot = (rel_vel(1)*rel_pos(2) - rel_vel(2)*rel_pos(1)) / norm(rel_pos)^2;
% 导弹加速度计算
a_m = K * missile_vel * q_dot;
% 更新导弹状态
missile_vel = missile_vel + a_m * dt;
missile_pos = missile_pos + missile_vel * dt;
end
2. 比例导引法(Proportional Navigation)
function [missile_pos, missile_vel] = pn_guidance(target_pos, target_vel, missile_pos, missile_vel, dt, K)
% 参数说明:
% K: 比例导引系数(通常3-6)
rel_pos = target_pos - missile_pos;
rel_vel = target_vel - missile_vel;
% 视线角速度计算
q = atan2(rel_pos(2), rel_pos(1));
q_dot = (rel_vel(1)*rel_pos(2) - rel_vel(2)*rel_pos(1)) / (rel_pos(1)^2 + rel_pos(2)^2);
% 导弹加速度计算
a_m = K * missile_vel * q_dot * [cos(q); sin(q); 0];
% 更新导弹状态
missile_vel = missile_vel + a_m * dt;
missile_pos = missile_pos + missile_vel * dt;
end
3. 平行接近法(Parallel Approach)
function [missile_pos, missile_vel] = parallel_guidance(target_pos, target_vel, missile_pos, missile_vel, dt)
% 参数说明:
% 假设目标匀速直线运动
rel_pos = target_pos - missile_pos;
rel_vel = target_vel - missile_vel;
% 计算碰撞点
collision_time = norm(rel_pos) / (norm(missile_vel) + norm(target_vel));
collision_point = target_pos + target_vel * collision_time;
% 生成直线弹道
direction = (collision_point - missile_pos) / norm(collision_point - missile_pos);
missile_vel = norm(missile_vel) * direction;
% 更新导弹状态
missile_pos = missile_pos + missile_vel * dt;
end
二、仿真参数设置
%% 仿真参数
dt = 0.1; % 时间步长
total_time = 50; % 总仿真时间
steps = total_time/dt;
%% 初始条件
target_pos = [0, 1000, 0]; % 目标初始位置
target_vel = [10, 0, 0]; % 目标速度 [vx,vy,vz]
missile_pos = [0, 0, 0]; % 导弹初始位置
missile_vel = [30, 0, 0]; % 导弹初始速度
%% 存储轨迹
traj_target = zeros(steps,3);
traj_missile = zeros(steps,3);
三、弹道仿真与可视化
1. 追踪法仿真
for t = 1:steps
traj_target(t,:) = target_pos;
traj_missile(t,:) = missile_pos;
% 目标匀速运动
target_pos = target_pos + target_vel * dt;
% 执行追踪法
[missile_pos, missile_vel] = pursuit_guidance(...
target_pos, target_vel, missile_pos, missile_vel, dt, 1);
end
figure;
plot3(traj_target(:,1), traj_target(:,2), traj_target(:,3), 'r-o');
hold on;
plot3(traj_missile(:,1), traj_missile(:,2), traj_missile(:,3), 'b--s');
xlabel('X (m)'); ylabel('Y (m)'); zlabel('Z (m)');
legend('目标轨迹', '导弹轨迹'); grid on;
2. 比例导引法仿真
for t = 1:steps
traj_target(t,:) = target_pos;
traj_missile(t,:) = missile_pos;
% 目标机动(示例:正弦机动)
target_vel = [10 + 5*sin(2*pi*t*dt), 0, 0];
target_pos = target_pos + target_vel * dt;
% 执行比例导引
[missile_pos, missile_vel] = pn_guidance(...
target_pos, target_vel, missile_pos, missile_vel, dt, 4);
end
figure;
plot(traj_target(:,1), traj_target(:,2), 'r-o');
hold on;
plot(traj_missile(:,1), traj_missile(:,2), 'b--s');
xlabel('X (m)'); ylabel('Y (m)');
legend('目标轨迹', '导弹轨迹'); grid on;
3. 平行接近法仿真
for t = 1:steps
traj_target(t,:) = target_pos;
traj_missile(t,:) = missile_pos;
% 目标匀速运动
target_pos = target_pos + target_vel * dt;
% 执行平行接近法
[missile_pos, missile_vel] = parallel_guidance(...
target_pos, target_vel, missile_pos, missile_vel, dt);
end
figure;
plot(traj_target(:,1), traj_target(:,2), 'r-o');
hold on;
plot(traj_missile(:,1), traj_missile(:,2), 'b--s');
xlabel('X (m)'); ylabel('Y (m)');
legend('目标轨迹', '导弹轨迹'); grid on;
四、关键性能指标对比
| 指标 | 追踪法 | 比例导引法 | 平行接近法 |
|---|---|---|---|
| 弹道曲率 | 高(需频繁修正) | 中等(K值控制) | 低(近似直线) |
| 过载需求 | 最大 | 中等(与K相关) | 最小 |
| 命中概率 | 低(末端机动易脱靶) | 中(提前量控制) | 高(理论最优) |
| 计算复杂度 | 低 | 中 | 高(需预测碰撞点) |
| 适用场景 | 近距离快速拦截 | 中距离机动目标 | 远距离匀速目标 |
五、三维扩展实现
% 三维比例导引仿真(带高度变化)
function [pos3d] = pn_3d_guidance(target_pos, missile_pos, missile_vel, K, dt)
rel_pos = target_pos - missile_pos;
q = atan2(rel_pos(2), rel_pos(1));
q_dot = (rel_pos(1)*rel_vel(2) - rel_pos(2)*rel_vel(1)) / (rel_pos(1)^2 + rel_pos(2)^2);
% 三维加速度计算
a_m = K * missile_vel * [cos(q)*cos(q_dot*dt), sin(q)*cos(q_dot*dt), sin(q_dot*dt)];
missile_vel = missile_vel + a_m * dt;
pos3d = missile_pos + missile_vel * dt;
end
参考代码 追踪法、比例导引法、平行接近法的弹道仿真 www.youwenfan.com/contentcnq/64417.html
七、工程优化建议
-
参数整定:通过遗传算法优化比例导引系数K(推荐范围3-6)。
-
抗干扰处理:加入卡尔曼滤波修正目标位置测量误差。
-
机动规避:在比例导引中引入预测命中点(PHM)算法。
-
多目标分配:使用拍卖算法实现多导弹协同导引。
八、扩展应用场景
-
隐身目标拦截:结合红外/雷达多传感器融合。
-
高超声速目标:引入实时大气密度修正模型。
-
集群作战:开发分布式协同导引算法。
-
太空拦截:考虑轨道动力学修正。

浙公网安备 33010602011771号