08 - Mindstorms with MATLAB - Jacobian 1부
http://www.matlabinuse.com/11080 2012.August.15.수 23:07 [*.246.73.21]44042 Views 1 Voted / 0 Devoted
반갑습니다. 교주 LGS입니다.
이번 강좌에서는 End-effector의 속도에 관한 이야기를 하겠습니다 ^^
지지난 시간에 Forward Kinematics를 이용하여 주어진 Joint angle로부터 2 Link SCARA Robot 말단부의 위치를 계산할 수 있었습니다.
이번에는 로봇 말단부의 위치 말고 속도는 어떻게 될까요?
위의 식에서 x2 와 y2를 시간 t에 대해 미분하면 되겠죠 뭐 ㅋ
x2는 θ1과 θ2의 함수이구요 θ1과 θ2는 다시 시간 t의 함수입니다.
독립변수가 여려개인 함수를 미분하실 때에는 편미분과 chain rule을 사용하시면 됩니다요~
(역시 학부 1학년 수준의 미적분학이라 이해하시는데 여려움은 없을 거라고 생각합니다 ^^)
x2 와 y2를 시간 t에 대해 미분해보면
위의 식처럼 되고 위의 식에서 End-effector의 속도와 Joint의 각속도의 관계를 나타내는 편미분 된 Matrix를 Jacobian matrix라고 합니다.
End-effector의 방향(자세)에 대해서는 각 회전축의 각속도를 superposition 하면(그냥 쭉~ 더하면) 구할 수 있구요~
만약 Robot이 6DOF (Degree of Freedom 자유도)라면 아래와 같이 Jacobian matrix를 계산할 수 있습니다.
Position Jacobian의 경우 px, py, pz는 Homogeneous Transformation Matrix에서 바로 가지고 올 수 있구요
Orientation Jacobian은 각 transformation matrix의 Rotation matrix의 마지막 열 a를 가지고 오시면 됩니다.
(단 Revolution Joint(모터와 같이 회전하는 조인트)가 아니라 Prismatic Joint(앞뒤로 움직인느 조인트)의 경우는 0으로 체워 주세요)
Jacobian을 MATLAB에서 직접 구하시려면 jacobian 함수를 사용하시면 되요. ^^
MATLAB에서 제공하는 jacobian 함수는 Symbolic Math Toolbox에 포함되어 있는 함수입니다.
그러므로 syms 함수를 사용하여 T1(θ1)과 T2(θ2) 및 L1, L2를 Symbolic 변수로 생성하여 jacobian 함수에 적용하시면 됩니다.
f 식은 Forward Kinematics에서 유도한 식을 그대로 썼죠? ^^
Joint의 각속도에 대한 End-effector의 속도를 구하시려면 그냥 Jacobian matrix에 Joint 각속도 vector를 곱하시면 되요.
속도에 관한 Inverse Kinematics는 간단하게 Inverse Jacobian을 곱해주시면 땡입니다요~ o(^o^)o
(backslash 연산자에 대해서는 여기를 참고하세요.)
답이 조금 지저분하게 나왔지만 아주 잘 찾아주내요 ^^
Jacobian matrix가 full rank가 아닌 경우나 singular (det(J)==0) 인 경우를 제외하고는
항상 End-effertor의 속도를 결정하는 Joint 각속도를 계산할 수 있습니다.
Full rank가 아닌경우 즉 Jacobian matrix가 square matrix(행, 렬의 개수가 같은 정사각형 행렬)가 아닌 경우는
다음 시간에 다루도록 하겠습니다요~ ^^ 예~
다음 시간에 뵈요 ^ㅠ^ 뿅!
