Vorweg: Die einzelnen Schritte erzeugen nicht die endgültige Charakteristik eures Quadcopters. Wenn also zum Beispiel bestmögliches Prop-Wash-Handling zu lesen ist, dann ist nicht das Prop-Wash-Handling am Ende eures Tunes gemeint. Das wird noch deutlich besser. Gemeint ist ein Kriterium für einen Tuning-Schritt.
Zur Erinnerung:
Term = Wert der aktiv ist, messbar im Blackbox-Log
Gain = eingestellter verstärkender Faktor in Betaflight („PIDs“)
Grundlage sind gut eingestellte Filter. Die PIDs bauen auf einander auf. P kontrolliert I, D kontrolliert P.
Gryo –> Filter –> D-Term –> Filter –> P-Term –> I-Term
Wir müssen die Balance von I, P und D finden. D ist der stärkste Term, diesen wollen wir möglichst hoch haben (hoher Gain). Da der D-Term aber Noise, vor allem Frame Resonanzen, verstärkt ist eine optimale Filterung essentiell um einen möglich hohen D-Gain zu ermöglichen.
Basement-Methode #
Es gibt viele Ansätze um das sehr komplexe PID-Tuning Thema anzugehen, Youtube ist voll von mehr oder weniger guten Tutorials. Ich würde gern die Basement-Methode vorstellen, die mit dem Update von PIDtoolbox auf Version 0.4x sehr viel einfacher geworden ist. Vielen Dank an Brian White und Michael Orter N4V1G1T0R für den konstruktiven Austausch!
Vorbereitung #
Zunächst deaktivieren wir die erweiterten Funktionen des PID-Controllers und geben dem PID-Controller die Möglichkeit die PIDs maximal aufzusummieren. Geht dazu in die CLI und aktiviert:
set pidsum_limit = 1000
set pidsum_limit_yaw = 1000
Anschließend deaktivieren wir dynamic dampening und Feed Forward indem wir den dynamic damping und Stick Response Slider auf 0 setzen. Dazu muss natürlich der Experten-Modus des Betaflight Configurators aktiviert sein. Diesen findet ihr ganz oben rechts mit einem Klick auf das blasse Doppel-Zahnrad.
Sucht euch einen netten Platz im Keller oder Garten. 10 Quadratmeter reichen völlig. Ladet 2 Akkus auf, mehr braucht ihr nicht. Wir gehen wie folgt vor. Jede Session wird am Stück geflogen und am Ende ausgewertet. Mit den besten Wert gehen wir in den nächsten Session. Jeder Flug ist nur ein kurzer PID-Tune Flug auf der Stelle. Acro-Modus (geht auch Angle-Mode), Dauer 25-20 Sekunden reicht völlig und dauert insgesamt ca. eine Stunden wenn man sich Zeit lässt.
- hovern auf der Stelle
- 3-5 kurze Stickeingaben auf pitch, roll und yaw ohne anzuecken, gern gemischt
- Landen, disarmen
- in Betaflight per LUA-Script auf der Fernbedienung die Nächste einstellung setzen (save page nicht vergessen)
- nächster Flug
- solange bis ein Abschnitt der Anleitung abgeflogen ist
- Herunterladen der Logdatei und sinnvolle Benennung
- Analyse in PIDtoolbox – ggf. Step Response Analyse
- mit dem besten Einstellungen in die nächste Session
Eine Organisation auf dem Laptop könnte zum Beispiel so aussehen wenn man nach jedem Landen den Akku kurz abzieht, dadruch entstehen einzelne Log Files:
Ist alles einfacher als es aussieht, ich führe euch durch.
Damping (D-Gain) #
Zu Beginn der Session sollten die Einstellungen in Betaflight so aussehen. Stick Response und Dynamic Damping nehmen wir erstmal raus. Den I-Gain nehmen wir zurück um den langsamen I-Overshoot zu vermeiden. Den D-Gain stellen wir im Mode RP ein, da Yaw sowieso keinen D-Gain verwendet.
In dieser Session beginnen wir mit dem Damping Slider (P/D Gain) bei 0.6 und arbeiten uns in 0.2er Schritten nach oben. Wir fliegen so viele Logs bis der Quadcopter dabei „komisch klingt“, für Profis: es zu P-Term oder D-Term Oszillationen kommt. Solltet ihr anecken wiederholt den Flug. Günstiger ist kurz vor dem anecken zu disarmen, so bleibt der Flug verwertbar. Zieht die Logs auf den Laptop und benennt sie sinnvoll. Anschließend ladet ihr die Logs in PIDToolbox und analysiert diese mit dem Step Response Tool.
Manchmal muss man auch ranzoomen:
Tipp: gebt bei Y max den höchsten Punkt ein, den die Kurven erreichen. So habt ihr die beste Auflösung. Ziel ist eine Linie möglich nahe an der critically damped Linie. Schaut wie schön der Overshoot reduziert wird. Zur Erinnerung:
Bei Sliderposition 1.6 hörte ich die ersten Oszillationen. Also ist die Position davor die, die in die nächste Session einfließt. Die beste Sliderposition ist in diesem Beispiel 1.0 (Log Nummer 3 – orange). Jeder Copter ist individuell, eure beste Position gegenenfalls woanders. Solltet ihr Nahe an eurem Ziel einen Flug mit zu wenig Daten haben „insufficient data“ – wiederholt diesen einen Flug.
Dank einer symetrischen Gewichtsverteilung am Quadcopter in diesem Beispiel muss an den Slidern Pitch Daming und Tracking nichts verstellt werden. In diesem Beispiel sind die optimalen Werte bei gleicher Sliderposition auf Pitch und Roll erreicht. Sollte euer Quadcopter mehr Gewicht auf der Pitch-Achse, als auf der Roll-Achse haben muss ggf. an den Pitch-Slidern gedreht werden, bis ihr die optimalen PIDs der Messung in den Einstellungen abbilden könnt. Ich würde erstmal beide Pitch-Slider an dieser Stelle zusammen verändern. Die Feineinstellung ist nach Anpassung des Mastersliders unten einfacher.
Tipp: Durch dynamic Idle kann man beim ersten Armen ein schrabbendes Geräusch hören (grubbing). Dies liegt an der Idle-Up funktion und sollte nach dem ersten Abheben weg sein.
Drift-Wobble Slider #
Als nächstes Stellen wir den I-Gain ein. Dazu schieben wir den Drift – Wobble Slider in 0.2er Schritten von 0.6 bis 2.0. Dazu aktivieren wir den Mode RPY. Klingt der Quadcopter „komisch“ brecht ihr natürlich ab.
Wir schauen erneut welche Graphik der critically dampend Kurve am nächste kommt. Für Roll und Pitch finde ich Slider-Position 0.8 (rot) am besten. Für Yaw 1.4 (braun). Bedenkt das der I-Gain keine lineare Beziehung zu P und D auf Pitch und Roll hat. Das Tuning-Fester ist groß. Der Wert von I auf der Pitch- und Rollachse muss als „Mindestmaß an I“ verstanden werden. Höhere Werte können im Feintuning sinnvoll sein. Anders verhält es sich auf der Yaw Achse. Wie deutlich zu sehen ist, benötigt diese deutlich mehr I-Gain. Leider kann das mit den Slidern nicht abgebildet werden. Stellt den Slider auf den optimalen Wert, in diesem Beispiel 0.8. Das I/P Verhältnis auf Yaw berechnet ihr und notiert dies euch – wichtig, wir werden das Verhältnis zwischendurch verlieren.
Beispiel: I:P = 95:45=2.1:1 – das bedeutet der I-Gain ist 2,1 mal höher als der P-Gain.
Ausflug I-Gain #
Den I-Gain korrekt einzustellen ist sehr schwer. Daher kann folgende Grafik eine kleine Hilfe darstellen. Schaut wozu eurer aktueller Step-Response-Trace passt und an welcher Stelle ihr am besten nachstellen könntet.
Stick Response Slider #
Wir nehmen Dynamic Damping wieder dazu (Sliderposition 1.0) und stellen nun Feed Forward in 0.2er Schritten ein, hier beginnen wir mit der Sliderposition des Stick Response Sliders auf 0.6. Wir nutzen den Mode RPY um auch Yaw mitzunehmen.
Tuning-Flug wie gehabt. Anschließend die Auswertung. PIDToolbox erwartet, dass zuerst der Setpoint kommt und das Gyroskopsignal folgt. bei hohen Feed-Forward Werten überholt das Gyroskop-Signal aber den Setpoint manchmal und das bring die Berechnungen von PIDToolbox durcheinander. Ich möchte daher eure Aufmerksamkeit auf die Messwerte lenken. Mit zu wenig Feed Forward hatten wir eine Latenz (Stickeingabe bis zum ersten Erreichen des Setpoints) von 10ms, mit Feed Forward sind bis zu 4 ms drin. Je schneller der Quadcopter seinen Setpoint erreicht, desto mehr wird er auch über das Ziel hinaus schießen. Der Wert von Peak wird höher. Da aber das Gyroskopsignal das Setpointsignal überholt kommt es zu Fehlanzeigen im Step Response Tool. Der erste Gripfel und das erste Tal der Kurven werden völlig überhöht dargestellt und eine sinnvolle Auswertung wird schwer möglich. Was wir sehen: die Latenz wird deutlich geringer. Jede Firmware die kein Feed Forward hat (KISS Legacy, KISS Ultra, Emuflight) kann das nicht.
Schauen wir lieber in der Übersicht von PIDToolbox.
Erstellt euch die Kurven mit Gyro (schwarz) und Setpoint (rot). Klickt euch eine Kurve groß, sodass sie über den ganzen Bildschirm angezeigt wird und nutzt nun das Zoom Werkzeug um euch einen Bereich der maximalen Auslenkung anzuschauen – von Gipfel zu Gipfel. Bei wenig Feed Forward schaut dies so aus:
Die Latenz beträgt hier 12-13 ms. Das Gyroskopsignal hängt dem Setpoint ziemlich nach. Gehen wir mal in die übernächste Messung.
Ja, die Defaultwerte sind gar nicht schlecht. Der Gyro hinkt aber trotzdem noch leicht hinterher. Wie schauts bei Sliderposition 2.0 aus?
Ja, ok ok. Das war zu viel. Das Gyroskopsignal ist ständig vor dem Setpoint. Die kleinsten Beschleunigungen des Sticks an der Fernbedienung treiben Feed Forward massiv an. Hier muss sogar der D-Term schon eingereifen um den Copter zu bremsen. Dies erzeugt diese kleinen Zacken um den 0-Punkt und an Tal und Gipfel. Schauen wir mal wo wir den optimalen Wert finden.
Hier liegt der Setpoint fast die ganze Zeit optimal auf dem Gyroskopsignal. Bis auf minimale Abweichungen gibt es fast keine Latenz zwischen Setpoiunt und Gyroskop.
Hauptmultiplikator #
Die Verhältnisse zwischen den I, P, D und FF sind eingestellt. Nun erhöhen wir alle PIDs gemeinsam um das beste Prop-Wash-Handling rauszuholen. Der Master Slider ist sehr empfindlich, daher nur vorsichtig in 0.1er Schritten erhöhen. Wir nutzen den Mode RPY Die Step Response ist wenig aussagekräftig:
Achtet auf die Latenz Graphik rechts. Auf der Roll Ebene ist die Lanz bei Sliderposition 1.3 (orange) am günstigsten. Auf Pitch dagegen bei 1.4 (braun). Stellt daher den Master-Slider auf 1.3 und erhöht die Pitch Slider bis ihr die optimalen Werte habt. In diesem Beispiel 1.1 bei Damping und 1.05 bei Tracking.
Tragen wir nun den korrekten I-Gain für Yaw nach. Aktiviert den Mode RP und tragt euren zu errechnenden I-Gain Wert für Yaw auf Basis des aktuellen P Wertes ein. Das Verhältnis hattet ihr oben berechnet. In diesem Beispiel wird jetzt ein P-Gain von 58 angezeigt. 58 x 2,1 = 122. Das ganze Schaut nun so aus:
Dynamic Damping #
Dmin und Dmax aktivieren hatten wir aktiviert ohne dies zu besprechen. Ihr seht an diesem Beispiel dass beim PID-Tunen sich gar nicht viel ändert solange wir es mit dem D-Gain nicht übertreiben.
Die Step Response wird „ruhiger“ und die Latenz niedriger. Ein Feintuning von dynamic damping ist möglich, siehe auch hier. Meist sind die default Werte aber ausreichend.
Aber, aber … „Dmin does not help Prop-Wash.“ … Mimimi… bei allem anderen was nicht Prop-Wash ist aber schon! Bei ruhigerem Flug (dank Dmin) kann Dmax höher getunt werden als früher. Sobald Prop-Wash eintritt greift ein höherer D-Gain, auch wenn der ein paar ms braucht um anzusteigen.
Hier die finalen Einstellungen:
Ihr habt nun den schwierigsten Teil geschafft. Der Quadcopter fliegt nun so wie ihm befohlen wird. Stellt nun eure Rates ein und ihr seid fertig. Die weiteren Tuning-Schritte sind nur zu Problemlösungen nötig. Der Performance-Gewinn ist minimal. Daher lasst die Werte, wenn ihr keine Probleme habt auf den durch die Presets generierten Defaultwerten. Ich würde euch trotzdem raten sich die Schritt einmal durchzulesen, damit ihr wisst was noch alles möglich ist. Sicher findet ihr bei den ersten Flügen noch etwas Nose-Dipping, Overshoot, Bounceback, oder, oder, oder.
PIDs ohne Slider und Blackbox tunen (Alternative) #
Der klassische Weg ohne Slider und Blackbox zu tunen ist etwas aufwendiger. Man lernt dabei aber gut was die einzelnen Term in der Realität mit eurem Copter machen. Wie sich z.B. welcher Oszillationstyp anfühlt. Deaktiviert zunächst die erweiterten Funktionen des PID-Controllers, sodass nur P, D, und I aktiv sind, damit euch nichts dazwischenfunkt. Nun stellt Ihr I und D auf allen Achsen auf 5. P stellt Ihr auf etwas unter die Hälfte eures aktuellen Wertes. Nehmt eine runde Zahl. Sollte der Quadcopter nicht abheben erhöht P um 10 bis er es tut, dabei darf er aber nicht beim hovern oszillieren.
Wichtig: Motoren müssen immer handwarm bleiben. Testet die Temperatur nach jeder Einstellung. Wenn man sie weniger als 3 Sekunden anfassen kann sind sie zu warm. Ihr braucht diese Reserve sonst raucht euch ein Motor bei einem verbogenen Prop ab.
P – Hovern und nun 5 kurze Throttle-Stöße (Mini-Punch-outs) machen. Wenn diese sauber klingen längere Punch-Outs machen. P-Gain steigern bis hochfrequente Oszillationen dazukommen. „Thrilling“ Das sind die P-Oszillationen. Nun P-Gain eine Stufe zurück stellen.
D – Kurze Twitch-Moves (schnelle Stickeingaben bis 80° Neigung des Quadcopters) auf Pitch/Roll. D-Gain solange steigern bis der Quadcopter anfängt überzuschwingen. (D-Oszillationen oder D-Wobbels) D-Gain eine Stufe zurückstellen.
I – Quadcopter schräg 45° in die Luft stellen. Bei Yaw geradeaus Flug. I-Gain solange steigern bis der Quadcopter die Position sauber hält ohne zu driften. Throttle dabei maximal 70%, weniger ist besser.
P/D – Jetzt mit eingestelltem PID-Controller nochmal versuchen P-Gain und D-Gain zu steigern. Wir wollen D-Gain so hoch wie möglich haben. Versucht jetzt auch die Pitch/Roll Achse individuell einzustellen. Pitch benötigt meist 5% mehr P-Gain als die Roll Achse. Auf der Yaw Achse wird meist deutlich mehr P-Gain benötigt als auf Pitch und Roll. Lasst D-Gain auf der Yaw-Achse immer deaktiviert.
Gain Werte auf +/- 5 reichen. Eine feinere Einstellung ohne Blackboxanalyse ist nicht sinnvoll möglich.
Manuelles Nachtunen mit Blackbox Analyse #
P-Gain tunen #
Ist der P-Gain zu hoch schießt der Quadcopter (Gyro) über sein Ziel (Setpoint) hinaus. Dies nennt man Overshoot (roter Pfeil). P-Term Oszilliert deutlich. Man hört dies beim Punchout (thrilling).
Ist P-Gain zu niedrig ist das Delay (Abstand) zwischen Gyro (hier lila) und Setpoint (hier grün) unnötig groß. [Der I-Term springt ein und drückt nach unten (das soll er aber nicht). Da I-Term träge ist kommt es zu einem langsamen I-Term Bounceback. Auf den schauen wir aber nicht!
Ist P-Gain zu hoch erhalten wir Overshoot und der P-Term fängt an zu oszillieren. Im Flug hört man ein hochfrequentes Flattern (trilling) wenn man Punch-outs macht. In der Blackbox sieht man dieses Flattern sehr schön in der PID-Sum.
Es geht hier noch nicht um Setpoint-Tracking, das heißt die Setpoint-Linie möglichst nahe an Gyro-Linie zu bekommen. Dies erledigen wir später mit Feed Forward. Zur Unterstützung der Entscheidung ob P noch etwas hoch oder runter muss kann man sich die Step Response anschauen. Hier wollen wir möglichst wenig Overshoot, aber dabei das P-Gain so hoch wie möglich einstellen.
D-Gain einstellen #
Erhöhen wir langsam den D-Gain: Dazu kurze Flüge mit vielen schnellen Bewegungen (Snap moves). Sobald D-Gain zu hoch ist beginnt der Copter überzuschwingen (D-Wobbles) oder Bounce Back zu generieren. D-Gain dann reduzieren. Heiße Motoren sind ein Zeichen für unsaubere Filterung oder zu viel D-Term.
Stellt die Werte in 5er Schritten ein, kleinere Abstände machen keinen Sinn. Die absoluten Zahlen sind egal.
Die P/D-Balance ist für euer Quad individuell. Notiert sie euch. Wenn Ihr später D um 5 erhöht müsst Ihr P um 5×1,71=8 erhöhen um die Balance zu halten. Notiert eure Werte, aktiviert die Slider und dreht solange rum bis Ihr ungefähr die Werte habt.
PID Zusammenspiel #
Änderung | Rise Time | Overshoot | Settling Time | Steady State-Error | Stabilität |
P erhöhen | Verkleinert | erhöht | etwas erhöht | Verringert | verschlechtert |
I erhöhen | etwas verkleinert | erhöht | erhöht | stark verringert | verschlechtert |
Dmax erhöhen | etwas verkleinert | erniedrigt | etwas erhöht | – | etwas verbessert |
Dmin erhöhen | Vergrößert | erniedrigt | erniedrigt | minimaler Einfluss | Verbessert |
FF erhöhen | stark verkleinert | minimal erhöht | – | schlechter RC-Link! | – |
Abkürzung für Faule #
Tl;dr… Alles mühsam und so genau brauch ichs gar nicht. Schaut euch eine Step Response mit den default Werten an. Sollte die halbwegs in Ordnung sein, dann stellt Feed Forward nach oben. Nutzt den Stick Response Slider und stellt auf 1.2, 1.4 und 1.6. Schaut euch kurz die Kurven an. Nutzt die Beste und stellt dann den Hauptmultiplikator (Master Slider) hoch: 1.4, 1.8. Es müsste zu einem schrabbenden Geräusch kommen. Nun den Master Slider 0.1 zurück. Jetzt habt ihr für den DIN-Iso-Racecopter die PIDs halbwegs im grünen Bereich.