Bau eines Auswuchtroboters mit Differentialantrieb

8

Ich habe bereits einen zweirädrigen Auswuchtroboter mit einigen Servos mit kontinuierlicher Rotation und einem Beschleunigungsmesser / Gyroskop gebaut. Ich habe die Servos auf einige Getriebemotoren mit 8-Bit-Encodern umgerüstet, mit dem Ziel, dass der Roboter beim Auswuchten herumfährt.

Ich bin ein bisschen festgefahren, wie ich es programmieren soll, um herumzufahren, während ich noch balanciere. Ich denke, eine Möglichkeit wäre, den Steuereingang der Motoren so zu gestalten, als würde er gedrückt. Der Roboter wäre also momentan in der Richtung, in die er fahren soll, unausgeglichen. Das scheint mir allerdings etwas ungeschickt zu sein. Es muss einen besseren Weg geben? Ich denke, ich muss das dynamische Modell für den Balancer mit dem Differentialantrieb kombinieren, aber dies geht etwas über die mir bekannte Steuerungstheorie hinaus.

Update Aus Anortons Antwort habe ich jetzt eine gut aussehende Zustandsmatrix.

Nun zur Polplatzierung: Die A-Matrix muss 4x4 sein, basierend auf dem neuen Zustandsvektor. Und B muss dann eine 4x2-Matrix sein, da ich nur das Drehmoment des linken / rechten Rads steuern kann (u = 2x1-Vektor).

Ich muss vielleicht mehr darüber lesen, aber gibt es eine systematische Möglichkeit, die A-Matrix durch Polplatzierung zu bestimmen? Für dieses Beispiel und noch kompliziertere Beispiele scheint es mir sehr schwierig zu sein, A durch Erraten und Überprüfen zu bestimmen.

Update Nr. 2 Nach einigem Lesen denke ich, dass ich es jetzt verstehe. Ich brauche immer noch die Dynamik des Roboters, um die A-Matrix zu bestimmen. Sobald ich das habe, kann ich die Polplatzierung mit Matlab oder Oktave durchführen.

JDD
quelle
1
Welche Art von Ansatz verwenden Sie / welche Kontrolltheorie kennen Sie? Ich kann einen Ansatz aufschreiben, aber er kann je nach Hintergrund sehr
einfach
Vielen Dank! Für das alte Design mit den Servos berechnete ich den Neigungswinkel anhand der Daten des Kreisels / Beschleunigers. Senden Sie das an einen Kalman-Filter und dann an eine PID für die Servoposition. Ich bin gut mit Differentialgleichungen und okay mit linearer Algebra. Ich bin noch ziemlich neu in der Steuerung, also vielleicht die grundlegende? Oder beides, wenn du willst. Ich bin immer daran interessiert, mehr zu erfahren :)
JDD
1
Ich habe nur einen Ansatz, daher war mein vorheriger Kommentar wirklich, dass er in beide Richtungen gehen kann (entweder super fortgeschritten, wenn Sie gerade mit Robotern angefangen haben, oder super einfach, wenn Sie einige Kenntnisse über Steuerungen haben) ... Basierend auf Ihrem vorherigen Kommentar, ich habe das Gefühl, dass ich überholt bin. :) Mein Kontrollwissen ist sehr gering, aber ich werde meinen Wert von $ 0,02 da
reinwerfen
Willkommen bei Robotics JDD. Es ist besser, zusätzliche Informationen in Ihre Frage zu bearbeiten, als sie als Kommentar hinzuzufügen. Auf diese Weise können Kommentare später aufgeräumt (gelöscht) werden und die Leser werden nicht mehr von der Frage selbst abgelenkt.
Mark Booth

Antworten:

8

Haftungsausschluss: Ich habe dies nie selbst getan, sondern nur eine Beschreibung davon durch Georgia Techs "Control of Mobile Robotics" auf Coursera gesehen. Auch meine Kenntnisse über Kontrollen sind unvollständig. Also ... nimm das mit einem Körnchen Salz.:)

0x

x=[leftVelocityrightVelocityWinkel von der Vertikalen]]

0

xnew=[leftVelocity- -δL.rightVelocity- -δR.Winkel von der Vertikalen]]
δ

Wenn dieses System stabilisiert ist, steht der Roboter aufrecht und jedes Rad dreht sich mit der gewünschten Geschwindigkeit.

Dies ist der grundlegende Ansatz / Entwurf. Ich werde dies morgen mit einigen weiteren Details (und der tatsächlichen Mathematik usw.) bearbeiten, aber ich wollte jetzt zumindest die allgemeine Idee veröffentlichen. (Es ist spät in meiner Zeitzone und ich habe eine frühe Klasse zu erreichen.)

EDITIERT: Oh Gott. Also habe ich gerade auf die diesbezüglichen Folien im Coursera-Kurs zurückgeblickt (Abschnitt 4, Folie 29). Vielleicht möchten Sie sich für diese Klasse anmelden, um das Folienset herunterzuladen ...:)

EINB.

x=[vωϕϕ˙]]

vωϕ

x~=x- -[vdωd00]]=x- -δ

δ

Differenzieren:

x~˙=x˙- -δ˙=δ ist konstantx˙

x~˙=EINx+B.u

EINB.u

Basierend auf der Lösung fürA(aus Coursera) istAδ=0

x~˙=EIN(x- -δ)+B.u+EINδ
EINEINδ=0
x~˙=EINx~+B.u

Jetzt können Sie die Polplatzierung verwenden, um die richtigen Eigenwerte usw. zu bestimmen.

Apnorton
quelle
Super danke! Ich habe dieselbe Coursera-Klasse auch gemacht, wir sind wahrscheinlich nicht zu weit vom Kontrollwissen entfernt. Es stellt sich heraus, dass dies ein viel schwierigeres Projekt ist als ich dachte. Ich mag deine Zustandsmatrix bisher.
JDD
Eek! Es scheint, dass ich heute Abend nicht antworte! Ich war letzte Woche in der Frühlingspause und habe etwas vergessen, das fällig war, so dass ich heute beschäftigt war. Ich werde es morgen bearbeiten ...
Apnorton
Kein Problem. Ich habe gestern meine letzte H-Brücke in die Luft gesprengt, um sie zusammenzubauen, also muss ich auf einen Ersatz warten.
JDD
Vielen Dank Anorton für die Hilfe. Ich glaube, ich verstehe jetzt viel mehr, wie man das macht. Ich habe meine ursprüngliche Frage aktualisiert. Die Bestimmung der A- und B-Matrizen verwirrt mich jedoch immer noch.
JDD