メインコンテンツ

so3

R2026b

    説明

    so3 オブジェクトは、右手直交座標系の 3 次元の SO(3) 回転を表します。

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

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

    詳細については、3 次元の正規直交回転行列のセクションを参照してください。

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

    作成

    説明

    3 次元回転表現

    rotation = so3 は、並進のない恒等回転を表す SO(3) 回転を作成します。

    rotation=[100010001]

    rotation = so3(rotation) は、正規直交回転 rotation によって定義される純粋な回転を表す SO(3) 回転を作成します。

    rotation=[r11r12r13r11r22r23r31r32r33]

    rotation = so3(transformation) は、SE(3) 変換 transformation から SO(3) 回転を作成します。

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

    rotation = so3(euler,"eul") は、オイラー角 euler で定義された回転から SO(3) 回転を作成します。

    例

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

    rotation = so3(quat,"quat") は、四元数 quat で定義された回転から SO(3) 回転を作成します。

    rotation = so3(axang,"axang") は、軸角度回転 axang で定義された回転から SO(3) 回転を作成します。

    rotation = so3(angle,axis) は、回転軸 axis を中心とした回転 angle から SO(3) 回転を作成します。

    メモ

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

    入力引数

    すべて展開する

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

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

    例: eye(3)

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

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

    例: eye(4)

    データ型: single | double

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

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

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

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

    euler が N 行 3 列の行列の場合、作成される so3 オブジェクトの結果の数は 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ϕ0−sinϕcosϕ], Ry(ψ)=[cosψ0sinψ010−sinψ0cosψ], Rz(θ)=[cosθ−sinθ0sinθcosθ0001]

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

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

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

    データ型: string | char

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

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

    メモ

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

    例: [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 列の行列の場合、作成される so3 オブジェクトの結果の数は N に等しくなります。

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

    データ型: single | double

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

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

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

    データ型: single | double

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

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

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

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

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

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

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

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

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

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

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

    データ型: string | char

    オブジェクト関数

    すべて展開する

    mtimes, *Transformation or rotation multiplication
    mrdivide, /Transformation or rotation right division
    rdivide, ./Element-wise transformation or rotation right division
    times, .*Element-wise transformation or rotation multiplication
    interpInterpolate between transformations
    distCalculate distance between transformations
    normalizeNormalize transformation or rotation matrix
    transformApply rigid body transformation to points
    axang変換または回転を軸角度回転に変換する
    eulConvert transformation or rotation into Euler angles
    rotmExtract rotation matrix
    quatConvert transformation or rotation to numeric quaternion
    trvec並進ベクトルを抽出する
    tformExtract homogeneous transformation
    xyzquatConvert transformation or rotation to compact 3-D pose representation
    se3SE(3) 同次変換
    quaternionCreate quaternion array

    例

    すべて折りたたむ

    オイラー角で定義された SO(3) 回転を作成します。

    eul1 = [pi/4 pi/3 pi/8]
    eul1 = 1×3
    
        0.7854    1.0472    0.3927
    
    
    R = so3(eul1,"eul")
    R = so3
        0.3536   -0.4189    0.8364
        0.3536    0.8876    0.2952
       -0.8660    0.1913    0.4619
    
    

    変換からオイラー角を取得します。

    eul2 = eul(R)
    eul2 = 1×3
    
        0.7854    1.0472    0.3927
    
    

    アルゴリズム

    すべて展開する

    拡張機能

    すべて展開する

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

    GPU コード生成
    GPU Coder™ を使用して NVIDIA® GPU のための CUDA® コードを生成します。

    バージョン履歴

    R2026b で導入

    参考

    オブジェクト