Main Content

Longitudinal Controller Stanley

Stanley の手法を使用した、車両の縦方向速度の制御

R2019a 以降

  • Longitudinal Controller Stanley block

ライブラリ:
Automated Driving Toolbox / Vehicle Control

説明

Longitudinal Controller Stanley ブロックは、車両の速度を制御する加速コマンドと減速コマンドをメートル/秒単位で計算します。基準速度、現在の速度、および現在の走行方向を指定します。コントローラーは、これらのコマンドを計算するために、Stanley の手法[1]を使用します。この手法は、積分アンチワインドアップを使用した離散比例-積分 (PI) コントローラーとしてブロックによって実装されます。詳細については、アルゴリズムを参照してください。

また、Stanley の手法を使用して、車両のステアリング角度コマンドを計算することもできます。Lateral Controller Stanley ブロックを参照してください。

端子

入力

すべて展開する

基準速度 (メートル/秒単位)。実数のスカラーとして指定します。

車両の現在の速度 (メートル/秒単位)。実数のスカラーとして指定します。

車両の走行方向。前進運動は 1、後退運動は -1 として指定します。

速度誤差 e(k) の積分をゼロにリセットするためのトリガー。値 0 は e(k) の状態を保持します。非ゼロ値は e(k) をリセットします。

出力

すべて展開する

加速コマンド。範囲 [0, MA] の実数スカラーとして返されます。ここで、MA[縦方向の最大加速度 (m/s^2)] パラメーターの値です。

減速コマンド。範囲 [0, MD] の実数スカラーとして返されます。ここで、MD[縦方向の最大減速度 (m/s^2)] パラメーターの値です。

パラメーター

すべて展開する

コントローラーの比例ゲイン Kp。正の実数スカラーとして指定します。

コントローラーの積分ゲイン Ki。正の実数スカラーとして指定します。

コントローラーのサンプル時間 (秒単位)。正の実数スカラーとして指定します。

縦方向の最大角速度 (メートル毎秒毎秒単位)。正の実数スカラーとして指定します。

このブロックは、[AccelCmd] からの出力を範囲 [0, MA] に飽和させます。ここで、MA はこのパラメーターの値です。MA より大きい値は MA に設定されます。

縦方向の最大減速度 (メートル毎秒毎秒単位)。正の実数スカラーとして指定します。

このブロックは、[DecelCmd] 端子からの出力を範囲 [0, MD] に飽和させます。ここで、MD はこのパラメーターの値です。MD より大きい値は MD に設定されます。

アルゴリズム

Longitudinal Controller Stanley ブロックは、PID Controller ブロックのアンチワインドアップ手法 (Simulink)パラメーターで記述されているように、積分アンチワインドアップを使用した離散比例-積分 (PI) コントローラーを実装します。このブロックは、次の方程式を使用します。

u(k)=(Kp+KiTszz1)e(k)

  • u(k) は、k 番目のタイム ステップにおける制御信号です。

  • Kp は、[比例ゲイン、Kp] パラメーターで設定されている比例ゲインです。

  • Ki は、[積分ゲイン、Ki] パラメーターで設定されている積分ゲインです。

  • Ts は、[サンプル時間 (s)] パラメーターで設定されているブロックのサンプル時間 (秒単位) です。

  • e(k) は、k 番目のタイム ステップにおける速度誤差 ([CurrVelocity][RefVelocity]) です。各 k で、この誤差は現在の速度入力と基準速度入力の差 ([CurrVelocity][RefVelocity]) と等しくなります。

制御信号 u によって、加速コマンド [AccelCmd] および減速コマンド [DecelCmd] の値が決まります。このブロックは、加速コマンドおよび減速コマンドをそれぞれ範囲 [0, MA] および [0, MD] に飽和させます。ここで、

  • MA は、[縦方向の最大加速度 (m/s^2)] パラメーターの値です。

  • MD は、[縦方向の最大減速度 (m/s^2)] パラメーターの値です。

各タイム ステップで、[AccelCmd] 端子と [DecelCmd] 端子のどちらか一方の値のみが正で、もう一方の端子の値は 0 です。つまり、車両は 1 つのタイム ステップで加速または減速できますが、一度に両方を行うことはできません。

[Direction] 入力端子で指定されている運動方向によって、特定のタイム ステップでどちらのコマンドが正なのかが決まります。

Direction 端子の値制御信号値 u(k)AccelCmd 端子の値DecelCmd 端子の値説明
1 (前進運動)

u(k) > 0

正の実数スカラー0車両は前進するにつれて加速

u(k) < 0

0正の実数スカラー車両は前進するにつれて減速
-1 (後退運動)

u(k) > 0

0正の実数スカラー車両は後退するにつれて減速

u(k) < 0

正の実数スカラー0車両は後退するにつれて加速

参照

[1] Hoffmann, Gabriel M., Claire J. Tomlin, Michael Montemerlo, and Sebastian Thrun. "Autonomous Automobile Trajectory Tracking for Off-Road Driving: Controller Design, Experimental Validation and Racing." American Control Conference. August 2007, pp. 2296–2301. doi:10.1109/ACC.2007.4282788.

拡張機能

C/C++ コード生成
Simulink® Coder™ を使用して C および C++ コードを生成します。

バージョン履歴

R2019a で導入