Welchen Algorithmus sollte ich zum Auswuchten eines zweirädrigen Roboters mit einem Gyroskop verwenden?


25

Gibt es einen guten, beliebten und zuverlässigen Algorithmus, den ich verwenden kann, indem ich Eingaben von einem Kreisel nehme und damit zwei unabhängige Räder steuere, um einen derart ausgewogenen Roboter zuverlässig aufrecht zu halten? Ich suche einen Algorithmus, mit dem ich einen Roboter herumfahren und im Stillstand aufrecht halten kann. Die Fähigkeit, mit Steigungen und Stößen umzugehen , wäre ebenfalls ein Bonus, aber nicht unbedingt erforderlich .


Ich werde auch daran arbeiten. Sie müssen einen Kalman-Filter verwenden, um Ihre Rohdaten zu filtern. Verwenden Sie einen PID-Algorithmus, um ihn abzustimmen.
Huzo

Antworten:


16

Die einfachste Steuerung ist eine lineare Zustandsregelung. Es gibt im Wesentlichen 4 verschiedene Zustände, für die Sie eine Verstärkung benötigen. Dies sind Neigungswinkel, Neigungsrate, Geschwindigkeit und Position.


LQR (linearer quadratischer Regler) ist eine Methode zum Entwerfen dieser Verstärkungen (nachdem eine linearisierte Zustandsraumdarstellung Ihres Systems erhalten wurde). Wenn Sie keine Zustandsraumdarstellung haben (wahrscheinlich auch nicht), können Sie Bewegungsgleichungen abrufen und die Parameter messen. Wenn Sie keine Zustandsraumdarstellung haben, sollten Sie nur die Gewinne tune manuell (ohne LQR oder andere Methoden wie Pol Platzierung ).


Manuelles Einstellen der Gewinne:

Unter der Annahme, dass Neigungswinkel, Position / Geschwindigkeit und Raddrehmomente alle nach vorne gerichtet sind (falls positiv), möchten Sie einen positiven Gewinn für Ihren Neigungswinkel und Ihre Neigungsrate sowie einen positiven Gewinn für Position und Geschwindigkeit.

Beginnen Sie mit einer Verbesserung des Neigungswinkels und der Neigungsrate. Dadurch wird es zunächst ausgeglichen. Sobald es ausgeglichen bleibt, können Sie Position und Geschwindigkeit steuern, indem Sie eine Verstärkung hinzufügen. Wenn es instabil ist, erhöhen Sie die Verstärkung der Neigungsrate (was zur Dämpfung des Systems beiträgt).

Die Positions- / Geschwindigkeitsregelung regelt beide Zustände auf Null. Um auf einen anderen Wert zu regeln, benötigen Sie lediglich einen Referenz-Tracking-Controller, indem Sie die Zustände durch ihre Fehler ersetzen, bevor Sie sie in Ihren Controller einspeisen (z. B. aktuelle Geschwindigkeit - Geschwindigkeitsreferenz).

Die Gierregelung kann unabhängig voneinander durchgeführt werden (wobei die Differenz der Raddrehmomente zum Hauptregler für Unruh / Geschwindigkeit / Position addiert wird).


9

Ich glaube, die beliebteste Lösung für dieses Problem ist ein LQR- Controller. Das Problem, das Sie lösen möchten, ist das Problem des umgekehrten Pendels . Mit diesen Schlüsselwörtern sollten Sie in der Lage sein, den Open-Source-Code von jemandem zu googeln. Das nächste Problem ist die Zuordnung der meisten relevanten physikalischen Größen zu Ihrer Anwendung (Gewicht, Motordrehmoment usw.).


5

Da ich Ihre Kenntnisse in Regelungstechnik / Theorie nicht kenne, empfehle ich Ihnen, mit einem PID-Regler zu beginnen . Es ist ein einfacher Controller und Sie werden viele Code-Implementierungen davon finden. Der Nachteil der PID ist, dass Sie wahrscheinlich einige Zeit damit verbringen werden, die Parameter von Hand einzustellen.

Vor einigen Jahren habe ich damit einen zweirädrigen Lego Mindstorm-Roboter basierend auf seiner Kilometerzahl gesteuert, und er funktionierte gut genug. Um sich zu bewegen, müssen Sie mit den Sollwerten spielen.

Natürlich können Sie später die Qualität Ihrer Steuerung (Stabilität, Robustheit usw.) verbessern, indem Sie erweiterte Steuerungsgesetze wie das oben erwähnte LQR verwenden.

Viel Glück!

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.