2014-12-22 2 views
1

저는 arduino와 6 개의 서보 모터를 사용하여 6 자유도의 로봇 팔을 구축하고 있습니다.Python 역 기구학 패키지

필자는 직렬 통신을 사용하여 직접 파이썬 인터페이스를 작성 했으므로 다음을 쓸 수 있습니다. move_motor(angle1=45, angle2=37) 그러면 서보 모터가 적절하게 이동합니다.

이제 저는 IK 부분에 도달했습니다. 그리고 팔 길이를 설정하는 좋은 패키지를 찾고 있습니다. 그러면 (x,y,z,theta)을 줄 수 있으며 각 모터에 대한 각도가 반환됩니다.

좋은 패키지가 있습니까? 아니면 적어도 내 필요에 맞춰서 플레이 할 수있는 무엇인가?

+1

https://code.google.com/p/robotics-toolbox-python/을 보셨습니까? –

+0

matplotlib 패키지와의 호환성 문제가 있습니다 (matplotlib.Axes3D 가져 오기 사용). 마지막 편집이 2008 년 이후로 나는 새로운 것이있을 것이라고 생각했기 때문에 ... 나는 실제로 그것을 사용하는 사람들의 사례를 발견하지 못했습니다. 호환되는 동안 가치가 있습니까? 감사합니다. 어쨌든 :) –

답변

2

문제가 매우 간단하므로 이차 좌표 프로그래밍 (QP)으로 역 기구학 (IK) 문제를 해결하는 것이 가장 좋습니다. 파이썬에서는 몇 줄의 코드로 QP를 풀 수 있습니다. CVXOPT 라이브러리 (내가 출판 a tutorial with some code here). 또한 QX 솔버로 CVXOPT를 사용하는 an example of IK solver in Python이라고 썼습니다. 이 문제는 당면한 문제보다 더 복잡하지만, 영감을 얻기 위해 그 문제를 살펴볼 수 있습니다.

유용한 부분이 기능 : 그것은 기본적 글로벌 IK 문제 IK미분하여 (관절 각도 벡터 'Q'를 찾기) 해결

def compute_velocity(self, q, qd): 
    P = zeros(self.I.shape) 
    r = zeros(self.q_max.shape) 
    for obj in self.objectives: 
     J = obj.jacobian(q) 
     P += obj.weight * dot(J.T, J) 
     r += obj.weight * dot(-obj.velocity(q, qd).T, J) 
    if self.K_doflim is not None: 
     qd_max = minimum(self.qd_max, self.K_doflim * (self.q_max - q)) 
     qd_min = maximum(self.qd_min, self.K_doflim * (self.q_min - q)) 
    else: 
     qd_max = self.qd_max 
     qd_min = self.qd_min 
    G = vstack([+self.I, -self.I]) 
    h = hstack([qd_max, -qd_min]) 
    if self.constraints: 
     A = vstack([c.jacobian() for c in self.constraints]) 
     b = hstack([c.velocity() for c in self.constraints]) 
     return cvxopt_solve_qp(P, r, G, h, A, b) 
    return cvxopt_solve_qp(P, r, G, h) 

, 즉를 계산함으로써, 말하자면 시스템은 솔루션을 향해 시스템을 구동하는 속도 'qd'입니다. 그것은 본질적으로 Levenberg-Marquardt algorithm 뒤에있는 아이디어입니다.

+0

Gotcha. 나는 대답을 업데이트했다. 이제는 더 많은 참조를 위해 외부 링크를 지적한 채 자급 자족했다. –