制御工学ブログ

制御工学の研究者を20年やっている国立大学教員が制御工学の基礎から専門まで広く説明します。記事内では、動画やMATLABコードを交えながらわかりやすく解説します。伝達関数・状態方程式に基づく制御,制御理論など。制御工学チャンネル(YouTube,動画ポータル)を運営しています。

アダプティブクルーズコントロールによるビークルの制御シミュレーション

適応型クルーズコントロール(ACC)とは

適応型クルーズコントロール(Adaptive Cruise Control, ACC)は、現代の自動車に広く搭載されている先進運転支援システム(ADAS)の一つです。従来のクルーズコントロールが一定速度での走行を維持する機能であったのに対し、ACCは前方車両との車間距離を自動的に調整しながら、安全な追従走行を実現します。本記事では制御工学の重要なトピックである「ビークルの追従制御」について,状態方程式を用いたモデル化と制御について解説します。車両の隊列制御や自動運転における車間距離維持など、実用的な応用が多い分野です。

ACCの実用化と制御工学

ACCは2000年代から高級車を中心に実用化が進み、現在では多くの車種に標準装備またはオプションとして搭載されています。この技術の背景には、本記事で解説する状態方程式に基づく制御理論が応用されています。

ACCシステムでは、以下の要素が重要な役割を果たします:

  • センシング技術:レーダーやカメラを用いた前方車両の検出と距離測定
  • 制御アルゴリズム:車間距離と速度を適切に制御するための状態フィードバック制御
  • アクチュエータ:スロットルやブレーキの自動制御

車両追従制御の制御目標

ACCにおける車両追従制御では、主に以下の2つの制御目標を同時に達成する必要があります:

1. 速度制御
前方に車両がいない場合は、ドライバーが設定した目標速度 v_rで走行します。

2. 車間距離制御
前方に車両がいる場合は、安全な車間距離 dを維持しながら追従走行します。車間距離は通常、速度に応じて変化する「車間時間」(Time Headway)で管理されます。

実用的な車間距離設定
実際のACCシステムでは、車間時間として1.0秒~2.5秒程度の範囲で設定可能なものが多く、高速道路では約30m~50m程度の車間距離に相当します。

本記事では、ACCの基礎となる車両追従制御を、制御工学の観点から以下の流れで解説します:

  1. 状態方程式によるモデル化の方法
  2. システムの可制御性の確認
  3. 状態フィードバック制御則の設計
  4. MATLABを用いたシミュレーション

これらの理論は、ACCだけでなく、隊列走行制御や自動運転システムなど、より高度な車両制御技術の基礎となっています。

関連する制御技術

ビークル追従制御は、以下のような先進技術にも応用されています:

  • 隊列走行(Platooning):複数の車両が協調して一定の車間距離を保ちながら走行
  • 自動運転(Autonomous Driving):レベル2以上の自動運転における基本機能
  • 協調型ACC(Cooperative ACC)車車間通信を活用した高度な追従制御

これらの応用技術についても、状態方程式に基づく制御理論が中心的な役割を果たしています。

MATLABコードは以下の通りです。

global A B
 
A = [0 1 0 0;
     0 0 0 0;
     0 0 0 1;
     0 0 0 0];
     
B = [0 0;
     1 0;
     0 0;
     0 1];
 
Vo = [B, A*B, A^2*B, A^3*B]
rank(Vo)
 
x_syoki = [5;9;0;0];  % 初期値
 
[t,x] = ode45(@main, 0:0.01:10, x_syoki);

figure(1)
plot(t, x(:,1), 'k-', 'LineWidth', 2)
hold on
plot(t, x(:,3), 'k-', 'LineWidth', 2)
xlabel('車両1と車両2の位置')

figure(2)
plot(t, x(:,2), 'k-', 'LineWidth', 2)
hold on
plot(t, x(:,4), 'k-', 'LineWidth', 2)
xlabel('車両1と車両2の速度')

figure(3)
plot(t, x(:,1)-x(:,3), 'k-', 'LineWidth', 2)
xlabel('車両1と車両2の車間距離')

function xd = main(t, x)
    global A B
    % 速度目標値 v_r = 10, 車間距離目標値 d = -5
    u = [0 -1 0 0; 1 1 -1 -1]*x + [10; -5];
    ax = A*x + B*u;
    xd = zeros(4,1);
    xd(1) = ax(1);
    xd(2) = ax(2);
    xd(3) = ax(3);
    xd(4) = ax(4);
end

以降では、個別要素について説明を行います。

状態方程式とは

状態方程式はシステムのダイナミクスを表現する数学的手法で、システムの内部状態の時間変化を記述します。状態方程式は次の形式で表されます:

\begin{equation}\frac{dx}{dt} = Ax + Bu\end{equation}

\begin{equation}y = Cx + Du\end{equation}

ここで、x状態ベクトルuは制御入力、yは制御出力です  A, B, C, D  はそれぞれシステムを特徴づける行列・ベクトルです。

