Main Content

lateralControllerStanley

Stanley の手法を使用した、パス追従のためのステアリング角度コマンドの計算

説明

steerCmd = lateralControllerStanley(refPose,currPose,currVelocity) は、車両の現在の速度と方向が与えられたときに、車両の現在の姿勢が参照姿勢に一致するように調整するステアリング角度コマンドを度単位で計算します。既定では、この関数は車両が前進運動していると想定します。

コントローラーは、Stanley の手法[1]を使用してステアリング角度コマンドを計算します。この制御則は、運動学的二輪モデルに基づきます。このコントローラーを、慣性の影響が最小の低速環境におけるパス追従用に使用します。

steerCmd = lateralControllerStanley(refPose,currPose,currVelocity,Name,Value) は、1 つ以上の名前と値のペアを使用してオプションを指定します。たとえば、lateralControllerStanley(refPose,currPose,currVelocity,'Direction',-1) は、後退運動している車両のステアリング角度コマンドを計算します。

すべて折りたたむ

車両の現在の姿勢を運転パスに沿った参照姿勢に合わせて調整するステアリング角度コマンドを計算します。車両は前進運動しています。

この例では、単一のステアリング角度コマンドを計算します。パス追従アルゴリズムで、車両の姿勢と速度の変化に伴い、ステアリング角度を連続的に計算します。

パス上の参照姿勢を設定します。姿勢の位置は (4.8 m, 6.5 m) で、方向角度は 2 度です。

refPose = [4.8, 6.5, 2]; % [meters, meters, degrees]

車両の現在の姿勢を設定します。姿勢の位置は (2 m, 6.5 m) で、方向角度は 0 度です。車両の現在の速度を、秒速 2 メートルに設定します。

currPose = [2, 6.5, 0]; % [meters, meters, degrees]
currVelocity = 2; % meters per second

ステアリング角度コマンドを計算します。車両を参照姿勢と一致させるためには、ステアリング ホイールを反時計回りに 2 度回す必要があります。

steerCmd = lateralControllerStanley(refPose,currPose,currVelocity)
steerCmd = 2.0000

車両の現在の姿勢を運転パスに沿った参照姿勢に合わせて調整するステアリング角度コマンドを計算します。車両は後退運動しています。

この例では、単一のステアリング角度コマンドを計算します。パス追従アルゴリズムで、車両の姿勢と速度の変化に伴い、ステアリング角度を連続的に計算します。

パス上の参照姿勢を設定します。姿勢の位置は (5 m, 9 m) で、方向角度は 90 度です。

refPose = [5, 9, 90]; % [meters, meters, degrees]

車両の現在の姿勢を設定します。姿勢の位置は (5 m, 10 m) で、方向角度は 75 度です。

currPose = [5, 10, 75]; % [meters, meters, degrees]

車両の現在の速度を、秒速 –2 メートルに設定します。車両は後退運動しているため、速度は負にする必要があります。

currVelocity = -2; % meters per second

ステアリング角度コマンドを計算します。車両を参照姿勢と一致させるためには、ステアリング ホイールを時計回りに 15 度回す必要があります。

steerCmd = lateralControllerStanley(refPose,currPose,currVelocity,'Direction',-1)
steerCmd = -15.0000

入力引数

すべて折りたたむ

参照姿勢。[x, y, Θ] ベクトルとして指定します。x と y の単位はメートル、Θ の単位は度です。

x と y は、車両の進行方向の基準点を指定します。Θ はこの基準点におけるパスの方向角度を指定し、反時計回りの方向が正です。

  • 前進運動の車両の場合、この基準点は車両の前車軸の中心に最も近いパス上の点です。

    Vehicle in forward motion with reference point on path marked. Units are in world coordinates.

  • 後退運動の車両の場合、この基準点は車両の後車軸の中心に最も近いパス上の点です。

    Vehicle in reverse motion with reference point on path marked. Units are in world coordinates.

データ型: single | double

車両の現在の姿勢。[x, y, Θ] ベクトルとして指定します。x と y の単位はメートル、Θ の単位は度です。

x と y は、車両の位値を指定します。これは、車両の後車軸の中心として定義されます。

Θ は、位置 (x、y) における車両の方向角度を指定し、反時計回りの方向が正です。

Vehicle with pose marked. Units are in world coordinates.

車両の姿勢の詳細については、Automated Driving Toolbox の座標系を参照してください。

データ型: single | double

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

  • 前進運動の車両の場合、この値は 0 より大きくなければなりません。

  • 後退運動の車両の場合、この値は 0 より小さくなければなりません。

  • 値 0 は、車両が運動していないことを表します。

データ型: single | double

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名、Value は対応する値です。名前と値の引数は他の引数の後に表示されなければなりませんが、ペアの順序は重要ではありません。

R2021a より前は、名前と値をそれぞれコンマを使って区切り、Name引用符で囲みます。

例: 'MaxSteeringAngle',25

車両の走行方向。'Direction'1 (前進運動の場合) または -1 (後退運動の場合) で構成されるコンマ区切りのペアとして指定します。走行方向により、ステアリング角度コマンドの計算に使用される位置誤差と角度誤差が決まります。詳細については、アルゴリズムを参照してください。

車両の位置ゲイン。'PositionGain' と正の実数スカラーで構成されるコンマ区切りのペアとして指定します。この値により、位置誤差がステアリング角度に影響する程度が決まります。一般的な値は範囲 [1, 5] にあります。ステアリング角度を大きくするには、この値を増加します。

車両の前後の車軸間の距離 (メートル単位)。'Wheelbase' と実数スカラーで構成されるコンマ区切りのペアとして指定します。この値は、車両が前進運動している場合にのみ適用されます。

車両の最大許容ステアリング角度 (度単位)。'MaxSteeringAngle' と範囲 (0, 180) の実数スカラーで構成されるコンマ区切りのペアとして指定します。

steerCmd の値は範囲 [-MaxSteeringAngle, MaxSteeringAngle] に飽和します。

  • -MaxSteeringAngle より小さい値は -MaxSteeringAngle に設定されます。

  • MaxSteeringAngle より大きい値は MaxSteeringAngle に設定されます。

出力引数

すべて折りたたむ

ステアリング角度コマンド (度単位)。実数スカラーとして返されます。この値は、反時計回りの方向が正です。

Vehicle with front wheels turned and steering angle marked

詳細については、Automated Driving Toolbox の座標系を参照してください。

アルゴリズム

ステアリング角度コマンドを計算するために、コントローラーは参照姿勢を基準とする現在の姿勢の位置誤差と角度誤差を最小にします。車両の走行方向によってこれらの誤差の値が決まります。

車両が前進運動している場合 ('Direction' の名前と値のペアが 1 の場合) は次のとおりです。

  • "位置誤差" は、車両の前車軸の中心からパス上の基準点までの横方向の距離です。

  • "角度誤差" は、参照パスを基準とした前輪の角度です。

車両が後退運動している場合 ('Direction' の名前と値のペアが -1 の場合) は次のとおりです。

  • "位置誤差" は、車両の後車軸の中心からパス上の基準点までの横方向の距離です。

  • "角度誤差" は、参照パスを基準とした後輪の角度です。

コントローラーがこれらの誤差を最小にする方法の詳細については、[1]を参照してください。

参照

[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. 2007, pp. 2296–2301. doi:10.1109/ACC.2007.4282788

拡張機能

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

バージョン履歴

R2018b で導入