最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

robotics.PurePursuit

一連の中間点に追従するコントローラーの作成

説明

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

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

メモ

R2016b 以降では、System object によって定義された演算を実行するために、step メソッドを使用する代わりに、引数を指定して関数であるかのようにそのオブジェクトを呼び出すことができます。たとえば、y = step(obj,x)y = obj(x) は同等の演算を実行します。

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

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

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

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

作成

説明

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

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

例: controller = robotics.PurePursuit('DesiredLinearVelocity', 0.5)

プロパティ

すべて展開する

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

データ型: double

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

データ型: double

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

データ型: double

中間点。[x y] ペアの n 行 2 列の配列として指定します。n は中間点の数です。中間点は、PRM クラスから、または別のソースから生成できます。

データ型: double

使用法

説明

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

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

入力引数

すべて展開する

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

出力引数

すべて展開する

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

データ型: 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 メソッドを使用して、PurePursuit オブジェクトに関する詳細を取得します。info は、RobotPoseLookaheadPoint の 2 つのフィールドを返しますが、これらはロボットの現在の位置と向き、およびオブジェクトの最後の呼び出しからの出力を計算する際に使用するパス上の点に対応します。

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

pp = robotics.PurePursuit;

中間点を割り当てます。

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]

拡張機能

R2015a で導入