Main Content

so3

SO(3) 회전

R2022b 이후

    설명

    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) 회전을 만듭니다.

    참고

    입력값이 2개 이상의 회전을 포함하는 경우 출력값 rotationso3 객체 요소를 N개 가진 배열이며 각각은 N개의 입력 회전에 대응됩니다.

    입력 인수

    모두 확장

    정규 직교 회전으로, 3×3 행렬, 3×3×N 배열, 스칼라 so3 객체 또는 so3 객체 요소를 N개 가진 배열로 지정됩니다. 여기서 N은 총 회전 개수입니다.

    rotation이 배열인 경우 그 결과로 출력 배열에 생성된 so3 객체의 개수는 N과 같습니다.

    예: eye(3)

    동차 변환으로, 3×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 인수로 정의된 축-회전 시퀀스를 갖는 하나의 오일러 각 세트를 표현합니다. 디폴트 축-회전 시퀀스는 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]입니다. 여기서 qw는 스칼라 숫자입니다.

    quat가 N×4 행렬인 경우 그 결과로 생성된 so3 객체의 개수는 N과 같습니다.

    참고

    so3 객체는 입력 쿼터니언을 정규화한 다음 쿼터니언을 회전 행렬로 변환합니다.

    예: [0.7071 0.7071 0 0]

    데이터형: single | double

    축-각도 회전으로, N×4 행렬로 지정되며 [x y z theta] 형식을 가집니다. 여기서 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, *Transformation or rotation multiplication
    mrdivide, /Transformation or rotation right division
    rdivide, ./변환 또는 회전의 요소별 오른쪽 나눗셈
    times, .*변환 또는 회전의 요소별 곱셈
    interpInterpolate between transformations
    distCalculate distance between transformations
    normalize변환 또는 회전 행렬의 정규화
    transformApply rigid body transformation to points
    axangConvert transformation or rotation into axis-angle rotations
    eulConvert transformation or rotation into Euler angles
    rotm회전 행렬 추출
    quatConvert transformation or rotation to numeric quaternion
    trvec평행 이동 벡터 추출
    tform동차 변환 추출
    xyzquatConvert transformation or rotation to compact 3-D pose representation
    se3SE(3) 동차 변환
    quaternion쿼터니언 배열 생성

    예제

    모두 축소

    오일러 각으로 정의되는 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에 개발됨

    모두 확장