MikroKopter - Forum » Software & Programmierung » PI(D)- Regler für Eigenbau-Quadrocopter

PI(D)- Regler für Eigenbau-Quadrocopter

Seite: « < 1 2 3 4 5 6 7 > »

Autor Neuer Beitrag
Mitglied
Registriert seit: Jul 2011
Beiträge: 269
dollreiner meinte
(leider ist der motor offenbar nicht linear, das regelverhalten ändert sich mit der grunddrehzahl)

Ursache ist nicht der Motor sondern der Propeller (Luftwiderstand). Ich habe ja schon darauf hingewiesen:
Zitat
- Der Schub ist nicht linear zur Drehzahl oder Stellwert.
- Die Zeitkonstante ist nicht konstant. Zum einen ändert sie sich mit der Drehzahl, je höher die Drehzahl desto größer die Dämpfung -> desto kleiner die Zeitkonstante. Zum anderen ist die Zeitkonstante beim Gasgeben und Gaswegnehmen unterschiedlich, außer man hat einen BL-Controller mit aktiver Bremse.

Deshalb sollte für reproduzierbare Ergebnisse bei Schwebedrehzahl gemessen werden. Im Endzustand muss allerdings noch bei niedriger Drehzahl überprüft werden, ob es stabil bleibt, sonst fällt der Kopter möglicherweise runter.

dollreiner meinte
sobald ich den komplementärfilter (die grundformel von shane colton) als istwertgeber benutze, kriege ich gewaltige überschwinger. ist auch kein wunder, der komplementärfilter hat eine grenzfrequenz im unteren hz-bereich, also ein tiefpaß (was ja durch die integration auch kein wunder ist)

Für das Nutzsignal darf das Komplementärfilter keinen Frequenzgang haben und hat es normalerweise auch nicht. Wenn doch, dann ist in deinem Code noch was faul.

dollreiner meinte
dazu noch ein gedanke : wäre das viel aufwand, in dein simulationsmodell als winkel-istwert im äußeren kreis einen komplementärfilter aus winkelgeschwindigkeit und winkel nach der colton-formel einzubauen ?

Kein Problem, man kann es vereinfacht mit Funktionsblöcken machen oder direkt mit dem C-Code.
Mitglied
Registriert seit: Jul 2011
Beiträge: 269
Das sieht dann in Scicos so aus:

User image

Das ist noch nicht direkt mit C-Block realisiert, aber mit Scicos internem Code gerechnet (ging schneller zu machen).
Die Funktion ist:
y1=(1-a)*z + a*(u1*tau + u2)
z=y1

u1 ist das Gyrosignal und u2 ist der Winkel phi.

Ich weiß jetzt nicht, ob das auch in Boris geht?
Mitglied
Registriert seit: May 2012
Beiträge: 195
was kann da viel schief gehen :

komp_filter = (komp_filter + gyro_single * 0.01) * 0.98 + acc_single * 0.02

alle variablen hier gleitkomma (noch ist zeit genug..)

ich mess mal, aber wenn ich mir die signale anschau, würd ich vom gefühl her sagen : tiefpaß, so 2..4 hz oder ähnlich.
Mitglied
Registriert seit: Jul 2011
Beiträge: 269
Stimmt die Skalierung? Ist sonst noch ein Filter (hardware oder software) drin?
Als Außenstehender ohne Kenntnis der Hard- und Software ist es aber nur Glaskugel schauen.

Mit dem Simulator kann man auch kleinere Bereiche z.B. Sensoren und Komplementärfilter testen und Theorie und Wirklichkeit vergleichen. Da sollte man schnell den Fehler eingrenzen können.
Mitglied
Registriert seit: May 2007
Beiträge: 1319
Ort: Zuerich
Qopter meinte
Ein weiterer Versuch mit einem zusätzlichen Zweig zum PD-Regler, der doppelt differenziert, brachte dann ähnliche Ergebnisse wie bei der Kaskade. Wäre also eine Alternative zum Kaskadenregler

