HaBuRo3.
Keine Motor-Rückführung (Encoder). Ich hätte Schrittmotoren genommen?!
Optimierung Regler.
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).
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.