アダプティブ クルーズ コントロールに対するバリア証明書の制約の適用
この例では、Barrier Certificate Enforcement ブロックを使用してアダプティブ クルーズ コントロール (ACC) に対するバリア証明書の制約を適用する方法を示します。
概要
この例における目標は、縦方向の加速度とブレーキを制御することで、先行車との安全距離を維持しながら自車を設定速度で走行させることです。
モデル パラメーターを構成します。
x0_lead = 52; % Initial position for lead car (m) v0_lead = 25; % Initial velocity for lead car (m/s) x0_ego = 10; % Initial position for ego car (m) v0_ego = 20; % Initial velocity for ego car (m/s) default_spacing = 10; % Default spacing (m) time_gap = 1.5; % Time gap (s) v_set = 30; % Driver-set velocity (m/s) min_ac = -3; % Minimum acceleration for driver comfort (m/s^2) max_ac = 2; % Maximum acceleration for driver comfort (m/s^2) Ts = 0.1; % Sample time (s) T = 80; % Duration (s)
モデルを開きます。
mdl = 'barrierCertificateACC';
open_system(mdl)
コントローラー設計
ACC のコントローラー設計は、次の原則に基づきます。
相対距離が安全距離より小さい場合、主な目標は減速して安全距離を維持することです。
相対距離が安全距離より大きい場合、主な目標は安全距離を維持したままドライバーが設定した速度に到達することです。
安全距離は速度の関数として定義されます。
ここで
は既定の間隔です。
は時間のギャップです。
は自車の縦方向の速度です。
同じコントローラーの構造と設計原則を適用する例については、Adaptive Cruise Control with Sensor Fusion (Model Predictive Control Toolbox)を参照してください。
ゲインを指定します。
verr_gain = 0.5; % ACC velocity error gain xerr_gain = 0.1; % ACC spacing error gain vx_gain = 0.2; % ACC relative velocity gain
いずれかの制約を適用する前に、Simulink® モデルを実行して結果を確認します。
constrained = 0; sim(mdl); accPlotResults(logsout,default_spacing,time_gap,v_set);
バリア証明書の制約
ACC アプリケーションに対して、安全セットは相対距離 として定義されます。したがって、バリア証明書は安全オフセット によって求められます。
プラント ダイナミクスは次の方程式で記述されます。
ここで、 は自車の位置、 は先行車の速度です。
バリア証明書 は状態 の関数であり、 によって求められます。状態に対する の偏導関数は によって求められます。
Barrier Certificate Enforcement ブロックは形式 のプラント ダイナミクスを受け入れます。このアプリケーションの場合、 および となります。
バリア証明書の制約を使用した ACC コントローラーのシミュレーション
制約の実装を表示するには、Constraint
、Constrained
サブシステムを開きます。
制約を有効にします。
constrained = 1;
モデルを実行し、シミュレーション結果をプロットします。
sim(mdl); accPlotResults(logsout,default_spacing,time_gap,v_set);
このプロットはバリア証明書 (安全セット) が非負であることを示しています。相対距離は常に、定義された安全距離より大きくなります。
Barrier Certificate Enforcement ブロックによって、相対距離が安全距離より大きくなるように、正常に制御動作が制約されています。
モデルを閉じます。
bdclose(mdl)
参考
Barrier Certificate Enforcement