Mit einem 6-Achsen-Roboter können Sie bei gegebener Endeffektorposition und Orientierungsbereich optimale Gelenkwerte finden


10

Bei einem sechsachsigen Gelenkroboterarm, der ein Werkzeug an seinem Endeffektor hält, gibt es genau eine Lösung für die inverse Kinematikgleichung, wenn der Roboter diese Position erreicht, wenn ich eine gewünschte Werkzeugposition und Werkzeugausrichtung habe.
(oder besser gesagt bis zu 16 verschiedene Lösungen, je nach Reichweite der Gelenke)

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

Aber wenn der Roboter so etwas wie einen Stift hält und ich möchte, dass der Roboter einen bestimmten Punkt mit diesem Stift auf dem Ziel markiert, ist es mir egal, wie der Stift ausgerichtet ist, solange er senkrecht zur markierten Oberfläche steht.

Die inverse Kinematikgleichung wird also unendlich viele Lösungen haben.

Wie kann ich unter diesen Lösungen die Gelenkkonfiguration auswählen, die der aktuellen Konfiguration am nächsten kommt: diejenige, für deren Erreichen die geringste Bewegung erforderlich ist?
(oder die Gelenkkonfiguration, die nach einem anderen ähnlichen Kriterium optimal ist, z. B. dass alle Gelenkwinkel am weitesten von ihrem Maximum und Minimum entfernt sind?)

Antworten:


9

Zuerst müssen wir das Optimum definieren . Da Sie nicht sagen, was Sie für optimal halten, wählen die meisten Menschen einen quadratischen Ausdruck. Angenommen, Ihre aktuellen Gelenkwinkel sind durch den Vektor . Wir können erwägen, die erforderliche Bewegung zu minimieren - mit einem Fehler x = α - α s t a r t können Sie für eine Matrix Q eine Kostenfunktion J = x T Q x definieren . Normalerweise verwenden wir eine Diagonalmatrix, aber jede positiv-definitive Matrix reicht aus.αx=ααstartJ=xTQxQ

In einem vereinfachten Beispiel mit zwei Gelenkwinkeln könnten wir eine Kostenfunktion von haben , wenn Gelenk einen billigeren Motor hätte (möglicherweise näher am Endeffektor)a

, dh. Bewegung des Gelenks bJ.=[xeinxb]][1002]][xeinxb]]b ist doppelt so kostspielig wie die von Gelenk .ein

Nun ist die kinematische Gleichung eine Matrixformel, und in Denavit-Hartenberg-Notation könnte lauten:

, wobei die rechte Seite die Position darstellt ( x , y ,T.ich=[100x010y001z0001]] und Ausrichtung (derzeit als Nulldrehung eingestellt) darstellt, wenn Gelenkwinkel.(x,y,z)

Da uns die Ausrichtung und nur die Position egal sind, können wir die ersten drei Spalten der letzten Transformationsmatrix und die letzte Zeile der ersten Transformationsmatrix abschneiden. Wir können diese Formel äquivalent ausdrücken als:

[100001000010]]T.ich[0001]]=[xyz]]

Wenn wir die linke Seite multiplizieren, erhalten wir drei Gleichungen. Wenn die Parameter linear wären, wäre es einfach zu lösen. Dies ist der Fall, wenn alle Aktuatoren lineare Aktuatoren sind. In diesem Fall ist das Problem tatsächlich ein quadratisches Programm . Wir können die linke Seite neu anordnen, um die Gleichung zu erhalten:

für eine MatrixK.x=[xyz]] .K.

Ein quadratisches Programm ist ein Problem, das in folgender Form ausgedrückt werden kann:

Minimiere J.=12xT.Q.x+cT.x

EINxbE.x=d

Um dies zu lösen, gibt es eine Reihe von Algorithmen, die Sie verwenden können, z. B. Innenpunkt, aktive Menge, .... Finden Sie einfach eine geeignete Bibliothek und sie wird sie für Sie lösen.

Ein nichtlineares Gleichungssystem ist schwieriger zu lösen. Dies wird als nichtlineare Programmierung bezeichnet , aber es ist das, was Sie haben, wenn Sie rotierende Gelenke haben.

Im Wesentlichen haben Sie anstelle von Matrixgleichungen nichtlineare Funktionen.

f(x)h(x)=0G(x)0

Die zur Lösung dieses Problems verwendeten Algorithmen sind noch komplexer, umfassen jedoch Interior-Point-, Sequential Quadratic Programming (SQP) - Active-Set- und Trust-Region-Reflective-Algorithmen. Offensichtlich ist die Erklärung, wie diese Algorithmen funktionieren, sehr langwierig, und ich werde sie aus dem Rahmen dieser Antwort herauslassen. Es genügt zu sagen, dass die Menge an Inhalten zu den Algorithmen, die nur für die quadratische Programmierung verwendet werden, ein ganzer Kurs für sich sein kann.

Sie sollten nur eine Bibliothek finden, um das Problem zu lösen. Das Codieren einer effizienten Implementierung würde lange dauern, und effiziente Implementierungen können 100 (oder mehr) Variablen gleichzeitig verarbeiten. Wenn Sie beispielsweise MATLAB verwenden, finden Sie in der Optimization Toolbox eine Dokumentation zur Verwendung der Funktion fmincon .

