第四章:纯比例导引法(PPN)——最经典的制导律之一
各位同学,今天我们来聊聊纯比例导引法。说实话,PPN 是我在工程中接触最多的制导律之一。为什么?因为它简单、可靠,而且物理意义非常清晰。我在做某型空地导弹的制导律设计时,最初就是用 PPN 作为基准方案,后来才逐步加入其他修正。
PPN 的全称是 Pure Proportional Navigation,翻译过来就是「纯比例导引」。它和理想比例导引(IPN)的区别,说白了就是:PPN 只控制导弹的航向角速率,而 IPN 还考虑了目标加速度的补偿。嗯,这个区别很关键,我们后面会详细讲。
4.1 PPN 的数学模型
先看模型。PPN 的核心假设是:导弹的航向角速率与视线角速率成正比。公式很简单:
a_m = N * V_c * λ_dot
其中:
- a_m:导弹的法向过载(制导指令)
- N:导航比,通常取 3~5
- V_c:接近速度(导弹与目标在视线方向上的相对速度)
- λ_dot:视线角速率
你想想看,这个公式的物理意义是什么?就是「视线转得越快,导弹就转得越猛」。我在项目中遇到过一个问题:如果 N 选得太小(比如 N=2),导弹会追不上目标;选得太大(比如 N=6),导弹会过度响应,导致过载饱和。所以 N 的选取是个经验活。
4.2 制导指令的生成
生成制导指令,其实就三步:
- 测量视线角速率 λ_dot:通常由导引头或雷达提供
- 计算接近速度 V_c:由导弹和目标的速度矢量投影得到
- 乘以导航比 N:得到法向过载指令
下面是我写的一个 Python 仿真函数,用于生成 PPN 制导指令:
def ppn_guidance(missile_pos, target_pos, missile_vel, target_vel, N=4):
"""
纯比例导引法制导指令生成
输入:
missile_pos, target_pos: 位置向量 (x, y)
missile_vel, target_vel: 速度向量 (vx, vy)
N: 导航比,默认 4
输出:
a_m: 法向过载指令 (标量)
"""
# 计算视线向量
los = target_pos - missile_pos
R = np.linalg.norm(los) # 相对距离
# 计算视线角速率
los_unit = los / R
V_rel = target_vel - missile_vel
# 视线角速率的近似计算
lambda_dot = np.cross(los_unit, V_rel) / R
# 计算接近速度
V_c = -np.dot(los_unit, V_rel)
# 生成制导指令
a_m = N * V_c * lambda_dot
return a_m
这段代码我用了很多次。注意看,我用了 np.cross 来计算视线角速率,这是二维情况下的简化写法。三维情况要复杂一些,但思路是一样的。
4.3 PPN 与 IPN 的区别
好,重点来了。PPN 和 IPN 到底有什么区别?我用一个表格来说明:
| 对比项 | PPN(纯比例导引) | IPN(理想比例导引) |
|---|---|---|
| 控制对象 | 航向角速率 | 视线角速率 |
| 目标加速度补偿 | 无 | 有(理论上完全补偿) |
| 脱靶量 | 非零(目标机动时) | 理论上为零 |
| 工程实现难度 | 低 | 高(需要精确估计目标加速度) |
| 适用场景 | 低速、弱机动目标 | 高速、强机动目标 |
为什么会这样?我解释一下。PPN 只关心「视线怎么转」,它不管目标是不是在加速。而 IPN 会去估计目标的加速度,然后补偿掉。听起来 IPN 更好,对吧?但问题是,目标加速度很难精确估计。我曾经在一个项目中尝试用 IPN,结果因为加速度估计误差太大,制导指令反而比 PPN 还差。嗯,有时候「简单」反而是优势。
4.4 知识体系图
下面我用一张 SVG 图来展示 PPN 的核心逻辑和与 IPN 的关系:
4.5 避坑指南
最后,分享几个我踩过的坑:
- 导航比 N 的选取:我曾经在一个项目中用了 N=3,结果目标做 3g 机动时脱靶量达到了 5 米。后来改成 N=4.5,脱靶量降到了 1 米以内。但 N 不能太大,否则指令会振荡。
- 接近速度 V_c 的计算:注意 V_c 是标量,不是矢量。我见过有人直接用相对速度的模,这是错的。V_c 必须是视线方向上的投影。
- 仿真步长:PPN 对仿真步长比较敏感。我建议步长取 0.001~0.01 秒,否则数值积分会发散。
好了,这一章就到这里。PPN 虽然简单,但它是制导律的基石。下一章我们会讲增广比例导引法(APN),看看怎么在 PPN 的基础上加入目标加速度补偿。嗯,到时候你会看到,APN 其实就是 PPN 加了一个「修正项」。