Avec un robot à 6 axes, compte tenu de la position de l'effecteur terminal et de la gamme d'orientations, comment trouver des valeurs articulaires optimales

10

Étant donné un bras de robot articulé à six axes tenant un outil à son effecteur d'extrémité, si j'ai une position d'outil et une orientation d'outil souhaitées, il y aura exactement 1 solution à l'équation cinématique inverse pour que le robot atteigne cette position.
(ou plutôt jusqu'à 16 solutions différentes, selon la gamme des articulations)

http://en.wikipedia.org/wiki/Robotic_arm

Mais si le robot tient quelque chose comme un stylo et que je veux que le robot marque un point spécifique avec ce stylo sur la cible, je me fiche de l'orientation du stylo, tant qu'il est perpendiculaire à la surface marquée.

L'équation cinématique inverse aura donc une infinité de solutions.

Comment choisir parmi ces solutions la configuration commune la plus proche de la configuration actuelle: celle qui nécessitera le moins de mouvement pour atteindre?
(ou la configuration de joint qui est optimale selon un autre critère similaire, tel que tous les angles de joint sont les plus éloignés de leur maximum et minimum?)

HugoRune
la source

Réponses:

9

Tout d'abord, nous devons définir optimal . Puisque vous ne dites pas ce que vous considérez comme optimal, la plupart des gens choisissent une expression quadratique. Par exemple, supposons que vos angles de jonction actuels soient donnés par le vecteur . Nous pouvons envisager de réduire au minimum le mouvement nécessaire - avec une erreur x = a - a s t un r t , vous pouvez définir une fonction de coût J = x T Q x pour une matrice Q . Nous utilisons normalement une matrice diagonale, mais n'importe quelle matrice définie positive fera l'affaire.αX=α-αstunertJ=XTQXQ

Dans un exemple simplifié avec deux angles de joint, si le joint avait un moteur moins cher (peut-être plus proche de l'effecteur terminal), nous pourrions avoir une fonction de coût deune

, c'est-à-dire. le mouvement du joint b est deux fois plus coûteux que le joint a .J=[xaxb][1002][xaxb]bune

Maintenant, l'équation cinématique est une formule matricielle, et dans la notation Denavit-Hartenberg pourrait être:

, où le côté droit représente la position ( x , y , z ) et l'orientation (actuellement définie comme une rotation nulle), étant donné la angles articulaires.Tje=[100X010y001z0001](X,y,z)

Puisque nous ne nous soucions pas de l'orientation, et seulement de la position, nous pouvons tronquer les 3 premières colonnes de la dernière matrice de transformation et la dernière ligne de la première matrice de transformation. Nous pouvons exprimer de manière équivalente cette formule comme:

[100001000010]Tje[0001]=[Xyz]

En multipliant le côté gauche, nous obtenons trois équations. Si les paramètres étaient linéaires, ce serait simple à résoudre. C'est le cas si tous les actionneurs sont des actionneurs linéaires. Dans ce cas, le problème est en fait un programme quadratique . Nous pouvons réorganiser le côté gauche pour obtenir l'équation:

, pour une matrice K .KX=[Xyz]K

Un programme quadratique est un problème qui peut s'exprimer sous la forme:

Minimiser J=12XTQX+cTX

Sous réserve de , E x = dUNEXbEX=

Pour résoudre ce problème, il existe un certain nombre d'algorithmes que vous pouvez utiliser, par exemple, point intérieur, ensemble actif, .... Trouvez simplement une bibliothèque appropriée, et elle la résoudra pour vous.

Un système d'équations non linéaire est plus difficile à résoudre. C'est ce qu'on appelle la programmation non linéaire , mais c'est ce que vous avez si vous avez des joints tournants.

Essentiellement, à la place des équations matricielles, vous avez des fonctions non linéaires.

Minimiser sous réserve de h ( x ) = 0 , g ( x ) 0 (réorganiser si nécessaire pour rendre la RHS des contraintes nulle)F(X)h(X)=0g(X)0

Les algorithmes utilisés pour résoudre ce problème sont encore plus complexes, mais comprennent des algorithmes de réflexion à point intérieur, de programmation quadratique séquentielle (SQP), à ensemble actif et à région de confiance. De toute évidence, l'explication du fonctionnement de ces algorithmes est très longue, et je laisserai cela hors de la portée de cette réponse. Qu'il suffise de dire que la quantité de contenu sur les algorithmes utilisés pour la programmation quadratique juste pourrait être tout un cours en soi.

Vous devriez simplement trouver une bibliothèque pour résoudre le problème, il faudrait beaucoup de temps pour coder une implémentation efficace, et les implémentations efficaces peuvent gérer 100 variables (ou plus) à la fois. Par exemple, si vous utilisez MATLAB, il existe de la documentation sur l'utilisation de la fonction fmincon à partir de la boîte à outils d'optimisation.

Pour le résoudre en ligne, vous souhaiterez peut-être C ++ ou une autre implémentation native, par exemple, NLopt. Notez que ce n'est peut-être pas quelque chose qu'un microcontrôleur peut résoudre rapidement, et de nombreuses bibliothèques peuvent avoir d'autres dépendances qui ne sont pas faciles à utiliser sur un microcontrôleur (car elles sont destinées à un ordinateur).


Si vous ne vous inquiétez pas de l'efficacité et que vous voulez juste quelque chose que vous pouvez coder vous-même, alors en supposant qu'il existe une fonction que vous pouvez appeler pour résoudre le problème cinématique inverse , vous pouvez simplement faire une méthode de descente de gradient. Par exemple, en choisissant arbitrairement une orientation de départ aléatoire, résolvez le problème inverse, puis vérifiez la fonction de coût. Ensuite, vous pouvez utiliser l'analyse de perturbation pour vérifier comment vous devez faire varier l'orientation. Par exemple, si vous vérifiez des orientations similaires autour de votre orientation actuelle (c'est-à-dire 8 points dans une grille cubique), vous pouvez obtenir une approximation de second ordre de la façon dont la fonction de coût varie dans chaque direction.

En utilisant l'approximation du second ordre (connue sous le nom de matrice de Hesse car elle est multivariée - tridimensionnelle pour l'orientation), vous pouvez trouver le passage par zéro du gradient de la fonction de coût (c'est-à-dire les minima locaux prédits).

Avec la nouvelle orientation prédite, il suffit de la passer à nouveau dans le solveur inverse et de répéter jusqu'à ce que la précision soit suffisante.

Notez que cela ne sera probablement pas aussi efficace, car le problème cinématique inverse lui-même doit être résolu de manière itérative (vous utilisez donc à plusieurs reprises une fonction qui prend elle-même un certain temps à résoudre). En outre, le code impliqué peut être inférieur à un algorithme d'optimisation à part entière, mais il est encore assez important et ne représente pas un investissement de temps insignifiant.


En utilisant l'une ou l'autre méthode (résolvant formellement un programme non linéaire ou utilisant itérativement une fonction pour résoudre le problème inverse), la solution peut ne pas être optimale s'il existe plusieurs minima locaux. Dans ce cas, vous pouvez essayer de trouver les minima globaux en utilisant différentes approches. Même avec un solveur de programmation non linéaire, on s'attend à ce qu'il l'amorce avec des valeurs initiales (par exemple, des angles de joint). Vous pouvez exécuter à plusieurs reprises l'une ou l'autre méthode avec la valeur de départ générée de différentes manières:

  • redémarrage aléatoire (il est généré de façon aléatoire)
  • basé sur une grille

ou d'autres méthodes personnalisées.

Cependant, notez que s'il existe de nombreux minima, il n'y a aucun bon moyen de garantir que vous trouverez les minima globaux. Vous ne pouvez qu'améliorer vos chances.

ronalchn
la source
2

Puisque la question concerne un robot industriel, nous n'avons probablement pas de modèle de la dynamique du robot, donc je suppose que nous recherchons des solutions qui optimisent uniquement un critère cinématique.

Le robot a une solution de forme fermée pour sa cinématique inverse, mais malheureusement l'effecteur terminal a un degré de liberté de rotation supplémentaire, ce qui signifie que le robot a essentiellement 7 degrés de liberté. Mais parce qu'il ne s'agit que d'un seul DOF , ce n'est pas autant un problème qu'on pourrait le penser.

0,051360118

Si la plupart du temps le stylo ne bouge que légèrement (par exemple lors du tracé d'une ligne), une autre astuce pour accélérer la recherche consiste à utiliser le CI numérique, par exemple la méthode pseudoinverse:

q1JΔXΔX=JΔqΔqq2=q1+ΔqΔqΔq

q2

antonakos
la source
1

rz

J-1X˙=Θ˙=[j1j2j3j4j5j6][X˙y˙z˙rX˙ry˙rz˙]=[θ1˙θ2˙θ3˙θ4˙θ5˙θ6˙]
jjejethJ-1Θ˙rz˙
Θ˙=Θ˙X˙ry˙+Θ˙rz˙Θ˙rz˙=j6rz˙
(Θ˙X˙ry˙+Θ˙rz˙)T(Θ˙X˙ry˙+Θ˙rz˙)
UNE=Θ˙X˙ry˙B=Θ˙rz˙

UNETUNE+2BTUNE+BTBouUNETUNE+2rz˙j6TUNE+rz˙2j6Tj6

rz˙rz˙0

2j6TUNE+2rz˙j6Tj6=0rz˙=-j6TUNEj6Tj6
joshkarges
la source