Forum: PC-Programmierung Balancierender Lego-Roboter - PID für Dummies


von Lerniew (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,
mit dem Lego-Set 51515 habe ich einen simplen Roboter gebaut, der sich 
selbst aufrecht halten soll. Warum? Nur zum Spaß, und um vielleicht ein 
bisschen was zu lernen. Das Thema ist absolutes Neuland für mich, aber 
ich finde das Ganze sehr faszinierend :-)

Nach ein bisschen Recherche bin ich zu dem Ergebnis gekommen, dass ein 
PID-Regler wohl für dieses Problem geeignet ist. Sowohl die Theorie als 
auch die Beispiel-Implementierungen im Netz meine ich verstanden zu 
haben.

Allerdings sind meine Ergebnisse bisher sehr ähem dürftig. Der Roboter 
schafft es nicht mal ansatzweise sich aufrecht zu halten. Auch ein 
zweistündiges PID-Tuning hat bisher keinen Erfolg gebracht.

Daher wollte ich mich mal an die Experten hier wenden:
 - Könnte es an der Hardware liegen? Ist der Aufbau des Roboters 
geeignet? Sind Lego-Motoren ggf. zu schwach?
 - Liegt es an der Implementierung? Der Code ist ja wirklich sehr 
simpel...
 - Oder muss man einfach nur mehr/länger/besser an den PID-Parametern 
feilen?

Zwei Bilder vom Roboter habe ich angehängt. Den derzeitigen Stand des 
Programms ebenfalls. Wer den Roboter in Aktion sehen möchte wir hier 
fündig:
https://drive.google.com/file/d/1XtRt83N_fkW3YN8b2uqhdwNeta5lncKU/view?usp=sharing

Für sachdienliche Hinweise wäre ich dankbar :-)

von Malte _. (malte) Benutzerseite


Lesenswert?

Sowas gabs mal bei meiner ehemaligen Uni als Bachelorarbeit:
https://www.ti.uni-bielefeld.de/html/research/fastA4/index.html
Ist jetzt also nicht das einfachste Thema, aber auch nicht unmöglich ;)

von Thomas S. (thomas_s152)


Lesenswert?

Das Video sieht doch schon ganz gut aus. Im Prinzip macht der Roboter 
das Richtige. Er reagiert aber zu langsam, und wenn der Roboter mal eine 
bestimmte Neigung überschritten hat, dann reicht die Beschleunigung der 
Motoren einfach nicht mehr aus.

Was helfen könnte: sehr weit oben (Größenordnung 20cm) ein Gewicht 
anbringen. So werden die Pendelbewegungen viel langsamer, und 
Neigungsänderungen können korrigiert werden, bevor es zu spät ist.

Der Roboter muss schon auf sehr kleine Neigungsänderungen reagieren.
Vielleicht ist da ein Teil des Problems?

von N. M. (mani)


Lesenswert?

Thomas S. schrieb:
> Was helfen könnte: sehr weit oben (Größenordnung 20cm) ein Gewicht
> anbringen.

Ja sehe ich auch so. Massenträgheit könnte helfen. Verschleiert ja aber 
nur dass die Regelstrecke so nicht richtig funktioniert.


Ich würde auch noch 2 andere Dinge anschauen:

Setze am Anfang der while(1) Mal einen Pin auf High und vor dem Wait 
ganz am Schluss den Pin wieder auf Low. Damit kannst du zum einen 
schauen
wieviel Zeit deine eigentlichen Rechnungen benötigen (evtl. gehst du von 
10ms aus und der Rest benötigt nochmal genauso viel, im schlimmsten Fall 
unterschiedliche Durchlaufzeiten) und
ob die 10ms  Zykluszeit einigermaßen stabil sind (--> geht ja in den I 
und D Anteil ein).
Wenn du ein Oszi hast. Ansonsten musst du dir evtl Zeiten latchen und 
irgendwie ausgeben. Variante 1 wäre zu bevorzugen.

Was für ein Sensor ist das denn genau der denn Winkel misst? 
Bezeichnung? Vielleicht auch noch die verbauten Chip Bezeichnung (en) 
falls du die hast damit man Mal etwas abschätzen kann bzgl 
Genauigkeit/Reproduzierbarkeit/Updaterate/Bandbreite des Sensors.

Ich habe sowas auch während dem Studium Mal aus Schrottteilen gebaut. 
Hatte sogar nur ein Mega Controller drauf und musste zusätzlich noch die 
Sensordaten fusionieren. Erster Versuch war auch ein PID mit ca. 100Hz 
Updaterate. Regelparameter grob eingestellt hat ausgereicht damit das 
Ding stehen blieb.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

N. M. schrieb:
> Massenträgheit könnte helfen.

Auf jeden Fall.

> Verschleiert ja aber nur dass die
> Regelstrecke so nicht richtig funktioniert.

Es kann aber auch sein, dass man das über die vorgestellte 
Massenverteilung nicht mehr hinbekommt. Da muss man wirklich sehr flink 
sein.

Versuche einmal, einen Besenstiel und einmal ein Streichholz auf dem 
Zeigefinger zu balancieren. Bei dem Streichholz ein Ding der 
Unmöglichkeit.

: Bearbeitet durch Moderator
Beitrag #6502673 wurde von einem Moderator gelöscht.
von Teo D. (teoderix)


Lesenswert?

Frank M. schrieb:
> die vorgestellte
> Massenverteilung nicht mehr hinbekommt.

LEGO..... Na dann macht halt die Benle (Beine) länger.

Beitrag #6502692 wurde von einem Moderator gelöscht.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.