mindstorms_with_matlab_logo.png



안녕하세요? 교주 LGS입니다.

(Mindstorms with MATLAB 강좌가 점점 Robotics 쪽으로 흘러가는 느낌이... 쿨럭)

오늘은 Forward Kinematics에서 잠시 미루어 두었던 3차원 공간상에서의 변환에 대해서 이야기 하겠습니다.

자~ 2차원 평면의 개념을 3차원 공간으로 확대시켜봅시다.^^


Translation의 경우는 2차원이나 3차원이나 전혀 문제가 없으실 테고요~ 


eular01.png 


Rotation의 경우는 회전 시키는 순서 즉 Rotation matrix를 곱하는 순서가 중요합니다.

핸드폰을 가지고 직접 해보세요~ ^^ 먼저 x측우로 90도 회선 시키고 y축으로 90도 회전 시킨 녀석이랑

y축으로 90도 회전 한후 x축으로 90도 회전한 녀석이랑 자세가 다릅니다. ;;

원래 행렬에서 dot products는 통상 교환법칙(서로 자리를 바꾸어 계산하는 것)이 성립하지 않잖아요?


어떤 물체에 붙어 있는 Frame을 물체에 붙어있는 Frame기준으로 x,y,z,축으로 회전시키면 원하는 자세를 만들 수 있습니다.

x축으로 회전 시키는 것을 roll, y축 회전은 pitch, z축 회전을 yaw라고 부릅니다.

예를 들어 Roll-Pitch-Yaw (ZYX)의 순서로 rigid body를 회전시키는 것을

Rotation matrix를 사용하여 수식으로 표현하면 아래처럼 되구요~


eular02.png



식이 복잡해보이지만 그냥 Rotation matrix를 쭉 곱한거니까 여려운 것은 전혀 없습니다. ^^

x,y,z 각 축에 대한 rotation matrix를 잘 보시면 회전하는 축은 항상 1임을 알 수 있습니다.

당연한 결과겠죠? 만약 frame을 z축으로 회전시킨다면 x축, y축의 방향은 변하겠지만 z축의 방향은 안 변하잖아요~ 

같은 이유로 y축,x축 회전 행렬도 각 회전 축에 해당하는 성분은 모두 1입니다.

위의 수식에서 a,o,n 으로 써져있는 것은 Reference frame이 아니라 물체(rigid body 강체)에 붙어 있는 frame의 x,y,z를 나타내구요~ 


eular03.png


일반적으로 구한 Transformation matrix의 direction cosine matrix(방향코사인행렬)과 Euler angle을 비교해보면 


eular04.png

위와 같이 쉽게 Euler angle의 각도를 역으로 계산할 수 있습니다.

(위의 n, o a는 각각 normal, orientation, approach를 나타냅니다. 즉 a vector방향으로 End-effector가 workspace에 접근(approach)합니다. )

eular05.png


만약 MATLAB Aerospace Toolbox가 설치되어 있다면 dcm2anlge 함수를 사용하여 

direction cosine matrix로부터 Euler angle을 바로 구하실 수가 있어요 ^^

(반대로 Euler anlge을 가지고 direction cosine matrix를 만들 수도 있습니다.~ angle2dcm)


eular06.png

http://www.mathworks.com/help/toolbox/aerotbx/ug/bqj21qj.html#bqj2151


Quatenion을 이용하면 임의의 축으로 회전을 할 수 있으니 참고하세요~ ^^ (위의 함수 목록중 dcm2quat와 quat2dcm 함수)




Youtube에서 찾아낸 Euler Angle 관련 동영상을 감상하면서 이번 강좌를 마치겠습니다.

수고하셨습니다.

그럼 이만 총총... =(=^ㅅ^=)=


profile