状態方程式

ビークル追尾制御のモデル化

ビークル追尾制御では、先行車両と後続車両の位置と速度を状態変数として使用します。今回のモデルでは、2台の車両の位置と速度を状態量として扱います:

  • x(1): 車両1の位置
  • x(2): 車両1の速度
  • x(3): 車両2の位置
  • x(4): 車両2の速度

システム行列 A と B は次のように定義されます:

A = [0 1 0 0;
     0 0 0 0;
     0 0 0 1;
     0 0 0 0];
     
B = [0 0;
     1 0;
     0 0;
     0 1];

この状態方程式の物理的意味は以下の通りです:

  • 位置の時間微分は速度
  • 速度の時間微分は加速度(制御入力)

システムの可制御性

システムが可制御であるか確認するために、可制御性行列を計算します:

Vo = [B, A*B, A^2*B, A^3*B]
rank(Vo)

可制御性行列のランクがシステムの次数(今回は4)と等しければ、システムは可制御です。これにより、適切な制御入力を設計して所望の目標状態に到達できることが保証されます。

可制御性はシステム制御において非常に重要な概念です。システムが可制御であれば、任意の初期状態から任意の目標状態へ有限時間内に到達させることが可能です。

制御則と追尾制御のシミュレーション

ここでは、車両1と車両2の追尾制御をシミュレーションします。目標は以下の通りです:

  • 速度目標値: v_r = 10
  • 車間距離目標値: d = -5(車両1が車両2より5単位前方)

状態フィードバック制御則を用いて制御入力を設計します。図に制御概要を示します。

制御則の概要

 

global A B
 
A = [0 1 0 0;0 0 0 0;0 0 0 1;0 0 0 0];
B = [0 0;1 0;0 0;0 1];
 
Vo = [B, A*B, A^2*B, A^3*B]
rank(Vo)
 
x_syoki = [5;9;0;0];%初期値
[t,x]=ode45(@main,0:0.01:10,x_syoki);
figure(1)
plot(t,x(:,1),'k-','LineWidth',2)
hold on
plot(t,x(:,3),'k-','LineWidth',2)
xlabel('車両1と車両2の位置')
figure(2)
plot(t,x(:,2),'k-','LineWidth',2)
hold on
plot(t,x(:,4),'k-','LineWidth',2)
xlabel('車両1と車両2の速度')
figure(3)
plot(t,x(:,1)-x(:,3),'k-','LineWidth',2)
xlabel('車両1と車両2の車間距離')
function xd = main(t,x)
global A B
% 速度目標値v_r = 10, 車間距離目標値d = -5;
u = [0 -1 0 0;1 1 -1 -1]*x+[10;-5];
ax = A*x + B*u;
xd=zeros(4,1);
xd(1) = ax(1);
xd(2) = ax(2);
xd(3) = ax(3);
xd(4) = ax(4);
end

このコードでは、初期状態 x_syoki = [5;9;0;0] から始まり、状態フィードバック制御則 u = [0 -1 0 0;1 1 -1 -1]*x+[10;-5] を使用して両車両を制御します。一定車間距離での走行が実現できていることが確認できます。

シミュレーション結果の解釈

シミュレーションを実行すると、車両の位置、速度、および車間距離のグラフが生成されます。これらのグラフから、以下のような情報を読み取ることができます:

  • 車両の位置の時間推移:両車両が初期位置から同じ方向に移動していく様子
  • 車両の速度の時間推移:徐々に目標速度(10)に収束していく様子
  • 車間距離の時間推移:徐々に目標車間距離(-5)に収束していく様子

前方車両の挙動(運動)

後方車両の挙動(ACCの結果)

動画でも同じ数値例で説明を行っています。走行アニメーションもあります。

youtu.be

最適レギュレータとの関連性

このようなビークル追尾制御は、最適レギュレータ(LQR制御)の枠組みで設計することも可能です。最適レギュレータでは、状態と制御入力に対する二次形式の評価関数を最小化するような制御則を導出します:

\begin{equation}J = \int (x^T Q x + u^T R u) dt\end{equation}

ここで、Q と R は重み行列で、それぞれ状態と制御入力の重要性を表します。

最適レギュレータによる設計では、リカッチ方程式を解くことによって最適なフィードバックゲインを求めることができます。MATLABでは lqr 関数を使って簡単に実装できます。

まとめ

状態方程式に基づくビークル追尾制御は、複数の車両の協調動作を実現する上で重要な役割を果たします。状態フィードバック制御や最適レギュレータといった現代制御理論の手法を用いることで、安定した追尾性能を達成できます。さらに、このような制御手法は自動運転技術の基盤となる重要な要素技術でもあります。

参考文献

  1. 岡島寛, 「状態方程式表現(状態空間実現)」, 制御工学ブログ
  2. 岡島寛, 「最適レギュレータの状態フィードバック制御構造」, 制御工学ブログ