PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PID Regelung bei ungenauem Signal (Drift)



goara
29.02.2008, 21:19
Hallo
bin gerade an diesem Projekt heir : https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=35143&highlight=
Habe 3 Gyroskope und einen 3-Achs acc um die Lage zu bestimmen.
bis jetz habe ich das Signal Tiefpass-gefiltert

Gyro_nick_m = Gyro_nick_m * 5
Gyro_nick_m = Gyro_nick_m + Gyro_nick_neu
Gyro_nick_m = Gyro_nick_m / 6

und das dann zu den Motor-Sollwerten gemischt.

zb wenn der Copter sich nach links dreht addiert er zur linken Sollgeschwindigkeit den errechneten Wert und subtrahiert ihn recht, um das Drehen abzufangen.


Motor_soll_v = Motor_soll_v + Gyro_nick_m
Motor_soll_h = Motor_soll_h - Gyro_nick_m


ist bis jetzt also ein reiner P- regler..
einen D- Anteil dazuzubauen ist ja auch kein Problem, dann habe ich einen PD regler..
Damit die Lageregelung gut funktionier muss es bei straker Schieflage mehr gegensteuern als bei leichter.. desswegen haette ich gerne einen PID regler
mit der bisherigen Regelung ist es noch viel zu wackelig

und hier kommt mein Poblem:
das Signal der Gyros ist ungenau und hat auch einen Temperaturdrift.

wenn ich also die Gyroskope am Anfang kalibrier und dann von der aktuellen Messung immer den Init-wert abziehe geht das manchmal ganz gut.
es kann aber auch vorkommen, das obwohl der copter still steht das Gyro einen leicht abweichenden Wert ausgibt.. wenn man jetz das Integral bildet, also aufsummiert schiesst der Integralwert sehr schnell ins Unendliche..
Ausserdem werden die Werte ja auch digital addiert, das heist wenn man 10 mal hin und her dreht kann auch der Rundungsfehler schon rehct gross sein.

Desswegen wollte ich fragen ob es irgendwelche Algorithmen gibt, die das verhindern können?

könnte man z.b. das Integrieren der Gyroskope nur dann durchführen, wenn der D- Anteil des Acc-sensors ~= 0 ist ?
oder den Initwert immer wieder aus der Mittelung der letzten 100 Messungen neuberechen ??

Gibt da ja auch noch so Kalman-Filter, aber hab nicht wirklich verstanden wie das funktioniert bis jetzt ..

wäre für alle Vorschläge dankbar..

ähM_Key
02.03.2008, 00:27
Anti-Windup haste drinne?

Kalman nimmt man ja eher zur Fusion von verschiedenen Sensordaten die das gleiche Messen - hast du ja nicht, oder?

goara
02.03.2008, 00:59
anti windup ?? sagt mir jeztz gar nichts... aber hört sich interessant an
könnte schon kalman nehmen, da ich ja nen acc und nen gyro habe, wenn ich das acc signal differnezier habe ich ja auch so ne art drehbewegung ( bei dem acc spielt die tatsächliche beschleunigung nur ne kleine rolle.. was es hauptrsächlich misst ist die richtung der erdanziehung, also die schieflage)
hmm kay ???

Besserwessi
02.03.2008, 11:55
Die Drift der gyros ist ein allgemeines Problem. Man könnte besserer und teurere Gyros nehmen um weniger drift zu kriegen, aber ganz ohne geht nicht. Numerische Fehler durch das Aufaddieren sollte man eigentlich vermeiden können, gerade wenn man mit integer Zahlen rechnet.

Die Beschleunigungssensoren sollte man zum stabilisieren der Gyros nehmen können, zumindest für die Richtung nach unten. Die Rotation um die vertikale kann man so natürlich nicht stabilisieren, da würde man einen Kompass brauchten. Zur Stabilisierung würde sich wohl ein Kalman Filter anbieten. Dabei muss man die Ganze Rechnung zu den Kovarianzmaxtrizen auch gar nicht in Echtzeit durchführen, sondern kann das vorab machen, denn die Unsicherheiten werden sich auf einen Stationären wert einpegeln.

Anti Windup ist ein Zusatz zu PID Reglern der verhindern soll dass der Integralteil zu groß wird. Die normale Ausführung ist es den Integralteil nicht zu erhöhen wenn die Stellgröße schon am Anschlag ist. Dies verhindert das der Integralteil riesig wird wenn die Regelung den Sollwert nicht richtig erreichen kann.
Für die gyro Drift wird das hier aber nicht helfen, denn die Steuerung des Copters wird hoffentlich nur ausnahmsweise oder nie bis ganz an den Anschlag gefahren.

goara
02.03.2008, 18:43
ok, danke shcon mal fuer die tipps..
@ besserwessi.. weist du ne seite wo das mit dem kalman gut erklärt ist ?? kann da nichts finden, bzw nichts, bei dem ich versth wie ich das dann in meienm fall verwenden muss ??

man könnte doch auch statt dem kalibrieten 0-punkt auch einen ganz starken tiefpass nehmen, und dann von den aktuellen siganlen das signal abzeihen um die integralwerte zu bilden oder ??
bzw den 0 wert immer aus den letzen 1000 messungen oder so berechnen.
was kann man dafuer denn fuer einen algoritmus verwenden, ohne die letzten 1000 oder was auch immer alle speichern zu müssen ??
würde das so vielciht gehen:

nullpunkt = nullpunkt * 1000 + neue_messung
nullpunkt = nullpunkt / 1001
neue_messung = neue_messung - nullpunkt
integral = integral + neue_messung


dadurch sollte man den drift doch halbwegs wegbekommen ??
das integral ist dann zwar immer ien bsichen kleiner als es wirklich sit, aber das macht ja nicht so viel aus... oder habe ich da irgendwas nicht bedacht ??

Besserwessi
02.03.2008, 21:15
Das könnte gehen, solange man der Chopter im Mittel wirklich gerade steht. Wenn man lämger im Kreis oder ähnliche Figuren fliegt, ist das nicht mehr ganz der Fall.

Der Wikipedia Eintrag zum Kalman filter ist recht ausführlich. Je nach Vorbildung könnte der Artikel aber etwas schwer zu verstehen sein.

goara
02.03.2008, 21:23
ok, dann schau ich mit den mal an... eigentlich sollte ich das shcon können. bin im 9. semseter maschiennebau und hab steuerungstechnik als hauptfach.. ;) ( und nexte woche ne regelungstechnik klausur :( )
was bei dem oben beschriebenen verfahren gerade mein problem ist, dass die neuen werte ja immer zu einem ganz kleinen teil nur eingehn, und wenn ich das als integer oder long definier das alles weggerundet wird.. was ist denn da fuer ein datentyp geeigent ?? wegen dem *1000 muss er ja nen grossen bereich haben. aber dann muss er auch noch n paar kommastellen haben.. hmm
ausser ich mache das mit 2 variaben, eine fuer die grosse zahl und eine fuer die genaue..

goara
07.03.2008, 16:05
gibt es denn noch andere algorithme fuer eien gaaaz tiefe tiefpass, bei denen ich ncith mit so riesige zahlen rechenn muss oder lässt sich das icht vermeide ??