Comment résoudre le problème de cinématique inverse?

20

La cinématique avant d'un bras de robot peut être résolue facilement. Nous pouvons représenter chaque joint en utilisant des matrices de transformation Denavit – Hartenberg .

Par exemple, si le joint est un actionneur linéaire, il peut avoir la matrice de transformation:ith

Ti=[10000100001di0001] où la longueur d'extension est définie par di

alors qu'un lien tournant peut être:

Ti=[100L0cosαisinαi00sinαicosαi00001]α est le angle, et L est la longueur du lien.

On peut alors trouver la position et l'orientation de l'effecteur terminal en multipliant toutes les matrices de transformation: Ti .

La question est de savoir comment résoudre le problème inverse?

Mathématiquement, pour une position d'effecteur final souhaité , trouver les paramètres , tels que . Quelles méthodes existent pour résoudre cette équation?MdiαiTje=M

ronalchn
la source

Réponses:

11

À l'époque, lorsque j'apprenais, en inventant cela au fur et à mesure, j'utilisais un simple gradient suivant pour résoudre le problème IK.

Dans votre modèle, vous essayez de faire tourner chaque joint chaque joint d'une petite quantité, voyez combien de différence cela fait à l'erreur de position du point final. Cela fait, vous faites ensuite pivoter chaque articulation d'un montant proportionnel à l'avantage qu'elle procure. Ensuite, vous faites cela encore et encore jusqu'à ce que vous soyez assez proche.

Généralement, ceci est connu comme suivi de gradient ou suivi de colline. Imaginez un bras de robot avec deux degrés de liberté:

IK

Rotation du joint A un tout petit peu déplace le point final dans la direction a . La rotation du joint B un tout petit peu déplace le point final dans la direction b . Ces deux éléments nous rapprochent de la cible d'environ la même quantité, nous devons donc faire tourner les deux articulations à peu près à la même vitesse.

Si nous devions tracer un graphique de la distance de la cible par rapport aux angles des articulations, cela ressemblerait à ceci:

IK

J'ai coloré certains contours juste pour aider. Nous pouvons voir le chemin que prend cet algorithme. Ce que vous remarquerez, c'est que dans l'espace commun, le chemin emprunté ne semble pas optimal. Cela prend une courbe. Cependant, dans l'espace réel, vous verriez le point final prendre une ligne assez droite vers la cible. Vous pouvez également voir qu'il existe en fait deux solutions au problème et que l'algorithme vient de trouver la plus proche.

Ce n'est pas le seul moyen de résoudre le problème de la cinématique inverse. Ce n'est certainement pas la meilleure façon non plus.

Avantages:

  • C'est conceptuellement simple, tellement génial si vous apprenez juste cela.
  • Il est facile à mettre en œuvre, même si la vue des matrices de transformation Denavit – Hartenberg vous donne la frayeur.
  • C'est très général, vous permettant d'utiliser toutes sortes de joints: rotatifs, linéaires, autre chose, tant que vous pouvez estimer comment ils provoquent le déplacement du point final.
  • Il résiste bien, même lorsqu'il existe zéro ou un nombre infini de solutions.

Les inconvénients:

  • C'est lent, il faut plusieurs itérations pour trouver la solution. Cependant, c'est bien si vous pouvez simplement demander au vrai bras de suivre la progression de l'algorithme tel qu'il est calculé.
  • Il peut se coincer dans les minima locaux. IE Il pourrait ne pas trouver la meilleure solution possible, s'il en trouve une assez bonne.

Il y a plus de détails à ce sujet sur mon très vieux site Web: la page intelligente, extensible et amusante, texturée et souriante .

Rocketmagnet
la source
3

Il existe un certain nombre de solutions à ce problème qui se concentrent autour de la matrice jacobienne. Ce diaporama couvre les méthodes jacobiennes et mentionne également une méthode de descente à coordonnées cycliques, que je ne connais pas.

Il existe une pléthore de ressources sur le sujet - si vous demandez à google "la cinématique inverse jacobienne" .

Consultez également le chapitre 5.3 des notes de cours du cours ouvert de M IT sur la robotique d'introduction .

David Hernandez
la source
1

