Question

Je suis en train de faire la cinématique inverse pour une chaîne série de liens arbitrairement beaucoup.

Dans ce qui suit papier, je l'ai trouvé un exemple de la façon de calculer la matrice jacobienne.

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

où:

  

v[j] est le vecteur unitaire de l'axe de   rotation de j joint

     

s[i] est la position (monde entier   coords?) de i joint

     

p[j] est la position (dans le monde   coords?) de joint j

Le document dit que cela fonctionne si j est un joint de rotation avec un seul degré de liberté. Mais mes articulations de rotation ont aucune contrainte sur leur rotation. Qu'est-ce que je veux faire la formule alors? (Ou peut-être suis-je mal compris le terme « degré de liberté »?)

Était-ce utile?

La solution

Cette question est vieux, mais je vais répondre de toute façon, car il est quelque chose que j'ai pensé, mais jamais vraiment eu l'occasion de mettre en œuvre.

joints Rotational sans contraintes sont appelées rotules ou rotules; ils ont 3 degrés de liberté. Vous pouvez utiliser la formule dans le tutoriel pour les joints sphériques aussi, si vous paramétrez chaque joint joint sphérique en termes de rotation (3) rotoïdes d'un degré de liberté chacun.

Par exemple: Soit N soit le nombre de joints sphériques. Supposons que chaque joint a une T_local[i] de transformation locale et une transformation mondiale

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

Soit R_world[i][k], k = 0, 1, 2, soyez les K- e colonne de la matrice de rotation de T_world[i]. Définir les axes communs de 3 * N comme

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

Calculer la J jacobienne pour une s[i] effecteur terminal, en utilisant la formule du tutoriel. Toutes les coordonnées sont dans le cadre du monde.

en utilisant par exemple la méthode de la pseudo-inverse donne un dq de déplacement qui déplace l'effecteur dans une direction donnée dx.

La longueur de dq est 3 * N. Définir

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

pour j = 0, 1, ..., N-1, où R_x, R_y, R_z sont les matrices de transformation pour rotation autour de l'x-, y- et z-axes.

Mettre à jour les transformations locales:

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

et répéter à partir du haut pour déplacer l'effecteur d'extrémité dans d'autres directions dx.

Autres conseils

Permettez-moi de suggérer une approche plus simple à jacobiens dans le contexte de nombreux arbitraires ddl: En gros, le jacobien vous dit, dans quelle mesure chaque mouvement de l'articulation, si vous déplacez le cadre effecteur dans une direction choisie arbitrairement. Soit f (?) soit la cinématique avant, où ? = [?1, ..., ?n] sont les articulations. Ensuite, vous pouvez obtenir le jacobien en différenciant la cinématique en avant par rapport aux variables communes:

J ij = df i / dO j

est jacobienne de votre manipulateur. Il vous inverser la cinématique inverse donner par rapport à des vitesses. Il peut encore être bien utile, si vous voulez savoir dans quelle mesure chaque joint doit se déplacer si vous voulez déplacer votre terminal effecteur par une petite quantité Dx dans toutes les directions (parce que le niveau de position, ce serait effectivement une linéarisation): ?? = J -1 Dx
L'espoir que cette aide.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top