Forum: Mikrocontroller und Digitale Elektronik Frage zu digitalem D Regler bei sehr kleiner Abtastzeit


von Simon K. (simon) Benutzerseite


Lesenswert?

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!

von Gast (Gast)


Lesenswert?

Schau mal hier druaf. Da findet sich auch der Quellcode für gängige 
Reglertypen:
http://www.rn-wissen.de/index.php/Regelungstechnik

von Simon K. (simon) Benutzerseite


Lesenswert?

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.

von Zefix (Gast)


Lesenswert?

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.

von ??? (Gast)


Lesenswert?

Was geschieht wenn man diesen Werten (0,1) weiterrechnet ? Wird's dann 
instabil?

von pomes (Gast)


Lesenswert?

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.

von Michael K. (mmike)


Lesenswert?

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:

Vielleicht hilfts Dir weiter ...

Grüße,
Michael

von Simon K. (simon) Benutzerseite


Lesenswert?

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.

von Michael K. (Gast)


Lesenswert?

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

von Simon K. (simon) Benutzerseite


Lesenswert?

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:
1
STATIC_INLINE
2
int16_t PID(int16_t SetPoint,
3
      int16_t Feedback,
4
      int32_t* pIntegral,
5
      int16_t* pPreviousError,
6
      int16_t ProportionalGain,
7
      int16_t IntegralGain,
8
      int16_t DerivativeGain)
9
{
10
  int16_t Error = SetPoint - Feedback;
11
  int16_t ErrorDerivative;
12
  int32_t ErrorIntegral;
13
  int32_t Output;
14
15
  /* Derivative */
16
  ErrorDerivative = Error - *pPreviousError;
17
  *pPreviousError = Error;
18
19
  /* Integral */
20
  ErrorIntegral = *pIntegral;
21
  ErrorIntegral += Error;
22
  *pIntegral = ErrorIntegral;
23
24
  Output =  (int32_t) ProportionalGain * Error
25
      + (int32_t) IntegralGain * ErrorIntegral / ATTCTRL_SAMPLE_FREQ
26
      + (int32_t) DerivativeGain * ErrorDerivative * ATTCTRL_SAMPLE_FREQ;
27
28
  return MATH_DIVIDE_N_ROUND(Output, 256);
29
}

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.

von pomes (Gast)


Lesenswert?

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?

von Simon K. (simon) Benutzerseite


Lesenswert?

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.

von pomes (Gast)


Lesenswert?

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..

von Simon K. (simon) Benutzerseite


Lesenswert?

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.

von Gast (Gast)


Lesenswert?

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

von Simon K. (simon) Benutzerseite


Lesenswert?

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.

von pomes (Gast)


Lesenswert?

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.

von Simon K. (simon) Benutzerseite


Lesenswert?

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.

von Karl (Gast)


Lesenswert?

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.

von Simon K. (simon) Benutzerseite


Lesenswert?

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?

von Michael K. (Gast)


Lesenswert?

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:
1
ErrorDerivative = Error - *pPreviousError;
2
(int32_t) DerivativeGain * ErrorDerivative * ATTCTRL_SAMPLE_FREQ;
3
sollte das nicht so lauten:
4
(int32_t) DerivativeGain * ErrorDerivative / ATTCTRL_SAMPLE_FREQ;
5
                                           ^
6
                                           |

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

von Gast (Gast)


Lesenswert?

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.

von Simon K. (simon) Benutzerseite


Lesenswert?

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.

von pomes (Gast)


Lesenswert?

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)

von Karl (Gast)


Lesenswert?

>> 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.

von Simon K. (simon) Benutzerseite


Lesenswert?

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!

von Simon K. (simon) Benutzerseite


Lesenswert?

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

von Michael K. (mmike)


Lesenswert?

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

von Michael K. (mmike)


Lesenswert?

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

von Simon K. (simon) Benutzerseite


Lesenswert?

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.

von Michael K. (mmike)


Lesenswert?

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

von Simon K. (simon) Benutzerseite


Lesenswert?

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.

von Michael K. (mmike)


Lesenswert?

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

von Simon K. (simon) Benutzerseite


Lesenswert?

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.

von Michael K. (mmike)


Lesenswert?

> 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

von Simon K. (simon) Benutzerseite


Lesenswert?

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.

von Michael K. (mmike)


Lesenswert?

> 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

von Simon K. (simon) Benutzerseite


Lesenswert?

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! :-)

von Michael K. (mmike)


