Main Content

se3

SE(3) 동차 변환

R2022b 이후

    설명

    se3 객체는 SE(3) 변환을 오른손 카테시안 좌표계의 평행 이동과 회전으로 구성된 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) 변환을 만듭니다.

    참고

    입력값에 2개 이상의 회전, 평행 이동 또는 변환이 포함되는 경우 출력값 transformationse3 객체 요소를 N개 가진 배열이며 각각은 N개의 입력 회전, 평행 이동, 변환에 대응됩니다.

    입력 인수

    모두 확장

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

    rotation에 2개 이상의 회전이 포함되고 생성 시점에 translation도 지정한다면, translation의 평행 이동 개수는 1이거나 rotation의 회전 개수와 같아야 합니다. 그 결과로 생성된 변환 객체의 개수는 translation의 값 또는 rotation 인수 중 더 큰 값입니다.

    예: eye(3)

    데이터형: single | double

    평행 이동으로, 요소를 3개 가진 행 벡터 또는 N×3 배열로 지정됩니다. 여기서 N은 총 평행 이동 개수이며, 각 평행 이동의 형식은 [x y z]입니다.

    translation에 2개 이상의 평행 이동이 포함되는 경우 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 인수로 정의된 축-회전 시퀀스를 갖는 하나의 오일러 각 세트를 표현합니다. 디폴트 축-회전 시퀀스는 ZYX입니다.

    eulerN×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]입니다. 여기서 qw는 스칼라 숫자입니다.

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

    참고

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

    예: [0.7071 0.7071 0 0]

    데이터형: single | double

    축-각도 회전으로, N×4 행렬로 지정되며 [x y z theta] 형식을 가집니다. 여기서 N은 축-각도 회전의 총 개수입니다. x, y, z는 각각 x축, y축, z축의 벡터 성분입니다. 벡터는 각도 theta로 회전할 축(단위: 라디안)을 정의합니다.

    axangN×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 객체를 만듭니다.

    angleN×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은 간소한 표현의 자세의 총 개수입니다. 각 행이 자세이며, xyz 위치와 쿼터니언으로 구성된 [x y z qw qx qy qz] 형식입니다. x, y, z는 각각 x축, y축, z축의 위치입니다. qw, qx, qy, qz는 함께 쿼터니언 회전입니다.

    poseN×7 행렬인 경우 그 결과로 생성된 se3 객체의 개수는 N과 같습니다.

    데이터형: single | double

    객체 함수

    모두 확장

    mtimes, *변환 또는 회전의 곱셈
    mrdivide, /변환 또는 회전의 오른쪽 나눗셈
    rdivide, ./변환 또는 회전의 요소별 오른쪽 나눗셈
    times, .*변환 또는 회전의 요소별 곱셈
    interp변환 사이의 보간
    dist두 변환 간의 거리 계산
    normalize변환 또는 회전 행렬의 정규화
    transform점에 강체 변환 적용
    axang변환 또는 회전을 축-각도 회전으로 변환
    eul변환 또는 회전을 오일러 각으로 변환
    rotm회전 행렬 추출
    quat변환 또는 회전을 숫자형 쿼터니언으로 변환
    trvec평행 이동 벡터 추출
    tform동차 변환 추출
    xyzquat변환 또는 회전을 간소한 3차원 자세 표현으로 변환
    so3SO(3) 회전
    quaternion쿼터니언 배열 생성

    예제

    모두 축소

    "XYZ" 회전 시퀀스의 [pi/2 0 pi/7]의 오일러 각 회전과 [6 4 1]xyz 평행 이동을 정의합니다.

    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에 개발됨

    모두 확장