Yep. Wir machen im NGOS schon in den alten Controllern aehnliches und es bewaehrt sich sehr gut... ;)
Mitglied
Registriert seit: Jul 2011
Beiträge: 269
amir meinte
Qopter meinte
Ein weiterer Versuch mit einem zusätzlichen Zweig zum PD-Regler, der doppelt differenziert, brachte dann ähnliche Ergebnisse wie bei der Kaskade. Wäre also eine Alternative zum Kaskadenregler

Yep. Wir machen im NGOS schon in den alten Controllern aehnliches und es bewaehrt sich sehr gut... ;)

Nachdem ich sah, wie schnell der Kaskadenregler ist, war es eine logische Konsequenz den PD-Regler zu tunen. :D

Aber der Kaskadenregler hat schon Charme. Man kann auf einfache Weise eine Umschaltung HH/ACC-Mode realisieren und auch eine Begrenzung der Winkelgeschwindigkeit, damit der Gyro nicht begrenzt, ist sehr einfach zu machen. Gefällt mir!
Mitglied
Registriert seit: May 2012
Beiträge: 195
ich häng ein wenig in der luft, weil das bei mir bisher nur theorie und versuch mit einer achse ist.
ich hab noch nie einen copter fliegen sehen ...

wenn hier von "schnell" die rede ist, welche größenordnung ist das ?

meine achse mit kaskadenregler (schneller, seit der innere regler mit 200hz arbeitet) schwingt bei störung oder als sprungantwort (eingestellt ohne überschwinger) in ca. 1 sec. auf solllage zurück. ist das schnell oder (zu) langsam ??
Mitglied
Registriert seit: Jun 2012
Beiträge: 25
Hallo,
ich würde sagen das ist mindestens um Faktor 2-10 zu groß. Kommt aber bestimmt stark auf das Trägheitsmoment und die Auslegerlänge an.
Mehr Ausleger -> +Mehr Drehmoment,-Mehr Trägheitsmoment
Mehr Trägheitsmoment -> -Größere Zeitkonstante,-Mehr Überschwingen.

Ich schätze mein kleiner Quadro ist in 300ms in der Horizontalen...aus 45° Neigung...
Marius
Mitglied
Registriert seit: May 2012
Beiträge: 195
klar hängt das von der größe ab. ich hab die ausleger je 40cm lang gemacht, also 80cm durchmesser.
Mitglied
Registriert seit: Jul 2011
Beiträge: 269
dollreiner meinte
meine achse mit kaskadenregler (schneller, seit der innere regler mit 200hz arbeitet) schwingt bei störung oder als sprungantwort (eingestellt ohne überschwinger) in ca. 1 sec. auf solllage zurück. ist das schnell oder (zu) langsam ??

Kommt darauf an...
Bei 300 Grad ist das sehr gut, aber bei 30 Grad ist das auch mit 40cm Auslegern etwas langsam.

Woran es nun hakt, ist für mich ohne weitere Details nur Kaffeesatzleserei. Da musst Du entweder mehr raus rücken oder selber Fehleranalyse betreiben. Ich würde an deiner Stelle erst mal kleinere Brötchen backen und die innere Schleife optimieren. Wenn die innere Schleife schon nicht richtig funktioniert, dann ist dort schon der Hund begraben. Wenn die innere Schleife passt, dann in kleinen Schritten (erst ohne Komplementärfilter) die Kaskade in Betrieb nehmen.
Mitglied
Registriert seit: May 2012
Beiträge: 195
wenn ich nicht zu dämlich wäre, das ppm-signal auszuwerten, würde ich versuchen ein kleines filmchen mit einem probeflug zu drehen. da sieht man vielleicht, ob das ding sich "normal" verhält.

vielleicht kann jemand hier ein paar tipps geben : http://forum.mikrokopter.de/topic-35687.html
Mitglied
Registriert seit: Jul 2011
Beiträge: 269
Es reicht ja schon ein Video, wie der Kopter sich an der Wippe verhält oder einfach nur Kurven vom Einschwingen.