Um es online zu lösen, benötigen Sie möglicherweise C ++ oder eine andere native Implementierung, z. B. NLopt. Beachten Sie, dass dies möglicherweise nicht schnell von einem Mikrocontroller gelöst werden kann und viele Bibliotheken möglicherweise andere Abhängigkeiten aufweisen, die auf einem Mikrocontroller nicht einfach zu verwenden sind (da sie für einen Computer vorgesehen sind).


Wenn Sie sich keine Sorgen um die Effizienz machen und nur etwas möchten, das Sie selbst codieren können, können Sie unter der Annahme, dass es eine Funktion gibt, die Sie aufrufen können, um das inverse kinematische Problem zu lösen können, einfach eine Gradientenabstiegsmethode durchführen. Wenn Sie beispielsweise willkürlich eine zufällige Startorientierung auswählen, das inverse Problem lösen und dann die Kostenfunktion überprüfen. Anschließend können Sie mithilfe der Störungsanalyse überprüfen, wie Sie die Ausrichtung variieren sollten. Wenn Sie beispielsweise ähnliche Ausrichtungen um Ihre aktuelle Ausrichtung herum überprüfen (dh 8 Punkte in einem kubischen Raster), können Sie eine Annäherung zweiter Ordnung erhalten, wie sich die Kostenfunktion in jeder Richtung ändert.

Unter Verwendung der Näherung zweiter Ordnung (bekannt als hessische Matrix, da sie multivariat ist - dreidimensional zur Orientierung) können Sie den Nulldurchgang des Gradienten der Kostenfunktion (dh der vorhergesagten lokalen Minima) ermitteln.

Führen Sie die neue vorhergesagte Ausrichtung einfach erneut durch den inversen Löser und wiederholen Sie den Vorgang, bis die Genauigkeit ausreicht.

Beachten Sie, dass dies wahrscheinlich nicht so effizient ist, da das inverse kinematische Problem selbst iterativ gelöst werden muss (Sie verwenden also wiederholt eine Funktion, deren Lösung selbst eine Weile dauert). Der betreffende Code ist möglicherweise weniger als ein vollwertiger Optimierungsalgorithmus, aber er ist immer noch recht umfangreich und kein unbedeutender Zeitaufwand.


Bei Verwendung einer der beiden Methoden (formales Lösen als nichtlineares Programm oder iteratives Verwenden einer Funktion zum Lösen des inversen Problems) ist die Lösung möglicherweise nicht optimal, wenn mehrere lokale Minima vorhanden sind. In diesem Fall können Sie versuchen, die globalen Minima mithilfe verschiedener Ansätze zu ermitteln. Selbst mit einem nichtlinearen Programmierlöser wird erwartet, dass Sie Anfangswerte (z. B. Gelenkwinkel) verwenden. Sie können beide Methoden wiederholt ausführen, wobei der Startwert auf verschiedene Arten generiert wird:

  • zufälliger Neustart (wird zufällig generiert)
  • gitterbasiert

oder andere benutzerdefinierte Methoden.

Beachten Sie jedoch, dass es bei vielen Minima keine gute Möglichkeit gibt, zu garantieren, dass Sie die globalen Minima finden. Sie können nur Ihre Chancen verbessern.


2

Da es sich um einen Industrieroboter handelt, haben wir wahrscheinlich kein Modell für die Dynamik des Roboters. Ich gehe daher davon aus, dass wir nach Lösungen suchen, die nur ein kinematisches Kriterium optimieren.

Der Roboter hat eine geschlossene Lösung für seine inverse Kinematik, aber leider hat der Endeffektor einen zusätzlichen Rotationsfreiheitsgrad, was bedeutet, dass der Roboter im Wesentlichen 7 Freiheitsgrade hat. Aber weil dies nur noch ein Dof ist , ist es nicht so ein Problem, wie man denken könnte.

0,051360118

Wenn sich der Stift die meiste Zeit nur wenig bewegt (z. B. beim Zeichnen einer Linie), besteht ein weiterer Trick zur Beschleunigung der Suche darin, numerische IK zu verwenden, beispielsweise die pseudoinverse Methode:

q1J.ΔxΔx=J.ΔqΔqq2=q1+ΔqΔqΔq

q2


1

rz

J.- -1X.˙=Θ˙=[j1j2j3j4j5j6]][x˙y˙z˙rx˙ry˙rz˙]]=[θ1˙θ2˙θ3˙θ4˙θ5˙θ6˙]]
jichichthJ.- -1Θ˙rz˙
Θ˙=Θ˙x˙ry˙+Θ˙rz˙Θ˙rz˙=j6rz˙
(Θ˙x˙ry˙+Θ˙rz˙)T.D.(Θ˙x˙ry˙+Θ˙rz˙)
D.EIN=Θ˙x˙ry˙B.=Θ˙rz˙

EINT.D.EIN+2B.T.D.EIN+B.T.D.B.oderEINT.D.EIN+2rz˙j6T.D.EIN+rz˙2j6T.D.j6

rz˙rz˙0

2j6T.D.EIN+2rz˙j6T.D.j6=0rz˙=- -j6T.D.EINj6T.D.j6
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.