Jacobian
1. 배경
Joint space - rotatation matrix - jacobian
Joint space(로봇의 움직임, 로봇중) \<- jacobian -> Task space(3차원 공간의 움직임, 인간 중심)
- Forward Kinematics (정기구학,FK) : Joint > Task : x = f(q)
- Inverse Kinematics (역기구학,IK) : Task > Joint : q = f-1(x)
1.1 Forward Kinematics
- 아래와 같은 공식만 알고 있으면 쉽게 해경
- eg. 관절각도가 oo도 일 때 손끝의 위치(x,y,z)는 무엇이냐?
1.2 inverse kinematics
- 상대적으로 어려움 : 위 식에서 c1, c2, c3를 구해야 하는 문제
- eg. x,y,z를 넣어줬을 때 어떠한 각도값들이 필요한지 q = f-1(x)를 구하는 것
- 이를 해결 하기 위함이 Jacobian
2. Jacobian
2.1 여러가지 정의
- 복잡하게 얽혀있는 식을 미분을 통해 linear approximation시킴으로써 간단한 근사 선형식으로 만들어주는 것
- 미분기울기를 통해 △x 후의 y값을 선형 근사하여 예측하는 것과 비슷한 원리
- "The Jacobian matrix is the matrix of all first-order partial derivatives of a vector-valued function"
- 다변수 함수일 때의 미분값
- 편미분을 간단하게 수행 : 편미분을 할 변수들이 많고, 그 변수들로 이루어져 있는 함수가 많을 때,
- 단순히 곱해서 더하는 폼으로 만들어 놓을 수 있는 것
2.2 공식
A. 'n'개의 변수를 가진 함수가 'm'개 있다는 가정
B. 모두 편미분하려면 아래 식의= J와 같은 벡터로 표현 이것이 Jacobian matrix
2.3 예시
A. 기본 변
B. polar-Cartesian transformation
from pprint import pprint
from numpy import array, zeros, diag, diagflat, dot
def jacobi(A,b,N=25,x=None):
"""Solves the equation Ax=b via the Jacobi iterative method."""
# Create an initial guess if needed
if x is None:
x = zeros(len(A[0]))
# Create a vector of the diagonal elements of A
# and subtract them from A
D = diag(A)
R = A - diagflat(D)
# Iterate for N times
for i in range(N):
x = (b - dot(R,x)) / D
return x
A = array([[2.0,1.0],[5.0,7.0]])
b = array([11.0,13.0])
guess = array([1.0,1.0])
sol = jacobi(A,b,N=25,x=guess)
print "A:"
pprint(A)
print "b:"
pprint(b)
print "x:"
pprint(sol)
"""출력
A:
array([[ 2., 1.],
[ 5., 7.]])
b:
array([ 11., 13.])
x:
array([ 7.11110202, -3.22220342])
"""