2013년 12월 11일 수요일

자코비안(Jacobian)이란 무엇인가

로봇의 움직임을 고려하면서 빼놓을 수 없는 주제가 바로 기준좌표(reference frame) 변환입니다. 사실 우리 인간들은 (x,y,z)로 이루어진 직교좌표계(Cartesian coordinate)로 보기를 바라죠. 하지만 로봇은 다릅니다. 자신이 잘 알아들을 수 있는 극좌표계(Polar coordinate)로 명령을 내려주길 바라는거죠.


자, 이 둘의 통하지 않는 대화, 누가 이어주나요? 뭐 로봇하는 사람들이 해줘야하지 않겠어요?ㅋ 오늘은 인간과 로봇의 좌표계를 이어주는 가교와 같은 역할을 하는 변환행렬, 자코비안(Jacobian)에 대해 알아보도록 하겠습니다!

사실 이 주제는 지난 번에 다루었던 Joint space에 대한 얘기에서부터 출발하여 Rotation matrix과도 계속 이어지는 일련의 연재물입니다. Joint space 관련 글에서는 인간이 생각하는 공간인 Task space와 로봇이 생각하는 공간인 Joint space에 대해서 설명하였고, Rotation matrix 관련 글에서는 회전에 의한 좌표의 변환을 설명하였는데요, (관련 글 : "로봇이 움직이는 공간, Joint Space""저랑 야바위 한판 하실래요? Rotation Matrix!") 오늘 다루고자 하는 것은 바로 Joint space(로봇의 움직임)  Task space(3차원 공간의 움직임)로의 변환을 만들어주는고자 하는 것이죠! 벌써부터 머리가 아프신가요?ㅎㅎ 사실 질문은 간단합니다.
"내가 팔꿈치를 약간 움직였어. 그럼 내 손 끝은 어떻게 움직이게되지?"
이걸 왜 알아야되느냐~ 우리가 지난 번에 간단한 미션으로 "로봇으로 칠판에 직선긋기"를 해보고자 했자나요. 칠판에 직선을 그으려면 관절을 얼마나 움직여야 손끝이 직선을 따라가는지 알아야죠. 그런 작업을 할 때 바로 Jacobian이 필요한 것이랍니다.

Forward Kinematics (정기구학,FK) : Joint → Task   x = f(q)
Inverse Kinematics (역기구학,IK)  : Task  → Joint  q = f-1(x)

사실 아주 복잡한 로봇이 아니라면 forward kinematics 모델은 어렵지않게 구할 수 있습니다. (이것에 대해서는 다음시간에 이야기를 나눠볼게요^^) 예를 들면 이런 식인거죠.


위의 식만 알고있으면 이제 "관절각도가 oo도 일 때 손끝의 위치(x,y,z)는 무엇이냐?"에 질문에 더이상 벌벌 떨 필요가 없습니다. 관절값만 툭 넣어주면 x,y,z 값이 탁 나오니까요ㅋ 문제는 inverse kinematics인데요, 다시말하면 특정한 x,y,z를 툭 넣어줬을 때 어떠한 각도값들이 필요한지 q = f-1(x)를 구하는 것이 어렵다는 것입니다. 생각해보세요. 저 위의 식을 c1, c2, c3 별로 정리할 수 있으시겠어요...?

이럴 때 사용되는 방법이 바로 Jacobian 입니다. 복잡하게 얽혀있는 식을 미분을 통해 linear approximation시킴으로써 간단한 근사 선형식으로 만들어주는 것이지요. (말부터 어렵네요...;) 이것은 마치 미분기울기를 통해 △x 후의 y값을 선형 근사하여 예측하는 것과 비슷한 원리입니다.


y = f(x) 와 같은 1변수 함수에서는 미분값도 scalar 값이 나오는데요, 만약 x와 y가 다변수, 즉 x=(x1,x2,x3,...), y=(y1,y2,y3,...)와 같은 경우에는 미분값이 scalar가 아니라 행렬형태로 나오게 된답니다. x = f(q)로 표현되는 정기구학식은 분명 x=(x,y,z), q=(q1,q2,q3,...) 일 것이므로 미분값 역시 행렬형태로 나오게 되겠네요.


여기까지가 바로 "직관적"으로 설명해본 Jacobian의 의미입니다. (직관적 = 대충 설명했다는거죠..ㅎㅎㅎ) Wikipedia에서는 이렇게 Jacobian을 정의하고 있습니다.(1)
"The Jacobian matrix is the matrix of all first-order partial derivatives of a vector-valued function" 
자코비안은 쉽게 생각하자면 '다변수 함수일 때의 미분값이다' 이런거죠. 자~ 돌아돌아돌아돌아 다시 본론으로 돌아가볼까요? 우리가 자코비안을 공부하게된 이유가 원래는 q = f-1(x)를 구하는 것이 어렵다는 이야기가 그 출발점이었어요. 복잡한 수식을 머리싸매 c1,c2,c3 별로 정리하는 것은 어렵지만, 만약 이 문제를 자코비안의 역행렬(2)을 이용해 푼다면 근사하게(approximately + elegantly) 해결될 수 있답니다.


위대하신 자코비안느님 덕분에 우리는 이제 현재자세 q1에서 손끝을 z방향으로 1mm 움직이고 싶을 때의 새로운 q2 값을 계산할 수 있게 되었습니다. 주어진 정기구학식을 미분하여 자코비행렬을 계산하고 그 역행렬이 포함된 식에 dx=(0,0,1)을 넣으면 되니까요 ^^ㅋ (아... 불안하다... 이거 설명에 실패한거 아니겠죠...?ㅠㅠㅠㅠ)

정말 오랜만의 로봇수학 이야기였네요ㅋ 자코비안을 처음 접해보시는 분들은 아마 어렵게 느껴지실 수도 있을 것 같아요. 하지만 포기하지 마시고 시스템을 수학적으로 정의내릴 수 없다면 더이상의 기술 진보가 이루어질 수 없다는 것(!!!) 기억해주시면서 찬찬히 되짚어보시길 바라겠습니다!(3) 다음은 자코비안을 이용한 로봇제어를 다루어보도록 하겠습니다ㅋ 그럼 모두 가족과 함께, 애인과 함께, (애인 없으면 만드세요오오! 우선 나부터...ㅠ) 따뜻한 연말 보내시기 바라겠습니다! ^^

(1) http://en.wikipedia.org/wiki/Jacobian_matrix_and_determinant
(2) 자코비안의 역행렬은 때에 따라 존재하지 않을 수 있습니다. 역행렬은 정사각행렬이고 full rank일 때만 (다시말해 모든 열들이 independent 할 때) 존재하니까요. 이렇게 역행렬이 존재하지 않을 때에는 의사역행렬(pseudo-inverse)을 이용하는 방법도 한가지 해결책이랍니다.
(3) 이러한 수학과 관련해서는 켄 카즈시가 지은 "아하 물리수학"이라는 책을 추천해드리고 싶네요.

* 제 글은 RSS로도 구독하실 수 있습니다. http://t-robotics.blogspot.kr/feeds/posts/default
  facebook page: http://facebook.com/trobotics