Main Content

로보틱스에서의 좌표 변환

로보틱스 응용 분야에서는 로봇, 센서, 기타 객체의 위치를 정의하기 위해 다양한 좌표계를 사용할 수 있습니다. 일반적으로 3차원 공간에서 객체의 위치는 위치 값과 방향 값으로 지정할 수 있습니다. 이러한 값은 여러 가지 방식으로 표현할 수 있으며, 몇몇 표현은 특정 응용 분야에서만 사용됩니다. 평행 이동과 회전은 위치와 방향을 의미하는 또 다른 용어입니다. Robotics System Toolbox™는 로보틱스에서 일반적으로 사용되는 표현을 지원하며, 표현 간에 변환도 가능합니다. 이러한 표현을 3차원 점에 적용할 때 좌표계 간에 변환할 수 있습니다. 지원되는 표현은 그 사용법에 대한 간단한 설명 및 MATLAB®에서 상응하는 숫자와 함께 아래에 자세히 나와 있습니다. 각 표현의 이름은 약어가 있습니다. 약어는 이 툴박스에서 지원되는 인수와 변환 함수의 이름을 지정하는 데 사용됩니다.

이 섹션의 마지막 부분에서 이러한 표현 간의 변환을 위해 제공하는 변환 함수에 대해 알아볼 수 있습니다.

Robotics System Toolbox는 위치와 방향이 오른손 카테시안 좌표계로 정의된다고 가정합니다.

축-각도

약어: axang

3차원 공간에서의 회전으로, 벡터에 의해 정의된 고정 좌표축을 중심으로 하는 스칼라 회전으로 설명됩니다.

숫자 표현: 1×3 단위 벡터와 스칼라 각도가 결합된 1×4 벡터

예를 들어 y축을 중심으로 한 pi/2 라디안의 회전은 다음과 같습니다.

axang = [0 1 0 pi/2]

오일러 각

약어: eul

오일러 각은 강체의 방향을 설명하는 세 개의 각도입니다. 각 각도는 주어진 좌표 프레임 축을 중심으로 한 스칼라 회전입니다. Robotics System Toolbox는 두 가지 회전 순서를 지원합니다. 로봇 응용 분야에서는 'ZYZ' 축 순서가 일반적으로 사용됩니다. 또한 “RPY(롤 피치 요)”라고 표시하기도 하는 'ZYX' 축 순서를 지원합니다. 점에 회전을 적용하거나 다른 표현으로 변환하려면 사용하는 축 순서를 알고 있는 것이 중요합니다.

숫자 표현: 스칼라 각도로 구성된 1×3 벡터

예를 들어 y축을 중심으로 한 pi 회전은 다음과 같이 표현됩니다.

eul = [0 pi 0]

참고: 축 순서는 변환에 저장되지 않으므로 적용할 회전 순서를 알고 있어야 합니다.

동차 변환 행렬

약어: tform

동차 변환 행렬은 평행 이동과 회전을 하나의 행렬로 결합합니다.

숫자 표현: 4×4 행렬

예를 들어 y축을 중심으로 한 각도 α의 회전과 y축을 따라 4단위만큼의 평행 이동은 다음과 같이 표현됩니다.

tform =
 cos α  0      sin α  0 
 0      1      0      4
-sin α  0      cos α  0
 0      0      0      1

행 벡터 행렬(n×4 크기의 점 행렬)로 표현되는 동차 좌표 앞에 변환 행렬을 곱하는 전위곱을 수행해야 합니다. 행렬 곱셈을 위해 전치(')를 사용하여 점을 회전합니다. 예를 들면 다음과 같습니다.

points = rand(100,4);
tformPoints = (tform*points')';

쿼터니언

약어: quat

쿼터니언은 하나의 스칼라 회전과 3개 요소의 벡터로 구성된, 요소를 4개 가진 벡터입니다. 쿼터니언은 다른 표현에 내재된 특이점 문제를 방지하기 때문에 유리합니다. 첫 번째 요소 w는 벡터를 정규화하는 스칼라이고 다른 3개 값 [x y z]는 회전 축을 정의합니다.

숫자 표현: 1×4 벡터

예를 들어 y축을 중심으로 한 pi/2 회전은 다음과 같이 표현됩니다.

quat = [0.7071 0 0.7071 0]

회전 행렬

약어: rotm

회전 행렬은 3차원 공간에서의 회전을 설명합니다. 행렬식이 1인 정방 정규 직교 행렬입니다.

숫자 표현: 3×3 행렬

예를 들어 x축을 중심으로 한 α도 회전은 다음과 같습니다.

rotm =

     1     0         0
     0     cos α     -sin α
     0     sin α     cos α

행 벡터 행렬(n×3 크기의 점 행렬)로 표현되는 좌표 앞에 회전 행렬을 곱하는 전위곱을 수행해야 합니다. 행렬 곱셈을 위해 전치(')를 사용하여 점을 회전합니다. 예를 들면 다음과 같습니다.

points = rand(100,3);
rotPoints = (rotm*points')';

평행 이동 벡터

약어: trvec

평행 이동 벡터는 3차원 유클리드 공간에서 카테시안 좌표로 표현됩니다. 모든 점에 동일하게 적용되는 좌표 평행 이동만 포함됩니다. 회전은 포함되지 않습니다.

숫자 표현: 1×3 벡터

예를 들어 x축을 따라 3단위만큼, z축을 따라 2.5단위만큼의 평행 이동은 다음과 같이 표현됩니다.

trvec = [3 0 2.5]

변환 함수와 변환

Robotics System Toolbox는 앞에서 언급한 변환 표현에 대한 변환 함수를 제공합니다. 어느 한 전용 함수가 모든 변환을 지원하는 것은 아닙니다. 아래는 지원되는 변환(파란색)을 보여주는 표입니다. 회전 표현과 평행 이동 표현에 대한 약어도 표시됩니다.

 다음으로 변환축-각도(axang)오일러 각(eul)숫자형 쿼터니언(quat)쿼터니언 객체(quaternion)회전 행렬(rotm)변환 행렬(tform)평행 이동 벡터(trvec)
다음에서 변환 
축-각도(axang)axang2quatquaternionaxang2rotmaxang2tform
오일러 각(eul)eul2quatquaternioneul2rotmeul2tform 
숫자형 쿼터니언(quat)quat2axangquat2eulquaternionquat2rotmquat2tform 
쿼터니언 객체(quaternion)eulercompact  
회전 행렬(rotm)rotm2axangrotm2eulrotm2quatquaternionrotm2tform 
변환 행렬(tform)tform2axangtform2eultform2quattform2rotmtform2trvec
평행 이동 벡터(trvec)trvec2tform

모든 변환 함수의 이름은 표준 형식을 따릅니다. 모두 alpha2beta 형식을 따르며, 여기서 alpha는 변환시킬 표현의 약어이고 beta는 변환된 표현의 약어입니다. 예를 들어 오일러 각에서 쿼터니언으로의 변환은 eul2quat가 됩니다.

모든 함수는 유효한 입력을 기대합니다. 유효하지 않은 입력을 지정하면 출력이 정의되지 않습니다.

라디안과 도 사이의 변환, 카테시안 좌표와 동차 좌표 사이의 변환, 래핑된 각도 차이 계산을 위한 다른 변환 함수들도 있습니다. 변환의 전체 목록은 좌표 변환 항목을 참조하십시오.

관련 항목