Main Content

アダプティブ クルーズ コントロールに対するバリア証明書の制約の適用

この例では、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 のコントローラー設計は、次の原則に基づきます。

  • 相対距離が安全距離より小さい場合、主な目標は減速して安全距離を維持することです。

  • 相対距離が安全距離より大きい場合、主な目標は安全距離を維持したままドライバーが設定した速度に到達することです。

安全距離は速度の関数として定義されます。

dsafe=τv+d0

ここで

  • d0 は既定の間隔です。

  • τ は時間のギャップです。

  • v は自車の前後方向の速度です。

同じコントローラーの構造と設計原則を適用する例については、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);

Figure contains 4 axes objects. Axes object 1 with title Acceleration contains 2 objects of type line. These objects represent ego, lead. Axes object 2 with title Velocity contains 3 objects of type line. These objects represent ego, lead, set. Axes object 3 with title Distance between two cars contains 2 objects of type line. These objects represent actual, safe. Axes object 4 with title Safety offset contains an object of type line.

バリア証明書の制約

ACC アプリケーションに対して、安全セットは相対距離 ddsafe として定義されます。したがって、バリア証明書は安全オフセット h=d-dsafe0 によって求められます。

プラント ダイナミクスは次の方程式で記述されます。

p˙=v

v˙=u

d˙=v-vl

ここで、p は自車の位置、vl は先行車の速度です。

バリア証明書 h は状態 x=[pvd] の関数であり、h(x)=d-τv-d0 によって求められます。状態に対する h の偏導関数は q(x)=[0-τ1] によって求められます。

Barrier Certificate Enforcement ブロックは形式 x˙=f(x)+g(x)u のプラント ダイナミクスを受け入れます。このアプリケーションの場合、f(x)=[v0v-vl] および g(x)=[010] となります。

バリア証明書の制約を使用した ACC コントローラーのシミュレーション

制約の実装を表示するには、ConstraintConstrained サブシステムを開きます。

制約を有効にします。

constrained = 1;

モデルを実行し、シミュレーション結果をプロットします。

sim(mdl);
accPlotResults(logsout,default_spacing,time_gap,v_set);

Figure contains 4 axes objects. Axes object 1 with title Acceleration contains 2 objects of type line. These objects represent ego, lead. Axes object 2 with title Velocity contains 3 objects of type line. These objects represent ego, lead, set. Axes object 3 with title Distance between two cars contains 2 objects of type line. These objects represent actual, safe. Axes object 4 with title Safety offset contains an object of type line.

このプロットはバリア証明書 (安全セット) が非負であることを示しています。相対距離は常に、定義された安全距離より大きくなります。

Barrier Certificate Enforcement ブロックによって、相対距離が安全距離より大きくなるように、正常に制御動作が制約されています。

モデルを閉じます。

bdclose(mdl)

参考

関連するトピック