Il existe deux grandes approches:

  • les solutions analytiques, étant donné une pose d'effecteur terminal, calculent directement les coordonnées conjointes. En général, la solution n'est pas unique, vous pouvez donc calculer un ensemble de coordonnées conjointes possibles. Certains peuvent amener le robot à heurter des choses dans son environnement (ou lui-même), ou votre tâche peut vous aider à choisir une solution particulière, par exemple. vous préférerez peut-être le coude vers le haut (ou vers le bas), ou le robot pour avoir son bras à gauche (ou à droite) de son tronc. En général, il existe des contraintes pour obtenir une solution analytique, pour les robots à 6 axes, un poignet sphérique (tous les axes se croisent) est supposé. Les solutions analytiques pour de nombreux types de robots différents ont été calculées au fil des décennies et vous pouvez probablement trouver un document qui donne une solution pour votre robot.
  • Les solutions numériques, comme décrit dans les autres réponses, utilisent une approche d'optimisation pour ajuster les coordonnées de l'articulation jusqu'à ce que la cinématique avant donne la bonne solution. Encore une fois, il y a une énorme littérature à ce sujet et beaucoup de logiciels.

À l'aide de ma boîte à outils robotique pour MATLAB, je crée un modèle d'un robot 6 axes bien connu en utilisant les paramètres de Denavit-Hartenberg

>> mdl_puma560
>> p560

p560 = 

Puma 560 [Unimation]:: 6 axis, RRRRRR, stdDH, fastRNE            
 - viscous friction; params of 8/95;                             
+---+-----------+-----------+-----------+-----------+-----------+
| j |     theta |         d |         a |     alpha |    offset |
+---+-----------+-----------+-----------+-----------+-----------+
|  1|         q1|          0|          0|     1.5708|          0|
|  2|         q2|          0|     0.4318|          0|          0|
|  3|         q3|    0.15005|     0.0203|    -1.5708|          0|
|  4|         q4|     0.4318|          0|     1.5708|          0|
|  5|         q5|          0|          0|    -1.5708|          0|
|  6|         q6|          0|          0|          0|          0|
+---+-----------+-----------+-----------+-----------+-----------+

puis choisissez une coordonnée commune aléatoire

>> q = rand(1,6)
q =
    0.7922    0.9595    0.6557    0.0357    0.8491    0.9340

puis calculer la cinématique avant

>> T = p560.fkine(q)
T = 
   -0.9065    0.0311   -0.4210  -0.02271
    0.2451    0.8507   -0.4649   -0.2367
    0.3437   -0.5247   -0.7788    0.3547
         0         0         0         1

Nous pouvons maintenant calculer la cinématique inverse en utilisant une solution analytique publiée pour un robot à 6 articulations et un poignet sphérique

>> p560.ikine6s(T)
ans =
    0.7922    0.9595    0.6557    0.0357    0.8491    0.9340

et le tour est joué, nous avons les coordonnées communes d'origine.

La solution numérique

>> p560.ikine(T)
Warning: ikine: rejected-step limit 100 exceeded (pose 1), final err 0.63042 
> In SerialLink/ikine (line 244) 
Warning: failed to converge: try a different initial value of joint coordinates 
> In SerialLink/ikine (line 273) 

ans =

     []

a échoué, et c'est un problème courant car ils ont généralement besoin d'une bonne solution initiale. Essayons

>> p560.ikine(T, 'q0', [1 1 0 0 0 0])
ans =
    0.7922    0.9595    0.6557    0.0357    0.8491    0.9340

qui donne maintenant une réponse mais qui est différente de la solution analytique. Ce n'est pas grave cependant, car il existe plusieurs solutions au problème IK. Nous pouvons vérifier que notre solution est correcte en calculant la cinématique avant

>> p560.fkine(ans)
ans = 
   -0.9065    0.0311   -0.4210  -0.02271
    0.2451    0.8507   -0.4649   -0.2367
    0.3437   -0.5247   -0.7788    0.3547
         0         0         0         1

et en vérifiant que c'est la même chose que la transformation avec laquelle nous avons commencé (ce qu'elle est).

Autres ressources:

Peter Corke
la source