Verwendest Du eigentlich die Hardware vom MK? Dann habe ich einen Verdacht wo dein Problem sein könnte.
Mitglied
Registriert seit: May 2012
Beiträge: 195
ok, ich filme mal das ding am schnürchen. wippe ist demontiert seit ich die zweite achse hab.
ja, die hw ist von mk ("flight control2.1") tippst du auf die anti-aliasing filter nach den sensoren ?
Mitglied
Registriert seit: Jul 2011
Beiträge: 269
Ja genau das HW-Filter am LIS344 meine ich. Gib das mal in deine Simulation ein. Du wirst sehen, es ist der Grund für den Frequenzgang nach dem Komplementärfilter.
Mitglied
Registriert seit: May 2012
Beiträge: 195
aaaaber !! ... du weißt doch sicher, was aliasing ist, oder ?
Mitglied
Registriert seit: Jul 2011
Beiträge: 269
Ja, ich weiß es und ich behaupte mal ganz frech: "Es ist kein anti-aliasing Filter."
Die Grenzfrequenz ist viel zu niedrig.

Mensch, dollreiner, mach doch einfach das, was ich vorschlage. Dann wird es dir schon klar!
Mitglied
Registriert seit: May 2012
Beiträge: 195
hey, es geht doch hier um verstehen, nicht primär darum daß das ding fliegt.

wieso soll das kein aliasing-filter sein ? die abtastrate muß ja nicht so hoch sein ...

prinzipiell : shannon würde im grab rotieren, wenn er mitkriegen würde, wie hier mit dem abtasttheorem umgegangen wird.
Mitglied
Registriert seit: Jul 2011
Beiträge: 269
Genau, um es zu verstehen, solltest Du es ausprobieren, nachmessen oder simulieren. Weil Du mir ja nicht glaubst.
Als aliasing Filter reicht eine viel höhere Grenzfrequenz, da muss es nicht 1,5 Hz sein.
Mitglied
Registriert seit: May 2012
Beiträge: 195
6.8 kohm und 22nf .. 234 hz grenzfrequenz. eher zu hoch, ich hab schon nachgedacht den auf 50 hz runterzuholen.

aber halt, entschuldige : du meinst ja den filter hinterm acc. 1 uf .. das ist viel. aber beim colton-filter macht der acc ja fast keinen beitrag. ich denke es liegt am "colton-integrierer".

trotzdem glaube ich, daß das ding trotz der langsamen reaktion fliegen wird. coming soon : ein filmchen!
Mitglied
Registriert seit: Jul 2011
Beiträge: 269
Das ist ja kaum zum Aushalten mit dir! Liest Du eigentlich meine Beiträge richtig? Anstatt immer neue Theorien aufzustellen, was Schuld sein könnte, würde ich es einfach mal überprüfen.

Ich muss erst eine Nacht vergehen lassen, sonst wird meine Kritik doch zu deutlich.
Mitglied
Registriert seit: Jul 2011
Beiträge: 269
Es ist echt mühsam mit Dir.
Du hast ein Problem mit einem ungeklärten Frequenzgang und ich finde die mögliche Ursache dafür. Die Grenzfrequenz passt sogar wie die Faust aufs Auge und Du findest es nicht einmal für nötig, es zu überprüfen. Wo ist denn das Problem einen Kondensator testweise zu tauschen, das ist in ein paar Minuten erledigt.

Ich hätte gerne geholfen, aber Du willst dir scheinbar nicht helfen lassen. Deshalb halte ich mich ab jetzt auch zurück.

dollreiner meinte
trotzdem glaube ich, daß das ding trotz der langsamen reaktion fliegen wird. coming soon : ein filmchen!

