Singularitätsproblem beim inversen kinematischen Löser

9

Ich habe tagelang mit diesem Problem zu kämpfen. Ich hoffe wirklich, dass mir jemand einen Hinweis geben kann, wo das Problem liegt.

Der Roboter besteht aus 5 Achsen. Die erste Achse dreht sich um die z-Achse und die anderen 4 Achsen drehen sich um die y-Achse. Und der Solver funktioniert im Grunde.

Folgendes habe ich bisher getan:

  1. Ich berechne den Manipulierbarkeitsfaktor mit meiner Jacobi-Matrix (nur der Translationsteil, da hier nur die Position verfolgt wird. Eigentlich habe ich es auch mit einer kombinierten Jacobi-Matrix versucht, also nicht nur der Translationsteil, sondern auch der Rotationsteil. Aber es gab eine ruckartige Bewegung wie auch immer):

  2. Dann ist der Dämpfungsfaktor:

    Geben Sie hier die Bildbeschreibung ein

  3. Der Dämpfungsfaktor wird dann in die pseudo-inverse Berechnung integriert:

Geben Sie hier die Bildbeschreibung ein

Wie Sie sehen können, ist dies nur ein klassischer pseudo-inverser kinematischer Löser mit der Methode der gedämpften kleinsten Quadrate. Der Manipulierbarkeitsfaktor gemäß der zweiten (Problem-) Bewegung ist: Geben Sie hier die Bildbeschreibung ein Die Manipulierbarkeit fällt am Anfang des Videos ab. Aber warum? Soweit ich weiß, zeigt dieser Manipulierbarkeitsfaktor die lineare Abhängigkeit der Achsen an. Für mich scheinen die Achsen am Anfang nicht linear abhängig zu sein.

Diese ruckartige Bewegung macht mich verrückt. Wie Sie in der ersten Animation sehen können, scheint der Solver ordnungsgemäß zu funktionieren. Was fehlt mir hier?

Joe
quelle
1
Willkommen bei Robotics , Joe! Dies ist eine fantastische Frage, aber leider glaube ich nicht, dass es genug Details gibt, um die Frage zu beantworten. Wenn ein System zu einer Singularität wechselt, würde ich erwarten, dass eine Bewegungsachse einen wilden Schwung ausführt, wie eine Achse, die um 180 Grad schwingt, weil eine andere versucht, 89 bis 91 Grad zu erreichen (wenn 90 Grad die Singularität wären). Ich sehe dieses Verhalten hier nicht wirklich. Ich frage mich, ob dies eher ein Implementierungsproblem ist, z. B. die Verwendung von etwas atananstelle von atan2usw. Könnten Sie bitte Ihre Frage bearbeiten, um den von Ihnen verwendeten Code zu veröffentlichen?
Chuck
1
@ Chuck, ich habe die Frage so bearbeitet, dass der "wilde Swing" zu sehen ist. (Schauen Sie sich die 2. aktualisierte Animation an)
Joe

Antworten:

1

Wie andere bereits betont haben, muss es ein Problem mit Ihrer Implementierung des IK-Algorithmus geben, da die von Ihnen angegebenen Beschreibungen kein singuläres Verhalten enthalten dürfen.

Jetzt haben Sie zwei Alternativen: Entweder Sie beginnen mit dem Debuggen des Codes oder Sie möchten die Tatsache ausnutzen, dass das Problem leicht in zwei Teilprobleme unterteilt werden kann, für die Sie den größten Teil des bisher geschriebenen Codes problemlos verwenden können.

Angesichts des gewünschten 3D-Ziels ist es einfach zu beobachten, dass der gewünschte Wert des ersten Gelenks lautet: .(xd,yd,zd)θ1d=Arctan(ydxd)

Das Steuergesetz, um das erste Gelenk des Manipulators nach kann so einfach sein wie:θ1d

θ1˙=K.1(θ1d- -θ1).

Dann sei die Matrix, die die Drehung von um die Achse berücksichtigt :R.S.Ö(3)θ1dz

R.=(cosθ1d- -Sündeθ1d0Sündeθ1dcosθ1d0001).

Durch Sie das neue Ziel , das ein neues planares IK 2D-Problem verursacht in der Ebene.R.(xd,0,zd)1=R.T.(xd,yd,zd)T.xz

Zu diesem Zeitpunkt können Sie nach indem Sie den Jacobian des verbleibenden 4-DOF-Manipulators verwenden.(xd,zd)1

Ugo Pattacini
quelle
Ich denke, es besteht keine Notwendigkeit, das Problem in Teilprobleme aufzuschlüsseln. Da die Deklaration des Einheitsvektors bereits angibt, was Sie gerade beschrieben haben.
Joe
Die Aufschlüsselung ist nur ein Vorschlag, damit Sie den 4 DOF Jacobian wiederverwenden können. Dies ist der Teil Ihres Codes, der reibungslos funktioniert, wie Sie zu Beginn Ihres Beitrags berichtet haben.
Ugo Pattacini
0

Ich denke, Sie haben eine algorithmische Singularität an der ersten Handgelenkachse eingeführt. Es scheint mir, dass es, wenn es 90 Grad nach unten erreicht, anstatt auf 91 zu gehen, versucht, durch Null auf -269 Grad zurückzukehren.

Dies ist natürlich spekulativ, ohne den Code zu sehen.

SteveO
quelle