Main Content

se3

SE(3) 同次変換

R2022b 以降

    説明

    se3 オブジェクトは、右手直交座標系の並進と回転で構成される 3 次元同次変換行列として SE(3) 変換を表します。

    詳細については、3 次元同次変換行列のセクションを参照してください。

    このオブジェクトは数値行列のように機能し、乗算と除算を使用して姿勢を構成できるようになります。

    作成

    説明

    回転行列、並進ベクトル、および変換行列

    transformation = se3 は、並進のない恒等回転を表す SE(3) 変換を作成します。

    transformation=[1000010000100001]

    transformation = se3(rotation) は、並進のない、正規直交回転 rotation によって定義された純粋な回転を表す SE(3) 変換を作成します。回転行列は、transformation 行列の左上の要素で表されます。

    rotation=[r11r12r13r11r22r23r31r32r33]

    transformation=[r11r12r130r21r22r230r31r32r3300001]

    transformation = se3(rotation,translation) は、正規直交回転 rotation と並進 translation によって定義された回転を表す SE(3) 変換を作成します。関数は、最初に回転行列を適用し、次に並進ベクトルを適用して変換を作成します。

    rotation=[r11r12r13r11r22r23r31r32r33], translation=[t1t2t3]

    transformation=[r11r12r13t1r21r22r23t2r31r32r33t30001]=[100t1010t2001t30001]·[r11r12r130r21r22r230r31r32r3300001]

    transformation = se3(transformation) は、同次変換 transformation で定義された並進と回転を表す SE(3) 変換を作成します。

    その他の 3 次元回転の表現

    transformation = se3(euler,"eul") は、オイラー角 euler によって定義された回転から SE(3) 変換を作成します。

    transformation = se3(euler,"eul",sequence) はオイラー角回転のシーケンス sequence を指定します。たとえば、"ZYX" というシーケンスは、z 軸、y 軸、x 軸の順に回転させます。

    transformation = se3(quat,"quat") は、四元数 quat によって定義された回転から SE(3) 変換を作成します。

    transformation = se3(quaternion) は、四元数 quaternion で定義された回転から SE(3) 変換を作成します。

    transformation = se3(axang,"axang") は、軸角度回転 axang によって定義された回転から SE(3) 変換を作成します。

    transformation = se3(angle,axis) は、回転軸 axis を中心とした回転 angles から SE(3) 変換を作成します。

    transformation = se3(___,translation) は、他のタイプの回転入力引数とともに、並進ベクトル translation から SE(3) 変換を作成します。

    その他の並進と変換の表現

    transformation = se3(translation,"trvec") は、並進ベクトル translation から SE(3) 変換を作成します。

    transformation = se3(pose,"xyzquat") は、3 次元のコンパクトな姿勢 pose から SE(3) 変換を作成します。

    メモ

    入力に複数の回転、並進、または変換が含まれる場合、出力 transformation は、各 N 入力回転、並進、または変換に対応する se3 オブジェクトの N 要素配列になります。

    入力引数

    すべて展開する

    正規直交回転。3 行 3 列の行列、3×3×N の配列、スカラーの so3 オブジェクト、あるいは so3 オブジェクトの N 要素配列として指定します。N は回転の合計数です。

    rotation に複数の回転が含まれており、作成時に translation も指定する場合、translation の並進の数は 1 または rotation の回転数と等しくなくてはなりません。結果として得られる変換オブジェクトの数は、引数 translation または rotation のどちらか大きい方の値と等しくなります。

    例: eye(3)

    データ型: single | double

    並進。3 要素の行ベクトルまたは N 行 3 列の配列として指定します。N は並進の総数で、各並進は [x y z] の形式になります。

    translation に複数の並進が含まれる場合、rotation の回転数は 1 または translation の並進の数に等しくなくてはなりません。結果として作成される変換オブジェクトの数は、引数 translation または rotation のどちらか大きい方の値と等しくなります。

    例: [1 4 3]

    データ型: single | double

    同次変換行列。4 行 4 列の行列または 4×4×N の配列、スカラーの se3 オブジェクト、あるいは se3 オブジェクトの N 要素配列として指定します。N は指定された変換の合計数です。

    transformation が配列の場合、作成される se3 オブジェクトの結果の数は N に等しくなります。

    例: eye(4)

    データ型: single | double

    四元数。スカラーの quaternion オブジェクト、あるいは quaternion オブジェクトの N 要素配列として指定します。N は指定した四元数の合計数です。

    quaternion が N 要素配列の場合、作成される se3 オブジェクトの結果の数は N に等しくなります。

    例: quaternion(1,0.2,0.4,0.2)

    オイラー角。ラジアン単位の N 行 3 列の行列として指定します。各行は、引数 sequence で定義された軸回転シーケンスをもつオイラー角の 1 セットを表します。既定の軸回転シーケンスは ZYX です。

    euler が N 行 3 列の行列の場合、作成される se3 オブジェクトの結果の数は N に等しくなります。

    例: [pi/2 pi pi/4]

    データ型: single | double

    オイラー角の軸回転シーケンス。以下のいずれかの string スカラーとして指定します。

    • "ZYX" (既定)

    • "ZYZ"

    • "ZXY"

    • "ZXZ"

    • "YXY"

    • "YZX"

    • "YXZ"

    • "YZY"

    • "XYX"

    • "XYZ"

    • "XZX"

    • "XZY"

    これらは、それぞれ x 軸、y 軸、および z 軸を中心とした ϕ、ψ、θ の回転の正規直交回転行列です。

    Rx(ϕ)=[1000cosϕsinϕ0sinϕcosϕ], Ry(ψ)=[cosψ0sinψ010sinψ0cosψ], Rz(θ)=[cosθsinθ0sinθcosθ0001]

    このシーケンスから回転行列を作成する際に、それぞれの文字は対応する軸を示します。たとえば、シーケンスが "XYZ" の場合、se3 オブジェクトは、x 軸を中心とした回転と y 軸を中心とした回転を乗算し、その積と z 軸を中心とした回転を乗算することによって回転行列 R を作成します。

    R=Rx(ϕ)·Ry(ψ)·Rz(θ)

    例: se3([pi/2 pi/3 pi/4],"eul","ZYZ") は、z 軸を中心に点を pi/4 ラジアンだけ回転し、次にその点を y 軸を中心に pi/3 ラジアンだけ回転してから、その点を z 軸を中心に pi/2 ラジアンだけ回転します。これは、以下の式と等価です。se3(pi/2,"rotz") * se3(pi/3,"roty") * se3(pi/4,"rotz")

    データ型: string | char

    四元数。N 行 4 列の行列として指定します。N は、指定された四元数の数です。各行は [qw qx qy qz] の形式の 1 つの四元数を表します。ここで、qw はスカラー数です。

    quat が N 行 4 列の行列の場合、作成される se3 オブジェクトの結果の数は N に等しくなります。

    メモ

    se3 オブジェクトは、四元数を回転行列に変換する前に、入力四元数を正規化します。

    例: [0.7071 0.7071 0 0]

    データ型: single | double

    軸角度回転。[x y z theta] の形式で N 行 4 列の行列として指定します。N は軸角度回転の総数です。x、y、および z は、それぞれ x 軸、y 軸、z 軸からのベクトル成分です。ベクトルは、角度 theta (ラジアン単位) だけ回転する軸を定義します。

    axang が N 行 4 列の行列の場合、作成される se3 オブジェクトの結果の数は N に等しくなります。

    例: [.2 .15 .25 pi/4] は、x 軸について 0.2、y 軸に沿って 0.15、z 軸に沿って 0.25 として定義された軸を pi/4 ラジアンだけ回転します。

    データ型: single | double

    単一軸角度回転。N 行 M 列の行列として指定します。行列の各要素は、引数 axis を使用して指定された軸を中心としたラジアン単位の角度であり、se3 オブジェクトは角度ごとに se3 オブジェクトを作成します。

    angle が N 行 M 列の行列の場合、作成される se3 オブジェクトの結果の数は N に等しくなります。

    回転角度は、指定軸に沿って原点に向かって見ると、反時計回りが正になります。

    データ型: single | double

    回転軸。次のオプションのいずれかとして指定します。

    • "rotx" — x 軸を中心に回転します。

      Rx(ϕ)=[1000cosϕsinϕ0sinϕcosϕ]

    • "roty" — y 軸を中心に回転します。

      Ry(ψ)=[cosψ0sinψ010sinψ0cosψ]

    • "rotz" — z 軸を中心に回転します。

      Rz(θ)=[cosθsinθ0sinθcosθ0001]

    引数 angle を使用して、指定した軸を中心に回転する量を指定します。

    例: Rx = se3(phi,"rotx");

    例: Ry = se3(psi,"roty");

    例: Rz = se3(theta,"rotz");

    データ型: string | char

    3 次元のコンパクトな姿勢。N 行 7 列の行列として指定します。ここで、N はコンパクトな姿勢の総数です。各行は [x y z qw qx qy qz] 形式の xyz 位置と四元数で構成される姿勢です。x、y、および z はそれぞれ x 軸、y 軸、および z 軸の位置です。qw、qx、qy、および qz は、合わせて四元数回転です。

    pose が N 行 7 列の行列の場合、作成される se3 オブジェクトの結果の数は N に等しくなります。

    データ型: single | double

    オブジェクト関数

    すべて展開する

    mtimes, *変換または回転の乗算
    mrdivide, /変換または回転の右除算
    rdivide, ./要素単位の変換または回転の右除算
    times, .*要素単位の変換または回転の乗算
    interp変換の間で内挿する
    dist変換間の距離を計算する
    normalize変換行列または回転行列を正規化する
    transform剛体変換を点に適用する
    axang変換または回転を軸角度回転に変換する
    eul変換または回転をオイラー角に変換する
    rotm回転行列の抽出
    quat変換または回転を四元数に変換する
    trvec並進ベクトルを抽出する
    tform同次変換の抽出
    xyzquat変換または回転をコンパクトな 3 次元姿勢表現に変換する
    so3SO(3) 回転
    quaternionquaternion 配列の作成

    すべて折りたたむ

    回転シーケンス "XYZ" および "xyz" 並進 [6 4 1] を指定してオイラー角回転 [pi/2 0 pi/7] を定義します。

    angles = [pi/2 0 pi/7];
    trvec = [6 4 1];

    オイラー角と並進を使用して SE(3) 変換を作成します。

    TF = se3(angles,"eul","XYZ",trvec)
    TF = se3
        0.9010   -0.4339         0    6.0000
        0.0000    0.0000   -1.0000    4.0000
        0.4339    0.9010    0.0000    1.0000
             0         0         0    1.0000
    
    

    アルゴリズム

    すべて展開する

    拡張機能

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

    バージョン履歴

    R2022b で導入

    すべて展開する