ハウンド(誘導弾)の追尾シミュレーション

Python
SpaceX-ImageryによるPixabayからの画像

ジャンプSQ 2020年 4月号ワールドトリガー蔵内隊員が誘導弾(ハウンド)の機能について詳細な解説をしてくださったので,実際に検証してみます. 蔵内隊員の解説では,誘導弾の誘導性能を調整することで弾を散らしたり集中させたりすることができると説明されています.また,基本は無し→強→弱の順に誘導性能を調整するのが標準的な使い方だとしています.

実際に弾を誘導できるのかをPython(Google Colaboratory)を使った2次元でのシミュレーションで検証していきます. 計算に使ったファイルは以下のもので,みなさんご自由にお使いください,numpy, pandas, matplotlibの基本的なパッケージしか使っていないので,Google Colaboratoryではなく,Juyter Notebook を使いたい方でもお使いになれます.

基本

弾丸の質量を\(m\), 加速度を\(a\), 推進力を\(f\)とすると,次のように弾丸の運動方程式を立てることができます.

\begin{align}
ma &= f
\end{align}

トリオンの弾丸は実体化していないらしいので,空気抵抗や重力の影響はないものとします.実体化してないなら質量もないのでは?

弾丸を追尾させるには,弾丸と相手との位置関係に応じて推進力\(f\)を制御する必要があります.今回は(A)PD制御を使った方法と(B)着弾時刻から推進力を逆算する方法の2つで考えていきます.

A-1) PD制御(ゲイン一定)

弾の誘導をPD制御で行なっていると仮定します. PD制御では目標との距離\(d\)に応じてバネやダンパのように推進力\(f\)を弾に加えます.力\(f\)は次式で決められます.

\begin{align}
f &= k_p d + k_d \dot{d}
\end{align}

\(k_p,k_d\)はゲインと呼ばれる制御用のパラメータです.運動方程式は次のようになります.

\begin{align}
ma &= k_p d + k_d \dot{d}
\end{align}

この場合の誘導性能は\(k_p,k_d\)のことになります.ここからはこの2つのパラメーターを調整してシミュレーションを行なっていきます.

目標の位置を(30,0), \(m = 1\)として,(0,0)の位置から初速\(v_0\)で射出角を変えながら弾丸を発射します.

  • \(v_0 = 5, k_p = 0.3, k_d = 1\)の場合

上のグラフは弾丸の軌道を示しています.目標に収束していますが,弾丸が散っていないため集中シールドで防がれそうです.ここからゲインを変えると弾丸が当たらなくなるため,ゲインが一定の場合相手を倒すのは難しそうです.

A-2) PD制御(ゲイン可変)

ここは蔵内隊員の解説通り誘導性能(ゲイン)に強弱をつけた方が良さそうです.無し→強→弱の順にゲインを調整するために,Pゲイン\(k_p\)をガウス関数シグモイド関数の合成で表します.

\begin{align}
k_p &= \frac {k_{peak}}{ \sqrt {2\pi } \sigma } \exp \left(-{\frac {(t-t_{peak} )^{2}}{2\sigma ^{2}}}\right) + \frac{k_{final}}{1-\exp(-(t-t_{peak}))}
\end{align}

次の図は\(k_{peak} = 1.2, t_{peak} = 2.5, k_{final} = 0.3 \)に設定した場合の\(k_p\)です.

  • \(v_0 = 10 k_{peak} = 3, t_{peak} = 2, k_{final} = 6, k_d = 6 \) の場合

最終的に正面から背後までの180度にわたって弾丸を散らすことができます.ただし,パラメーターも多いので戦闘中に調整するのは難しそうです.

B) 着弾時刻から推進力を逆算する方法

【Unite Tokyo 2018】誘導ミサイル完全マスターで紹介されている方法です.

時刻\(t\)の時に時間\(t_r\)後に目標に当てたい場合,相手が静止していると仮定すると,満たすべき条件は\(t_r\)後に距離が0になることであり,式は次のようになります.

\begin{align}
0 &= \int_t^{t_r}\int_t^{t_r} a(t)dt’dt
\end{align}

ここで,\(a(t)\)を一定と仮定して積分すると次のようになります

\begin{align}
0 &= \frac{1}{2}a(t) t_r^2 + v(t)t_r – x(t)
\end{align}

これを加速度\(a(t)\)について解くと,

\begin{align}
a(t) &= \frac{2}{t_r^2}x(t) + \frac{-2}{t_r}v(t)
\end{align}

となります.
実際には相手が移動することによって\(x\)が想定通りに減っていかないので,加速度を更新することになり,加速度は一定になりません.もし,相手が動かない場合は加速度は一定となります.また,位置ベクトル\(x(t)\)の各成分は放物線を描きます.

\(t=0\)の時の\(t_r\)が目標着弾時刻\(T_r\)になります.

  • \(T_r = 5\) の場合

この手法の場合,PD制御と違ってパラメータの調整をせずに相手への有効な誘導ができます.その代わり弾が散っていません.こちらも集中シールドで防がれそうです.この手法Bの場合,誘導性能の定義をどうするのかがあやふやです.\(a\)の値に制限を加えるのか,それとも\(a\)を一定ではなく可変にするのかまた考えてみたいと思います.

なお.\(t_r\)が0に近いとシミュレーションの誤差が大きくなるのでご注意ください.


2020/03/24追記: こういう方法もあるらしいです.奥が深い.

https://www.jstage.jst.go.jp/article/sicejl1962/24/5/24_5_417/_pdf

コメント