Forum: Mikrocontroller und Digitale Elektronik Regelungstechnik - Identifikation eines balancierenden Roboter


von Patrick L. (crashdemon)


Lesenswert?

Hallo Leute,

ich habe einen balancierenden Roboter gebaut, den ich veruchen möchte 
wie ein inverses Pendel zum aufrechten stehen bleiben zu bringen.
Die Hardware sowie die Software steht soweit.

Grober Aufbau:
- STM32F3 Arm Cortex (STM32F3 Discovery Board mit Gyron und 
Beschleunigungsensor)
- Aktuelle Zykluszeit habe ich auf 5ms eingestellt, 2,2ms sind ca. WCET.
- Zwei Gleichstrommotoren mit Getriebe
- Drehzahl kann über PWM gesteuert werden.
- Winkel wird mit einem Kalman-Filter aus (Gyro + Accel.) bestimmt
- Software-PID Regler, der allerdings nur als PD-Regler genutzt wird

Zurzeit habe ich den PD-Regler nach gefühl eingestellt, was zu 
befriedigenden Ergebnissen geführt hat. Bei sehr kleinen Auslenkungen 
aus der Ruhelage kann er mitunter 1-2sec aufrecht stehen bleiben!

Allerdings wie ich finde, noch weit entfernt von einer optimalen 
Regelung.

Mein Vorgehen wäre jetzt erstmal ein mathematisches Modell der 
Regelstrecke aufstellen. Die Regelstrecke würde ich mit einem PT1-Glied 
approximieren.

Dann würde ich den Rechner mal simulieren lassen (nach entsprechenden 
Gütekriterien) was so optimale Regler Einstellungen wären.

Kann das so gehen? Und wie kann ich die Parameter der Regelstrecke 
geeignet erfassen, da das System ja an sich instabil ist und deswegen ja 
warscheinlich nicht so die optimale Sprungantwort liefern wird ;-)

: Bearbeitet durch User
von Sebastian W. (wangnick)


Lesenswert?

Patrick L. schrieb:
> ich habe einen balancierenden Roboter gebaut, den ich veruchen möchte
> wie ein inverses Pendel zum aufrechten stehen bleiben zu bringen.

Hey, wieder ein gleichgesinnter Bastler! Hallo!

Ich habe damals zunächst die Telemetriedaten der Sensoren sowie die 
daraus errechneten Winkel und Steuerwerte vollständig erfasst und 
grafisch dargestellt (mit Excel). Wichtig ist ja, die Drehmomente der 
beiden Motoren so zu dosieren, dass die Kippstellung und -bewegung nur 
sanft neutralisiert wird. Dazu muss man nicht wirklich gegen den 
Masseimpuls und die Schwerkraft anarbeiten, sondern man fährt sozusagen 
unter dem Schwerpunkt durch und neutralisiert den Schwung in die eine 
Richtung durch ein kurzzeitiges Verkippen in die andere Richtung.

Ich habe letzten Winter dann aber die Simulation der Kinematik in Matlab 
ruhen lassen ...

LG, Sebastian

von Max G. (l0wside) Benutzerseite


Lesenswert?

Wenn ich mich dunkel an mein Studium zurückerinnere, ist deine 
Regelaufgabe ein Kandidat für Zustandsregelung. Ich bin mir jetzt nicht 
sicher, ob der Kalmanfilter direkt als Beobachter verwendet werden kann, 
müsste aber gehen.

Zustandsgrößen des Systems könnten z.B. Kippbeschleunigung, 
Kippgeschwindigkeit und Winkel sein. Fies an der Aufgabe ist, dass das 
Verhalten hochgradig nichtlinear sein dürfte. Ein PD-Regler, der 
eigentlich ein lineares System erwartet, ist wohl nicht der optimale 
Ansatz.


N.B.: Ich bin immer wieder fasziniert, was hier an Projekten diskutiert 
wird. Deines gehört definitiv dazu.

Max

von Udo S. (urschmitt)


Lesenswert?

Patrick L. schrieb:
> Die Regelstrecke würde ich mit einem PT1-Glied
> approximieren.

Welche physikalische Gegebenheit bringt dich dazu daß das ein PT1 ist?

von Patrick L. (crashdemon)


Angehängte Dateien:

Lesenswert?

Udo Schmitt schrieb:
> Patrick L. schrieb:
>> Die Regelstrecke würde ich mit einem PT1-Glied
>> approximieren.
>
> Welche physikalische Gegebenheit bringt dich dazu daß das ein PT1 ist?

Habe im Studium mal ein inverses Pendel geregelt. Da hatten wir ein PT1 
Verhalten für die Strecke angenommen. Allerdings wurde das ganze dann 
auch wieder linearisiert und im Arbeitspunkt betrachtet, etc....

Da sich scheinbar viele Leute mit der Problematik beschäftigen werde ich 
hier auch mal ein wenig Theorie beisteuern. Alles aufs inverse Pendel 
bezogen, kann aber in großen Teilen Analog für den balancierenden 
Roboter angesetzt werden.

Eine Zustandregelung ist für diese Aufgabe ein wenig Oversized und ja im 
Grunde durch den Kalman-Filter für den Neigungswinkel bereits geschehen. 
Der Kalman-Filter ist ja im Prinzip von der Struktur wie der 
Luenberger-Beobachter, aufgrund von verrauschten Messsignalen wird auf 
die echten Messwerte geschlossen (und dabei schwächen des einen Sensors 
durch den anderen ergänzt). Ich möchte der Kalman-Teil aber als 
Black-Box ansehen aus der ich einfach den Neigungswinkel bekommen und 
der "hoffentlich" möglichst genau ist.

Was mein Problem zur Zeit ist: Wie kann ich das System mit einer 
Sprunkfunktion beaufschlagen um eine geeignete Sprungantwort zu 
bekommen, auf deren Basis ich ein sehr vereinfachtes Modell des Systems 
zu erhalten.
Mit diesem könnte ich dann zumindes schon einmal "optimale" 
Reglerparameter simulieren.

Achso, siehe Anhang. Da wurde die linearisierung im AP Phi = 0 
vorgenommen. Womit dann gilt sin Phi ~ Phi und cos Phi ~ 1

: Bearbeitet durch User
von Patrick L. (crashdemon)


Angehängte Dateien:

Lesenswert?

Max G. schrieb:
> Ein PD-Regler, der eigentlich ein lineares System erwartet, ist wohl nicht > der 
optimale Ansatz.

Dadurch das ja von geringen Auslenkungen aus dem Arbeitspunkt 
ausgegangen wird wird das ganze ja wieder linear. Ein Einsatz des 
PD-Reglers wird dadurch möglich. Außerdem sollte man vermeiden einen 
I-Anteil dazu zu nehmen, da die Strecke (wenn man sich die DGL der 
Strecke im Anhang oben ansieht) einen nicht zu verachtenden Anteil 
erhält. Dadurch würde man das ganze nur noch schlechter Regelbar machen.

Anbei noch ein Paar Bilder vom aktuellen Aufbau.

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.