mindstorms_with_matlab_logo.png



반갑습니다. 교주 LGS입니다.

이번 강좌에서는 End-effector의 속도에 관한 이야기를 하겠습니다 ^^


Jacobian01.png


지지난 시간에 Forward Kinematics를 이용하여 주어진 Joint angle로부터 2 Link SCARA Robot 말단부의 위치를 계산할 수 있었습니다.

이번에는 로봇 말단부의 위치 말고 속도는 어떻게 될까요? 

위의 식에서 x2 와 y2를 시간 t에 대해 미분하면 되겠죠 뭐 ㅋ

x2는 θ1과 θ2의 함수이구요 θ1과 θ2는 다시 시간 t의 함수입니다.

독립변수가 여려개인 함수를 미분하실 때에는 편미분과 chain rule을 사용하시면 됩니다요~

(역시 학부 1학년 수준의 미적분학이라 이해하시는데 여려움은 없을 거라고 생각합니다 ^^)


x2 와 y2를 시간 t에 대해 미분해보면


Jacobian02.png


위의 식처럼 되고 위의 식에서 End-effector의 속도와 Joint의 각속도의 관계를 나타내는 편미분 된 Matrix를 Jacobian matrix라고 합니다.

End-effector의 방향(자세)에 대해서는 각 회전축의 각속도를 superposition 하면(그냥 쭉~ 더하면) 구할 수 있구요~

만약 Robot이 6DOF (Degree of Freedom 자유도)라면 아래와 같이 Jacobian matrix를 계산할 수 있습니다.


Jacobian08.png  


Position Jacobian의 경우 px, py, pz는 Homogeneous Transformation Matrix에서 바로 가지고 올 수 있구요

Orientation Jacobian은 각 transformation matrix의 Rotation matrix의 마지막 열 a를 가지고 오시면 됩니다.

(단 Revolution Joint(모터와 같이 회전하는 조인트)가 아니라 Prismatic Joint(앞뒤로 움직인느 조인트)의 경우는 0으로 체워 주세요) 


Jacobian09.png


Jacobian을 MATLAB에서 직접 구하시려면 jacobian 함수를 사용하시면 되요. ^^

Jacobian03.png 

Jacobian04.png


MATLAB에서 제공하는 jacobian 함수는 Symbolic Math Toolbox에 포함되어 있는 함수입니다.

그러므로 syms 함수를 사용하여 T1(θ1)과 T2(θ2) 및 L1, L2를 Symbolic 변수로 생성하여 jacobian 함수에 적용하시면 됩니다.

f 식은 Forward Kinematics에서 유도한 식을 그대로 썼죠? ^^

Joint의 각속도에 대한 End-effector의 속도를 구하시려면 그냥 Jacobian matrix에 Joint 각속도 vector를 곱하시면 되요.


Jacobian05.png  



속도에 관한 Inverse Kinematics는 간단하게 Inverse Jacobian을 곱해주시면 땡입니다요~ o(^o^)o

(backslash 연산자에 대해서는 여기를 참고하세요.)

Jacobian06.png

답이 조금 지저분하게 나왔지만 아주 잘 찾아주내요 ^^

Jacobian matrix가 full rank가 아닌 경우나 singular (det(J)==0) 인 경우를 제외하고는 

항상 End-effertor의 속도를 결정하는 Joint 각속도를 계산할 수 있습니다.

Full rank가 아닌경우 즉 Jacobian matrix가 square matrix(행, 렬의 개수가 같은 정사각형 행렬)가 아닌 경우는 

다음 시간에 다루도록 하겠습니다요~ ^^  예~




다음 시간에 뵈요 ^ㅠ^  뿅!

profile