Main Content

transformtraj

2 つの変換の間の軌跡を生成

説明

[tforms,vel,acc] = transformtraj(T0,TF,tInterval,tSamples) は、2 つの同次変換 T0TF の間に時間間隔と与えられた時間サンプルに基づいて点を内挿する軌跡を生成します。

[tforms,vel,acc] = transformtraj(T0,TF,tInterval,tSamples,Name=Value) は、名前と値の引数を使用して追加のパラメーターを指定します。

すべて折りたたむ

2 つの向きと位置から変換を作成します。内挿する時間間隔と時間のベクトルを指定します。

t0 = axang2tform([0 1 1 pi/4])*trvec2tform([0 0 0]);
tF = axang2tform([1 0 1 6*pi/5])*trvec2tform([1 1 1]);
tInterval = [0 1];
tvec = 0:0.01:1;

点の間を内挿します。plotTransformsを使用して軌跡をプロットします。変換を四元数の回転と線形遷移に変換します。Figure に座標系のすべての中間変換が表示されます。

[tfInterp, v1, a1] = transformtraj(t0,tF,tInterval,tvec);

rotations = tform2quat(tfInterp);
translations = tform2trvec(tfInterp);

plotTransforms(translations,rotations)
xlabel('X')
ylabel('Y')
zlabel('Z')

Figure contains an axes object. The axes object with xlabel X, ylabel Y contains 404 objects of type patch, line.

最初の変換を軸角度回転から構築し、最終変換を軸角度回転と並進の両方から構築します。

t0 = se3([0 1 1 pi/4],"axang");
tF = se3([1 0 1 6*pi/5],"axang")*se3([1 1 1],"trvec"); 

内挿する時間間隔と時間のベクトルを指定します。

tInterval = [0 1];
tvec = 0:0.01:1; 

同次変換の間を内挿します。plotTransforms を使用して軌跡をプロットします。

[tfInterp] = transformtraj(t0,tF,tInterval,tvec); 
plotTransforms(tfInterp(1:10:end))

Figure contains an axes object. The axes object contains 44 objects of type patch, line.

入力引数

すべて折りたたむ

初期変換。4 行 4 列の同次変換またはスカラーの se3 オブジェクトとして指定します。関数は、初期変換 T0 から始まって最終変換 TF まで進む軌跡を生成します。

T0TF は同じ型でなければなりません。たとえば、T0 がスカラーの se3 オブジェクトの場合、TF はスカラーの se3 オブジェクトでなければなりません。

データ型: single | double

最終変換。4 行 4 列の同次変換またはスカラーの se3 オブジェクトとして指定します。関数は、初期変換 T0 から始まって最終変換 TF まで進む軌跡を生成します。

T0TF は同じ型でなければなりません。たとえば、T0 がスカラーの se3 オブジェクトの場合、TF はスカラーの se3 オブジェクトでなければなりません。

データ型: single | double

軌跡の開始時間と終了時間 (秒単位)。2 要素ベクトルとして指定します。

例: [0 10]

データ型: single | double

軌跡の時間サンプル (秒単位)。m 要素ベクトルとして指定します。

例: 0:0.01:10

データ型: single | double

名前と値の引数

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

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

例: TimeScaling=[0 1 1; 0 1 0; 0 0 0]

時間スケーリング ベクトルと最初の 2 つの微分。3 行 m 列のベクトルとして指定します。ここで、m は tSamples の長さです。既定では、時間スケーリングは tInterval の時間点間の線形時間スケーリングです。

非線形時間スケーリングの場合は、時間点の値を 1 行目で位置時間スケーリングとして指定します。2 行目と 3 行目は、それぞれ最初の行の 1 階微分および 2 階微分です (1/s と 1/s2)。たとえば、パスに中間点まで線形速度で追従した後に最後までジャンプする場合、時間スケーリングは次のようになります。

s(1,:) = [0 0.25 0.5 1 1 1] % Position time scaling, s(t)
s(2,:) = [1    1   1 0 0 0] % Velocity time scaling, ds/dt
s(3,:) = [0    0   0 0 0 0] % Acceleration time scaling, d^2s/dt^2
最初の行の要素はすべて範囲 [0, 1] 内でなければなりません。

データ型: single | double

出力引数

すべて折りたたむ

変換の軌跡。4×4×m の同次変換行列の配列または se3 オブジェクトの m 要素配列として返されます。m は tSamples の点の数です。

変換の速度 (m/s 単位)。6 行 m 列の行列として返されます。ここで、m は tSamples の点の数です。最初の 3 つの要素は角速度で、2 番目の 3 つの要素は時間単位の速度です。

変換の加速度 (m/s2 単位)。6 行 m 列の行列として返されます。ここで、m は tSamples の点の数です。最初の 3 つの要素は角加速度で、2 番目の 3 つの要素は時間単位の加速度です。

参照

[1] Lynch, Kevin M., and Frank C. Park. Modern Robotics: Mechanics, Planning, and Control. Cambridge University Press, 2017.

拡張機能

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

バージョン履歴

R2019a で導入

すべて展開する