Main Content

controllerPurePursuit

一連のウェイポイントに追従するコントローラーの作成

R2019b 以降

説明

controllerPurePursuit System object™ は、差動駆動型ビークルを一連のウェイポイントに追従させるコントローラー オブジェクトを作成します。このオブジェクトは、現在の姿勢を基に、ビークルの線形速度と角速度を計算します。更新された姿勢を使用してオブジェクトを連続して呼び出すと、更新された速度コマンドがビークルに提供されます。MaxAngularVelocity プロパティと DesiredLinearVelocity プロパティを使用して、ビークルのパフォーマンスに基づいて速度を更新します。

LookaheadDistance プロパティは、パス上の前方注視点を計算します。これはビークルの局所的なゴールの 1 つです。角速度コマンドはこの点に基づいて計算されます。LookaheadDistance を変更すると、アルゴリズムのパフォーマンスに大きく影響します。前方注視距離を大きくすると、ビークルの軌跡は滑らかになりますが、ビークルがパスに沿って近道をする可能性があります。前方注視距離を小さくすると、パスを追跡する際に振動が発生し、動作が不安定になる可能性があります。単純追跡アルゴリズムの詳細については、単純追跡コントローラーを参照してください。

線形速度と角速度の制御コマンドを計算するには、次を行います。

  1. controllerPurePursuit オブジェクトを作成して、そのプロパティを設定します。

  2. 関数と同様に、引数を指定してオブジェクトを呼び出します。

System object の機能の詳細については、System object とはを参照してください。

作成

説明

controller = controllerPurePursuit は、単純追跡アルゴリズムを使用して差動駆動型ビークルの線形速度と角速度の入力を計算する、単純追跡オブジェクトを作成します。

controller = controllerPurePursuit(Name,Value) は、1 つ以上の Name,Value ペアによって指定された追加オプションを使用して、単純追跡オブジェクトを作成します。Name はプロパティ名で、Value は対応する値です。Name は一重引用符 (' ') で囲まなければなりません。名前と値のペアの引数を複数、任意の順序で、Name1,Value1,...,NameN,ValueN のように指定できます。指定されていないプロパティでは既定値が保持されます。

例: controller = controllerPurePursuit('DesiredLinearVelocity', 0.5)

プロパティ

すべて展開する

目的の定数線形速度。スカラー (メートル/秒単位) として指定します。コントローラーは、ビークルが定数線形速度で走行し、計算された角速度は線形速度に依存しないと仮定します。

データ型: double

前方注視距離。スカラー (メートル単位) として指定します。前方注視距離によって、コントローラーの応答が変わります。前方注視距離の大きいビークルは滑らかなパスを形成しますが、コーナーでの曲がりが大きくなります。前方注視距離の小さいビークルは、パスに厳密に追従して鋭角で曲がりますが、パスが振動する可能性があります。

データ型: double

最大角速度。スカラー (ラジアン/秒単位) として指定します。コントローラーは、指定された値で絶対角速度出力を飽和します。

データ型: double

ウェイポイント。[x y] ペアを n 行 2 列の配列として指定します。n はウェイポイントの数です。ウェイポイントは、mobileRobotPRM クラスから、または他のソースから生成できます。

データ型: double

使用法

説明

[vel,angvel] = controller(pose) は、ビークルの位置と向き pose を処理して、線形速度 vel と角速度 angvel を出力します。

[vel,angvel,lookaheadpoint] = controller(pose) は前方注視点を返します。これは、速度コマンドの計算に使用するパス上の場所です。パス上の場所は、controller オブジェクト上で LookaheadDistance プロパティを使用して計算されます。

入力引数

すべて展開する

ビークルの位置と向き。[x y theta] 形式の 3 行 1 列のベクトルとして指定します。ビークルの姿勢は、x および y の位置と、x 軸から測定された角度方向 θ (ラジアン単位) です。

出力引数

すべて展開する

線形速度。スカラー (メートル/秒単位) として指定します。

データ型: double

角速度。スカラー (ラジアン/秒単位) として指定します。

データ型: double

パス上の前方注視点。[x y] ベクトルとして返されます。この値は、LookaheadDistance プロパティに基づいて計算されます。

オブジェクト関数

オブジェクト関数を使用するには、System object を最初の入力引数として指定します。たとえば、obj という名前の System object のシステム リソースを解放するには、以下の構文を使用します。

release(obj)

すべて展開する

infoCharacteristic information about controllerPurePursuit object
stepSystem object のアルゴリズムの実行
releaseリソースを解放し、System object のプロパティ値と入力特性の変更を可能にします。
resetSystem object の内部状態のリセット

すべて折りたたむ

info メソッドを使用して、controllerPurePursuit オブジェクトに関する詳細情報を取得します。関数 infoRobotPoseLookaheadPoint の 2 つのフィールドを返します。これらのフィールドは、ロボットの現在の位置と向き、およびオブジェクトの最後の呼び出しからの出力を計算するときに使用されたパス上の点に対応します。

controllerPurePursuit オブジェクトを作成します。

pp = controllerPurePursuit;

ウェイポイントを割り当てます。

pp.Waypoints = [0 0;1 1];

pp オブジェクトを使用し、初期姿勢 [x y theta] を入力として指定して、制御コマンドを計算します。

[v,w] = pp([0 0 0]);

追加情報を取得します。

s = info(pp)
s = struct with fields:
         RobotPose: [0 0 0]
    LookaheadPoint: [0.7071 0.7071]

拡張機能

バージョン履歴

R2019b で導入