본문 바로가기
MATLAB 코딩/로봇동역학

<Two Link Manipulator - 2D> 7. Rotation, Translation 행렬을 Point에 곱해주는 합수 정의

by bigpicture 2019. 7. 1.
반응형

7. Rotation, Translation 행렬을 Point에 곱해주는 합수 정의




Point에 3x3 Rotation matrix나 Translation matrix를 곱하여 Point를 회전시키거나 이동시킬 때,

(점의 특성상 Point 자체의 회전운동은 정의되지 않습니다. 이 맥락에서는 원점중심의 회전을 의미한다.)

행렬 곱을 수행하기 위해 [x y]를 [x y 1]로 바꿔주어야 하고, 결과로 나온 [x' y' 1]에서 1을 제거하여 다시 Point로 만들어 주어야 합니다. (아래 그림 참고)

이 과정을 매번 코드로 나타내는 것은 비효율적이기 때문에 함수로 정의해서 사용하려고 합니다.


코드는 아래와 같습니다. 


function y=TwoD_RTP(Matrix,Point);


Point_1x3=[Point(1) Point(2) 1];


MxV=(Matrix*Point_1x3')'


y=[MxV(1) MxV(2)];




간단한 예제를 통해 코드가 어떻게 사용되는지 확인해보겠습니다. 

5,6번 강의에서 사용했던 코드를 그대로 이용하겠습니다. 

Translation을 먼저 하고 Rotation을 수행해 봅시다. 



%30도 회전시키는 회전행렬

Theta=30;

RotMat1=TwoD_RMat(Theta);


%x축으로 3, y축으로 2만큼 움직이는 병진행렬

a=3;

b=2;

TMat1=TwoD_TMat(3,2);


Point=[2 7];


T_Mat=RotMat1*TMat1;


Point_After=TwoD_RTP(T_Mat,Point);


(2,7)이라는 점을 x축으로 3, y축으로 2만큼 이동하고

다시 원점을 중심으루 30도 회전시키는 코드입니다. 


실행 결과는 아래와 같습니다. 




반응형

댓글