Main Content

so3

    説明

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

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

    Rx(ϕ)=[1000cosϕsinϕ0sinϕcosϕ], Ry(ψ)=[cosψ0sinψ010sinψ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(quaternion) は、四元数 quaternion で定義された回転から SO(3) 回転を作成します。

    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 を中心とした回転 angles から 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ϕ0sinϕcosϕ], Ry(ψ)=[cosψ0sinψ010sinψ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ϕ0sinϕcosϕ]

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

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

    すべて折りたたむ

    オイラー角で定義された 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++ コードを生成します。

    バージョン履歴

    R2022b で導入

    すべて展開する

    参考

    関数

    オブジェクト