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.
:)
Mein Kontrollwissen ist sehr gering, aber ich werde meinen Wert von $ 0,02 daAntworten:
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.
:)
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 ...
:)
Differenzieren:
Basierend auf der Lösung fürA(aus Coursera) istAδ=0
Jetzt können Sie die Polplatzierung verwenden, um die richtigen Eigenwerte usw. zu bestimmen.
quelle