Lesenswert?

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

von Simon K. (simon) Benutzerseite


Lesenswert?

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

von Michael K. (mmike)


Lesenswert?

> 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

von Simon K. (simon) Benutzerseite


Lesenswert?

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! :-)

von Michael K. (mmike)


Lesenswert?

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

von Simon K. (simon) Benutzerseite


Lesenswert?

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.

von Jürgen (Gast)


Lesenswert?

>  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

und als preiswerten GYRO schon mal an die WiiMotionPlus gedacht ?
 - 
http://randomhacksofboredom.blogspot.com/2009/06/wii-motion-plus-arduino-love.html

von Simon K. (simon) Benutzerseite


Lesenswert?

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 :-)

von Simon K. (simon) Benutzerseite


Lesenswert?

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.

von Michael K. (mmike)


Lesenswert?

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

von Simon K. (simon) Benutzerseite


Lesenswert?

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.

von Michael K. (mmike)


Lesenswert?

> 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

von Juergen (Gast)


Lesenswert?

>  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.

von Simon K. (simon) Benutzerseite


Lesenswert?

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.

von Juergen (Gast)


Lesenswert?

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.  ???

von Simon K. (simon) Benutzerseite


Lesenswert?

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 :-)

von Michael K. (mmike)


Lesenswert?

> 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

von Michael K. (mmike)


Lesenswert?

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

von Simon K. (simon) Benutzerseite


Angehängte Dateien:

Lesenswert?

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 ;)

von ... (Gast)


Lesenswert?

> 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. ;-)))

von Michael K. (mmike)


Lesenswert?

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

von Michael K. (mmike)


Lesenswert?

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

von Simon K. (simon) Benutzerseite


Angehängte Dateien:

Lesenswert?

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.
2
   * And other way round. */
3
  NickRateGyro -= ((int32_t) IMU_NICKROLL_COUPLING_FACTOR * gVars.IMU.RollAngle) / (IMU_NICKROLL_COUPLING_SCALE);
4
  RollRateGyro -= ((int32_t) IMU_NICKROLL_COUPLING_FACTOR * gVars.IMU.NickAngle) / (IMU_NICKROLL_COUPLING_SCALE);
5
6
  /* Couple Yaw to Nick/Roll */
7
  NickRateGyro += ((int32_t) IMU_YAW_COUPLING_FACTOR * YawRateGyro * gVars.IMU.RollAngle) / (IMU_YAW_COUPLING_SCALE);
8
  RollRateGyro -= ((int32_t) IMU_YAW_COUPLING_FACTOR * YawRateGyro * gVars.IMU.NickAngle) / (IMU_YAW_COUPLING_SCALE);

Im Anhang eine verkoppelte Drehung. Dazu die korrigierten Integrale 
("NickAngle", "RollAngle" und die Beschleunigungssensoren)+/- 600 
entspricht dabei dem maximalen Winkel (Etwa +/-80° Neigung).

von Michael K. (mmike)


Lesenswert?

> 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
2
> Roll-Angle rises.
3
>    * And other way round. */
4
>   NickRateGyro -= ((int32_t) IMU_NICKROLL_COUPLING_FACTOR *
5
> gVars.IMU.RollAngle) / (IMU_NICKROLL_COUPLING_SCALE);
6
>   RollRateGyro -= ((int32_t) IMU_NICKROLL_COUPLING_FACTOR *
7
> gVars.IMU.NickAngle) / (IMU_NICKROLL_COUPLING_SCALE);
8
> 
9
>   /* Couple Yaw to Nick/Roll */
10
>   NickRateGyro += ((int32_t) IMU_YAW_COUPLING_FACTOR * YawRateGyro *
11
> gVars.IMU.RollAngle) / (IMU_YAW_COUPLING_SCALE);
12
>   RollRateGyro -= ((int32_t) IMU_YAW_COUPLING_FACTOR * YawRateGyro *
13
> gVars.IMU.NickAngle) / (IMU_YAW_COUPLING_SCALE);
14
> 
15
>
>
> 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

von Simon K. (simon) Benutzerseite


Lesenswert?

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

von Simon K. (simon) Benutzerseite


Lesenswert?

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

von Simon K. (simon) Benutzerseite


Lesenswert?

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.

von woodym (Gast)


Lesenswert?

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

von woodym (Gast)


Lesenswert?

hallo,

das mit ir2104 kannst du vergessen... ich habe da zwei schlatpläne 
durcheinander gebracht.

bye woodym

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