ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

カルマン フィルターを使用した航空機の位置の推定

この例では、レーダーの測定モデルから航空機の位置を推定するアプリケーションでカルマン フィルターを使用する方法を説明します。UI (ユーザー インターフェイス) では、シミュレーションの実行中にさまざまなパラメーターを制御することができます。また、MATLAB コードから MEX ファイルが生成され、同じアプリケーションの実行速度を加速できます。MATLAB 関数と生成された MEX ファイルの速度の比較は最後に紹介します。

はじめに

カルマン フィルターは、追跡やナビゲーションのアプリケーションに多く使用されます。この例では、レーダーを使用した航空機の追跡をシミュレーションします。航空機の位置は、カルマン フィルターを使用してノイズを含むレーダーの測定から推定することができます。以下にシナリオを示します。

システムは、航空機の位置に関連する 4 つの状態を使用して記述されています。これらの 4 つの状態とは、x 座標 ()、x 座標の変化率 ()、y 座標 () および y 座標の変化率 () です。このため、システムは次のようにモデル化されています。

ここで、ノイズは独立したホワイト ノイズとガウス ノイズです。

カルマン フィルター System object

この例で使用するカルマン フィルター System object は「System object を使用した MATLAB でのシステム設計」に説明されている手順を使用して作成されています。実装は dsp.KalmanFilter で提供されています。カルマン フィルターのアルゴリズムとプロパティの詳細は、dsp.KalmanFilter のドキュメンテーションを参照してください。

レーダー測定の生成のためのモデル

このモデルは航空機の加速の値をシミュレーションし、これを使用して位置と速度のデータを直交座標系で生成します。レーダーのアンテナによる不正確な測定を作成するために、データにノイズを追加します。

MATLAB でのカルマン フィルターの使用

このアプリケーション例のコア アルゴリズムは、ノイズを含むレーダーの測定にカルマン フィルターを適用します。以下に示す一連のタスクが実行されます。

  1. カルマン フィルター System object を初期化する

  2. 航空機レーダー システムに基づいてプロパティを割り当てる

  3. ノイズを含むレーダー測定を生成し、カルマン フィルター System object に渡す

関数 aircraftPositionEstimateExampleApp は上記のアルゴリズムをラップ アラウンドして繰り返し呼び出し、航空機を継続的に追跡します。また、航空機の軌跡をプロットして、実際の位置、位置のノイズを含む測定およびカルマン フィルターを適用した位置の推定の 3 つを比較します。プロットは関数への plotResults 入力が true の場合にのみ作成されます。

aircraftPositionEstimateExampleApp を呼び出して TimeScopes に結果をプロットするには、ここをクリックしてください。シミュレーションはユーザーが明示的に停止するまで実行し続けることに注意してください。

以下のプロットは、上記のシミュレーションをタイム ステップ 2000 回実行した場合の出力です。

上のプロットではカルマン フィルターによるノイズの軽減効果が示されています。

関数 aircraftPositionEstimateExampleApp はシミュレーションを対話的に実行するように設計されたユーザー インターフェイス (UI) を起動します。UI ではパラメーターを調整でき、結果はシミュレーションにすぐに反映されます。たとえば、シミュレーションの実行中に [Thrust in X-Position] のスライダーを右に動かすと、X 方向の航空機の加速が大きくなります。この変更を反映して、TimeScope の対応するプロットでは勾配が大きくなります。

また、UI には 3 つのボタンがあります。[Reset] ボタンはカルマン フィルターの状態を初期値にリセットし、[Pause Simulation] ボタンはもう一度押すまでシミュレーションを保留します。シミュレーションを終了するには、UI を閉じるか、[Stop simulation] ボタンをクリックします。UI とシミュレーションのやり取りは UDP を使用して実行されます。UDP を使用することで、UI はシミュレーション、またはオプションで以下に説明するシミュレーション コードから生成された MEX ファイル (またはスタンドアロンの実行可能ファイル) を制御できるようになります。MIDI コントローラーがある場合は、UI と同期することができます。このためには、スライダーまたはボタンを右クリックすると表示されるダイアログで MIDI コントロールを選択し、コンテキスト メニューから "Synchronize" を選択します。選択した MIDI コントロールがスライダー/ボタンと連携し、1 つのコントロールを操作するともう一方のコントロールが同期されるようになります。

MEX ファイルの生成と使用

MATLAB Coder を使用してアルゴリズムを含む関数の C コードを生成できます。ご使用のプラットフォームに合った MEX ファイルを生成するには、スクリプト HelperAircraftKalmanFilterGenMEX を実行します。これによって現在のディレクトリに MEX ファイルが作成されるので、ディレクトリが書き込み可能であることを確認してください。

'true' を引数として使用してラッパー関数 aircraftPositionEstimateExampleApp を呼び出すと、シミュレーションで MATLAB コードの代わりに生成した MEX ファイルを使用できます。このシナリオでは、UI は MATLAB 環境の内部で実行していますが、主要な処理アルゴリズムは MEX ファイルによって実行されています。このモードではパフォーマンスが改善され、パラメーターも引き続き調整可能です。

'true' を引数として aircraftPositionEstimateExampleApp を呼び出し、シミュレーションに MEX ファイルを使用するには、ここをクリックしてください。ここでも、シミュレーションは UI で明示的に停止するまで実行し続けます。

速度の比較

MEX ファイルを作成すると、シミュレーションの実行時間が短縮されることが多くあります。関数 HelperCompareSpeedKalmanFilter は、まずプロットなしで System object を使用する MATLAB 関数でかかる時間を測定し、次に対応する MEX ファイルの実行時間を測定します。この関数を実行すると、コマンド ウィンドウ出力における実行速度の大幅な向上を見ることができます。

この情報は役に立ちましたか?