HaBuRo3.

Keine Motor-Rückführung (Encoder). Ich hätte Schrittmotoren genommen?!

Optimierung Regler.

Zurück

Vorwort:
Wenn du einen Selbstbalancierenden Roboter bauen willst, musst du einige Entscheidungen treffen! Soll er nur Balancieren oder auch Fahren mit einer Fernsteuerung?

Der hier vorgestellte Roboter besitzt keine Motorrückmeldung. Der Regler Algorithmus ist nicht komplett, einen vom Regler vorgegebenen Fahrwinkel wird nicht vom Motor als „ausgeführt“ zurück geliefert. Es fehlt der Encoder. Oder man setzt Schrittmotore ein.

Mir war das schon bewusst! Der HaBuRo3 wurde aus Materialien gebaut, die vorhanden waren. Ich wollte kein Geld investieren. Ich dachte mir, investiere mehr Zeit in die Trimmung der Regler Parameter und den Sollwert (Setpoint). Das hat auch geklappt. Jedoch kommt der Roboter nicht an die Fahrleistungen heran, die ich auf „guten“ Kanälen bei youtube gesehen habe.

Nach Fertigstellung des Roboters und einigen Wochen des Ausprobierens, kann ich berichten, dass das Balancieren schnell umgesetzt wurde, jedoch die Abstimmung mit dem Setpoint zum Vor- und Zurückfahren einiges an Zeit gekostet hat.

Die Parameter des PID-Reglers Ki, Kp, Kd einstellen:

Zuerst den HaBuRo3 so ausrichten, dass er senkrecht (im Lot) steht und der Beschleunigungssensor-Gyroskop-MPU6050 in Waage ist.

Danach die Arduino-IDE oder Visual Studio Code (mit PlatformIO) starten. Die USB-Schnittstelle des ESP32 Mikrocontrollers mit dem PC verbinden. Die Akkuversorgung bleibt aus, der ESP32 wird über USB/PC mit Strom versorgt. Die Motoren (sie drehen mit sehr niedriger Drehzahl) hören auf zu drehen, weil die Akkuspannung unter 6,6 Volt liegt. Konsole aktivieren. Alle Parameter zur Trimmung werden jetzt angezeigt:

Eigentlich braucht man zur Trimmung vier Potentiometer, dummerweise sind es jedoch nur drei. Aus diesem Grund müssen zum Anfang zwei Anweisungen in der Software eingestellt werden: Zeile 30 das Kommentarsymbol (//) entfernen und Zeile 31 auf Kommentar setzen. Jetzt beziehen sich die Potentiometer nur auf Ki, Kp und Kd.

Die Konsole zeigt unter (1) einen Neigungswinkel (Pitch) an. Diesen Wert in Zeile 19 eintragen. Nun muss das Programm neu kompiliert werden und eine Übertragung zum ESP32 muss erfolgen. Jetzt die drei Potentiometer auf null stellen. Werkzeug: Uhrmacher-Schraubendreher! Die Konsole zeigt folgende Werte an: Ki=0.0 / Kp=0.0 / Kd=0.0 und So=0.49° (in meinem Fall).

HaBuRo3 Potentiometer

USB-Datenkabel aus den ESP32 Mikrocontroller abziehen. Den HaBuRo3 auf einen freigeräumten Tisch legen. Die Trimmung mit den Potentiometern geht am besten, wenn du den Roboter um mehr als 35° neigst, dann stoppen die Motoren.

Das Kp-Potentiometer (Proportionale Verstärkung) allmählich erhöhen. Bis der Roboter zu oszillieren beginnt. Ist Kp zu gering, wird der Roboter fallen. Der Roboter macht wilde Schwingungen, bei zu großem Kp. Ein ausreichend guter Kp lässt den Roboter ein wenig schwingen. Idealerweise wird nun bereits ein aufrechtes Stehen erreicht, wobei es zu mehr oder weniger großen Ausgleichsbewegungen in beiden Richtungen kommt. Der Roboter pendelt oder zittert rasch um die ideale Gleichgewichtslage.

Nun kann man damit beginnen das Kd-Potentiometer zu trimmen. Ein optimaler Kd-Parameter verringert die Schwingungen, bis der Roboter nahezu bewegungslos in der aufrechten Position verharrt. Bei gut eingestelltem Kp und Kd bleibt der Roboter auch dann in der aufrechten Position, wenn er mit der Hand angestoßen wird. Auch bei optimalen Kp und Kd hat der HaBuRo3 Regelabweichungen und ist machtlos bei Störungen. Er oszilliert unter Störeinflüssen und kann sogar das Gleichgewicht verlieren.

Jetzt kommt das dritte Potentiometer Ki ins Spiel! Der ideale Ki-Wert ist gefunden, wenn die Zeit für die Lagestabilisierung minimal wird.

Mach jetzt eine Pause. Ich habe diese ganze Prozedur auf mehrere Tage verteilt. Wir sind noch nicht am Ende angekommen! DerHaBuRo3 hat keine Motorrückführung, es gibt keine Informationen über Radumdrehungen (Encoder). Deshalb müssen wir aus der Trimmung alles herausholen was geht. Quasi der totale Feinschliff! Ich kann aber jetzt schon berichten, ist alles optimal eingestellt rastet der Roboter regelrecht in der Senkrecht-Position ein und steht wie eine Deutsche Eiche. Störeinflüsse werden souverän ausgeglichen.

Ist der Roboter ausbalanciert stellt sich folgendes Verhalten ein: Nach wenigen Sekunden fährt der Roboter eigenständig vor oder zurück! Bei diesem Sachverhalt müssen wir uns um den Sollwert (Setpoint) des Reglers kümmern!

Erneut müssen wir den Roboter, wie oben schon beschrieben, mit der IDE verbinden. Die Werte von Kp, Kd und Ki auslesen (Konsole) und in Zeile 20 bis 22 eintragen. Weiterhin in Zeile 30 die Anweisung auf Kommentar legen. Jetzt in Zeile 31 den Kommentar entfernen. Das Potentiometer vorher Ki wird jetzt zum Sollwert (Setpoint). Neu Kompilieren und das Proramm zum ESP32 übertragen.

Wir optimieren jetzt den Sollwert: Macht der Roboter eine ständige Vorwärtsbewegung dann drehen wir das Spindelpotentiometer (Ki ist jetzt Sollwert) im Uhrzeigersinn eine viertel Umdrehung. Bei einer Rückwärtsbewegung genau andersherum. Diese Prozedur wiederholen wir bis der Roboter nur ein wenig tänzelt. Zum Stillstand bringen wir den HaBuRo3 nicht, weil die Motoren keinen Encoder besitzen. Damit kann ich aber leben!

Wenn du zufrieden mit der Trimmung bist, empfehle ich dir trotzdem den Vorgang für die Trimmung zu wiederholen. Für die Trimmung muss man ein Gefühl bekommen. Bevor man den Roboter mit der Fernsteuerung ausreizt, prüft man noch das Verhalten, wenn die Akkuspannung von Nennspannung absinkt bis zur Spannungsabschaltung kurz vor der Tiefenentladung.




Zurück