Hallo,
Ich bin mit meinem Quadrokopter Projekt mittlerweile am Lageregler
angekommen. Das heißt ich habe als zurückgeführte Größe die fusionierten
Sensordaten, die die aktuelle Lage des Objekts ganz gut wiederspiegeln.
Als Sollwert-Größe habe ich die Vorgabe von einer RC Fernsteuerung.
Wie gesagt, ich versuche jetzt den Regler zu implementieren. Dabei geht
es mir gerade konkret um den D Regler. Der D-Regler bildet die Ableitung
des Fehlers/Abweichung (also das, was in den eigentlichen Regler
hereinkommt). Sprich:
Bei den üblichen Implementierungen wird das einfach über ein sehr
kleines Steigungsdreieck gemacht von zwei aufeinanderfolgenden Werten.
Also ist die Steigung dann
Jetzt habe ich aber ein Problem: Angenommen, mein Istwert hat ein
Wertebereich von -500 bis +500 (-90° bis +90° Neigung). Und ich drehe
mein Objekt jetzt um 90° pro Sekunde. Der Sollwert bleibt konstant 0.
Dann würde das bedeuten, dass in der einen Sekunde der Bereich von 0 bis
500 "abgelaufen" wird.
Wenn mein Regler aber jetzt eine Frequenz von 1000 Hz hat, also
Abtastzeit 1ms, dann wird der Regler bei jedem Durchgang entweder eine
Steigung von 0 oder von 1 berechnen. Und zwar so, dass nach der Sekunde
genau so viele 0en wie 1en da waren. Der Eingangs-Wertebereich des D
Reglers ist also extrem klein, was mir jetzt entsprechend Probleme
bereitet.
Da ich mit Integern arbeite, gibt es ja auch keine Zwischenschritte
zwischen 0 und 1.
Und jetzt frage ich mich, ob das nicht ein sehr sehr gängiges Problem
bei digitalen D Reglern ist. Leider findet man zu diesem Thema nur stark
mathematiklastige Informationen, wovon ich nur die Hälfte verstehe
(Regelungstechnik kommt erst in zwei Semestern).
Kennt vielleicht jemand sogar ein Buch wo digitale Regler in der Praxis
behandelt werden?
Soweit dann schon mal Danke!
Danke erst mal. Die Seite kenne ich natürlich und genau da tritt ja das
beschriebene Problem auf. Die Ableitung wird bloß über den aktuellen und
den letzten Wert gebildet.
So wird das nix,
die Eigenheiten der Regler wirst du erst verstehen
wenn du die "analogen" Grundtypen diskretisiert hast.
Mit schweinischen Verfahren wie Tustin etc. geht das
relativ fix, der Einfluss der Abtastrate wird dort
auch gut ersichtlich.
Falls "numerical underflow" ein Problem ist, dann liegt es an der
Skalierung.
Verwendest du nur ein D-Regler? Das geht in den meisten Fällen schief -
insbesondere falls du "Rauschen" hast.
Jetzt habe ich aber ein Problem: Angenommen, mein Istwert hat ein
Wertebereich von -500 bis +500 (-90° bis +90° Neigung). Und ich drehe
mein Objekt jetzt um 90° pro Sekunde. Der Sollwert bleibt konstant 0.
Dann würde das bedeuten, dass in der einen Sekunde der Bereich von 0 bis
500 "abgelaufen" wird.
Dein Istwert sollte sich nicht (soviel) ändern bei gleichbleibendem
Sollwert. Du hast keine Stabilität.
Hallo Simon,
> Ich bin mit meinem Quadrokopter Projekt mittlerweile am Lageregler> angekommen. Das heißt ich habe als zurückgeführte Größe die fusionierten> Sensordaten, die die aktuelle Lage des Objekts ganz gut wiederspiegeln.> Als Sollwert-Größe habe ich die Vorgabe von einer RC Fernsteuerung.> Wie gesagt, ich versuche jetzt den Regler zu implementieren. Dabei geht> es mir gerade konkret um den D Regler. Der D-Regler bildet die Ableitung> des Fehlers/Abweichung (also das, was in den eigentlichen Regler> hereinkommt). Sprich:> \text{Istwert} - \text{Sollwert}
Dein Zustandsvektor besteht also für eine Achse (z.B. Roll) aus zwei
Größen: p - die Rollrate und Phi der Hängewinkel. Und Du willst die Lage
mit Deinem Sender kommandieren. Wenn ich Dich richtig verstanden haben,
dann ist ein Vollausschlag am "Rollknüppel" +-90°. Neutral ist dann 0°.
Wie sieht denn die Schleife darunter aus? Ist es kaskadiert, sprich der
Lageregler (Attitude loop) gibt Kommandos an die drunter liegende Ebene,
den Ratenregler (Rate loop)? Oder ist alles per PID in einer Ebene
abgedeckt? Wenn PID in einer Ebene und Du willst auf die Lage Regeln, so
ist die D Rückführung ein reiner Dämpfer und die Werte für p (Rollrate)
bekommst du direkt von deinen Gyros (nach dem Kalmanfilter mit weniger
Bias). Der P und I Anteil sind dann die eigentlichen Regelelemente die
versuchen Zustandswert Phi (Hängewinkel = Istwert) auf den Wert der
Führungsgröße (Kommandierter Hängewinkel = Sollwert) zu bringen.
Im Endeffekt könnte das irgendwie so aussehen:
pomes schrieb:
> Falls "numerical underflow" ein Problem ist, dann liegt es an der> Skalierung.
Underflow beschreibt mein Problem nicht wirklich, glaube ich.
> Verwendest du nur ein D-Regler?
Nein tue ich nicht.
> Dein Istwert sollte sich nicht (soviel) ändern bei gleichbleibendem> Sollwert. Du hast keine Stabilität.
Das ist mir auch klar. Das war nur ein Beispiel um das Problem zu
verdeutlichen.
Anderes Beispiel:
Ich implementiere den Regler mit drei unterschiedlichen Abtastzeiten.
Ein mal 1s, ein mal 100ms und ein mal 1ms.
Das Szenario von oben gilt noch.
Ta = 1s:
In einer Sekunde hat sich das Gerät um 90° gedreht. Das heißt, der
Fehler ist von 0 auf 500 gestiegen. NeuerWert-AlterWert ergibt 500. Das
ganze kommt dann in den D Regler rein, der durch Ta teilt (durch 1). Und
mit der D-Konstante multipliziert.
Der "Eingangswertebereich" liegt jetzt bei 500 und es gibt 500
"Schritte".
Ta = 100ms
In 10ms ist der Wert nur von 0 auf 50 gestiegen. Damit trotzdem die
Korrekte Drehrate errechnet wird, wird durch Ta geteilt (durch 0,1) und
man kommt wieder auf 500. Soweit so gut. Allerdings habe ich nun nur
noch 50 Schritte, die alle in 10er Schrittweiten auseinander liegen,
weil der "Eingangswertebereich" nur noch von 0 - 50 geht und auf 500
"hochgerechnet" wird.
Ta = 1ms
In 1ms ist der wert um 0,5 gestiegen. Das lässt sich in Integern so
direkt gar nicht mehr ausdrücken. Anders gesagt: Man braucht zwei
"Regleraufrufe". Ein mal ist das D=0 und einmal D=1. Dann wieder 0 und 1
abwechselnd. Ich müsste jetzt mit 1000 multiplizieren (Bzw durch 10^-3
teilen) damit ich wieder auf die ursprüngliche Drehrate komme. Das würde
aber als Ergebnis bringen: Mal 1000, mal 0, mal 1000, immer abwechselnd.
Das ist mein Problem. Es ist ein Skalierungsproblem, genau! Aber wo muss
ich die Skalierung ansetzen? Wie gesagt, das muss doch ein häufig
auftretendes Problem bei digitalen Reglern sein. Leider habe ich keine
umfassende Lektüre zu dem Thema, wo man sowas nachlesen kann/könnte.
Für den Kalman - Filter ist die hohe Frequenz von 1khz sicherlich gut,
da hier einiges mit oversampling geglättet werden kann. Aber muss der
Regler auch mit der Frequenz laufen? Die Bandbreite der Motoren ist doch
weiter unter dieser Rate! Ich denke 100Hz reichen da vollkommen ...
Grüße,
Michael
Michael K. schrieb:
> Dein Zustandsvektor besteht also für eine Achse (z.B. Roll) aus zwei> Größen: p - die Rollrate und Phi der Hängewinkel.
Ja könnte man so sagen. Ich habe zwar keine Vektoren implementiert, aber
beide Größen stehen pro Achse zur Verfügung.
> Und Du willst die Lage> mit Deinem Sender kommandieren. Wenn ich Dich richtig verstanden haben,> dann ist ein Vollausschlag am "Rollknüppel" +-90°. Neutral ist dann 0°.
Genau.
> Wie sieht denn die Schleife darunter aus? Ist es kaskadiert, sprich der> Lageregler (Attitude loop) gibt Kommandos an die drunter liegende Ebene,> den Ratenregler (Rate loop)?
So ist es nicht, aber das klingt interessant. Sehe ich das richtig, dass
ich mir so den D Regler spare und das im Prinzip durch die gemessene
Drehrate ersetze? Hmm.
Der Lageregler gibt also dann nur eine Drehrate vor und die kommt in den
Drehratenregler?
> Oder ist alles per PID in einer Ebene> abgedeckt?
Ich glaube so hab ich das. Ich habe also einen Regler, der als Eingang
die Abweichung zwischen IstLage und SollLage bekommt.
Der Ausgang wird direkt dem Mixer zugeführt, der das dann an die Motoren
weitergibt.
Bei einem bestimmten Lagefehler, erzeugt dieser einen Ausgangswert, der
dafür sorgt, dass zum Beispiel die Motoren links und rechts, oder vorne
und hinten langsamer, bzw. schneller werden.
> Wenn PID in einer Ebene und Du willst auf die Lage Regeln, so> ist die D Rückführung ein reiner Dämpfer und die Werte für p (Rollrate)> bekommst du direkt von deinen Gyros (nach dem Kalmanfilter mit weniger> Bias).
Ja, okay. Aber: Der D Anteil ist doch nicht gleich der Rollrate.
Der D Anteil ist doch die Abweichung des Fehlers (Also der Eingangswert
des Reglers) nach der Zeit.
Die Rollrate ist aber der Lagewert nach der Zeit abgeleitet. Also zwei
unterschiedliche Werte.
Aber so wie ich das sehe, geht das mit der kaskadierten Methode
irgendwie.
> Der P und I Anteil sind dann die eigentlichen Regelelemente die> versuchen Zustandswert Phi (Hängewinkel = Istwert) auf den Wert der> Führungsgröße (Kommandierter Hängewinkel = Sollwert) zu bringen.
Ja, soweit verstanden.
> Im Endeffekt könnte das irgendwie so aussehen:>>
Ki * Summe aus den Ist Werten? Ich dachte Summe aus den Fehlerwerten.
So sieht mein Regler zur Zeit aus:
Der Code wird mit 1kHz aufgerufen (ATTCTRL_SAMPLE_FREQ ist 1024. Also
1/Ta). Soll und Istwert bewegen sich im Bereich 0-500 (etwa) zur Zeit.
Die letzte Division vor dem Return habe ich eingefügt, damit sich die
Gain-Werte nicht im unteren Bereich abspielen, sondern "weiter oben".
Also auch eine Skalierung.
Das Problem erledigt sich, falls du statt 0 bis 500 z.B. 0 bis 5000
verwendest oder alternativ dein Regler langsamer laufen lässt.
Numerisches Differenzieren ist nun mal auch anfällig für
"Rundungsrauschen".
Ich weiß nicht ob deine Dynamik so schnell ist, dass du Ta=1ms
benötigst.
Verwendest du eine Regelstruktur mit Kaskaden, dann reicht es oft den
"Positions/Winkel" Regler als P oder PI zu implementieren und den
"Geschwindigkeits/Drehraten" Regler als PI.
Misst du nur die Position/Winkel oder beides. Oder verwendest du eine
IMU (Inertialmessungsystem) zur Ermittelung von den Werten?
Andere Frage: Rechenst du deine Orientierung mit Quaternionen oder mit
Eulerwinkel oder mit etwas anderem?
pomes schrieb:
> Das Problem erledigt sich, falls du statt 0 bis 500 z.B. 0 bis 5000> verwendest oder alternativ dein Regler langsamer laufen lässt.> Numerisches Differenzieren ist nun mal auch anfällig für> "Rundungsrauschen".
Daran habe ich ja auch schon gedacht. Wenn ich Soll und Istwert jeweils
mit 256 zum Beispiel hochskaliere, erhöht sich an dieser Stelle ja nicht
die Auflösung, sondern nur der Wertebereich.
Ich habe das zwar noch nicht ausprobiert, kann mir aber vorstellen, dass
es deswegen nichts bringt. Die Auflösung des Fehlers (wovon man ja das
Differential bildet) bleibt also auch gleich.
Ich müsste schon die Auflösung der Hardware (des A/D Wandlers) erhöhen.
Aber das wiederum kann ich mir nicht vorstellen. Man müsste doch auch
mit anderen Methoden die numerische Ableitung mit ausreichender
Auflösung generieren können.
> Ich weiß nicht ob deine Dynamik so schnell ist, dass du Ta=1ms> benötigst.
Ich auch nicht. Habe mich aber rumgehört, im mikrokopter Forum war man
der Meinung, dass man schon auf 1kHz gehen soll. In ihrem Falle habe das
wohl zu mehr Stabilität verholfen. Also habe ich 1kHz als Startpunkt
gewählt.
Das ist meine Begründung ;)
> Verwendest du eine Regelstruktur mit Kaskaden, dann reicht es oft den> "Positions/Winkel" Regler als P oder PI zu implementieren und den> "Geschwindigkeits/Drehraten" Regler als PI.
Siehe oben: Der Kaskadenregler klingt interessant, ich muss das noch mal
ausgiebig in meinem Kopf durchprobieren. Der zweite Regler
(Drehratenregler) ersetzt also in dem Falle den D Regler. Die Drehrate
ist ja gewissermaßen (;)) die Ableitung der Neigung. Ich glaube so ist
es auch beim mikrokopter gemacht.
> Misst du nur die Position/Winkel oder beides. Oder verwendest du eine> IMU (Inertialmessungsystem) zur Ermittelung von den Werten?
Also, genau gesagt habe ich Gyros und Beschleunigungssensoren. Die
Beschleunigungssensoren sind tiefgepasst um die translatorischen
Beschleunigungsspikes herauszufiltern.
Die Gyros werden integriert und das Integral wird gegen weglaufen durch
die Beschleunigungssensoren gestützt, in dem immer ein kleiner
Korrekturbetrag bei jedem Integrationsschritt mit aufaddiert wird.
Also nichts mit komplexem Kalman Filter.
> Andere Frage: Rechenst du deine Orientierung mit Quaternionen oder mit> Eulerwinkel oder mit etwas anderem?
Ich rechne nicht mit Quaternionen. Ich rechne mit Eulerwinkel, wobei 90°
halt den 500 entspricht.
Man müsste doch auch
mit anderen Methoden die numerische Ableitung mit ausreichender
Auflösung generieren können.
Ja, mit Fließkommazahlen ^^
Alternativ:
Wenn du 0=0° und 5000=90° verwendest ändert sich der tatsächliche
Wertebereich nicht und du hast weniger Probleme beim Teilen.
(+/- 500 ist eh eine Verschwendung.. du verwendest nur 10 bit von einer
16 bit Zahl)
Du kannst versuchen dein D-Anteil zu filtern
z.B.
d=fehler-alterfehler
d_filt=(7*d_filt+d)/8
evtl auch d_filt skalieren (z.B. das durch 8 teilen weglassen)
Also "Batch processing" anstatt Kalmanfilter .. naja falls du keine
Fließkommazahlen verwendest..
pomes schrieb:
> Man müsste doch auch> mit anderen Methoden die numerische Ableitung mit ausreichender> Auflösung generieren können.>> Ja, mit Fließkommazahlen ^^
Fließkommazahlen sind ja das gleiche wie skalierte Integer. Nur, dass
die Skalierung der Fließkommazahlen dynamisch angepasst wird.
> Alternativ:> Wenn du 0=0° und 5000=90° verwendest ändert sich der tatsächliche> Wertebereich nicht und du hast weniger Probleme beim Teilen.
Ja, schon. Aber die 5000 muss ich doch irgendwo her kriegen. Das Problem
ist, dass der A/D Wandler nur +/-500 ausspuckt, wie soll ich da denn die
Auflösung erhöhen? Den Wertebereich kann ich erhöhen, ja.
Szenario:
1.
Sollwert ist 480, Istwert ist 500. Differenz ist 20
Sollwert ist 490, Istwert ist 500. Differenz ist 10
Steigung (Ableitung) ist 10.
2. Skaliert:
Sollwert ist 4800, Istwert ist 5000, Differenz ist 200. Auflösung der
Differenz ist aber nur 20 und Schrittweite ist 10.
die zweite Differenz ist dann 100, Auflösung ist 10.
Die Steigung ist dann 100, die Auflösung der Steigung ist aber auch nur
10. Man hat also keine Genauigkeit gewonnen.
Oder habe ich da einen Denkfehler?
Muss eigentlich, denn, wenn das so wäre, könnte man das Problem nur
umgehen, indem man einen A/D Wandler mit größerer Auflösung benutzt,
aber das kanns ja nicht sein.
> Du kannst versuchen dein D-Anteil zu filtern> z.B.> d=fehler-alterfehler> d_filt=(7*d_filt+d)/8>> evtl auch d_filt skalieren (z.B. das durch 8 teilen weglassen)
Ja, dann kann ich direkt den Filter langsamer machen, das hat den
gleichen Effekt.
Hallo,
wenn Du den D-Anteil mit 1kHz und gut aufgelöst brauchst, dann musst Du
das Signal analog differenzieren und über einen zweiten AD-Wandler
einlesen. Die Skalierung kannst Du dann an die maximale Geschwindigkeit
anpassen.
Du wirst das digital nicht schaffen, da das Istsignal das nicht hergibt.
Gruss
Gast schrieb:
> Hallo,> wenn Du den D-Anteil mit 1kHz und gut aufgelöst brauchst, dann musst Du> das Signal analog differenzieren und über einen zweiten AD-Wandler> einlesen.
Ok! Glücklicherweise hab ich ja das analog differenzierte Signal als
Abfallprodukt (Gyro-Wert).
> Du wirst das digital nicht schaffen, da das Istsignal das nicht hergibt.
Danke! Also habe ich da schon richtig gedacht.
Dann werde ich mal gucken wie ich das Gyro Signal verwursten kann.
Ah du hast nur ein 10bit AD, okay. Evtl kannst du in deinem Batch-Filter
trotzdem mit 0 bis 5000 rechnen, z.B. falls dein Gyro mit 1ms Daten mit
ausreichender Auflösung liefert.
Das Rundungs-Rauschen wird durch (numerisches) Differenzieren verstärkt,
dass ist halt so.
"Ja, dann kann ich direkt den Filter langsamer machen, das hat den
gleichen Effekt."
Nein, dein P-Anteil bleibt "gleich" schnell und der D-Anteil wird
verwaschen ist aber "schneller" als nur jeden 8. Wert zu nehmen.
pomes schrieb:
> Ah du hast nur ein 10bit AD, okay. Evtl kannst du in deinem Batch-Filter> trotzdem mit 0 bis 5000 rechnen, z.B. falls dein Gyro mit 1ms Daten mit> ausreichender Auflösung liefert.
Genauer habe ich einen 12 Bit A/D Wandler. Aber das Accelerometer hat
halt nen kleineren Spannungsbereich. Das kommt nicht bis an 0V und 3,3V
ran.
Und das ist der kleinste Nenner wenn es um Winkel geht.
> Das Rundungs-Rauschen wird durch (numerisches) Differenzieren verstärkt,> dass ist halt so.>> "Ja, dann kann ich direkt den Filter langsamer machen, das hat den> gleichen Effekt."> Nein, dein P-Anteil bleibt "gleich" schnell und der D-Anteil wird> verwaschen ist aber "schneller" als nur jeden 8. Wert zu nehmen.
Ja ok. Und wahrscheinlich neigt dann der D Regler auch leicht zum
Überschwingen.
Ohne alles gelesen zu haben: Du beschreibst ein allgegenwärtiges Problem
der digitalen Signalverarbeitung. Sobald das zu verarbeitende Signal an
die Grenzen der Abtastrate (auch die untere!) kommt hat man Probleme.
So wie ich das sehe hat man nur wenige Optionen.
- damit leben: Das nachfolgende träge System mittelt den Einfluss schon
;)
- Abtastrate an die Bandbreite des Systems anpassen: Stromregler
meinetwegen mit 1 kHz rechnen, Lage-Geschwindigkeitsregler mit z.B. 100
Hz und Lageregler meinetwegen mit 10 Hz. Ich behaupte ganz frech, dass
die Lageregelung nur eine Bandbreite von wenigen Hz braucht um gut zu
funktionieren.
- Auflösung erhöhen. Vorsicht Mittelung zur Auflösungserhöhung hat IMO
in Regelsystemen NICHTS zu suchen. Das verursacht nur unnötige
Phasenveschiebungen.
Wie so oft: Finger weg vom I-Anteil. Ist bei einer Quadrokopter
Lageregelung nur hinderlich und macht das System langsam und/oder
instabil.
Interessant wäre u.U. eine Zustandsregelung.
Karl schrieb:
> - damit leben: Das nachfolgende träge System mittelt den Einfluss schon> ;)
Ja, genau. Darüber habe ich auch schon nachgedacht. Und ausprobiert: Man
kann ab einer bestimmten Verstärkung des D Anteils die "Schläge" auf den
Motoren hören, wirklich! Obwohl es nur 1ms lange Impulse sind, die nur
minimal den PWM Wert verändern. Ich frag mich ob das so gut ist für die
Lager der Motoren.
> - Abtastrate an die Bandbreite des Systems anpassen: Stromregler> meinetwegen mit 1 kHz rechnen, Lage-Geschwindigkeitsregler mit z.B. 100> Hz und Lageregler meinetwegen mit 10 Hz. Ich behaupte ganz frech, dass> die Lageregelung nur eine Bandbreite von wenigen Hz braucht um gut zu> funktionieren.
Jap. Ich kann auch nicht verstehen warum der Motor mit 1kHz angesteuert
werden muss, aber die 1kHz benutze ich auch nur als Startpunkt zum
Ausprobieren.
> - Auflösung erhöhen. Vorsicht Mittelung zur Auflösungserhöhung hat IMO> in Regelsystemen NICHTS zu suchen. Das verursacht nur unnötige> Phasenveschiebungen.
Sowas habe ich mir schon gedacht. Tiefpässe in bestimmten Bereichen des
Reglers können einem vermutlich schnell ein Bein brechen. Vor allem wenn
bestimmte Anteile (also P, I oder D) gegenüber anderen verschoben sind.
> Wie so oft: Finger weg vom I-Anteil. Ist bei einer Quadrokopter> Lageregelung nur hinderlich und macht das System langsam und/oder> instabil.
Wirklich? Auch nicht eine ganz leichte? Auf irgendeiner Seite habe ich
mal gelesen, dass man einen I Anteil benötigt um schiefe Beladung
auszugleichen.
> Interessant wäre u.U. eine Zustandsregelung.
Zustandsregler? Je nach Zustand unterschiedliche Regelparameter
anwenden? Oder wie soll das funktionieren?
Hallo Simon,
> So ist es nicht, aber das klingt interessant. Sehe ich das richtig, dass> ich mir so den D Regler spare und das im Prinzip durch die gemessene> Drehrate ersetze? Hmm.> Der Lageregler gibt also dann nur eine Drehrate vor und die kommt in den> Drehratenregler?
Richtig. Du regelst somit die Drehraten Deines Quats. Ich werkle seit
knapp 2 Jahren an einem Heliregler, der genau das macht. Bei uns reicht
hier eine einfache P - Rückführung (das Verhalten ist hier zwar ziemlich
nichtlinear, aber es funzt. Bei einer reinen Rückführung der Rollrate
auf den Rollinput (Rolldämpfer) kannst Du die maximale Dämpfung
erfliegen und diesen Wert dann Kp Gain für den Ratenregler nehmen).
Vorteil dabei ist, dass Du mit einem "Command shaping" (Anpassung Deiner
Führungsgröße), also die max. zulässige kommandierte Rate im Rate loop,
erheblich die Dynamik von Deinem Quad einstellen könntest.
> Ich glaube so hab ich das. Ich habe also einen Regler, der als Eingang> die Abweichung zwischen IstLage und SollLage bekommt.> Der Ausgang wird direkt dem Mixer zugeführt, der das dann an die Motoren> weitergibt.> Bei einem bestimmten Lagefehler, erzeugt dieser einen Ausgangswert, der> dafür sorgt, dass zum Beispiel die Motoren links und rechts, oder vorne> und hinten langsamer, bzw. schneller werden.
Sieht danach aus.
> Ja, okay. Aber: Der D Anteil ist doch nicht gleich der Rollrate.
Richtig.
> Der D Anteil ist doch die Abweichung des Fehlers (Also der Eingangswert> des Reglers) nach der Zeit.
Jein. D = differentielle Rückführung (und die Ableitung Deines
Lagewinkels (z.B. Roll) ist nun mal die Rate (Rollrate)). Der D Anteil
ist dann die aktuelle Rollrate mal dem Kd Gain.
> Die Rollrate ist aber der Lagewert nach der Zeit abgeleitet. Also zwei> unterschiedliche Werte.
Genau das misst doch Dein Gyro. Der Kalmanfilter schätzt und führt die
Drift (Bias) des Gyros nach.
> Aber so wie ich das sehe, geht das mit der kaskadierten Methode> irgendwie.
Bei der PID Methode, kannst Du den D Anteil als reinen Dämpfer ansehen
(Rückführung der Rate auf die Steuergröße) und Du kannst die Dynamik von
Deinem Quad nur über die Führungsgröße, in dem Falle der Lagewinkel
ändern. Mit der kaskadierten Methode hast Du einen Freiheitsgrad mehr.
Eben die Rate und den Lagewinkel. Dadurch, dass Du die max. Rate im
Rate-loop vorgeben kannst, hast Du noch eine Ebene tiefer Eingriff, in
dem dass Du die max. zulässige Rate vorgeben kannst.
> Der P und I Anteil sind dann die eigentlichen Regelelemente die> versuchen Zustandswert Phi (Hängewinkel = Istwert) auf den Wert der> Führungsgröße (Kommandierter Hängewinkel = Sollwert) zu bringen.
Ja, soweit verstanden.
Ki * Summe aus den Ist Werten? Ich dachte Summe aus den Fehlerwerten.
Korrekt! Mein Fehler ... so ists richtig:
ggf. kann man hier für den Integrator, wenn das System heftige
Überschwinger zeigt noch ein wenig mit nem Anti-Windup gegensteuern.
> So sieht mein Regler zur Zeit aus:
Deine Rate wird somit aus der Änderung der Lage bestimmt, siehe:
Versuch mal anstatt das ErrorDerivative zu berechnen, direkt den Gyro -
Sensorwert zu verwenden.
Wenn Du magst, schreib mir mal ne PN, dann kann ich Dir die DA von dem
Regler mal schicken...
Grüße,
Michael
Genauer habe ich einen 12 Bit A/D Wandler. Aber das Accelerometer hat
halt nen kleineren Spannungsbereich. Das kommt nicht bis an 0V und 3,3V
ran.
Vielleicht hilft die Nutzung eine Verstärkerschaltung (mit einem
Operationsverstärker) etwas.
Wow! Danke für die Hilfe schon mal. Bis jetzt hat mich das schon ganz
gut weitergebracht.
Vorweg: Ich habe mich noch mal im Netz umgeschaut nach kaskadiertem
Regler bzgl. Lageregelung und da scheint es tatsächlich Gang und Gebe zu
sein für soetwas einen kaskadierten Regler zu benutzen. Jetzt weiß ich
auch, was es damit auf sich hat.
Ich sehe auch vollends ein, dass man die Dynamik viel besser einstellen
kann, wenn man kaskadierte Regler verwendet. Da wär ich ja so nie drauf
gekommen :D
Dadurch, dass ich die Gyros verwenden kann, kann ich endlich diese
leidliche numerische Differentiation rausschmeißen. Mit den Gyros
bekomme ich eine viel größere Auflösung oder Genauigkeit oder wie auch
immer der Fachbegriff dafür ist.
Du benutzt also als Drehratenregler einen einfachen P Regler?
Was meinst du mit reine Rückführung der Rollrate auf den Rollinput?
Maximale Dämpfung erfliegen? Kann mir gar nichts darunter vorstellen wie
du das meinst, mit dem Kp herausfinden.
Das wäre übrigens das nächste Problem für mich. Wie finde ich die ganzen
vielen Parameter heraus.
Soweit ich gelesen hab: von innen nach außen. Also erst mal den
Drehratenregler, dann den Lageregler. Aber wie?
Zu den Gyros und dem D Anteil: Bei einem kaskadierten Regler kann ich
mir die Ganze Sache vorstellen. Dass dann der Drehratenregler dämpft und
sowas.
Was ich mich aber frage: Wieso kann ich bei einem nicht kaskadierten
Regler die numerische Differentiation durch die Drehrate des Kopters
ersetzen?
Die numerische Differentiation differenziert doch den Fehler des
Reglers. Also sie differentiert die Abweichung des Soll vom Istwert. Die
Gyros aber sind doch die Ableitung des Istwertes (also der Lage) und
nicht von der Differenz (dem Fehler).
Als Dämpfer funktioniert das sicherlich in beiden Fällen, das kann ich
mir vorstellen, es hat also höchstens den gleichen Effekt, ist aber
nicht 100% das selbe, oder sehe ich das falsch?
Den Drift vom Gyro habe ich ja, stimmt. Dadurch, dass ich das Integral
der Gyrowerte bilde und mit dem Beschleunigungssensor abgleiche bekomme
ich einen Korrekturwert, der genau dem Drift entsprechen sollte.
Erfreulicherweise haben meine Gyros fast keinen Drift
(temperaturkompensierte MEMS Gyros). Korrekturwert ist also sehr sehr
klein (gerade so groß um den kleinen Integrationsfehler auszugleichen,
der bei der ständigen Aufintegrierung entsteht).
Bzgl. dem ATTCTRL_SAMPLE_FREQ: Das ist gleich 1/Ta. Also dem Kehrwert
der Abtastzeit. Deswegen * -> / und andersherum. Und indem ich die
Frequenz auf 1024 setze erleichtere ich dem Prozessor die Division. Ohne
dem müsste ich mit float rechnen und durch 10^-3 teilen. Ist halt
geschickt umgeformt :-)
> Wenn Du magst, schreib mir mal ne PN, dann kann ich Dir die DA von dem> Regler mal schicken...
Was ist denn ein DA?
Puh, gibt noch ne Menge zu lernen für mich in Sachen Regelungstheorie.
Hätte nicht gedacht, dass das Thema Quadrokopter SO tiefgreifend ist.
Bin schon seit fast einem Jahr an dem Dingen am basteln.
PS: Ich finds ätzend, dass man kaum was zu dem Thema finde. Hoffentlich
komme ich mal dazu anständigen Sourcecode und eine anständige
Dokumentation zu schreiben, warum wieso und weshalb.
Nur so als Bemerkung:
Du kannst die Drehrate alleine aus den Gyrodaten bestimmen.
(integrieren)
Aber dies ist nicht asymptotisch stabil, somit wird über längere Zeit
diese Schätzung instabil (Bias/Drift des Gyros und Rauschen des Gyros
(!) ).
Du solltest entweder einen Kalmanfilter verwenden oder diese Schätzung
irgendwie "stabilisieren".
"Die numerische Differentiation differenziert doch den Fehler des
Reglers. Also sie differentiert die Abweichung des Soll vom Istwert. Die
Gyros aber sind doch die Ableitung des Istwertes (also der Lage) und
nicht von der Differenz (dem Fehler)."
Erklärung:
Dies hat keinen Einfluss auf die Stabilität, nur auf das
Führungsverhalten.
a)
Nimm an der Sollwert ändert sich nur sehr schwach, also ist die
Ableitung des Sollwertes nach der Zeit sehr klein und vernachlässigbar.
b)
Nimm an jemand gibt sprungartig Sollwerte vor, dann gibt es einen sehr
großen Ruck auf den Motor. (was nicht gewollt ist)
>> Wie so oft: Finger weg vom I-Anteil. Ist bei einer Quadrokopter>> Lageregelung nur hinderlich und macht das System langsam und/oder>> instabil.>Wirklich? Auch nicht eine ganz leichte? Auf irgendeiner Seite habe ich>mal gelesen, dass man einen I Anteil benötigt um schiefe Beladung>auszugleichen.
Das kommt wie immer auf die konkreten Anforderungen an. Wenn du auf dem
Quadrokopter eine Kugel balancieren willst, braucht man vielleicht einen
;)
Meine Erfahrung sagt mir (ohne je einen Quadrokopter gebaut zu haben):
Ein grundsätzlich instabiles System wird unter realen Bedingungen nach
der Stabilisierung durch eine Regelschleife immer leicht um den Sollwert
pendeln. Das kann z.B. von Störgrößen (ein leichter Lufthauch), der
Quantisierung oder auch von nicht abgebildeten Streckenparametern
kommen. Das macht im Prinzip nichts, denn dafür ist ja der Regler da.
Ein I-Anteil verursacht schon einmal 90° Phasenverschiebung. Bleiben
noch maximal 90°, in der Realität eher 20°- 60° zum "arbeiten" übrig.
Das alles nur, um im besten Fall die Abweichung exakt auszuregeln. Oft
ist das aber gar nicht nötig (1 mm höher oder tiefer wirklich wichtig?)
oder möglich (dauernde Regelschwingung um den Sollwert van z.B. 2 mm,
s.o.). Außerdem behaupte ich, dass die Lage eines Quadrokopters in sich
schon integrierend ist. Du steuerst über deine PWM die Spannung am
Motor.
TP = Tiefpass
I = Integrierer
Dann sieht deine Strecke vereinfacht ca so aus:
Spannung(Stellgröße) - TP - Strom/Moment/Drehzahländerung - I -
Drehzahl/Schub/Beschleunigung Quadrokopter - I - Geschwindigkeit
Quadrokopter - I - Lage Quadrokopter
Das sind eigentlich genug Integrierer, oder? Man muss sie nur noch
richtig nutzen, z.B. mittels kaskadierter Regler. Damit wird man
gleichzeitig so einige Nichtlinearitäten los oder bekommt sie in den
Griff.
Meine Erfahrung ist, dass man mit einem PD Regler die Verstärkung
deutlich größer wählen kann als mit einem PI (wegen besseren
Phasengangs, siehe oben). Dadurch werden bleibende Fehler auch klein und
das dynamische Verhalten deutlich besser als mit I-Anteil.
>> Interessant wäre u.U. eine Zustandsregelung.>Zustandsregler? Je nach Zustand unterschiedliche Regelparameter>anwenden? Oder wie soll das funktionieren?
Googel mal nach Zustandsraum, Zustandsdarstellung, Zustandsregler,
State-Space.
pomes schrieb:
> Nur so als Bemerkung:>> Du kannst die Drehrate alleine aus den Gyrodaten bestimmen.> (integrieren)
Drehrate durch integrieren der Gyrodaten? Den Winkel meinst du.
> Aber dies ist nicht asymptotisch stabil, somit wird über längere Zeit> diese Schätzung instabil (Bias/Drift des Gyros und Rauschen des Gyros> (!) ).
Ja weiß ich.
> Du solltest entweder einen Kalmanfilter verwenden oder diese Schätzung> irgendwie "stabilisieren".
Ich benutze keinen Kalmanfilter (zumindest nicht bewusst). Oder
zumindest keinen komplexen Kalmanfilter mit Jakobi Matrix und all dem
Krempel. Stabilisiert wird das Integral über den tiefgepassten
Beschleunigungssensor.
> Dies hat keinen Einfluss auf die Stabilität, nur auf das> Führungsverhalten.
Ja genau, so in etwa meinte ich das glaube ich. Also der Effekt
(Stabilisierung) ist weiterhin gegeben. Auch ist eine Ableitung im
Spiel. Aber ich suchte nach einer Erklärung warum es erlaubt ist diese
beiden Differenziale auszutauschen.
> a)> Nimm an der Sollwert ändert sich nur sehr schwach, also ist die> Ableitung des Sollwertes nach der Zeit sehr klein und vernachlässigbar.> b)> Nimm an jemand gibt sprungartig Sollwerte vor, dann gibt es einen sehr> großen Ruck auf den Motor. (was nicht gewollt ist)
Alles klar, danke!
Karl schrieb:
> Ein I-Anteil verursacht schon einmal 90° Phasenverschiebung. Bleiben> noch maximal 90°, in der Realität eher 20°- 60° zum "arbeiten" übrig.> Das alles nur, um im besten Fall die Abweichung exakt auszuregeln. Oft> ist das aber gar nicht nötig (1 mm höher oder tiefer wirklich wichtig?)> oder möglich (dauernde Regelschwingung um den Sollwert van z.B. 2 mm,> s.o.). Außerdem behaupte ich, dass die Lage eines Quadrokopters in sich> schon integrierend ist. Du steuerst über deine PWM die Spannung am> Motor.
Ja, verstehe ich. Im Lageregler braucht man also sicher keinen I Anteil.
> TP = Tiefpass> I = Integrierer> Dann sieht deine Strecke vereinfacht ca so aus:> Spannung(Stellgröße) - TP - Strom/Moment/Drehzahländerung - I -> Drehzahl/Schub/Beschleunigung Quadrokopter - I - Geschwindigkeit> Quadrokopter - I - Lage Quadrokopter
Mit TP könntest du auch ein PT1 Glied gemeint haben, richtig? Soweit ich
mit meinen Regelungstechnikkenntnissen komme hat ein Gleichstrommotor
immer ein PT1 Verhalten. Für PT1 Glieder nimmt man PI oder PID Regler?
Die Anderen sind alles I Glieder, dafür kann man P, PI, PD oder PID
Regler nehmen.
Beim Mikrokopter machen die es (nach meinem jetzigen
"Nachvollziehheits-Stand") so:
Phi = Lagewinkel
p = Drehrate
DC = PWM Duty Cycle (Ist fast proportional Spannung U)
phi_soll p_soll DC p_ist phi_ist
--+> O --> |PD| --+> O --> |PI| --> |PT1| --> |I| -->
^ ^ | |
| - | - | |
| --------------------- |
---------------------------------------------
Wobei der D Anteil des ersten Reglers kein echter D Anteil ist. Es ist
nur ein D Anteil über die phi_soll (Also das, was man mit dem
Funkfernbedienungs-Stick vorgibt). Es ist also vom Prinzip her ein P
Regler.
> Das sind eigentlich genug Integrierer, oder? Man muss sie nur noch> richtig nutzen, z.B. mittels kaskadierter Regler. Damit wird man> gleichzeitig so einige Nichtlinearitäten los oder bekommt sie in den> Griff.
Ja, ich merke so langsam komm ich rein in das Thema kaskadierte Regler.
> Meine Erfahrung ist, dass man mit einem PD Regler die Verstärkung> deutlich größer wählen kann als mit einem PI (wegen besseren> Phasengangs, siehe oben). Dadurch werden bleibende Fehler auch klein und> das dynamische Verhalten deutlich besser als mit I-Anteil.
Okay. Also du meinst den Lageregler. Der, der eine I-Strecke hat.
Von der Tabelle aus dem Roboternetz ist für I Strecken ein PD Regler
auch besser geeignet als ein PI Regler.
Siehe:
http://www.rn-wissen.de/index.php/Regelungstechnik#Dimensionierung_des_Reglers
Hallo Simon,
ich schreib Dir morgen noch ein wenig mehr über das erfliegen der
Parameter, aber ich bin immer noch der Meinung, dass es einen I Anteil
in der Lageregelung braucht (stationäre Genauigkeit) die mit einem
reinen PD Regler nicht zu erreichen ist. Sicher funktioniert die
Lageregelung, aber wenn es dann an den velocity-loop
(Geschwindigkeitsregelung z.B. NED North East Down, oder einem anderen
Koordinatensystem z.B. ECEF) geht, dann könnte es u.U. hinderlich sein
keinen I Anteil im attitude-loop zu haben. Den Integrator kann man auch
mitteln Anti - Wind - Up "in Schach" halten. Sprich z.B. den I Teil erst
einschalten, wenn schon fast der Wert der Führungsgröße erreicht ist ...
Grüße,
Michael
PS: DA = Diplomarbeit
Hallo Simon,
sorry, hat etwas länger gedauert, aber heute waren Testflüge angesagt,
deshalb war ich keine Minute am Rechner.
Das erfliegen der Parameter ist recht tricky, aber es geht relativ gut
nach 2 Verfahren.
1. Verfahren: Empirisch ohne Auswertung. Ohne den Regler (bzw. alle
Gains auf null) fliegen und dann die Dämpfungsparameter vergrößern bis
das System instabil wird. Dann ca. 20%-25% reduzieren. Ggf. kann es
sein, dass das System dann wieder instabil wird, wenn
Fluggeschwindigkeit aufgenommen wird (Im Schwebeflug ist der Quad am
instabilsten) - dann einfach die Dämpfergains noch ein wenig reduzieren.
Die so ermittelten Gains für Roll und Nick und ggf. auch für Gier können
dann direkt als Feed - Forward Gains im Rate-loop verwendet werden.
2. Verfahren: Empirisch mit Auswertung (Flugdatenlogging). Du
programmierst dir auf die eine Achse ein klinisches Signal. Z.B. auf
Roll gibst Du 10% Steuerausschlag (additiv) für ca. 2 Sekunden (in der
Zeit wenn möglich die Rollcontrols nicht verändern). Der Quad sollte
vorher in einer stabilen (ist der Quad eigentlich ohne Regler fliegbar?)
Schwebeposition sein. Jetzt kannst anhand einer Auswertung der Rollrate
die Dämpfung bestimmen (auf das "Rollcontrol" gibts ja nen Sprung von
(im Idealfall) 0% auf +10%. Darauf reagiert natürlich der Quad und eine
Rollrate baut sich auf. Der Dämpfer halt natürlich dagegen. Wenn Du
jetzt die Maximas der geloggten Daten ermittelst, dann kannst Du die
Dämpfung rausrechnen. Dann das Dämpfergain ein wenig nach z.B. oben
ändern und nochmals ein paar Durchgänge fliegen. Wenn der Dämpfungswert
dann besser (größer) ist super -> weiter erhöhen ... usw.
Schreib einfach mal ne PN und ich schick Dir zu dem Thema gerne mal 2
Diplomarbeiten, wo zum einen der Regler erklärt ist und zum anderen wie
man die Reglerparameter im Flug ermitteln kann ...
Grüße,
Michael
Hallo Michael,
Ich wollte mich noch mal bedanken. PN werde ich dir schreiben, die
Diplomarbeiten klingen lesenswert. Im moment versuche ich alles an
Lektüre zu bekommen, was ich nur kriegen kann, weil zu solchen Themen
nur wenig im Internet vorhanden ist, oder es schwer zu finden ist.
Solche "harten" Themen findet man wohl eher in Büchern (Muss demnächst
noch mal in der FH-Bibliothek herumstreunen).
Deine zwei Methoden klingen interessant, aber der Kopter ist ohne Regler
eigentlich nicht fliegbar (habe ich gelesen), da er schon bei wenigen
Grad Neigung fahrt aufnimmt und relativ instabil ist (wie ein
invertiertes Pendel in etwa). Dazu kommt noch, dass ich selber gar keine
Flugerfahrung habe.
Ich habe aber einfach Werte ausprobiert. (Einfach mal ein paar Werte
nach Gefühl eingetippt und den Kopter per Hand geneigt (ohne laufende
Motoren) und mir die Werte angeguckt, die für die Motoren erzeugt
werden). Damit ging es ganz gut. Ich hab gemerkt, dass ein zu hohes P in
der inneren Reglerschleife zum Aufschwingen führen kann. Aber ich hab
auch gemerkt, je höher das innere P wird, desto höher kann man das
äußere P wieder machen. Mittlerweile hakt es aber wo anders.
Ich muss noch mal an den Teil mit der Sensorfusion ran. Hab da auch
schon eine Idee.
Eine Frage noch: Du meintest, man bräuchte ein I im Lageregler. Das wäre
ja dann der äußere Regler, da der innere Regler der Drehratenregler ist.
Meintest du das wirklich so? Eigentlich ist die Strecke, der der äußere
P Regler regelt ja eine I Strecke (Drehwinkel->Drehrate) oder nicht?
Somit bräuchte man doch eigentlich dort kein Integral.
Ich muss noch mal etwas im mikrokopter Code stöbern (auch wenn der sehr
grausig geschrieben ist, leider die einzige sinnvolle Lektüre im
Moment). Ich meine nämlich, dass die außen einen P Regler und innen
einen PI Regler benutzen. (Außen = Drehwinkel, Innen = Drehrate).
Es sieht so aus, als würden die im inneren Regler als I Anteil einfach
das Integral der Gyros benutzen (was ja eigentlich wieder der Drehwinkel
vom äußeren Regler ist), hm.
Problematisch bei einem I Anteil ist es, meiner Meinung nach, dass man
den erst aktivieren darf, wenn der Quadrokopter sicher fliegt. Wenn das
nicht so wäre, dann summiert sich der I Anteil unendlich, bzw. bis zum
Windup-Limit am Boden auf (Vor dem Start ist der ja am Boden, da man
erst noch starten muss und den Schub erhöhen muss. Und erst, wenn er in
der Luft ist, kann die Lage ja wirklich geregelt werden). Wenn man dann
aber abhebt, wird der Kopter eine gehörige Schieflage haben.
Aber als I Anteil das Integral zu benutzen (was eh schon existiert) ist
interessant, da werde ich mal später weiterforschen, wenn es so weit
ist.
Ich melde mich dann wieder!
Danke auch an alle anderen Beteiligten, Prost.
EDIT: Bzgl. mikrokopter muss ich noch mal nachhaken: Sieht danach aus
als wäre der äußere Regler ein PI Regler und der innere ein P Regler.
Nur sind die Reglerkonstanten ungeschickt benannt. Der äußere P Regler
heißt "Gyro I Regler". Im Code wird er aber als P Anteil beschrieben (P
Anteil bezogen auf den gesamt Regler).
Der innere Regler heißt "Gyro P Regler" und wird im Code als D-Anteil
beschrieben (wieder bezogen auf den gesamten Regelkreis). Der äußere I
Anteil heißt dann "Hauptregler I Anteil".
Und bei der Beschreibung der Settings steht auch, dass dieser für
größere Präzision zwischen Stick und Fluglage führt. Also sollte das
genau das sein, was du meintest.
Hallo Simon,
Simon K. schrieb:
> Hallo Michael,> Ich wollte mich noch mal bedanken. PN werde ich dir schreiben, die> Diplomarbeiten klingen lesenswert. Im moment versuche ich alles an> Lektüre zu bekommen, was ich nur kriegen kann, weil zu solchen Themen> nur wenig im Internet vorhanden ist, oder es schwer zu finden ist.> Solche "harten" Themen findet man wohl eher in Büchern (Muss demnächst> noch mal in der FH-Bibliothek herumstreunen).
Sehr gerne. Bücher klingt sehr gut, aber meist ist das sehr theoretisch
aufgezeigt und leider selten "wie gemacht wird" ... aber zum Verständnis
sicherlich nötig....
>> Deine zwei Methoden klingen interessant, aber der Kopter ist ohne Regler> eigentlich nicht fliegbar (habe ich gelesen), da er schon bei wenigen> Grad Neigung fahrt aufnimmt und relativ instabil ist (wie ein> invertiertes Pendel in etwa). Dazu kommt noch, dass ich selber gar keine> Flugerfahrung habe.
Das dachte ich mir schon fast. Wenn es Dir möglich ist das Ding zu
fesseln, sprich nur die rotatorischen Freiheitsgrade zuzulassen, dann
könntest Du ein wenig "entspannter" testen ;-) Und die Flugerfahrung
kommt von alleine!!
>> Ich habe aber einfach Werte ausprobiert. (Einfach mal ein paar Werte> nach Gefühl eingetippt und den Kopter per Hand geneigt (ohne laufende> Motoren) und mir die Werte angeguckt, die für die Motoren erzeugt> werden). Damit ging es ganz gut. Ich hab gemerkt, dass ein zu hohes P in> der inneren Reglerschleife zum Aufschwingen führen kann.
Das ist richtig. Irgendwo gibts für die Dämpfung irgendwo ein Maximum,
bei welchem ein Sprungeingang auf den Eingangsgrößen und die daraus
resultierende Schwingung am besten gedämpft wird ... muss man "nur" noch
rausfinden ...
> Aber ich hab auch gemerkt, je höher das innere P wird, desto höher kann > man
das
> äußere P wieder machen. Mittlerweile hakt es aber wo anders.> Ich muss noch mal an den Teil mit der Sensorfusion ran. Hab da auch> schon eine Idee.
Bedingt richtig ... je besser die inneren Regelkreise eingestellt sind,
desto besser fliegt das Ding dann auch hinterher.
> Eine Frage noch: Du meintest, man bräuchte ein I im Lageregler. Das wäre> ja dann der äußere Regler, da der innere Regler der Drehratenregler ist.> Meintest du das wirklich so?
Jep. Denn wenn Du Dir einen PD Regler vorstellst und Deine Sollgröße (in
dem Fall die Lage) immer näher an die Führungsgröße rankommt, desto
kleiner wird Dein P - Anteil -> asymtotische Annäherung -> stationärer
Fehler. Wenn man den P Anteil größer macht, dann kommt es wie von Dir
schon geschrieben zu Überschwingern. Wenn man es gut hinbekommt und die
Strecke "mitmacht", dann kann es auch sein, dass Du keinen Integrator
brauchtst ... wird sich zeigen!
> Eigentlich ist die Strecke, der der äußere> P Regler regelt ja eine I Strecke (Drehwinkel->Drehrate) oder nicht?> Somit bräuchte man doch eigentlich dort kein Integral.
s.o.
> Ich muss noch mal etwas im mikrokopter Code stöbern (auch wenn der sehr> grausig geschrieben ist, leider die einzige sinnvolle Lektüre im> Moment). Ich meine nämlich, dass die außen einen P Regler und innen> einen PI Regler benutzen. (Außen = Drehwinkel, Innen = Drehrate).> Es sieht so aus, als würden die im inneren Regler als I Anteil einfach> das Integral der Gyros benutzen (was ja eigentlich wieder der Drehwinkel> vom äußeren Regler ist), hm.
Kann schon sein. Wahrscheinlich soll das ganze eine Art RCAH (Rate
command - attitude hold) Geschichte sein. Kommt auf die Sensordaten an
...
>> Problematisch bei einem I Anteil ist es, meiner Meinung nach, dass man> den erst aktivieren darf, wenn der Quadrokopter sicher fliegt. Wenn das> nicht so wäre, dann summiert sich der I Anteil unendlich, bzw. bis zum> Windup-Limit am Boden auf (Vor dem Start ist der ja am Boden, da man> erst noch starten muss und den Schub erhöhen muss. Und erst, wenn er in> der Luft ist, kann die Lage ja wirklich geregelt werden). Wenn man dann> aber abhebt, wird der Kopter eine gehörige Schieflage haben.
Das ist richtig! Wichtig ist auch beim einschalten die Integratoren zu
resetten. Evtl. kannst du das mit einem "WOW" (Weight on wheels) bzw.
Bodenkontaktschalter lösen. Wenn am Boden, dann Integrator aus .. sonst
an.
>> Aber als I Anteil das Integral zu benutzen (was eh schon existiert) ist> interessant, da werde ich mal später weiterforschen, wenn es so weit> ist.> Ich melde mich dann wieder!
Alles klar...
>> Danke auch an alle anderen Beteiligten, Prost.>> EDIT: Bzgl. mikrokopter muss ich noch mal nachhaken: Sieht danach aus> als wäre der äußere Regler ein PI Regler und der innere ein P Regler.> Nur sind die Reglerkonstanten ungeschickt benannt. Der äußere P Regler> heißt "Gyro I Regler". Im Code wird er aber als P Anteil beschrieben (P> Anteil bezogen auf den gesamt Regler).> Der innere Regler heißt "Gyro P Regler" und wird im Code als D-Anteil> beschrieben (wieder bezogen auf den gesamten Regelkreis). Der äußere I> Anteil heißt dann "Hauptregler I Anteil".> Und bei der Beschreibung der Settings steht auch, dass dieser für> größere Präzision zwischen Stick und Fluglage führt. Also sollte das> genau das sein, was du meintest.
Sieht so aus ...
Grüße,
Michael
So, das Problem liegt am verwendeten Beschleunigungssensor ADXL330. Der
hat bei 8kHz (glaube ich) seine Resonanzfrequenz. Und ab einer
bestimmten Gasschwelle verschiebt sich der Nullpunkt des Sensors durch
die Vibrationen. Das Problem hatten auch die Jungs beim Armokopter
Projekt mit dem Sensor, wie ich erfahren habe.
Nun gönne ich mir einen MXR9500 der mit einem erwärmten Gas und
Thermokopplern arbeitet, statt mit einer seismischen Masse. Das soll
wohl das NonplusUltra sein, sagen die Leute dort.
Hallo Simon,
hab mal grad das Datenblatt angeschaut und gesehen, dass der Sensor
MXR9500 nur bis +- 1.5g messen kann. Meinst Du das reicht, oder gibts
den auch in einer +- 3g Variante? +-1,5 g sind schnell beisammen ;-)
Grüße,
Michael
Michael K. schrieb:
> Hallo Simon,>> hab mal grad das Datenblatt angeschaut und gesehen, dass der Sensor> MXR9500 nur bis +- 1.5g messen kann. Meinst Du das reicht, oder gibts> den auch in einer +- 3g Variante? +-1,5 g sind schnell beisammen ;-)
Für das Messen der Erdbeschleunigung sollte das aber reichen. Beim
Arm-O-Kopter verwenden die den auch und die sind überzeugt von dem Ding
:-)
Die maximale Beschleunigung, bevor der Kaputt geht, liegt ja viel höher.
> Für das Messen der Erdbeschleunigung sollte das aber reichen. Beim> Arm-O-Kopter verwenden die den auch und die sind überzeugt von dem Ding> :-)
Dafür allemal ... nur beim Turbo - Super - Mortale - Looping (gewollt
oder auch ungewollt :D) könnte es eng werden ;-)
> Die maximale Beschleunigung, bevor der Kaputt geht, liegt ja viel höher.
Das ist klar. Aber wenn Dir das Ding auf Beton fällt sind mehrere
tausend g schnell erreicht. Wenn ich mich recht erinnere sagte das
Datenblatt irgendwas von 50.000 ... sollte also reichen ;-)
Grüße,
Michael
Michael K. schrieb:
>> Für das Messen der Erdbeschleunigung sollte das aber reichen. Beim>> Arm-O-Kopter verwenden die den auch und die sind überzeugt von dem Ding>> :-)>> Dafür allemal ... nur beim Turbo - Super - Mortale - Looping (gewollt> oder auch ungewollt :D) könnte es eng werden ;-)
Hmm, könnte vielleicht sogar ein Argument sein. Aber bis ich
uber-Loopings fliege kann der ja dann noch seinen Dienst verrichten.
>> Die maximale Beschleunigung, bevor der Kaputt geht, liegt ja viel höher.>> Das ist klar. Aber wenn Dir das Ding auf Beton fällt sind mehrere> tausend g schnell erreicht. Wenn ich mich recht erinnere sagte das> Datenblatt irgendwas von 50.000 ... sollte also reichen ;-)
Ja, hoffe ich doch. Bei 50000 g ist dann glaub ich auch mehr kaputt als
nur der g-Sensor :D
Ich werde es ausprobieren, habe jetzt erst mal andere Prop Mitnehmer
draufgebastelt. Hatte vorher welche Mit Ringen, aber da sind mir jetzt
zum zweiten mal alle 8 Dinger spröde geworden (In einem Monat, wie kann
sowas sein?). Hab jetzt Propmitnehmer mit Mütterchen oben drauf, also
starre Verbindung.
Jetzt muss ich erst mal auf den Sensor warten.
> Hmm, könnte vielleicht sogar ein Argument sein. Aber bis ich> uber-Loopings fliege kann der ja dann noch seinen Dienst verrichten.
Ich weiß, dass 1.5g schnell zusammen kommen! Auch wenn man keine
Loopings fliegt. Ich war mal mit ner Schaumwaffel (Twinstar von
Multiplex) mit meinem LIS - Sensor unterwegs .... 3g+ bei "relativ"
normalem fliegen! Also kein hardcore Kunstflug (kann die Kiste eh
nicht), aber normales fliegen mit ein paar engeren Kurven (50° Bank) ...
> Ja, hoffe ich doch. Bei 50000 g ist dann glaub ich auch mehr kaputt als> nur der g-Sensor :D
Das stimmt!
>> Ich werde es ausprobieren, habe jetzt erst mal andere Prop Mitnehmer> draufgebastelt. Hatte vorher welche Mit Ringen, aber da sind mir jetzt> zum zweiten mal alle 8 Dinger spröde geworden (In einem Monat, wie kann> sowas sein?). Hab jetzt Propmitnehmer mit Mütterchen oben drauf, also> starre Verbindung.> Jetzt muss ich erst mal auf den Sensor warten.
Das mit dem Prop - Savern kenn ich ... vor jedem neuen Flugtag wechsel
ich die Dinger auch aus ... Da gibts für knapp 2 Euro bei Pollin nen Set
... ;-)
Grüße,
Michael
Sooo!
Es gibt Neuigkeiten :-)
Habe jetzt den MXR9500 drunter geschnallt: Schon mal halbwegs besser
geworden. Mal ein wenig entkopplung betrieben: Plastik Unterlegscheiben
unter die Platine: Noch besser. Gibt jetzt nur noch eine kleine
Abweichung vom Neutralwert. Ich bin mir sicher, dass man die durch
Wuchten und richtige Entkopplung (siehe Mikrokopter, die haben
entkoppelnde Abstandsbolzen) noch den letzten Rest hinkriegt.
Den Regler ausprobiert: Hier und da noch ein bisschen optimiert.
Und: In der Hand astrein. Sobald ich eine Seite wegziehe dreht der Motor
sofort hoch. Sobald es nur eine kleine Abweichung gibt vom Drehwinkel,
gibt der Motor richtig Gas. Lass ich los, schnellt der Kopter wieder in
die vorgegebene Lage fast ohne Überschwinger (ein paar kleine
Oszillationen). Man könnte also noch einen der Parameter
herunterschrauben.
Hab mal hier in meiner kleinen Bude ein paar Testflüge gemacht und ich
möchte behaupten: Das Ding ist fliegbar! Schaffe zwar nicht mehr als 2-3
Sekunden in der Luft, weil ich sofort überfordert bin, welchen Hebel ich
jetzt drücken muss, um eine ganz langsame Gierbewegung zum Beispiel
auszugleichen, aber es geht.
Außerdem fliege ich natürlich hier direkt überm Boden und um den Kopter
ist fast kein Platz mehr. Also verwirble ich mir selbst die Luft, die
ich oben an den Propellern ansauge. Muss demnächst mal draußen testen.
So lange werde ich mal noch die Software optimieren.
Bisher habe ich ein P und ein D Regler. Wobei alles als kaskadierter
Regler ausgeführt ist. Der D Regler ist also ein P Regler, der als
Eingangsgröße den P Regler bekommt und als Rückführgröße die Gyroskope.
Ein I Regler fehlt bisher noch.
Ein Gier-Gyro habe ich bisher noch nicht eingebaut. Und die Gyros sind
auch noch im falschen Koordinatensystem (verglichen mit den
Beschleunigungssensoren). Aber zum Nicken/Rollen reicht das ja erst mal.
Vielen Dank für die Hilfe! :-)
Hallo Simon,
> Es gibt Neuigkeiten :-)> Habe jetzt den MXR9500 drunter geschnallt: Schon mal halbwegs besser> geworden. Mal ein wenig entkopplung betrieben: Plastik Unterlegscheiben> unter die Platine: Noch besser. Gibt jetzt nur noch eine kleine> Abweichung vom Neutralwert. Ich bin mir sicher, dass man die durch> Wuchten und richtige Entkopplung (siehe Mikrokopter, die haben> entkoppelnde Abstandsbolzen) noch den letzten Rest hinkriegt.
Das sind gute Neuigkeiten!
>> Den Regler ausprobiert: Hier und da noch ein bisschen optimiert.> Und: In der Hand astrein. Sobald ich eine Seite wegziehe dreht der Motor> sofort hoch. Sobald es nur eine kleine Abweichung gibt vom Drehwinkel,> gibt der Motor richtig Gas. Lass ich los, schnellt der Kopter wieder in> die vorgegebene Lage fast ohne Überschwinger (ein paar kleine> Oszillationen). Man könnte also noch einen der Parameter> herunterschrauben.
Kingt doch schon mal wunderbar!
> Hab mal hier in meiner kleinen Bude ein paar Testflüge gemacht und ich> möchte behaupten: Das Ding ist fliegbar! Schaffe zwar nicht mehr als 2-3> Sekunden in der Luft, weil ich sofort überfordert bin, welchen Hebel ich> jetzt drücken muss, um eine ganz langsame Gierbewegung zum Beispiel> auszugleichen, aber es geht.> Außerdem fliege ich natürlich hier direkt überm Boden und um den Kopter> ist fast kein Platz mehr. Also verwirble ich mir selbst die Luft, die> ich oben an den Propellern ansauge. Muss demnächst mal draußen testen.> So lange werde ich mal noch die Software optimieren.
Das eine Problem ist die verwibelte Luft und zum anderen fliegst Du im
Bodeneffekt, der die Dynamik von Deinem Quad auch nochmal erheblich
verändert. Bei Heli's liegt der Bodeneffektsbreich ungefähr bei der
Hälfte des Rotordurchmessers. Bei Quad könnte ich mir vorstellen dass
hier der Effekt nach 4*Propradius deutlich abnimmt ...
>> Bisher habe ich ein P und ein D Regler. Wobei alles als kaskadierter> Regler ausgeführt ist. Der D Regler ist also ein P Regler, der als> Eingangsgröße den P Regler bekommt und als Rückführgröße die Gyroskope.> Ein I Regler fehlt bisher noch.
Nach der Lage kommt ja der Geschwindigkeitsregler und spätestens dann,
wenn Du keine stationäre Genauigkeit bekommst, wirst du ein I - Glied
reinbauen ;-)
>> Ein Gier-Gyro habe ich bisher noch nicht eingebaut. Und die Gyros sind> auch noch im falschen Koordinatensystem (verglichen mit den> Beschleunigungssensoren). Aber zum Nicken/Rollen reicht das ja erst mal.
?? Wie meinst Du "im falschen Koordinatensystem" ??
> Vielen Dank für die Hilfe! :-)
Weiter so!!
Grüße,
Michael
Michael K. schrieb:
> Das sind gute Neuigkeiten!
Jup, ich freu mir hier nen Ast ab. Als nächstes muss nen Akku ran.
> Das eine Problem ist die verwibelte Luft und zum anderen fliegst Du im> Bodeneffekt, der die Dynamik von Deinem Quad auch nochmal erheblich> verändert. Bei Heli's liegt der Bodeneffektsbreich ungefähr bei der> Hälfte des Rotordurchmessers. Bei Quad könnte ich mir vorstellen dass> hier der Effekt nach 4*Propradius deutlich abnimmt ...
Aber je höher ich fliege, desto tiefer fällt er. ;) Naja andere haben es
auch irgendwie hinbekommen fliegen zu lernen. Hab ja schon nen paar
Ersatzpropellersätze hier liegen.
>> Bisher habe ich ein P und ein D Regler. Wobei alles als kaskadierter>> Regler ausgeführt ist. Der D Regler ist also ein P Regler, der als>> Eingangsgröße den P Regler bekommt und als Rückführgröße die Gyroskope.>> Ein I Regler fehlt bisher noch.>> Nach der Lage kommt ja der Geschwindigkeitsregler und spätestens dann,> wenn Du keine stationäre Genauigkeit bekommst, wirst du ein I - Glied> reinbauen ;-)
Ja, fragt sich nur, wie man das merkt. Dass er immer ein wenig konstant
in eine Richtung wegfliegt, wenn er eigentlich gerade stehen sollte? Und
dass die Richtung immer relativ zufällig ist?
>> Ein Gier-Gyro habe ich bisher noch nicht eingebaut. Und die Gyros sind>> auch noch im falschen Koordinatensystem (verglichen mit den>> Beschleunigungssensoren). Aber zum Nicken/Rollen reicht das ja erst mal.>> ?? Wie meinst Du "im falschen Koordinatensystem" ??
Das Problem ist, dass die Gyros die Bewegung um die Kopterachsen messen,
der Beschleungigungssensor aber die Erdbeschleunigung.
Wenn zum Beispiel die Nick Achse richtung Boden zeigt, wird ja die Roll
Achse zur Gier Achse.
Wenn ich jetzt um die Rollachse rotiere, wird mir mein Gyroskop eine
Bewegung um die Achse anzeigen.
Der Beschleunigungssensor in Roll Richtung misst aber nichts, da in der
horizontalen keine Beschleunigungskraft messbar ist.
Deswegen muss man die Gyros vor dem Integrieren in das
Erdkoordinatensystem transformieren. Man braucht aber einen Gier Gyro
dazu.
>> Vielen Dank für die Hilfe! :-)>> Weiter so!!
Mach ich :D
> Jup, ich freu mir hier nen Ast ab. Als nächstes muss nen Akku ran.
Schnellstmöglichst, den das Gewicht von dem Akku wird die Dynamik ändern
;-) aber zum testen ists natürlich einfacher wenn mann Steckdosen -
Strom nutzt ...
> Aber je höher ich fliege, desto tiefer fällt er. ;) Naja andere haben es> auch irgendwie hinbekommen fliegen zu lernen. Hab ja schon nen paar> Ersatzpropellersätze hier liegen.
Das ist richtig. Aber ne Wiese dämpft schon einiges und die Quadies
halten ja auch einiges aus ... Zudem gibts bei den "Helipiloten" den
Spruch: "Höhe ist Dein Freund", denn wenn mal Panik angesagt ist, geht
mehr kaputt wenn man die "Gase" rausnimmt, als reinschiebt und in
sicherer Höhe das Ding wieder unter Kontrolle bringt.
> Ja, fragt sich nur, wie man das merkt. Dass er immer ein wenig konstant> in eine Richtung wegfliegt, wenn er eigentlich gerade stehen sollte? Und> dass die Richtung immer relativ zufällig ist?
Richtig. Merkst Du dann wenn Du nen GPS an Bord hast, dass Dir die
Geschwindigkeiten liefert (UBX NAV - VELNED bzw. VELECEF).
>>> Ein Gier-Gyro habe ich bisher noch nicht eingebaut. Und die Gyros sind>>> auch noch im falschen Koordinatensystem (verglichen mit den>>> Beschleunigungssensoren). Aber zum Nicken/Rollen reicht das ja erst mal.>>>> ?? Wie meinst Du "im falschen Koordinatensystem" ??> Das Problem ist, dass die Gyros die Bewegung um die Kopterachsen messen,> der Beschleungigungssensor aber die Erdbeschleunigung.> Wenn zum Beispiel die Nick Achse richtung Boden zeigt, wird ja die Roll> Achse zur Gier Achse.> Wenn ich jetzt um die Rollachse rotiere, wird mir mein Gyroskop eine> Bewegung um die Achse anzeigen.> Der Beschleunigungssensor in Roll Richtung misst aber nichts, da in der> horizontalen keine Beschleunigungskraft messbar ist.> Deswegen muss man die Gyros vor dem Integrieren in das> Erdkoordinatensystem transformieren. Man braucht aber einen Gier Gyro> dazu.
Das stimmt. Schlimmer wirds wenn z.B. der Nickwinkel durch den Zenith
bzw. Nadir läuft. In diesem Falle hättest Du "kein" Heading mehr und
meist gibts dann auch nen "Division by zero" - Software - Aussteiger.
Ich denke mit dem Schlagwort Quaternionen erzähl ich Dir nichts Neues ..
> Mach ich :D
Fein! Und uns auch weiter auf dem Laufenden halten !!
Grüße,
Michael
So, habe vorhin noch ein bisschen an den Reglern geschraubt und ein
Yaw-Gyro installiert.
Ich habe ehrlich gesagt das Gefühl, dass ich das schlimmste überstanden
habe (gescheite Lageerkennung).
Schnell noch einen PI Regler für die Drehrate eingeführt, per Daumen
Parameter geschätzt, ausprobiert, ein wenig verändert, passt.
Dann noch für die Lage einen I Regler hinzugefügt (ist jetzt PI und die
Ratenregler nach wie vor P Regler).
Dann noch hier und da ein bisschen geschraubt. Ein Flag für "Ich fliege"
hinzugefügt, das gesetzt wird, sobald das Gas einen bestimmten Wert
übersteigt (Im Video sieht man das als grünes Licht im vorderen Teil (am
roten Ausleger)). Dieses wird beim Motor ein und ausschalten gelöscht.
Und nur wenn das Flag gesetzt ist, ist der Lageregler aktiv.
Leider habe ich hier nur knapp 1,5 x 1m zum testen, weswegen ich am Ende
im Video auch das Regal geküsst habe (ist aber noch alles heile ;)) aber
es fliegt. Mal eine Sekunde stabil, dann bricht es leicht weg. Ich
vermute mal der von dir genannte Bodeneffekt. Leider habe ich keinen
Akku zur Hand bisher. Naja warten ist angesagt.
Ansonsten, gewissermaßen mein "Erstflug" eines Flugmodells:
http://wayne.klinkerstein.m-faq.de/QC.avi
(Kein bisschen Yaw betätigt in dem Video, nur Nick, Roll und Gas).
Jetzt wird erst mal gegrillt. Prost Mahlzeit! :-)
Hallo Simon,
sehr geil!! Glückwunsch! Noch ne kleine Anmerkung: Deine Antenne
"wedelt" ganz schön, was dem Lageregler die Arbeit mit Sicherheit nicht
erleichtert ;-)
Grüße,
Michael
Michael K. schrieb:
> Hallo Simon,>> sehr geil!! Glückwunsch! Noch ne kleine Anmerkung: Deine Antenne> "wedelt" ganz schön, was dem Lageregler die Arbeit mit Sicherheit nicht> erleichtert ;-)
Danke! :D
Wegen der Antenne hast du sicher Recht, konnte aber bisher keine
deutlichen Verschlechterungen erkennen. Aber föderlich ist das sicher
nicht. Muss mal gucken ob ich da nicht irgendwas finde, was nicht so
rumwedelt.
Die Idee stammt aus dem mikrokopter Forum (wie so ein paar Andere auch).
Die machen das ziemlich häufig so. Ist Federstahldraht (0,8mm).
Man kann auch ganz leicht erkennen wie er um die Rollachse manchmal
leicht zittert. Könnte von der Antenne sein.
Jürgen schrieb:
>> PS: Ich finds ätzend, dass man kaum was zu dem Thema finde. Hoffentlich>> komme ich mal dazu anständigen Sourcecode und eine anständige>> Dokumentation zu schreiben, warum wieso und weshalb.>> dieses ist dir doch sicherlich bekannt ??> - http://aeroquad.info
Ich glaub da bin ich noch nicht drüber gestolpert.
> und als preiswerten GYRO schon mal an die WiiMotionPlus gedacht ?> -> http://randomhacksofboredom.blogspot.com/2009/06/wii-motion-plus-arduino-love.html
Ja, schon im mikrokopter Forum gelesen. War aber nicht soo gut geeignet.
Die Sensoren haben teilweise nicht die optimale Auflösung (zu grob) um
in einem solchen Gefährt genutzt zu werden.
Trotzdem danke :-)
Noch mal neuen Videostoff aus dem Garten:
http://www.youtube.com/watch?v=u6BqpDg84FI
Hab leider vergessen mich am Ende rauszuschneiden, deswegen müsst ihr
das leider ertragen :-)
Lässt sich richtig gut fliegen, dafür dass es quasi immer noch einer der
allerersten Flüge ist und ich gerade mal vielleicht 10 mal an sämltichen
Reglereinstellungen geschraubt habe.
Mit dem Gas muss ich mir noch was überlegen. Hab da im Moment so
"Rastungen" drin. Es wurde empfohlen die rauszunehmen, allerdings ist
der Stick so leichtgängig, dass, wenn man ihn loslässt er von alleine
"umkippt". Hm.
Sobald ich eine Raste mehr Gas gebe hebt er schon ganz gut ab. Eine
weniger geht er wieder gen Boden.
Naja mal sehen :-)
Nach etwa 15 Minuten fliegen sind die FETs lauwarm. Die Motoren etwas
mehr als handwarm.
Hallo Simon,
Respekt! Das geht ja wirklich Schlag auf Schlag bei Dir! Das mit der
Raste ist bekannt. Welchen Sendertyp hast Du denn? Ich hab ne Graupner
MC-22s und bei der kann man das Rasterblech (mit so ner kleinen Nase,
die in die Rasten am Knüppel greift) einfach umdrehen. Und dann wieder
festziehen. Der Knüppel rastet dann nicht mehr, aber wird trotzdem in
der aktuellen Position fixiert.
Bzgl. der schnellen Höhenänderungen kannst ja mal die Z - Accelwerte
anschauen und ggf. auch noch nen Z - Dämpfer mit reinbasteln ;-)
Grüße,
Michael
Michael K. schrieb:
> Hallo Simon,>> Respekt! Das geht ja wirklich Schlag auf Schlag bei Dir! Das mit der> Raste ist bekannt. Welchen Sendertyp hast Du denn? Ich hab ne Graupner> MC-22s und bei der kann man das Rasterblech (mit so ner kleinen Nase,> die in die Rasten am Knüppel greift) einfach umdrehen. Und dann wieder> festziehen. Der Knüppel rastet dann nicht mehr, aber wird trotzdem in> der aktuellen Position fixiert.
Hehe, is ja lustig. Die Idee hatte ich gestern auch noch. Habs aber noch
nicht ausprobiert. Danke für den Tipp :D. Ist eine MC-16/20
> Bzgl. der schnellen Höhenänderungen kannst ja mal die Z - Accelwerte> anschauen und ggf. auch noch nen Z - Dämpfer mit reinbasteln ;-)
Wie muss das aussehen? Ich vermute mal wieder einen Regler reinbasteln?
Das Problem ist aber, dass ich dann mit dem Gasknüppel die
Beschleunigung regle, oder etwa nicht?
Oder was verstehst du unter "Dämpfer" :D
Außerdem kommt noch dazu, dass die Z Achse nicht immer was mit der Höhe
zu tun hat. Wenn man zum Beispiel Fahrt aufnimmt (Nick oder Roll
betätigt) dann kann die Z Achse eher senkrecht stehen. Das müsste man
irgendwie berücksichtigen.
> Hehe, is ja lustig. Die Idee hatte ich gestern auch noch. Habs aber noch> nicht ausprobiert. Danke für den Tipp :D. Ist eine MC-16/20
Gerne.
> Wie muss das aussehen? Ich vermute mal wieder einen Regler reinbasteln?
Richtig ;-)
> Das Problem ist aber, dass ich dann mit dem Gasknüppel die> Beschleunigung regle, oder etwa nicht?
Möglich, aber würde ich im ersten Schritt nicht machen.
> Oder was verstehst du unter "Dämpfer" :D
Dämpfer im allgemeinen wirkt einer Ursache entgegen. In Deinem Fall
kannst Du die "absolute" Z - Beschleunigung (abzüglich der
Erdbeschleunigung) nehmen. Wenn man diese Integriert bekommst Du ja die
Geschwindigkeit. Und genau dieser Geschwindigkeit wirkst Du entgegen ->
Dämpfung der Höhenänderung. Also ne reine P - Rückführung auf Deinen
Gaskanal. Das Ganze ist aber wirklich nur sinnvoll für den Schwebeflug
bzw. langsamen Vorwärtsflug!
> Außerdem kommt noch dazu, dass die Z Achse nicht immer was mit der Höhe> zu tun hat. Wenn man zum Beispiel Fahrt aufnimmt (Nick oder Roll> betätigt) dann kann die Z Achse eher senkrecht stehen. Das müsste man> irgendwie berücksichtigen.
Das ist richtig. Da Du ja schon einen "Lagelösung" hast kannst Du das
berechnen ;-)
Grüße,
Michael
> Mit dem Gas muss ich mir noch was überlegen. Hab da im Moment so> "Rastungen" drin. Es wurde empfohlen die rauszunehmen,
wenn ich mich nicht teusche, lässt sich auf der funke auch eine
"Gas-kurve" programmieren.
so das der schwebezustand auf den flachen bereich fällt.
ein gertrimmtes EXPO würde auch gehen.
Gaskurve wäre natürlich auch eine Alternative, aber mir ist glaube ich
gerade eine bessere und einfachere Idee gekommen. Mit dem Gas Stick gebe
ich ja im Moment im Prinzip die Geschwindigkeit vor (mehr oder weniger
natürlich. Ich gebe natürlich auch die Höhe vor, ist irgendwie ein Mix
aus beidem). Was ist denn wenn ich einfach die Z Achse des
Beschleunigungssensors als Dämpfer benutze? Einfach die Z Achse mal nem
konstanten Faktor und das ganze dann mit dem Gaswert von der Funke
verrechnen. Angenommen der Gaswert bleibt konstant und das Modell
beschleunigt leicht nach unten, dann wird der Gaswert leicht angehoben
(Mit leicht meine ich so 5 bis 10 Tausendstel). Das dürfte den Gas Stick
eigentlich nur wenig negativ beeinflussen.
ob du das nun GAS oder Pitch nennst. ist ja nun wurscht. ;-)
und ist eh alles elektronisch.
letzendlich gibst du ja sowiso nur, die auf- und ab-beschleunigung vor,
und die ist beim schweben halt 0. ???
Ich habs mal probiert.
Einfach so:
ThrottleOut = ThrottleStick;
ThrottleOut -=
PI( /* SetPoint */ 0,
/* Feedback */ gVars.IMU.ZAcc,
/* pIntegral */ NULL,
/* Prop. Gain */ gSettings.AttCtrl.Z.DGain,
/* Integr. Gain */ 0,
/* Windup Limit */ 0 );
Also einfach als Dämpfungsglied. Das funktioniert schon nicht schlecht.
Geht aber ab und zu schon mal in eine Schwingung über (gedämpft).
Besonders wenn man gerade hart aufsetzt, dann bounct es. Was ja irgendwo
auch logisch ist :-)
> Gaskurve wäre natürlich auch eine Alternative, aber mir ist glaube ich> gerade eine bessere und einfachere Idee gekommen. Mit dem Gas Stick gebe> ich ja im Moment im Prinzip die Geschwindigkeit vor (mehr oder weniger> natürlich. Ich gebe natürlich auch die Höhe vor, ist irgendwie ein Mix> aus beidem).
Nein. Du gibst die Gasstellung vor. Das Resultat davon ist im ersten
Itegral die Geschwindigkeit und im zweiten dann die Höhe. Ergo steuerst
Du somit eine Art "Beschleunigung".
> Was ist denn wenn ich einfach die Z Achse des> Beschleunigungssensors als Dämpfer benutze?
Das meinte ich in meinem letzten Post ;-)
> Einfach die Z Achse mal nem> konstanten Faktor und das ganze dann mit dem Gaswert von der Funke> verrechnen. Angenommen der Gaswert bleibt konstant und das Modell> beschleunigt leicht nach unten, dann wird der Gaswert leicht angehoben> (Mit leicht meine ich so 5 bis 10 Tausendstel). Das dürfte den Gas Stick> eigentlich nur wenig negativ beeinflussen.
Richtig ...
> Ich habs mal probiert.> Einfach so:> ThrottleOut = ThrottleStick;> ThrottleOut -=> PI( /* SetPoint */ 0,> /* Feedback */ gVars.IMU.ZAcc,> /* pIntegral */ NULL,> /* Prop. Gain */ gSettings.AttCtrl.Z.DGain,> /* Integr. Gain */ 0,> /* Windup Limit */ 0 );> Also einfach als Dämpfungsglied. Das funktioniert schon nicht schlecht.> Geht aber ab und zu schon mal in eine Schwingung über (gedämpft).> Besonders wenn man gerade hart aufsetzt, dann bounct es. Was ja irgendwo> auch logisch ist :-)
Coole Sache, aber nicht vergessen, dass in der Art der Dämpfer NUR für
den Schwebeflug geeignet ist (Schwerkraftvektor und ZAccel-Vektor
parallel). Anstonsten musst halt das Bodyfixed - Koordinatensystem
(Beschleunigungssensoren) in das Erdfeste umrechnen!
Geile Sache das !!
Grüße,
Michael
Hallo Simon,
ich nochmal ...
> Besonders wenn man gerade hart aufsetzt, dann bounct es. Was ja irgendwo> auch logisch ist :-)
Bodenkontaktschalter sind ne tolle Sache ;-)
Grüße,
Michael
Herrlich. Mittlerweile steht das Ding fast auf der Stelle, man kann fast
die Knüppel loslassen :D
D Anteil noch erhöht, P verkleinert, kaum noch zittern. Dafür hat das
Dingen immer einen Linksdrall. Fragt sich warum. Da der Yaw-I Parameter
da nicht viel dran ändern konnte, vermute ich mal, dass das durch die
Vibrationen im Gyroskop kommt. Hab ja immer noch keine gescheite
Entkopplung ich Wicht.
Außerdem driftet das Accelerometer ja auch ein Stück wegen den
Vibrationen (ganz leicht. Man merkt dass er immer ganz leicht nach vorne
will).
Macht aber höllisch Spaß. Hab die ganze Zeit an einem Stück rumgeflogen.
Sogar die Nachbarn haben sich über mein "Ufo" gewundert ;)
> Macht aber höllisch Spaß. Hab die ganze Zeit an einem Stück rumgeflogen.> Sogar die Nachbarn haben sich über mein "Ufo" gewundert ;)
VORSICHT ! ! macht süchtig. ;-)))
Hallo Leute,
vor kurzem hat mir jemand ne PN geschrieben wg. den DAs. Vergessen hab
ichs nicht, aber mein Rechner zu Hause hat sich verabschiedet mit den
ganzen Mails. Also derjenige bitte nochmal ne PN an mich, dann kann ich
ihm die DAs zukommen lassen.
Grüße,
Michael
Hi Simon,
> Herrlich. Mittlerweile steht das Ding fast auf der Stelle, man kann fast> die Knüppel loslassen :D> D Anteil noch erhöht, P verkleinert, kaum noch zittern. Dafür hat das> Dingen immer einen Linksdrall. Fragt sich warum. Da der Yaw-I Parameter> da nicht viel dran ändern konnte, vermute ich mal, dass das durch die> Vibrationen im Gyroskop kommt. Hab ja immer noch keine gescheite> Entkopplung ich Wicht.
Evtl. könnte nen Magnetometer helfen ...
> Außerdem driftet das Accelerometer ja auch ein Stück wegen den> Vibrationen (ganz leicht. Man merkt dass er immer ganz leicht nach vorne> will).>> Macht aber höllisch Spaß. Hab die ganze Zeit an einem Stück rumgeflogen.> Sogar die Nachbarn haben sich über mein "Ufo" gewundert ;)
Wirklich cool !! Respekt ... irgendwann muss ich mir auch mal so nen
Teil bauen ... ich komm' dann auf unseren "Experten"-Simon zurück ...
Grüße,
Michael
Hi,
Jaja Experten Simon ;) Klingt zweideutig. :-)
Hab mittlerweile die Koordinatentransformationen (Öfters auch
Achsenkopplung) reingepfriemelt. Zugegebenermaßen ist diese nicht ganz
an der mathematischen Realität, da ich Sinus und Cosinus teilweise
einfach linearisiert habe. Das Ergebnis ist aber verblüffend gut!
Mal ein Auszug:
1
/* Couple Nick and Roll. So that Nick-Amplitude gets smaller, when Roll-Angle rises.
Im Anhang eine verkoppelte Drehung. Dazu die korrigierten Integrale
("NickAngle", "RollAngle" und die Beschleunigungssensoren)+/- 600
entspricht dabei dem maximalen Winkel (Etwa +/-80° Neigung).
> Hi,> Jaja Experten Simon ;) Klingt zweideutig. :-)
Nicht doch ... Theorie ist die eine Sache ... da haben mehr Leute Plan,
als die die es wirklich gemacht und zum Laufen gebracht haben !!
>> Hab mittlerweile die Koordinatentransformationen (Öfters auch> Achsenkopplung) reingepfriemelt. Zugegebenermaßen ist diese nicht ganz> an der mathematischen Realität, da ich Sinus und Cosinus teilweise> einfach linearisiert habe. Das Ergebnis ist aber verblüffend gut!
In der Regel reicht das normalerweise auch...
>> Mal ein Auszug:>>
1
> /* Couple Nick and Roll. So that Nick-Amplitude gets smaller, when
>> Im Anhang eine verkoppelte Drehung. Dazu die korrigierten Integrale> ("NickAngle", "RollAngle" und die Beschleunigungssensoren)+/- 600> entspricht dabei dem maximalen Winkel (Etwa +/-80° Neigung).
Wirklich cool Sache!
Nicht nachlassen ;-)
Grüße,
Michael
Heute zwar nix wesentlich neues, außer dass ich endlich einen Akku habe.
A123 LifePo4 4S 1100mAh. Zu klein für das Modell, aber perfekt für mein
als nächstes geplantes Fluggerät. ;)
http://www.youtube.com/watch?v=FURmfaM5uX0
Musste schon den Dämpfer über den Z Acc wieder runtersetzen, der ging
ordentlich ab. Mit dem Kabel unten dran hat man das überhaupt nicht
gemerkt ;) Das Kabel ist ja gewissermaßen auch noch ein Dämpfer.
Proportional zur Höhe sogar.
Blöd ist noch die stände Linksdrehung. Vmtl. wegen den Vibrationen im
Gyro. Muss das mal Nachhaken.
Ich warte tief und innig noch darauf, dass LogView mal nicht-ASCII
Support einbaut, dann kann ich meine selbstgebastelte Software aufn Müll
werfen. Ganz ehrlich: Ich hasse es, Desktop Software zu programmieren.
Man sitzt ständig nur dran und programmiert, dass bestimmte Knöpfe grau
werden wenn woanders geklickt werden. Sowas ist doch super-Öde. Da bleib
ich bei Mikrocontrollern ohne GUI. :P
Michael K. schrieb:
>> Hi,>> Jaja Experten Simon ;) Klingt zweideutig. :-)>> Nicht doch ... Theorie ist die eine Sache ... da haben mehr Leute Plan,> als die die es wirklich gemacht und zum Laufen gebracht haben !!
Ja, stimmt. Theorie und Praxis das ist immer so eine Sache :D
Bei den ganzen Linearisierungen und Annahmen die hier getroffen wurden,
die aber nicht immer während des Fluges gewährleistet werden können hat
das ganze eigentlich kaum noch was mit irgendeiner Theorie zu tun. Oder
siehst du da irgendwo einen Sinus, Cosinus oder Tangens ;) ;)
> Wirklich cool Sache!
Danke danke!
> Nicht nachlassen ;-)
Achwas, ich doch nicht ;)
> Grüße,> Michael
Hehe. Hab noch einen kleinen Totbereich in das Einlesen der
Fernsteuerung gemacht.
Die Stick Ausschläge sind etwa +/- 1700. +/- 100 sind jetzt Totbereich
um die Mitte herum. Dadurch driftet der Kopter nur noch ganz ganz
leicht. Und nicht definierbar in beliebige Richtung. (Höchstens bis zu
max +/- 10° Gierwinkel). Ist doch schon mal nicht schlecht.
Vielleicht noch ein wenig am I oder P Anteil schrauben.
Hallo Simon,
ich habe gerade dein Quadcopter gesehen... Geil gemacht!
Was mich interessieren würde, wie du die 4 Brushless Regler mit dem
Xmega gemacht hast. Ich fange gerade an mein erstes XMega-Projekt zu
machen und habe genau das Gleiche angefangen. Es ist mit deinem
Schaltplan relativ ähnlich. Hast du die Regler in C programmiert oder
Assembler?
Was mich etwas gewundert hatte (das ist der große unterschied zu meinem
Board), das du für jeden Mosfet-Pfad einen 2104 spendiert hast. Gerade
die Mosfet sollten eine einfache Parallelschaltung (mit je einem eigenem
Gate-Widerstand) ermöglichen.
bye woodym