Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

極値探索制御を使用したアダプティブ クルーズ コントロール

この例では、極値探索制御 (ESC) 法を使用してアダプティブ クルーズ コントロールを実装する方法を示します。この例における目標は、縦方向の加速度とブレーキを制御することで、先行車との安全距離を維持しながら自車を設定速度で走行させることです。

アダプティブ クルーズ コントロール システム

アダプティブ クルーズ コントロール (ACC) は、車両が安全な車間距離を維持して制限速度を守れるように設計されたシステムです。ACC システムを備えた車両 (自車) は、レーダーを使用して、先行車に対する相対距離 (Drel) と相対速度 (Vrel) を測定します。ACC システムは、目的の走行速度 (Vset) を維持するか、先行車との相対的な安全距離 (Dsafe) を維持するように設計されています。制御目的の切り替えは、次の条件に基づいて決定されます。

  • Drel>Dsafe の場合、ACC システムは運転者が指示した目的の基準走行速度に従います。

  • Drel<Dsafe の場合、ACC システムは先行車に対する自車の相対位置を制御します。

この例では、Adaptive Cruise Control System Using Model Predictive Control (Model Predictive Control Toolbox)と同じ自車と先行車のモデルを使用します。

縦方向の車両運動を、シンプルな 2 次線形モデルとして実装します。

G = tf(1,[0.5,1,0]);

この例の ACC パラメーターを設定します。

D_default = 10; % Default spacing (m)
t_gap = 1.4;    % Time gap (s)
v_set = 30;     % Driver-set velocity (m/s)
amin_ego = -3;  % Minimum acceleration for driver comfort (m/s^2)
amax_ego = 2;   % Maximum acceleration for driver comfort (m/s^2)
Ts = 0.1;       % Sample time (s)     
Tf = 150;       % Duration (s)  

先行車と自車の両方の初期位置と初期速度を指定します。

x0_lead = 50; % Initial lead car position (m)
v0_lead = 25; % Initial lead car velocity (m/s)
x0_ego = 10;  % Initial ego car position (m)
v0_ego = 20;  % Initial ego car velocity (m/s)

極値探索制御を使用した ACC

極値探索コントローラーは、制御パラメーターを調整して目的関数をリアルタイムで最大化することで、満足な制御性能を達成します。この例では、相対距離、安全距離、相対速度および設定速度に依存する次の目的関数を使用します。

J=-Qd(Drel-Dsafe)2+Qv(vrel-vset)2

ここで、QdQv はそれぞれ目的関数の距離誤差項と速度誤差項の重みです。

Qd = 0.5;
Qv = 1;

極値探索コントローラーは、次のコントローラー ゲインを適応させます。

  • Kxerr — 位置誤差のゲイン

  • Kverr — 速度誤差のゲイン

  • Kvrel — 相対速度のゲイン

ゲイン値の初期推定を指定します。

Kverr = 1;   % ACC velocity error gain
Kxerr = 1;   % ACC spacing error gain
Kvrel = 0.5; % ACC relative velocity gain

極値探索制御パラメーターの指定

Simulink Control Design ソフトウェアでは、ESC アルゴリズムをExtremum Seeking Controlブロックを使用して実装しています。このブロックのパラメーターを設定します。

調整するパラメーターの数 (3 つのコントローラー ゲイン) を指定します。コントローラーはパラメーターごとに別々の調整ループを使用します。

N = 3;

各パラメーターの学習率 lr を基準に初期ゲイン値をスケーリングすることで、パラメーター更新積分器の初期条件を指定します。

lr = 0.02*[2 3 1];
IC = [Kverr,Kxerr,Kvrel];

復調信号と変調信号は、その周波数 (omega)、位相 (phi_1phi_2)、および振幅 (ab) を指定することにより設定します。パラメーターごとに異なる強制周波数を使用しなければなりません。この例では、変調および復調の位相と振幅についてはすべてのパラメーターで同じものを使用します。

omega = 0.8*[5,7,8]; % Forcing frequency (rad/s)
a = 0.01;            % Demodulation amplitude
b = 0.5*lr;          % Modulation amplitude
phi_1 = 0;           % Demodulation phase (rad)
phi_2 = pi/4;        % Modulation phase (rad)

ローパス フィルターを使用して復調された信号から高周波数のノイズを除去し、ハイパス フィルターを使用して摂動を加えられた目的関数信号からバイアスを除去します。これらのフィルターのカットオフ周波数を指定します。

omega_lpf = 0.04;
omega_hpf = 0.01;

アダプティブ クルーズ コントロール システムのシミュレーション

ESC アダプティブ クルーズ コントローラーをシミュレートするには、ExtremumSeekingControlACC モデルを開きます。

mdl = 'ExtremumSeekingControlACC';
open_system(mdl)

Plant Dynamics and Objective サブシステムには ACC モデルが含まれており、ESC アルゴリズムの目的関数を計算します。

open_system([mdl '/Plant Dynamics and Objective'])

モデルのシミュレーションを実行します。シミュレーション中に、先行車の速度が正弦関数的に変動します。そのため、自車はその速度を調整して補正しなければなりません。

sim(mdl);

次のプロットは、先行車と自車の間の相対距離および安全距離を示しています。

  • 自車の速度が変化すると安全距離も変化しています。

  • 自車と先行車の間の相対距離が安全距離をわずかに下回っていることがあります。この結果になるのは、ACC システムが柔軟な制約を使用して相対距離を適用しているためです。

open_system([mdl '/Plant Dynamics and Objective/Simulation results/Distance'])

自車と先行車の速度を自車の設定速度と共に表示します。安全距離を維持するために、ACC システムは先行車の速度の変化に応じて自車の速度を調整します。先行車の速度が設定速度を超えると、自車は先行車の速度の追跡を停止し、設定速度で走行します。

open_system([mdl '/Plant Dynamics and Objective/Simulation results/Velocity'])

次のプロットは、ESC が最適な制御ゲインの検索時に最適化しようとするコスト関数を示しています。

open_system([mdl '/Plant Dynamics and Objective/Simulation results/Cost'])

シミュレーション全体で適応する結果のコントローラー ゲインを表示します。上部のプロットは Kverr、中央のプロットは Kxerr、下部のプロットは Kvrel です。ゲイン値の変動は、Extremum Seeking Control ブロックの変調信号によるものです。

open_system([mdl '/Plant Dynamics and Objective/Gains'])

bdclose('ExtremumSeekingControlACC')

参考

ブロック

関連するトピック