mindstorms_with_matlab_logo.png



안녕하세요? 핸섬 교주 LGS입니다. =(=^ㅅ^=)=

지난 시간에 이어 End-effector와 Joint의 속도의 관계를 나타내는 Jacobian에 대해 계속 이야기 하겠습니다.


jacobian0201.png

평면상의 2 Link SCARA 로봇의 End-effector를 현재위치 (x1,y1)에서 원하는 위치 (x2,y2)로 움직여야 한다고 합시다.


jacobian0203.png


(여기서 p는 end-effector의 위치, q는 Joint angle을 나타냅니다.)

Jacobian을 가지고 Joint angle과 End-effector의 속도관계를 뿐만아니라 위치를 핸들링할 수도 있습니다.

현재 위치와 원하는 위치의 차이를 e (error)라고 한다면 e = (x2-x1, y2 - y1)이 될 것입니다.

e를 n개의 step으로 잘개 쪼개면 △e = e/n=((x2-x1)/n, (y2 - y1)/n)이 될거구요 

p'과 q'을 각각 step이 조금 큰 △p와 △q로 근사화 할 수 있겠죠? 결국 △e는 △p가 됩니다.


jacobian0204.png

만약 e를 등간격으로 쪼개었다면 △p는 고정되어 있을 겁니다.

△p에 Inverse Jacobian을 곱해 △q를 계산할 수 있구요 계산되어진 △q를 기존의 q에 더하여 새로운 q로 q를 update 합니다.

다시 update된 q를 사용하여△q를 계산하고 위의 과정을 로봇의 말단부가 원하는 위치에 도달 할 때까지 반복해주시면 되요~ ^^ 

(q가 update 될 때마다 Forward kinematic로 로봇의 자세를 계산할 수 있습니다. )



Inverse Jacobian을 이용하면 Redundancy를 가지는 경우도 손쉽게 경로를 계산할 수 있습니다요.

Redundancy(여유자유도)는 주어진 작업 공간 자유도(degree of freedom DoF) 이상의 Joint 자유도를 가지는 경우를 말합니다.

예를 들어 3차원 공간의 자유도는 6 DoF (위치 x,y,z, 자세 ф,θ,ψ)인데 Joint의 수는 7개인 경우 Redundant 하다고 말할 수 있습니다.

이 경우 주어진 작업을 수행하고 남는 자유도를 활용하여 추가적인 작업(특이점 회피, 충돌 회피 등)이 가능합니다.

Jacobian matrix로 보자면 열의 수가 행의 수보다 많을 때를 말하구요~ 무한개의 inverse kinematics solution이 존재합니다.


Square matrix가 아닌 녀석의 역행렬을 구하시려면 pseudo-inverse를  구해주시면 됩니다.

(pseudo-inverse에 관한 설명)

여자유도를 가지는 Jacobian은 column의 수가 row의 수보다 많으므로(rank = n>m) Right inverse를 해주시면 되구요

jacobian0202.png
Pseudo inverse를 가지고 역기구학을 구성해보면 위의 동영상과 같은 결과를 얻을 수 있습니다. 헤헷 ^^
그러나 Pseudo inverse Jacobian이 Singular point(특이점) 근처에서는 무지 심하게 떨립니다. 
이러한 문제점을 보완하기 위해서 damping을 추가하기도 합습죠~ ( Damped Least Square (DLS) Pseudo Inverse)

jacobian0205.png 

 (원하는 위치를 End-effector가 도달 할 수 없는 곳(Singular Point)으로 지정했을 때 어떻게 행동하는지 잘 보세요)

"End-effector의 이동 경로 족구하라 그래!!"라고 생각하신다면  (즉 이동경로는 상관 없고 최종 위치만을 고려 한다면)
Inverse로 Jacobian Transpose를 이용하셔도 됩니다. JT는  알고리즘과 계산이 간단하므로 최근 서비스 로봇등에서 재조명되고 있습니다.


자~ 오늘 강좌도 끝~ o(^o^)o
See you next time~ bye bye~ 

profile