Keine Frage, das Ding kann auch mit langsamer Regelung fliegen. Aber war das dein Ziel?
Mitglied
Registriert seit: May 2012
Beiträge: 195
hey, lächle mal !
im ernst : der acc hw-filter ist nicht das problem. wenn ich nicht den kompfilter im orginal verwende, sondern den acc-sensor (incl. filter) alleine (was natürlich im flug nicht klappen würde) , ist das ding rund 10 mal so schnell. es ist schon der sw-komplementärfilter mit seinem stark integrierenden anteil.
Mitglied
Registriert seit: Dec 2009
Beiträge: 42
Ließt du die werte aus wenn ja wie und was alles? ( Ich lese den Gyro, ACC, errechneten Winkel und die Zeitkonstante aus um den für mich passenden filterkoeffizienten im excel zu ermitteln )
Wie hast du die Anpassung der Skalierung herausgerechnet?
Wie lautet der filterkoeffizient bei deinem komplementärfilter? <---- Und wenn da jetzt nix schlimmes drinsteht ist der Filter schnell
« Bearbeitet von Ratzfatz am 20.07.2012 18:46. »
Mitglied
Registriert seit: May 2012
Beiträge: 195
wenn ich nur acc verwende, ist der regler wie gesagt schnell. innen winkelgeschwindigkeit mit dem gyro, außen winkel : die kaskade funktioniert erstklassig. ich habe allerdings den innenkreis so wie in der literatur angegeben, schneller als den aüßeren : innen 200hz, außen 100hz. ich lese alles seriell aus und schreibe mit vb .net eine "oszigrafik". die koeffinzienten habe ich alle mit ziegler/nichols ermittelt und dann etwas optimiert.
als komplementärfilter den von s. colton vorgeschlagenen, allerdings etwas "acc-lastiger", wegen der geschwindigkeit (hier der filter fürs roll-signal) :

komp_filter_r = (komp_filter_r + gyro_single_r * 0.005) * 0.96 + acc_single_r * 0.04

ob das im flug mit hohen querbeschleunigungen klappt, wird sich zeigen.

einen film vom erstflug (ich habs dokumentiert, falls es das ding zerlegt ;-) gibts hier :

www.reinerdoll.de/erstflug.avi

wie in einer bachelor-arbeit beschrieben, baue ich jetzt noch ein paar tiefpäse ein, um stromverbrauch durch zu (zu) schnelle motorsteuerung (>20 Hz) zu unterbinden.

nächster schritt : ein sensor aus ner maus soll die lagestabilisierung machen (so wie bei flymentor). aber das ist ein anderer thread ....
Mitglied
Registriert seit: Dec 2009
Beiträge: 42
Das Auslesen mach ich fast genauso nur das nachträgliche Auswerten mache ich im Excel so kann ich mir auf einen blick die Rohwerter des Gyros und ACC mit dem Errechneten Winkel anschauen und dort nochmal tunen.
Was mir dabei aufgefallen ist das Gyrosignal ist schnell aber mit drift behaftet ist ( bei der integration ) und der ACC sehr langsam aber genau.
Ich habe daher mein filterkoeffizienten für den gyro so hoch gesetzt das der Filter an die schnelligkeit eines Gyros kommt aber nur so hoch das er in nulllage wieder die null erreicht das ist bei mir zum einen 0.996 und für den ACC 0.004 und zwar für roll und pitch warum ist das bei dir unterschiedlich?
Hast du die skalierung des ACC und Gyros gleichgesetzt ich gehe mal davon aus das das _r in dem Variabelnamen für raw steht wenn ja musst du das noch machen.
Das mit dem inneren kreis = 200 hz und außen = 100 Hz bei dem filter kommt mir da etwas komisch vor die 0.005 sind nicht dein schleifendurchlauf ? Das sollte es aber nach meinem Verständniss sein.
« Bearbeitet von Ratzfatz am 21.07.2012 12:41. »

Seite: « < 1 2 3 4 5 6 7 > »

MikroKopter - Forum » Software & Programmierung » PI(D)- Regler für Eigenbau-Quadrocopter