Wer etwas tiefer in die Materie einsteigen möchte und Filter richtig verstehen möchte kann gern hier weiterlesen. Fertigt ein Log von einem Filtertuning-Flug an. Wie das geht findet ihr hier.
Faustregeln der Filterung:
- So wenig wie möglich und soviel wie nötig
- unter 100Hz wird nicht gefiltert
- über 1000Hz wird nicht gefiltert
- ausschlaggebend ist das gefühlte Flugverhalten und die Motortemperatur
- wir arbeiten uns mit Bedacht vor: von viel Filterung nach wenig Filterung
defektes Gyroskop identifizieren #
Öffnet das Log in Blackbox-Explorer (BBE). Falls Ihr BBE das erste Mal benutzt ladet euch am einfachsten die Arbeitsvorlage von Mark Spatz rein.
- Wählt nun bei Overview (1) Euer Log aus, sollten mehrere Logs in der Datei stecken.
- Wählt die erste Arbeitsvorlage Overview aus. (Shortcut: Zahlenreihe über der Buchstabentastatur 1 tippen). Klickt auf das gelbe Minus bei Gyros um nur die gefilterten Gyrosignale anzuschauen.
- Expo (erstes Symbol) an, Smoothing (zweites Symbol) aus, Orientierungslinien (drittes Symbol an)
Jetzt scrollen wir grob die Gyro-Signale ab. Die Kurven dürfen wackeln, dürfen rauschen, hoch und runter gehen. Alles kein Problem. Wir suchen erstmal nur Spikes, die die 0-Linie (Mitte) durchschreiten. Hier ein Beispiel von einem Spike im Yaw-Gyro-Signal.
Legt den Spike in die Mitte der Anzeige, wo sich der rote vertikale Balken befindet. Zoomt mit dem Zoomslider in der Kopfzeile heran, bis ihr den Spike gut erkennen und abgrenzen könnt. Jetzt schieben wir den roten Marker an den Beginn des Spikes, an dem er die Null-Linie verlässt. Hier tippen wir einmal auf [M] und speichern damit temporär diesen Marker. Jetzt schieben wir mit der Maus das Log nach links bis der Marker den ersten Gipfel erreicht. Kurzer Blick auf die Legende rechts. Wie hoch ist der Ausschlag an dieser Stelle? In diesem Beispiel 132°. Ok. Jetzt weiterschieben bis die gelbe Linie (Gyro-Signal Yaw) wieder die Nulllinie erreicht. Oben zeigen uns jetzt zwei rote Pfeile an wie lang der Zeitabstand ist. 1/Zeit = Frequenz. In diesem Beispiel misst das Gyroskop eine Drehung von 0 auf 132° und zurück auf der Yaw-Achse in 8ms. Das ist physikalisch nicht möglich. Finden wir mehrere solcher Spikes hat das Gyroskop einen Defekt. Im Flug bemerkt man hier zufällig auftretende Zuckungen auf der Yaw Achse, wenn die Spikes groß genug sind. Der Flightcontroller muss leider getauscht werden. Das Phänomen wird „Glitch“ (Ausrutschen) genannt.
(Abzugrenzen von „Twitch“, ständiges zucken über den gesamten Throttle-Bereich oder einen Teilbereich der reproduzierbar ist.)
Noise-Analyse #
Ist das Gyro-Signal frei von Spikes öffnen wir PIDtoolbox und generieren uns eine Parula Heatmap mit dem Preset 1: Gyro prefiltered (das sind die GYRO_SCALED Daten vom Debug Mode), Gyro (nach den Filtern), DTerm prefiltered und D-Term (nach den Filtern).
Wir sehen in der ersten Spalte das ungefilterte Gyrosignal (ausgenommen die Filterung auf Hardwareebene des Gyros selbst). In der zweiten Spalte das gefilterte Gyrosignal, in der dritten Spalte den D-Term vor Filterung (von PIDtoolbox errechnet, nur als Orientierung zu verwenden) und in der vierten Spalte den D-Term nach Filterung. Je mehr blau zu sehen ist desto besser, dies bedeutet wenig intensives Signal. Mean- (Mittelwert) und Peak-Wert (Spitzen-Wert) in dem jeweiligen Bild zeigt uns den Bildeindruck in Zahlen.
Spektralanalyse auswerten #
Grundsätzlich unterscheiden wir fünf Arten von Signalen:
a) [1-3] sind die Störungen die durch die Motoren erzeugt werden. [1] ist das Störungsband selbst (die Fundamentale oder 1st harmonic). [2] die erste Resonanz des Motor-Störungsbandes (2nd harmonic, 2. Harmonische) und [3] die 3rd harmonic, 3. Harmonische. Diese Störungen verlaufen schräg von links unten nach rechts oben und flachen im Verlauf etwas ab. Sie werden vom Filter der Gyroebene (RPM-Filter) sehr gut unterdrückt.
b) Bei [4] sehen wir eine minimale Resonanz eines festen Anbauteils. Feste Anbauteile schwingen in Ihrer Eigenfrequenz starr, unabhängig von der Motordrehzahl und damit dem % Throttle. Wir sehen eine horizontale Linie. Diese wird nur mäßig herausgefiltert und ist im D-Term nach Filterung noch zu erkennen, aber ist minimal. Dies erledigt am besten ein Notch-Filter. Ein drehzahlabhängiges Anbauteil (Motor, Propeller, Prop-Mutter) würde eine ansteigende gelbe Linie/Wolke außerhalb der Motor-Störbänder erzeugen.
c) [5] zeigt den aktiven D-Term, der von Prop-Wash stammt. Ich habe in diesem Log sehr auf Prop-Wash getunt und bin sehr viele Split S geflogen um viel Prop-Wash zu induzieren. „Propwash-bubble“ oder „Blob„.
d) Diffuse Flecken oder eine allgemeine „gelb-Färbung“ zeigt allgemeines Rauschen ohne eine identifizierbare Ursache an.
e) Ein vertikales Band über den Großteil des Frequenzspektrums kann ein Hinweis für ein defektes Gyroskop sein. Dies sollte normalerweise nicht auftreten.
Schauen wir uns das genauer an. Wir aktivieren die Kästchen „<100hz“.
Der Bereich 0-20 Hz sind unsere eingegebenen Bewegungen des Copters. Hier ist viel Signal ausnahmsweise erlaubt = viel gelb ist gut. Zwischen 40-80 Hz tritt Prop-Wash auf. Bei Split S gebe ich in dem Moment in dem ich Prop-Wash induziere Gas. In diesem Bild also zwischen 40% und 60% Throttle. Alles über 100 Hz interessiert uns nicht und kann weg gefiltert werden.
Filtereinstellungen #
Zunächst müssen wir identifizieren ob die Filter den gewünschten Effekt erzielen. Anschließend können wir die Filter einstellen. Dazu arbeiten wir uns wie folgt vor:
RPM-Filter #
1. Der RPM-Filter ist für das schräge Motorband a) [1-3] zuständig. Er ist der wichtigste Filter. Je nachdem wie viele dieser Motorbänder man sieht kann man 1-3 Harmonische filtern.
Schaut euch zunächst mit dem Data-Cursor-Werkzeug (Kreuz mit Notizzettel Symbol) den Punkt an, andem das Motorband beginnt. 20 Hz oder 1/5 darunter sollte die Filterung beginnen, MinHz. Beginnt das erste Motorband erst deutlich später, kann man diesen Wert erhöhen (140hz). Zählt anschließend wie viele Motorbänder (Harmonische) ihr erkennen könnt und wahlt diese Anzahl. Achtet dabei auch auf die Grafiken von D-Term prefiltered und D-Term, hier schlagen die Motorbänder gern durch. Die Reduktion auf 2 bringt nur minimale Latenz-Vorteile. Wichtig ist der Q Faktor. Diesen kann man in der CLI ändern.
set gyro_rpm_notch_q = 500
Ein höherer Wert erzeugt einen etwas breiteren, aber weniger effektiven Filter. Ein niedrigerer Wert erzeugt einen schmaleren, aber dafür mehr effizienten Filter. Ist das Motorband schmal, aber im gyro (nach Filterung) Signal kommen noch mittig Störungen durch, so wählt einen kleineren Faktor. Ist das Motorband breit und leuchtet allgemein noch flau im gyro (nach Filterung) Signal so wählt einen etwas höheren Faktor
Dynamic notch Filter #
2. Der Dynamic notch zielt auf die horizontalen Störbänder b) [4] zuständig. Er springt der Stärksten Schwingung hinterher und unterdrückt diese. Ist keine Schwingung da unterstützt er den RPM-Filter. Ist eine Schwingung da wird er diese unterdrücken. Auch wenn ihr keine Schwingungen seht solltet ihr diesen Filter nicht deaktivieren, sondern mindestens einen aktiv lassen. Im Falle eines verbogenen Propeller nach einem Crash kann er Motoren retten. Der Frequenzbereich (min-max) sollte alle Störungen erfassen, ermittelt mit dem Data-Cursor-Werkzeug den Bereich. Zählt die Anzahl der horizontalen Störbänder und gebt einen Notch-Filter dazu frei. Die Breite bleibt immer 0 (sie wurde in der vor RPM-Filter-Ära verwendet). Der Q Faktor ist schwierig zu tunen, aber ähnlich dem Prinzip des Q Faktors des RPM Filters, im Zweifel default lassen.
Gyro Lowpass Filter #
3. Mit den Filter-Slidern in Betaflight könnt ihr schrittweise die Gyro-Lowpass-Filterung reduzieren. Dazu den Slider um 0.2 erhöhen (Multiplier erhöhen = reduziert die Filterung).
Wenn ihr eine 4kHz PID-Loop Frequenz nutzt lasst den Gyro Lowpass 2 Filter (LPF2) aktiviert und setzt diesen auf 825 Hz. Beim heruntersampeln der 8k Datenpakete kommt es zu Aliasing Effekten, die der Gyro Lowpass 2 Filter unterdrückt. Wird hier der Gyro Lowpass 2 Filter abgeschaltet wird automatisch (ohne, dass es im Configurator einstellbar ist) eine 2-Punkt Mittelung durchgeführt. Diese ist weit weniger effizient. Wollt ihr einen Lowpass-Filter abschalten, dann in dieser Situation nur den Gyro Lowpass 1 Filter (LPF1) abschalten.
Bei 2kHz PID-Loop Frequenz muss der Gyro Lowpass 2 Filter (LPF2) aktiviert bleiben mit einem Cutoff von kleiner 500Hz und als mindestens PT1 Filter.
Wenn ihr eine 8kHz PID-Loop Frequenz nutzt könnt ihr den Gyro Lowpass 2 Filter (LPF2) ohne Bedenken deaktivieren.
Schiebt nun den Slider langsam nach rechts. Dabei immer die Motortemperatur im Blick behalten. Kurzer 20 Sekunden Rundflug, Temperaturtest. Wenn ok, dann ein langer Punch out. Klingen die Propeller sauber, wackelt nix im FPV Feed? Nein, dann Slider 0.2 erhöhen. Nächster Test. Wenn Ihr objektiv reinschauen wollt: einen Tuningflug machen und die neue Heatmap mit der vorhergehenden Heatmap vergleichen. Je weniger Filterung Ihr anwendet, desto heißer werden die Motoren, desto besser wird das Prop-Wash-Verhalten, desto unsauberer wird der Punch out. Sind die Motoren ein Ticken zu heiß ist die Grenze erreicht. Dann den Slider um 0.1 bis 0.2 senken.
Kontrovers wird in der Szene diskutiert ob gute Builds überhaupt Low-Pass Filterung auf der Gyroskopebene mit einer 8kHz PID-Loop benötigen. Wenn ihr die oben genannten Empfehlungen beherzigt und die Slider ohne Probleme bis 2.0 schieben könnt, kann man in der Regel auch die Gyro Lowpass Filterung komplett abstellen. Es gibt aber auch einige Piloten und Entwickler die empfehlen die Lowpassfilter bei 2.0 aktiviert zu lassen.
D-Term-Lowpass Filter #
4. Wenn die Gyroskopfilter fertig eingestellt sind geht es hier weiter. Zunächst schauen wir uns an ob die Störungen im D-Term hauptsächlich ab einer bestimmten Frequenz horizontal auftreten oder den Motorstörbändern folgend schräg ansteigen.
Sind die Frequenzen im D-Term Signal eher den Motorstörbändern folgend schräg und aufwärts (meistens der Fall) nutzen wir die default Einstellung und den Slider. Schiebt den langsam nach rechts. Gute Builds landen hier bei 1.4. bis 1.6.
Sind die Frequenzen im D-Term Signal eher horizontal nutzten wir einen einzelnen statischen Lowpassfilter, das heißt wir aktivieren nur den D-Term Lowpass 1 und stellen den Mode auf STATIC. Die cutoff-Frequenz des D-Term Lowpass Filter 1 legen wir ca. 20 Hz unter die unterste Störung (z.b. 140 Hz) ermittelt mit dem Data-Cursor-Werkzeug in der Parula-Heatmap des PIDToolbox. Als Filtertyp wählen wir PT3. Wenn die Filterung sehr gut läuft könnt ihr als nächstes PT2 versuchen um Latenz zu sparen. BiQuad wird nicht empfohlen. Ein statischer Filter ist sehr selten nötig, hin und wieder bei 7 Zoll-Long-Range Coptern. Diese Einstellung erzeugt viel Latenz und ist nicht für Racing geeignet.
Niemals alle D-Term-Lowpass Filter deaktivieren. Damit tötet ihr eure Motoren!
Yaw-Filter #
Die Yaw-Achse hat wenig Autorität sodass eine zusätzliche Filterung hier wenig Probleme macht. Von der Yaw-Achse des Gyroskop Chips dringen gern Störsignale in Pitch und Yaw ein, welche durch einen Filter ab 100 Hz gut reduziert werden. Die zusätzliche Latenz ist minimal. Daher wird empfohlen den Filter bei 100 Hz zu belassen. Funktionell kann der Yaw Filter für Whoops und Cinewhoops interessant sein, da dies bei Kollisionen etwas hilft Yaw-Spins zu reduzieren. Allgemein kann man 100 Hz für Whoops und 50 Hz für Cinewhoops empfehlen.
Static Notch Filter #
Werden nur für sehr spezielle Fälle eingesetzt in denen eine starke Resonanz an einer ganz bestimmten Frequenz auftritt. In der Regel wird diese aber durch die dynamic notch Filter des Gyroskops gut abgedeckt. Daher wird in der Regel kein static notch Filter mehr benötigt. Weder auf Gyroskop- noch auf D-Term Ebene.
Das Tuning-Dilemma #
Jetzt kommt das große Problem das kein Tutorial oder Video dieser Welt lösen kann. Wie wenig ist zu wenig Filterung? Wir wollen so wenig wie möglich Filterung (so wenig wie möglich Delay = Verzögerung) für die beste Performance. Aber so viel Filterung, dass uns nicht die Motoren abfackeln wenn doch mal ein Propeller verbogen ist. Die Motoren dürfen nur handwarm werden. Kann man sie keine 3 Sekunden bequem anfassen sind sie zu warm, dann Slider 0.1 bis 0.2 zurück stellen. Wie viel Sicherheit Ihr aufgeben wollt um noch ein Stück Performance rauszuholen müsst Ihr allein wissen. Am Anfang lieber auf Sicherheit gehen. Nachtunen kann man in einem Monat immer noch, kostet nur zwei Klicks. Ein neuer Motor kostet Geld.
Wichtig ist auch nicht zu viel zu filtern. Beim Überfiltern gehen relevante Anteile des Signals verloren oder das Delay ist so lang, dass es zu zu starker Phasenverschiebungen kommt und der Quadcopter zu spät auf die gemessenen Signale reagiert.
Mit der Spektralanalyse kann man nur die Einstellungen von ein- und demselben Quadcopter vergleichen. Ein Vergleich von Quadcopter A und B um zu sagen Quadcopter A hat eine rauschärmere „bessere“ Filterung oder ist besser gebaut ist nicht ohne Weiteres möglich. Eine „saubere“ Spektralanalyse kann durchaus auch ein Zeichen von zu viel Filterung sein. Das Delay (Filterverzögerung) muss gegen die Rauschunterdrückung abgewogen werden. Ein kürzeres Delay verbessert das Propwash-Verhalten enorm. Die Spektralanalyse unterstützt uns beim Filter-Tuning, ist aber nur im Kontext mit der Motortemperatur dem Fluggefühl aussagekräftig. Letzteres bleibt subjektiv.
Sobald der PID-Kontroller optimiert ist sollte man nocheinmal schauen ob an der D-Term Filterung etwas optimiert werden kann. Ist die D-Term-Kurve sehr unruhig können ein-zwei Klicks mehr Filterung am Slider helfen. Ist der D-Term sehr ruhig kann man die Filterung etwas reduzieren.