Plasmatree PID Tuning Tool

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Plasmatree PID Tuning Tool

      Vor 2 Wochen hab ich beim Fliegen einen netten Menschen kennen gelernt, der schon sehr lange fliegt. Zum PID Tuning hat er mir geraten, mir mal Plasmatree anzusehen. Und nach einigen testen muss ich sagen das Programm ist der Hammer :) .

      Man füttert es mit Blackbox Logs, das Programm schmeißt dann eine grafische Auswertung raus, mit der sogar ich als Tuning Laie etwas anfangen kann. Es sind Beispielbild mit dabei, und im Source sind noch ein Paar Bilder zur Erläuterung:


      Stock PIDs/verbesserte PIDs

      Entscheidend ist bei den 3 Achsen immer das untere Bild (Mathematiker und Physiker freuen sich immer, wenn man was "Sprungantwort" sagt, hab ich festgestellt ;) ). Der Kurvenanstieg sollte zügig auf 1 gehen und dann dort einschwingen. P regelt den Anstieg, D die Schwingung, mit I verschiebt man die Kurve hoch und runter. Ein gutes Tuning sollte dann so aussehen:


      Zur Interpretation sind helfen diese beiden Bilder:


      Ich hab heute auf meine Diatone GT200S neue Pops geschraubt, die AVAN-R 5 5065, und die Vibrationen wegen zu hoher P-Werte hab ich deutlich gehört. Sie sind auch in der Auswertung von 1. Versuch zu sehen:


      Bei der Auswertung heute habe ich überrascht festgestellt, das sogar eine Grafik mit den Störungen erzeugt wird, mit der sich wohl die Filter optimieren lassen:


      Ich kann das alles noch nicht Interpretieren, aber es sieht ziemlich gut aus und das Wochenende ist lang:) . Und gerade eben sehe ich, das es die Version 0.50 gibt, ich hab noch die 0.40 :) . Unter Win 7 stützt das Programm manchmal bei mir ab, aber erst nach der Auswertung, ist also nicht schlimm.

      Ich bin gespannt, was ihr zum dem Programm und den Grafiken für Erkenntnisse gewinnt.
    • Sieht ganz interessant aus. Ich würde gerne damit rumspielen, aber was mich daran hindert führt zur Frage:

      Hat jemand PID-Analyzer.py auf einem Linux-System zum Laufen gebracht? Ich versuche es auf openSUSE Leap-42.3. Alle Requirements sind als Paket installiert. Das Resultat ist:

      Quellcode

      1. vodoo@host:~/programs/plasmatree/pid-analyzer-0.5> ./PID-Analyzer.py
      2. Traceback (most recent call last):
      3. File "./PID-Analyzer.py", line 8, in <module>
      4. from pandas import read_csv
      5. ImportError: No module named pandas
      Ich mag Rechtschreibfehler - besonders in Tattoos.
    • Zu hohe PIDs - und das ist fast immer der Fall, wenn jemand mit PIDs Probleme hat - sieht man im BB-Log recht einfach. Ich verspreche mir von PID-Analizer.py, dass man auch zu tiefe PIDs sieht und abschätzen kann, um wie viel sie noch erhöht werden sollen. Das wäre besonders bei YAW wertvoll, weil das nicht so einfach zu tunen ist.

      Zurück zu PID-Analizer.py auf Linux. Ich habe da ein paar Fortschritte gemacht. Zuerst die Geschichte mit dem notwendigen Blackbox_decode.exe. Den Quellcode dazu (und auch für Blackbox_render.exe) findet man bei Github blackbox-tools. Das compiliert zu meinem Erstaunen ganz problemlos mit libcairo2 und vielen weiteren davon abhängigen Libraries. Habe deshalb gleich ein openSUSE RPM-Package gebaut und bei dieser Gelegenheit man pages hinzugefügt. Der Funktionstest verlief unauffällig, die Programme scheinen gut zu funktionieren.


      PID-Analyzer.py zickt immer noch rum. Das kann damit zusammenhängen, dass ich von Python wenig Ahnung habe und vermutlich auch damit, dass ich es mit Python Version 3.4.6 versuche, weil für Python 2.x in der openSUSE Distribution pandas nicht erhältlich ist. Habe dann folgendes gemacht:

      1. Den Quelltext von PID-Analizer.py mit Hilfe von '2to3' nach Version 3 angepasst. Das ergab einige wenige Änderungen.

      2. In der Shebang Zeile den bestehenden Text ersetzt durch '#!/usr/bin/env python3'. Dann wird pandas gefunden.

      3. In Zeile 914 habe ich 'Blackbox_decode.exe' ersetzt durch '/usr/bin/blackbox_decode'. Mit dieser Änderung funktioniert der Aufruf des Decoders. Entsprechend auch die Hilfstexte anpassen, dann sieht es schöner aus, aber auf die Funktion hat das keine Auswirkung.

      Jetzt läuft das Programm schon mal ein Stück weit, decodiert den BB-Log, stoppt aber nach Aufruf des eigentlichen Analyzers und innerhalb von pandas mit folgendem Fehler-Log:

      Quellcode

      1. vodoo@host:~/programs/plasmatree/pid-analyzer-0.5.test> ./PID-Analyzer.py
      2. INFO 2018-05-21 13:51:38,720 PID-Analyzer.py:926: Decoding with '/usr/bin/blackbox_decode'
      3. INFO 2018-05-21 13:51:38,720 PID-Analyzer.py:928: PID-Analyzer 0.50
      4. INFO 2018-05-21 13:51:38,720 PID-Analyzer.py:929: Hello Pilot!
      5. INFO 2018-05-21 13:51:38,720 PID-Analyzer.py:942: Interactive mode: Enter log file, or type close when done.
      6. Blackbox log file path (type or drop here): better_tune.BBL
      7. Optional plot name:better_tune-plot
      8. Show plot window when done? Y/(N)N
      9. WARNING 2018-05-21 13:52:02,799 PID-Analyzer.py:883: Ignoring BBL session '/home/tsp/programs/plasmatree/pid-analyzer-0.5.test/better_tune-plot/better_tune_temp0.BBL', 61B < 500000B.
      10. Decoding log '/home/tsp/programs/plasmatree/pid-analyzer-0.5.test/better_tune-plot/better_tune_temp1.BBL' to '/home/tsp/programs/plasmatree/pid-analyzer-0.5.test/better_tune-plot/better_tune_temp1.01.csv'...
      11. Log 1 of 1, start 01:15.233, end 03:24.721, duration 02:09.488
      12. Statistics
      13. Looptime 126 avg 2.1 std dev (1.6%)
      14. I frames 31882 44.4 bytes avg 1415566 bytes total
      15. P frames 95640 26.2 bytes avg 2509739 bytes total
      16. E frames 3 8.7 bytes avg 26 bytes total
      17. S frames 265 7.0 bytes avg 1855 bytes total
      18. Frames 127522 30.8 bytes avg 3925305 bytes total
      19. Data rate 984Hz 30349 bytes/s 303500 baud
      20. 2 frames failed to decode, rendering 6 loop iterations unreadable. 6 iterations are missing in total (0ms, 0.00%)
      21. 892689 loop iterations weren't logged because of your blackbox_rate settings (113301ms, 87.50%)
      22. INFO 2018-05-21 13:52:04,162 PID-Analyzer.py:649: Reading: Log 0
      23. Traceback (most recent call last):
      24. File "./PID-Analyzer.py", line 963, in <module>
      25. run_analysis(clean_path(p), name, args.blackbox_decode, args.show)
      26. File "./PID-Analyzer.py", line 889, in run_analysis
      27. test = BB_log(log_file_path, plot_name, blackbox_decode, show)
      28. File "./PID-Analyzer.py", line 731, in __init__
      29. self.figs = self._csv_iter(self.heads)
      30. File "./PID-Analyzer.py", line 748, in _csv_iter
      31. analysed = CSV_log(h['tempFile'][:-3]+'01.csv', self.name, h)
      32. File "./PID-Analyzer.py", line 349, in __init__
      33. self.data = self.readcsv(self.file)
      34. File "./PID-Analyzer.py", line 664, in readcsv
      35. data = read_csv(fpath, header=0, skipinitialspace=1, usecols=lambda k: k in wanted, dtype=np.float64)
      36. File "/usr/lib64/python3.4/site-packages/pandas/io/parsers.py", line 474, in parser_f
      37. return _read(filepath_or_buffer, kwds)
      38. File "/usr/lib64/python3.4/site-packages/pandas/io/parsers.py", line 250, in _read
      39. parser = TextFileReader(filepath_or_buffer, **kwds)
      40. File "/usr/lib64/python3.4/site-packages/pandas/io/parsers.py", line 566, in __init__
      41. self._make_engine(self.engine)
      42. File "/usr/lib64/python3.4/site-packages/pandas/io/parsers.py", line 705, in _make_engine
      43. self._engine = CParserWrapper(self.f, **self.options)
      44. File "/usr/lib64/python3.4/site-packages/pandas/io/parsers.py", line 1072, in __init__
      45. self._reader = _parser.TextReader(src, **kwds)
      46. File "pandas/parser.pyx", line 409, in pandas.parser.TextReader.__cinit__ (pandas/parser.c:3700)
      47. TypeError: 'function' object is not iterable
      Alles anzeigen

      Hier stecke ich fest. Habe ausgiebig Tante Google befragt, einiges gefunden, aber nichts, aus dem ich wirklich schlau werde. Da es hier im Forum einige IT-Spezialisten gibt: hat mir jemand einen Tip?
      Ich mag Rechtschreibfehler - besonders in Tattoos.
    • Nach zwei Tagen intensivem PID-Tuning hab ich jetzt das perfekte Tuning :D . OK, nicht ganz, aber das Programm ist sehr hilfreich bei den P- und D-Werten für Pitch und Roll. Yaw lässt sich nur grob einstellen, weil möglicherweise zu wenig Daten im Log sind - ich muss doch noch mal ne Runde Kopter-Spinning ausprobieren 8) . Die I-Werte lassen sich auch nicht ablesen, die müssen erflogen werden. Und ein paar mehr Werte gibt es ja auch noch.

      Nach einigen planlosen Versuchen habe ich die P-Werte auf 10, I und D auf 0 für Pitch und Roll gesetzt. Damit flog der Kopter aber extrem instabil. I und D auf 1 war wesentlich angenehmer, das Ergebnis sah gleich aus. Dann habe ich die P-Werte erhöht, bis die Werte über 2 gegangen sind:


      Mit den Werte im 3. Bild gab es ein sehr deutliches Vibrieren. Darunter gab es auch Vibrationen, es war aber auch ziemlich windig. Ohne Wind gab es kaum Vibrationen, mit Wind deutlich stärker. Wenig Wind hatte aber kaum Einfluss auf die Auswertung, kräftigere Böen schon. Die Tests hab ich übrigen mit der Diatone GT200S von meinem Avatar gemacht, weil Diatone die nicht mit Stock-PIDs, sondern mit getunten Werten ausliefert. Geliefert wird sie mit 43 für Roll-P und 57 für Pitch P - passt :) .

      Weiter getestet habe ich mit 42 bei Roll-P, da war wohl der Wind schuld. Dann habe ich die Werte für D angehoben:



      Entscheidend ist immer die blaue Linie, die orange ist durch den TPA-Wert gedämpft. Man sieht, wie die Linie Richtung 1 wandert und bei 20 schon ganz gut passt. Bei 30 schwingt die Line ziemlich nach, das ist überdämpft. Diatone liefert mit diesen Werten aus:



      Bei D hat sich der Wind deutlich mehr bemerkbar gemacht als bei P, die Kurven lagen mal knapp über, mal knapp unter 1 - passt also :) .

      Das ganze habe ich mit anderen Kopter wiederholt. Mein Problemkind z. B., der stretched Monsterbomber Real1S, den ich mit Stock-PIDs nicht in die Luft bekommen habe fliegt jetzt deutlich besser :) .

      Was gibt es zu beachten? Die Logs müssen größer als 0.5MB sein, sonst werden sie nicht ausgewertet. Beim fliegen reicht es, im Angle- oder Horizon-Modus zu schweben und ein bischen rum zu fliegen. Hektisches durch-die-Gegend-ballern ist nicht nötig. Loggen soll man mit der Hälfte der PID-Loop Frequenz.

      Wie liest man die Grafik überhaupt? Für die drei Achen gibt es immer 3 Bilder: oben den Ausschlag von der Fernbedienung (und Störungen wie Wind?), darunter ein buntes Bild ?( und dann die Grafik von der eigentlichen Regelung. Das Bild muss man von links nach rechts lesen: bei einem Ereignis reagiert der Controller mit Steuerbefehlen. Im unteren linken Bild sieht man, wie die Regelung für Roll bei ca. 25ms die 1-Achse schneidet, dann aber überschwingt und nach ca. 70ms auf den richtigen Wert einpendelt. In den oberen 3 Bilder kann man auch sehen, das bei niedrigen P-Werten die 1-Achse später erreicht wird, die Reaktion also langsamer ist. Weshalb man möglichst große P-Werte haben möchte. Das Maximum scheint aber ungedämpft bei 2 zu liegen.

      o, ich hoffe, das hilft und ist nicht zu großer Blödsinn ;) .
      Bilder
      • GT200S_20180520_155133tmp_0_response.png

        405,97 kB, 1.600×800, 71 mal angesehen
      • GT200S_20180520_164452tmp_0_response.png

        485,46 kB, 1.600×800, 68 mal angesehen

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von F312 () aus folgendem Grund: Bilder sortiert

    • Hallo miteinander,
      sehr schön dass euch das ganze gefällt! :)

      @vodoo: Der Fehler müsste von einer falschen pandas Version kommen. Welche Version hast du installiert?
      Du brauchst vers. 0.22.0 (die ist z.b. bei Anaconda mit dabei)

      @F312: Schön zu sehen, wie du das hier aufbereitest! Absolut kein Blötsinn. ;)

      F312 schrieb:

      Wie liest man die Grafik überhaupt? Für die drei Achen gibt es immer 3 Bilder: oben den Ausschlag von der Fernbedienung (und Störungen wie Wind?), darunter ein buntes Bild ?( und dann die Grafik von der eigentlichen Regelung. Das Maximum scheint aber ungedämpft bei 2 zu liegen.

      o, ich hoffe, das hilft und ist nicht zu großer Blödsinn ;) .
      Das bunte Bild in dem PID Fenster stellt (seit v0.5) die Sprungantwort abhängig vom Throttle dar: An jedem X-Wert befidet sich die zu diesem Schub zugehörige Sprungantwort. Deshalb hat die Y-Achse auch die gleiche Bezeichnung wie die X-Achse im untersten Plot. Die Farbskala geht ebenfalls von 0-2. Du kannst übrigens etwas in den Plots rauszoomen, berechnet werden die zwischen -1.5 und 3.5, alles relevante spielt sich aber in der Regel zwischen 0 und 2 ab, deshalb diese standard Einstellung. Dass die "Wellen" in den bunten Bildern bei höherem Schub schmaler/höherfrequent werden, spiegelt wieder dass die effektiven PID Werte bei höherem Schub aggressiver sind. Aus diesem Grund gibt es TPA. :)
      Bei der Noise Analyse die du ja schon ganz am Anfang gezeigt hast, solltest du mit mindestens mit 2khz loggen, um Ergebnisse bis 1khz zu bekommen. Es sieht so aus, als ob das Motornoise in den debug Plots am oberen Bildrand "reflektiert" wird: Das ist ein Artefakt, was durch die gerige Lograte entsteht (Ähnlich wie ein drehendes Rad bei strobo Licht welches beim Beschleunigen aussieht als würde es sich vorwärts drehen, stehen bleiben und dann rückwärts laufen).
      Der gelbe, leicht schräge Balken in den Plots (ca. 25hz) ist übrigens genau das Überschwingen des Kopters welches aus den PID Einstellungen resultiert. ;) Hast du den gleichen Log mal in 0.5 geschmissen? Die Auftragung der Sprungantwort über den gesamten Schubbereich könnte interessant aussehen!



      Dillbriese schrieb:

      Ist ja witzig, mit der Version 0.31 von vor einer Woche waren die Ergebnisse noch ganz andere als jetzt mit 0.5.
      Zwischen den Versionen hab ich Wiener-Entfaltung überarbeitet. Die kommt jetzt deutlich besser mit Störugen/Noise klar und liefert immer korrekte Ergebnisse. Genauer: Das Signal zu Rausch Verhältnis der mittleren sprektralen Leistungsdichten war vorher frequenzunabhängig. Jetzt ist es eher einer Art Tiefpass der dafür sorgt, dass nur relevante Frequenzen berücksichtigt werden (hochfrequentes Rauschen wird nicht mehr entfaltet).

      wuzzle schrieb:

      Damit können wir jetzt alle nen Tuning-Schwanzvergleich machen.
      Ist zwar salopp formuliert, bringt aber einen wichtigen Aspekt auf den Punkt: Die Ergebnisse sind vergleichbar! 8)

      Viele Grüße,
      Flo

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von plasmatree ()

    • Hallo Flo :)

      Schön, dich hier direkt als Ansprechpartner zu haben. Das wertet das Tool gleich noch ein wenig auf.

      Ich habe es wirklich ein wenig salopp formuliert. Aber so kann man sich auch schön überprüfen. Ich habe z.B. festgestellt, dass ich bei einem Kopter, bei dem ich zufrieden war mit dem Tuning, noch ein zu starkes Überschwingen im System hatte. Die Visualisierung ist echt super um das Tuning zu perfektionieren.

      Für das erste grobe Tuning am Flugplatz ist das allerdings etwas zu langwierig. Man kann das Tool aber perfekt als Ergänzung zum BB-Viewer nutzen um die Analyse weiter voranzutreiben.

      Mein Vorgehen sieht jetzt so aus:
      1.) Kopter bauen, flashen, Filter ausstellen
      2.) Erstes BB Log mit Standard PIDs erstellen und gucken, ob irgend eine Frequenz herausgefiltert werden muss -> Filter anpassen
      3.) PID tuning von 0
      4.) BB Log Analyse um Schwingungen zu finden und herauszutunen
      5.) Plasmatree zur Optimierung der Sprungantwort :)
      Ironie ist wie dieser Smiley:
      °.-/)
    • Stadard PIDs für den Anfang ist mittlerweile auf jeden Fall immer ausreichend.
      Um den Tune dann zu verbessern ist in der Regel aber nichtmal ein Anfangen von 0 nötig.
      Hauptsächlich geht es um P und D, da die quasi Antagonisten sind, ist es easy:
      • schwingt es über, d soweit erhöhen wie das setup es erlaubt ohne die Motoren zu grillen, ansonsten p tiefer.
      • Steigt es zu schwach, P erhöhen
      • bleibe die Motoren kalt, können P und D gemeinsam weiter erhöht werden
      Letztendlich willst du P (und damit auch D zur Kompensation) immer so hoch wie möglich haben.
      Die sollten zudem proportional sein: Hebst du beide Werte um den gleichen Faktor (nicht Punkte!) an, sollte Anstieg steiler werden ohne aber mehr Überschwingen zu produzieren. Das muss ich aber selbst nochmal testen, da bin ich noch nicht zu gekommen. ;)
      Sind Filter und die beiden Werte gut eingestellt, hat der I-term kaum noch was zu tun und ist recht unkritisch.
      Dadurch, dass man die Sprungantwort direkt sehen kann, ist es sehr einfach ein Gefühl dafür zu entwickeln.
    • plasmatree schrieb:

      Welche Version hast du installiert?
      Im Moment 0.16.2, weil in der Distribution nichts neueres zur Verfügung steht. Werde wohl noch einige Tage warten müssen. Am Freitag, 25. Mai 2018 um 14:00 MESZ kommt openSUSE Leap 15.0 raus. Das hat pandas-0.22.0.

      Frage: welche Python Version verwendest Du?

      Ich hoffe sehr, dass ich das zum Laufen kriege, denn ich würde gerne ein Paket 'pid-analyzer' bauen. openSUSE hat ein kleines aber feines Repository RC-Model, wo einige für uns nützliche Anwendungen zur Verfügung stehen.
      Ich mag Rechtschreibfehler - besonders in Tattoos.
    • Der BBL viewer ist in einer andere Sprache geschrieben, was ein komplettes Neuaufsetzen erforderlich macht. Das Entwickeln geht für mich in python einfacher weil ich das auch sonst zum Auswerten wissenschaftlicher Daten nehme.
      Wer will kann das natürlich übersetzen, der Code ist ja offen. ;)
      Für mich ist alles Relevante in den Plots, ohne großes rumklicken und manuelles Analysieren der Rohdaten das Wesentliche auf einen Blick.
      Was interessiert dich denn meist an del Logs im Viewer?

      Propwash sollte darin sichtbar sein. Vermutlich als niederfrequete Rückkopplung im unteren Frequenzbereich, wie genau kann ich dir aber noch nicht sagen.
      Noise bei hohen Schubwerten spielt meiner Ansicht nach auch eine enorm große Rolle und genau das zeigen die Noiseplots ja.

      Wenn du bock hast, mach doch mal einen einfachen Test: Flieg den gleich Quad einmal so dass du propwash vermeidest (nicht in den eigen stream fliegen) und einmal so dass du es provozierst.
      Schmeiß die logs anschließend in den Analyzer und schau wo Unterschiede sind. Würde mich auch interessieren. :)
    • Hallo Flo,

      herzlich Willkommen, toll das du hier schreibst :) . Die bunten Bilder verstehe ich jetzt etwas besser. Filter einstellen ist das nächste, was ich machen will ;) .

      Für mich war das Programm eine große Hilfe, nachdem ich die Plots einigermaßen verstanden habe. Die Standard-PIDs passen nur gut bei 5" X-Koptern mit 300-400g. Bei leichteren und bei stretched X passen die Werte schlecht, und bei 2" und 3" sind P und D hoffnungslos zu hoch, damit kann man nicht fliegen. Wenn die Werte einigermaßen passen kann man einfach D und I auf 0 setzen und sieht mit einem Log, wie gut die P-Werte sind. Das ganze nochmal mit P und D und man kann das gut abschätzen, ob die Werte für D passen. Bei meinem letzen Versuch gestern mit einem 5" X-Kopter habe ich ausgehend von den Standard-PIDs 3 Versuche für bessere P-Werte und 3 für bessere D-Werte benötigt. Der Aufwand war also sehr gering. Nach Gehör hätte ich das nie geschafft.

      Das gute beim Tuning mit Plasmatree ist, wie Flo schon sagte, das man objektive Werte für P und D bekommt, bei denen der Controller gut arbeitet. Es dürfte der beste Kompromiss zwischen Stromverbrauch und Geschwindigkeit der Regelung sein. Von den Werten ausgehend kann man dann die Einstellungen nach persönlichem Flugstil anpassen. Das dürfte bessere Ergebnisse liefern als nach Gefühl an allen Werten rum zu drehen.