2010-10-22 58 views
6

Tôi đang cố gắng làm động học nghịch đảo cho chuỗi nối tiếp nhiều liên kết tùy ý.Inverse Kinematics: Tính toán Jacobian

Trong paper sau đây, tôi đã tìm thấy ví dụ về cách tính ma trận Jacobian.

Entry (i, j) = v[j] * (s[i] - p[j]) 

nơi:

v[j] là vector đơn vị của trục xoay cho j doanh

s[i] là vị trí (int thế giới coords?) Của doanh i

p[j] là vị trí (trong thế giới coords?) Của khớp j

Bài báo nói rằng tác phẩm này hoạt động nếu j là một mối nối quay với một mức độ tự do duy nhất. Nhưng các khớp quay của tôi không có ràng buộc nào về vòng quay của chúng. Công thức nào tôi muốn? (Hoặc tôi có thể hiểu nhầm “mức độ tự do”?)

Trả lời

8

Câu hỏi này là cũ, nhưng tôi sẽ trả lời dù sao, vì nó là thứ tôi đã nghĩ đến nhưng chưa bao giờ thực sự tham gia thực hiện.

Các mối nối quay không có ràng buộc được gọi là khớp bóng hoặc khớp hình cầu; họ có 3 bậc tự do. Bạn có thể sử dụng công thức trong hướng dẫn cho các khớp hình cầu, nếu bạn tham số hóa mỗi khớp hình cầu theo 3 khớp quay (xoay vòng) của một mức độ tự do mỗi.

Ví dụ: Hãy để N là số lượng khớp hình cầu. Giả sử mỗi doanh có một sự biến đổi địa phương T_local[i] và sự biến đổi thế giới

T_world[i] = T_local[0] * ... * T_local[i] 

Hãy R_world[i][k], k = 0, 1, 2, là K-thứ cột của ma trận quay của T_world[i]. Xác định 3 * N trục khớp như

v[3 * j + 0] = R_world[i][0] 
v[3 * j + 1] = R_world[i][1] 
v[3 * j + 2] = R_world[i][2] 

Tính Jacobian J đối với một số end-effector s[i], sử dụng công thức của hướng dẫn. Tất cả tọa độ đều nằm trong khung thế giới.

Sử dụng ví dụ phương pháp nghịch đảo giả cho phép dịch chuyển dq di chuyển hiệu ứng cuối theo một hướng nhất định dx.

Độ dài dq3 * N. Xác định

R_dq[j] = 
    R_x[dq[3 * j + 0]] * 
    R_y[dq[3 * j + 1]] * 
    R_z[dq[3 * j + 2]] 

cho j = 0, 1, ..., N-1, nơi R_x, R_y, R_z là các ma trận chuyển đổi cho quay về x-, y-, và z -axes.

Cập nhật các biến đổi địa phương:

T_local[j] := T_local[j] * R_dq[j] 

và lặp lại từ trên xuống để di chuyển end-effector theo các hướng khác dx.

3

Hãy để tôi đề xuất một cách tiếp cận đơn giản hơn cho người Jacob trong bối cảnh nhiều DOF tùy ý: Về cơ bản, Jacobian cho bạn biết, mỗi khớp di chuyển bao xa, nếu bạn di chuyển khung hiệu ứng cuối theo một số hướng tùy ý. Cho f (θ) là động học chuyển tiếp, trong đó θ = [θ1, ..., θn] là các khớp. Sau đó, bạn có thể lấy Jacobian bằng cách phân biệt các chuyển động về phía trước đối với các biến chung với:

J ij = df i/dθ j

là Jacobian của kẻ thao túng của bạn. Đảo ngược nó sẽ cung cấp cho bạn các động học nghịch đảo đối với vận tốc. Tuy nhiên, nó có thể hữu ích nếu bạn muốn biết mỗi khớp phải di chuyển bao xa nếu bạn muốn di chuyển hiệu ứng kết thúc bằng một số lượng nhỏ Δx theo bất kỳ hướng nào (vì ở cấp độ vị trí, điều này có thể là tuyến tính hóa): Δθ = J -1 Δx
Hy vọng điều này sẽ hữu ích.