Stateflow チャートを使用してインテリジェント車両の制御を自動化
この例では、同じ判定ロジックで制御するインテリジェント車両を使用したハイウェイのシナリオをモデル化する方法を説明します。各車両は、スタンドアロンの Stateflow® チャートにより定義されたロジックに基づいて、加速、減速、車線変更をどの時点で行うかを決定します。運転条件 (付近の車両の相対位置や相対速度など) は車両ごとに異なるため、MATLAB® での別々のチャート オブジェクトにより、ハイウェイを走行中の個別の車両を制御します。
運転シナリオを開く
例を開始するには、スクリプト sf_driver_demo.m
を実行します。このスクリプトは、長距離のハイウェイと数台の車両の 3 次元アニメーションを表示します。この表示は、1 台の車両とその周囲に注目したものです。この車両がハイウェイに沿って移動すると、スタンドアロンの Stateflow チャート sf_driver
に、この車両のアクションを決定する判定ロジックが表示されます。
各車両はランダムな位置から、ターゲット速度での移動を試みます。ターゲット速度はランダムに選択されているため、車両同士が互いに邪魔になることがあります。このような場合、車両は車線を変更してターゲット速度での走行を再開しようと試みます。
クラス ファイル HighwayScenario
は、ハイウェイと走行中の車両が含まれる 3 次元環境を表す
オブジェクトを定義します。車両の運動を制御するため、drivingScenario
(Automated Driving Toolbox)drivingScenario
オブジェクトは Stateflow チャート オブジェクトの配列を作成します。各チャート オブジェクトは、シミュレーションでそれぞれ異なる車両を制御します。
車両用の判定ロジックの実行
Stateflow チャート sf_driver
は LaneKeep
と LaneChange
の 2 つの最上位ステートで構成されています。
LaneKeep
ステートがアクティブである場合、対応する車両は同じ車線にそのままとどまります。このステートに存在する可能性があるサブステートは、次の 2 つです。
Cruise
は、車両のすぐ前のゾーンに他の車両がなく、車両がターゲット速度で走行できる場合にアクティブとなります。Follow
は、車両のすぐ前のゾーンに他の車両があり、ターゲット速度が前方の車両の速度より速い場合にアクティブとなります。この場合、車両は強制的に減速し、車線変更を試みます。
LaneChange
ステートがアクティブになると、該当する車両は車線変更を試みます。このステートに存在する可能性があるサブステートは、次の 2 つです。
Continue
は、車両の横のゾーンに他の車両がなく、車両が安全に車線を変更できる場合にアクティブとなります。Abort
は、車両の横のゾーンに他の車両がある場合にアクティブとなります。この場合、車両は強制的に元の車線に残ることになります。
ステート LaneKeep
および LaneChange
の間での遷移は、isLaneChanging
の値によりガードされます。LaneKeep
ステートでは、サブステート Follow
がアクティブで、車両の横に車線変更できるだけの空間がある場合に、チャートがこのローカル データをtrue
に設定します。LaneChange
ステートでは、車両が車線変更を完了すると、チャートがこのローカル データを false
に設定します。
参考
drivingScenario
(Automated Driving Toolbox)
関連するトピック
- MATLAB オブジェクトとして実行する Stateflow チャートの作成
- プログラムでのドライビング シナリオの作成 (Automated Driving Toolbox)
- Create Actor and Vehicle Trajectories Programmatically (Automated Driving Toolbox)
- Define Road Layouts Programmatically (Automated Driving Toolbox)