具有寻的系统的导弹的模型
我们将展示如何将寻的系统模型添加到火箭模型中,当检测到目标并将控制对象带到空间中的所需点时,该模型将被触发。
对象动力学模型
控制对象是正常空气动力学设计的火箭,中间有机翼,尾段有舵。
对象模型的主要部分是刚体动力学的非线性表示(块 3DOF (Body Axes)作用在火箭体上的气动力和扭矩是根据由马赫速度和迎角的非线性依赖关系表示的系数计算的。 这些函数以表格形式存储在模型中,以块为单位。 2-D Lookup Table.
该模型使用"Aerospace Systems"调色板中的以下块,这些块是所有航空航天系统的标准配置(例如,标准大气模型)。
机身模型的描述
动态滑翔机模型由四个主要子系统和一个自动驾驶仪组成,自动驾驶仪通过移动方向舵来控制火箭的法向加速度。 子系统大气,迎角和空速根据飞行高度计算大气条件的影响。 子系统方向盘驱动和传感器将自动驾驶仪模型链接到机身模型。 块气动力和运动模型计算作用在火箭体上的力和力矩,然后计算运动模型。
大气和空速
此模型使用标准块 ISA Atmosphere Model -ISA标准大气模型(ISA)。 在附加块中,使用当前声速以及速度压力计算速度(以最大值为单位)。 Q.
气动力和系数
气动力子系统计算施加在火箭身上的力和力矩。 然后对运动方程进行积分,从而确定控制对象的线性和角运动。
空气动力学系数以表格形式存储,并且通过插值确定仿真期间的瞬时值。
自动驾驶仪模型
火箭的自动驾驶仪根据预设的法向加速度控制电梯。 加速度计被放置在靠近火箭的鼻子,在重心的前面。 其信号,附加阻尼,用于产生控制信号。
基于针对预期范围内的不同飞行条件获得的几个线性化机身模型来选择自动驾驶仪系数。 该模型还包括一个饱和控制通道(抗上发),以防止调节器在自动驾驶仪信号超出可接受值时饱和。
我们正在测试在这个项目中提出的非线性模型中以这种方式创建的自动驾驶仪。
指引大纲
两个子系统负责目标检测和跟踪:
*跟踪系统返回导弹和目标之间当前相对运动参数的估计值
*制导系统计算追求模式下的期望法向加速度和搜索模式下的期望视角
制导系统计算器
该子系统为不同的系统提供控制信号。:
*自捕获目标后超过指定时间的自毁信号。,
*在目标搜索模式下设置视角,
*在"盲飞行"模式(最终模式)下正常加速的固定命令,
*实际上,系统的操作模式,
*从系统中取出保险丝的信号。
通常需要拉丁名称作为代码生成器正确操作的折衷。
计算机通过一个变量控制所有车载系统的运行 Mode (外部变量 Режим). 该变量负责切换控制模式。 在目标搜索期间,计算器通过发送信号直接控制视线的角度 Sigma_d 天线悬架上。 当目标在导引头光束的捕获半径内时(信号 Acquire 或 Захват),系统执行预设暂停,然后切换到闭环跟踪模式。 在可能丢失捕获**的情况下,系统首先切换到搜索模式,并在指定时间后,发生自毁。
第一状态机发出运动和跟踪的控制命令,同时也向第二机发射信号。 id_timeout 如果目标丢失后超过允许的追击时间:
第二台机器在目标接近时输出安全释放信号(如果系统处于待机模式 RadarGuided 或者如果超过等待时间。
跟踪模式下的比例控制
在导引头捕获目标并达到碰撞(或自我复发)后,使用比例控制定律来控制导弹。 该控制律根据以下数据计算期望的法向加速度:
*测量导弹和目标的接近速度,如果寻的头装有雷达设备,可以使用多普勒跟踪装置获得,
*视线角度变化率的估计(扫描速度)。
跟踪子系统
该子系统检测并跟踪目标,根据控制规律控制天线的方位及其在目标上的停留。 跟踪轮廓的时间常数** tors 它等于0.05秒,它的设置允许您在所需的反应速度和噪音阻力之间设置平衡。 稳定回路负责校正天线波束位移的速度,以考虑外壳的角速度。 其系数基于陀螺仪的带宽来选择。
在输出端,系统除了状态变量外,还输出目标角速度的估计值-天线波束移动速度和从雷达接收的天线-目标角度变化率的平滑总和。 滤波器的带宽等于自动驾驶仪带宽的一半。
整流罩错误
对于雷达制导导弹,整流罩是常见的误差源,影响接收延迟和辐射方向图。 通常,该误差的幅度是使用非线性函数计算的,该函数将天线定向角作为输入。 我们的模型通过天线定向角之间的线性关系来近似这种效应(Gimbal)和使用"整流罩误差"系数的失真量。
在该子系统中,可以实现其他重要误差的模型,例如,过载对陀螺仪操作的影响。 这些模型将允许您检查跟踪和稳定电路稳压器的可靠性。
系统的启动和演示
现在让我们运行模型以执行。 以下初始参数在其回调中设置:
*目标在碰撞过程中以328米/秒的恒定速度移动
*目标在天线发射点下方500米处
结果表明,捕获发生在发射后0.42秒,然后在0.63时系统切换到跟踪模式,碰撞发生在3.27秒。
include("$(@__DIR__)/init_params.jl")
engee.open("$(@__DIR__)/aero_guidance.engee")
res = engee.run("aero_guidance");
让我们分离必要的信号:
Mach_speed = collect(res["Атмосфера, Угол атаки и Воздушная скорость.Скорость (Мах)"]);
sigma_antenna = collect(res["Слежение и оценка скорости сканирования.Ориентация антенны"]);
sigma_target = collect(res["Ориентация на цель.1"]);
sigma_rad = collect(res["Sigma_rad"]);
alpha = collect(res["Incidence & Airspeed.α"]);
mode = collect(res["Вычислитель системы наведения (100 Hz).Режим"]);
misile_traj = collect(res["Планер и Автопилот.Xe,Ze"]);
target_traj = collect(res["Положение цели.Цель"]);
Az = collect(res["Аэродинамические силы и Модель движения.Ax,Az"]);
Az_d = collect(res["Az_d.1"]);
fin_demand = collect(res["Автопилот.Заданное положение руля"]);
fin_position = collect(res["Привод руля.B"]);
model_stop = collect(res["Подрыв.Остановка"]);
让我们绘制状态变量并可视化轨迹。:
gr()
plot(
plot( Az.time, [last.(Az.value) Az_d.value]./9.81, ls=[:solid :dash], ylabel="Нормальное ускорение [g]", label=["Истинное" "Заданное"], xlabel="Время [c]" ),
plot( alpha.time, rad2deg.(alpha.value), ylabel="Угол атаки [град]", xlabel="Время [c]", leg=false ),
plot( Mach_speed.time, Mach_speed.value, ylabel="Скорость [Мах]", xlabel="Время [c]", leg=false ),
plot( fin_demand.time, rad2deg.([fin_demand.value fin_position.value]), ls=[:solid :dash], ylabel="Работа руля [град]", label=["Управление" "Отклонение"], xlabel="Время [c]" ),
guidefont=font(8), lw=2, size=(800,400)
)
mode_change_idx = findall( diff(mode.value).>0 )
plot( sigma_target.time, rad2deg.(sigma_target.value), label="Ориентация на цель", ylimits=(-30,10), lw=2 )
plot!( sigma_antenna.time, rad2deg.(sigma_antenna.value), label="Ориентация антенны", ls=[:solid :dash], lw=2 )
vline!( [mode.time[mode_change_idx]], ls=:dash, label="Смена режима системы" )
plot!( guidefont=font(8), lw=2, size=(600,300), xlabel="Время [с]", ylabel="Ориентация на цель и угол антенны [град]" )
plot( first.(target_traj.value), last.(target_traj.value), label="Цель", lw=2, ls=:dash )
plot!( first.(misile_traj.value), last.(misile_traj.value), label="Ракета", lw=2 )
plot!( guidefont=font(8), size=(600,400), xlabel="X[м]", ylabel="Z [м]" )
现在可以轻松地针对任何一组输入条件运行模型并研究其操作。
结论
我们实施了一个相对复杂的导弹制导系统模型并追踪其轨迹。
[2]Lebedev A.A.,Chernobrovin L.S.无人驾驶飞行器的飞行动力学,莫斯科,1973。


