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도 회전시키는 코드입니다.
실행 결과는 아래와 같습니다.
'MATLAB 코딩 > 로봇동역학' 카테고리의 다른 글
<Two Link Manipulator - 2D> 8. Link1 회전 정의하고 움직이기 (0) | 2019.07.01 |
---|---|
<Two Link Manipulator - 2D> 6. 3x3 Translation 함수 정의 (0) | 2019.07.01 |
<Two Link Manipulator - 2D> 5. 3x3 Rotation 함수 정의 (0) | 2019.07.01 |
<Two Link Manipulator - 2D> 4. 3x3 Transformation 행렬 설명 (2x2 회전행렬의 한계 극복) (0) | 2019.07.01 |
<Two Link Manipulator - 2D> 3. Link 1 회전 정의 (2x2 회전행렬 이용) (0) | 2019.07.01 |
댓글