Problème de singularité au solveur cinématique inverse


9

Je lutte avec ce problème depuis des jours. J'espère vraiment que quelqu'un pourra me donner une idée du problème.

Le robot se compose de 5 axes. Le premier axe tourne autour de l'axe z et les 4 autres axes tournent autour de l'axe y. Et le solveur fonctionne essentiellement.

Voici ce que j'ai fait jusqu'à présent:

  1. Je calcule le facteur de manipulabilité avec ma matrice jacobienne (uniquement la partie translationnelle, car seule la position est suivie ici. En fait, j'ai également essayé avec une matrice jacobienne combinée, donc non seulement la partie translationnelle mais aussi la partie rotationnelle. Mais le mouvement saccadé était là en tous cas):

  2. Le facteur d'amortissement est alors:

    entrez la description de l'image ici

  3. Le facteur d'amortissement est alors intégré dans le calcul pseudo inverse:

entrez la description de l'image ici

Comme vous pouvez le voir, il s'agit simplement d'un solveur cinématique pseudo inverse classique avec la méthode des moindres carrés amortis. Le facteur de manipulabilité en fonction du deuxième mouvement (problème) est: entrez la description de l'image ici La manipulabilité chute au début de la vidéo. Mais pourquoi? Pour autant que je sache, ce facteur de manipulabilité indique la dépendance linéaire des axes. Pour moi, les axes ne semblent pas être linéairement dépendants dans la partie de départ.

Ce mouvement saccadé me rend fou. Comme vous pouvez le voir dans la première animation, le solveur semble fonctionner correctement. Qu'est-ce que j'oublie ici?


1
Bienvenue chez Robotics , Joe! C'est une question fantastique, mais malheureusement je ne pense pas qu'il y ait assez de détails pour répondre à la question. Quand un système passe à une singularité, je m'attendrais à ce qu'un axe de mouvement fasse un swing sauvage, comme un axe oscillant à 180 degrés parce qu'un autre essaie d'aller de 89 à 91 degrés (si 90 degrés étaient la singularité). Je ne vois pas vraiment ce comportement ici. Je me demande s'il s'agit davantage d'un problème d'implémentation, comme l'utilisation de quelque chose comme atanau lieu de atan2, etc. Pourriez-vous modifier votre question pour publier le code que vous utilisez?
Chuck

1
@ Chuck, j'ai édité la question pour que le "swing sauvage" puisse être vu. (regardez l'animation 2. mise à jour)
Joe

Réponses:


1

Comme d'autres l'ont déjà souligné, il doit y avoir un problème avec votre implémentation de l'algorithme IK car il n'y aura pas de comportement singulier dans les descriptions que vous avez données.

Vous avez maintenant deux alternatives: soit vous commencez par déboguer le code, soit vous souhaitez exploiter le fait que le problème peut être facilement décomposé en deux sous-problèmes pour lesquels vous pouvez facilement utiliser la plus grande partie du code écrit jusqu'à présent.

Étant donné la cible 3D souhaitée , il est simple d'observer que la valeur souhaitée de la première articulation est: .(X,y,z)θ1=arctan(yX)

La loi de commande pour conduire la première articulation du manipulateur vers peut être aussi simple que:θ1

θ1˙=K1(θ1-θ1).

Soit alors la matrice qui rend compte de la rotation de autour de l' axe :RSO(3)θ1z

R=(cosθ1-péchéθ10péchéθ1cosθ10001).

Grâce à , vous obtiendrez la nouvelle cible qui établira un nouveau problème planaire IK 2D dans le plan .R(X,0,z)1=RT(X,y,z)TXz

À ce stade, vous pouvez résoudre pour en utilisant le jacobien du manipulateur 4-DOF restant.(X,z)1


Je pense qu'il n'est pas nécessaire de résoudre le problème dans les sous-problèmes. Puisque la déclaration du vecteur unitaire indique déjà ce que vous venez de décrire.
Joe

La décomposition est une simple suggestion pour vous permettre de réutiliser le 4 DOF jacobien, qui est la partie de votre code qui fonctionne correctement, comme vous l'avez signalé au début de votre message.
Ugo Pattacini du

0

Je pense que vous avez introduit une singularité algorithmique au premier axe du poignet. Il me semble que, lorsqu'il atteint 90 degrés «vers le bas», au lieu d'aller à 91, il essaie de revenir de zéro à -269 degrés.

Bien sûr, cela est spéculatif sans voir le code.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.