- LiFePO4 Speicher Test         
Seite 4 von 5 ErsteErste ... 2345 LetzteLetzte
Ergebnis 31 bis 40 von 42

Thema: Ultraschallsensor am Modellflugzeug

  1. #31
    voidpointer
    Gast
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo Harald,

    vielen Dank für die ausführliche Analyse meiner Logdaten. Ein Zusammenhang mit den kurz gemähten Flächen ist mir noch gar nicht aufgefallen. Dazu muss man sagen, dass das Satellitenbild bzw. die Luftaufnahme sicher schon 3 Jahre alt ist, aber tatsächlich wird bei uns der Flugplatz immer in ähnlichem Muster gemäht (Eigentlich sollte ja alles gemäht sein, wegen der Anfänger und Sturköpfe ). Ich werde auch mal den Einzelschritt-Fehler suchen.

    Mittlerweile habe ich einen SRF08 unter die Tragfläche montiert. Leider funktionierte auch dieser Sensor nicht auf Anhieb, aber im Forum habe ich Hinweise zum Setzen von Max-Range und Gain für diesen Sensor gefunden und werde vielleicht heute abend wieder ein paar Messungen machen können. Ein Vereinskollege meinte neulich, ich solle den Sensor tief in die Tragfläche einbauen, um Strömungslärm zu vermeiden. Werde auch dies demnächst angehen. Als weitere Idee fällt mir noch ein, den mittlerweile arbeitslosen SRF02 passiv mit etwas Abstand neben den SRF08 zu montieren. Vielleicht kann man dann mit nur einer Messung schon auf die Gültigkeit der Werte schließen.

    Die Sache mit den Reglerparametern ist leider ziemlich testintensiv. Zunächst hatte ich alle drei Stellgrößen autonom konfiguriert. Dies führte zu einem ziemlich schnellen Aufschaukeln, wobei ich nach wenigen Sekunden eingreifen musste. Die letzten Flüge habe ich teilautonom gemacht - nur das Seitenruder wurde automatisch geregelt. Dies funktionierte schon besser, aber manchmal regelt sie nicht stark genug, d.h., der Zielpfad wird nicht mehr erreicht. Mittlerweile werden die aktuellen PID-Parameter am Anfang in das Logfile geschrieben und derzeit habe ich den I-Parameter auf 0 gesetzt und einen großen D-Anteil vorgegeben. Ähnlich hatte es auch "globe" mit seinem ISA-Projekt beschrieben, wobei er allerdings noch inertiale Sensoren hat. Das Problem an diesem Flugzeug ist die relativ große Totzeit zwischen Ruderausschlag und Änderung der Flugbahn. Schließlich muss sich das Flugzeug erstmal um die Längsachse neigen (Rollen), bevor es dann eine Richtungsänderung ausführen kann. Diese Zeit ist zumindest nach den Logfiles so zwischen 0,5 und 1 Sekunden. M.E. ist es nicht einfach, eine Regelung auf große Totzeiten anzupassen. Ich erhoffe mir durch den großen D-Anteil einen Erfolg. Aber zu Deiner Frage: nein, viel Erfahrung habe ich nicht mit dem Einstellen oder mit der Reglertechnik ansich. Wie würdest Du vorgehen?

    Gruß, Achim.

  2. #32
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.12.2005
    Beiträge
    535
    Achim,

    bin 'mal gespannt auf Deinen Testflug mit dem SRF08. Den Sensor in voller Höhe im Flügel zu versenken ist eine gute Idee. Vielleicht dann noch mit einem Plättchen von Deinem Schaumstoff abdecken?

    Grundsätzlich zur empirischen Regleroptimierung (vielfach praxiserprobtes Verfahren):
    Der Zielzustand des Reglers ist erreicht, wenn der Istwert nach einem oder maximal zwei stark gedämpften Überschwingern in einen stabilen Dauerzustand übergeht. Diesen Zustand bezeichnet man als "nahe an der Stabilitätsgrenze". Bei schwach (suboptimal) eingestellten Reglern dauert es eine Ewigkeit, bis der Dauerzustand erreicht wird. Bei zu scharfer (instabiler) Einstellung kommt es zur Dauerschwingung, schlimmstenfalls mit zunehmender Amplitude. Achtung: Der Istwert im stabilen Dauerzustand braucht nicht mit dem Sollwert identisch zu sein!

    Als Anfangseinstellung einstellen: P = 1, I = unendlich, D = 0.

    Jetzt zuerst nur den P-Parameter optimieren: Mit Anfangseinstellung prüfen, ob die das Regelverhalten instabil ist. Ist es das nicht, dann den P-Teil so oft verdoppeln, bis instabiles Verhalten erreicht ist. Wenn das Regelverhalten schon mit der Anfangseinstellung instabil ist, dann den P-Parameter so oft halbieren, bis das Verhalten stabil ist. Am Ende dieses Verfahrens hat man einen P-Wert mit instabilem und einen mit nicht instabilem Verhalten. Dazwischen liegt der optimale Wert.

    Um den optimalen Wert zu finden, wendet man die Halbierungsmethode an: Als nächsten P-Wert den Mittelwert von instabilem und nicht instabilem Wert einstellen und austesten. Und so weiter, bis man möglichst nahe am optimalen Verhalten der Regelstrecke angekommen ist. Achtung: Auf keinen Fall vorzeitig an den anderen Parametern drehen! Das geht in aller Regel nur schief und kostet jede Menge Zeit!

    Nachdem jetzt der P-Teil gut eingestellt ist, knöpfen wir uns den I-Teil nach demselben Verfahren vor:
    Man schätzt bei den vorangegangenen Versuchen die Zeit, mit der das Flugzeug auf Änderungen am Reglerausgang reagiert. Das braucht nur eine grobe Schätzung zu sein: 0,1s oder 1s oder 1min. Auf diesen Wert stellt man die I-Zeit ein. Anschliessend kommt dasselbe Test- und Nachstellverfahren, wie beim P-Teil, nur nähert man sich beim I-Teil dem instabilen Regelverhalten durch Verkürzen; durch Verlängern wird der Regler träger (also andersherum als beim P-Teil). Am Ende, mit richtig eingestellter I-Zeit, sollte das Reglerverhalten noch näher an das optimale Verhalten herangekommen sein.

    Anschliessend den P-Teil nach-optimieren (immer nach demselben Verfahren von Testen und Nachstellen). Meistens kann man ihn noch etwas vergrössern und damit ein noch besseres Regelverhalten erreichen.

    Als letzter kommt der D-Teil dran. Den Anfangswert nach der zuletzt beobachteten Reaktionszeit einstellen und dann wie oben beschrieben schrittweise optimieren (Vergrössern macht instabiler, Verkleinern träger). Der D-Teil ist am Schwierigsten einzustellen, weil es dabei manchmal zu ganz heimtückischen metastabilen Zuständen kommt, in denen das System sich anfangs stabil verhält, dann aber plötzlich in Dauerschwingungen umkippt. Deshalb ist ein kleinerer D-Teil immer die sicherere Wahl.

    Am besten führt man eine Tabelle mit den drei Parameterwerten und markiert jeweils, ob stabiles Verhalten vorlag oder nicht. Wichtig ist, immer nur einen Parameter auf einmal zu ändern bis man ein Zwischen-Optimum erreicht hat! Wenn man's anders macht, kommt man ganz schnell durcheinander und kann wieder ganz von vorn anfangen - sehr ärgerlich, weil solche Optimierungen unheimlich viel Zeit kosten.

    Wie schon gesagt erwarte ich, dass bei Deiner Anwendung der I-Teil ausgeschaltet, also die I-Zeit unendlich bleiben muss. Der D-Teil kann helfen, aber möglicherweise brauchst Du ihn noch nicht einmal. Es würde mich nicht wundern, wenn ein gut angepasster, möglichst hoher P-Teil allein schon völlig ausreicht.

    Versuch's doch mal nach dieser Methode - bei mir hat das viele hundert Male gut funktioniert!

    Ciao,

    Harald.

  3. #33
    voidpointer
    Gast
    Hallo Harald,

    heute gibt's leider keine Logfiles - habe etwas verschlimmbessert, so dass die Hauptschleife nach wenigen Iterationen zu hängen scheint Vielleicht, wenn ich es morgen gefixt habe...

    Demnach habe ich es mit den Parametern völlig falsch angegangen. Ich werde also als nächstes mit dem P-Teil anfangen. Allerdings habe ich noch Fragen wegen der I-Parametrisierung. Ich habe die Steuerung anhand des RN-Artikels "Regelungstechnik" programmiert. Genauer gesagt verwende ich die "Umsetzung nach dem Stellungsalgorithmus" mit den q-Faktoren, wobei die Taktzeit der Update-Rate des GPS entspricht, also 200ms. Ich soll also für die P-Optimierung Ki unendlich groß (oder eben sehr groß) einstellen? Würde dann nicht der Wert für y sofort verrückt spielen? Oder hab ich an der Formulierung etwas nicht verstanden?

    Gruß, Achim.

  4. #34
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.12.2005
    Beiträge
    535
    Achim,

    na, das mit dem Verschlimmbessern kennt jeder, der mal Programme geschrieben hat. Da hast Du mein vollstes Mitgefühl...

    Der RN-Artikel ist gut und vollständig. Ich benutze eine etwas andere Formulierung der Gleichung (Überschrift "Differenzengleichung für den zeitdiskreten PID-Regler"):

    P-Teil wie angegeben.

    I-Teil: Ki*Ta*summe(ei) / Tn
    Tn ist die Integrationszeit

    D-Teil: (Kd / Ta) * (ek - ek-1) * Td
    Td ist die Differentiationszeit

    Der Grund für diese Formulierung ist, dass die Stellgrösse dimensionslos herauskommt, am Prinzip ändert sich nichts. Die Vorfaktoren q lauten in dieser Formulierung:

    q0 = Kp + Ki*(Ta/Tn) + Kd*(Td/Ta)
    q1 = Ki*(Ta/Tn) wird bei Tn=unendlich zu q1 = 0
    q2 = Kd*(Td/Ta) wird bei Td=0 zu q2 = 0

    Die Gewichte Ki und Kd und die Abtastzeit Ta werden als konstant betrachtet. Die Reglerkonstanten ändert man dann durch Verändern von Kp, Tn und Td. Der wesentliche Unterschied zeigt sich beim Anpassen des Integralteils: Durch Verändern von Ki ändert sich das I-Verhalten linear, während die Veränderung von Tn das I-Verhalten umgekehrt proportional beeinflusst. Bei vielen Regelstrecken führt das zu einem feinfühligeren Verhalten bei der Regleroptimierung.

    Wenn Du bei der Formulierung des RN-Artikels bleibst, dann ist die Anfangsstellung:
    q0 = 1, q1 = 0, q2 = 0
    Für das Optimieren der q-Parameter gilt das Verfahren sinngemäss: Während der P-Optimierung bleiben q1 und q2 bei Null. Bei der anschliessenden I-Optimierung bleibt q2 bei Null und q0 wird nicht geändert. Bei der D-Optimierung bleiben q0 und q1 konstant, bis der optimale Wert von q2 gefunden ist.

    Ciao,

    Harald.

  5. #35
    Neuer Benutzer Öfters hier
    Registriert seit
    08.03.2007
    Beiträge
    6
    @Achim: Was hast Du für ein GPS: mit einer Update-Rate von 200ms (!?)

  6. #36
    voidpointer
    Gast
    Was hast Du für ein GPS: mit einer Update-Rate von 200ms (!?)
    Das SAM-LS von u-Blox. 200ms sind 5Hz. Das Modul geht laut Datenblatt bis 4Hz. Man kann es aber auch noch schneller konfigurieren, wenn man in Kauf nimmt, dass hin und wieder mal eine Messung verschluckt wird.

    @mare_crisium: Heute morgen hat es funktioniert. Habe vier Testflüge mit verschiedenen PID-Parametern gemacht. Muss die Sache aber wohl nochmal anders aufziehen, denn bisher hatte ich Tn nicht in den Formeln bzw. keinen Einfluss darauf.

    Mit meinen letzten Parametern P=0.7 I=0.0 und D=4.0 wurden Gerade und erstmalig Kurve mit 50m Radius einigermaßen korrekt geflogen. Dazu muss man sagen, dass heute so gut wie kein Wind war, also ideale Bedingungen.

    Aber zum Thema: erstmalig funktionierte auch der SRF08 vernünftig und lieferte brauchbare Werte. Ich habe den Sensor alle 100ms ausgelesen, so dass es pro GPS-Update zwei Sonar-Messungen gab. Diese habe ich entsprechend auf die Logdaten aufgeteilt, so dass es in der Viewer-Software aussieht, als wären es zwei Sensoren. Bei der gegenwärtigen Konfiguration des Sensors (Max-Range=116 und Gain=8 ) gibt es unterhalb von 3 Meter vernünftige Werte. Darüber nur sporadische Echos, die aber wahrscheinlich mit der Vergleichsmethode herausgefiltert werden können. Leider war keine Zeit für tiefe Überflüge - so gibt es nur wenige Daten von der Landung. Schön, dass man mit dem SRF08 mehr Einflußmöglichkeiten auf die Messung hat und damit das Ergebnis verlässlicher wird. Vielleicht können die vorgeschlagenen "baulichen Maßnahmen" zusammen mit dem Tuning der beiden Parameter noch weitere Besserungen und einen größeren Messbereich bringen.

    Gruß, Achim.

  7. #37
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.12.2005
    Beiträge
    535
    Achim,

    mein Glückwunsch! Die Höhenmesswerte im Tiefflug und auch die autonomen Flugabschnitte sehen jetzt doch schon ganz manierlich aus. Vor allem bei der Landung im letzten Flug scheinen die Messwerte sogar schon ab 5m gut zu sein.

    Die Regelparameter musst Du noch etwas optimieren. Wie gesagt, einen I-Teil wirst Du nicht brauchen. Mir scheint, dass die Flugbahn immer dann besonders starke Schwingungen (Schlangenlinien) zeigt, wenn das Flugzeug vor der „straight”-Anweisung nicht schon eine Weile in derselben Richtung geflogen ist. Das bedeutet, dass Du den P- und den D-Teil noch zu scharf (zu grosses q0 und q2, bzw. grosses Kp und Td) eingestellt hast.

    Das wesentliche Ergebnis ist aber die Tatsache, dass die autonome Flugregelung schon in diesem Stadium im Prinzip klappt!

    Ciao,

    Harald.

    P.S.: Mit welchen Zahlentypen (real, integer) und welcher Genauigkeit (Bitzahl Mantisse/Exponent bzw. Integer) rechnest Du in Deinem Regelalgorithmus? Welche Auflösung (Anzahl Bits) hat die PWM-Ansteuerung der Servos?

    mare_

  8. #38
    voidpointer
    Gast
    Harald,
    Die Höhenmesswerte im Tiefflug und auch die autonomen Flugabschnitte sehen jetzt doch schon ganz manierlich aus.
    Das will ich doch wohl meinen Mal sehen, wie die Messungen bei Wind aussehen. Wenn sie nicht wesentlich schlechter sind, taugt die aktuelle Einstellung doch schon zur Landeunterstützung und vielleicht auch zum autonomen Tiefflug (*träum*). Ich danke allen, die sich an der Diskussion beteiligt haben! Habe jetzt zwei SRF02 günstig abzugeben - Scherz, die behalte ich voerst.

    Und das wird jetzt wohl Offtopic. Ja, im Prinzip funktioniert die Steuerung jetzt - mit vielen Kompromissen: 1. bisher ist nur das Seitenruder autonom. Es ist nötig, auch das Höhenruder zur Kurskorrektur einzusetzen (Ziehen für engeren Kurvenradius). Wenn zusätzlich ein Höhenverlust auszugleichen ist (was mittels Höhenruder und / oder Motor zu tun ist), könnte die entsprechende Regelung problematisch werden. 2. Durch einen Softwaretrick beginnt jedes Streckensegment genau an der aktuellen Position und mit dem aktuellen Kurs. Dies dient nur dem Test - später soll die Strecke kontinuierlich sein. Das bedeutet, dass die Regelung dann am Beginn eines neuen Bahnabschnitts größere Fehler auszugleichen hat. Wie beobachtet, gibt das jetzt schon Probleme aufgrund des hohen D-Teils.

    Die Berechnungen basieren alle auf double-Typen. Dies sind 64-bit Gleitkommazahlen mit 11 bit Exponent und 52 bit Mantisse. Die Regelung berechnet direkt die PWM-Zeit zur Aussteuerung der Servos in µs, die erst unmittelbar vor dem Ansteuern von double auf int umgerechnet wird. Zusammen mit dem Neutralwert des Servos hat die Ansteuerung eine Auflösung von 12 bit. Die PWM-Zeit für das Seitenruderservo bewegt sich zwischen 1200 und 2000 µs, die maximale Auslenkung des Ruders ist schätzungsweise +- 20 Grad. Der relevante Abschnitt befindet sich im Sourcecode unterhalb von "heading control loop"; der Fehler e entspricht dem Winkel, den die aktuelle Flugbahn vom Zielwinkel abweicht, der zum Wiedereintritt auf das Bahnsegment in einer Entferung von 10 Metern eingeschlagen werden müsste. Wollte demächst mal ein paar Skizzen für dieses Vorgehen auf meine Webseite stellen. Bin mir aber mittlerweile nicht mehr so sicher, ob der Ansatz nicht zu umständlich ist.

    Naja, aber so ähnlich hatte ich mir den Spaß an der Sache ja auch vorgestellt...

    Gruß, Achim.

  9. #39
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    13.07.2004
    Ort
    bei Stuttgart
    Alter
    42
    Beiträge
    760
    hallo,
    wenn du große kreise fliegst, und den rollwinkel klein hälst, kannst du denke ich die höhen und die kurs regelung zumindest für den reglerentwurf als entkoppelt betrachten. die kopplung wirkt dann halt als störung und wird vom anderen regler wieder ausgeglichen. ich habe es bei einer u-boot-regelung zumindest so gemacht.
    mfg jeffrey

  10. #40
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.12.2005
    Beiträge
    535
    Achim,
    gut, dass Du an diesem US-Messaufnehmer die Einstellungen beeinflussen kannst. Mit einer Max-Range-Einstellung liegst Du bei 5m Reichweite; das haben die Flugdaten auch bestätigt. Die Verstärkung 8 (bei möglichem Maximalwert von 32) ist allerdings ziemlich niedrig – kann sein, dass der Lärm am Sensor keine höhere Empfindlichkeit zulässt. Mehr wäre besser, weil dann auch die stark gedämpften Reflektionen von unebenem Untergrund erkannt werden können. Wegen der Turbulenzen im Schallkegel mach' Dir mal keine Sorgen! Solange Dein Flugzeug genügend Abstand von der Schallmauer hält, haben die keinen Einfluss auf die Schallausbreitung.

    Die Frage der Regelung hat zwar mit dem Thread-Titel nur indirekt zu tun, ist aber, glaube ich, für viele andere Roboterbauer interessant: Z.B. Linienfolger-Roboter können nur dann funktionieren, wenn die Regelparameter gut optimiert sind. Insofern reden wir über ein on-topic off-topic.

    Nach meinem Eindruck bist Du jetzt ziemlich nah dran, den Seitenruder-Regelkreis hinzukriegen. Du brauchst nur noch ein bisschen (aber systematisch!) an den Regelparametern drehen. Ich schätze mal, dabei kommt ein ziemlich scharf (d.h. grosses Kp) eingestellter P-Regler mit wenig D-Anteil und ohne I-Teil heraus. Mit der Rechen- und Steuergenauigkeit, die Du verwendest, besteht auch keine Gefahr, Dir Digitalisierungsfehler (ich dachte an den „digital offset”) einzuhandeln.

    @jeffrey: Ich kann Deine Erfahrung nur bestätigen: Am Besten fährt man, wenn man für jeden Freiheitsgrad einen separaten Regler einsetzt. Also, in Achims Fall: Lieber noch einen Messaufnehmer für den Rollwinkel (ähnlich einem Wendezeiger) mit einem separaten Regler für die Querruder. Wenn das Seitenruder ausschlägt, wird der Wendezeiger ausgelenkt und der Querruder-Regler versucht, ihn wieder in die Mittellage zu bringen. Analog würde ich auch mit der Flughöhe verfahren, wobei ich nicht weiss, ob es zweckmässiger ist, die Motordrehzahl oder das Höhenruder anzusteuern. Die Erfahrung zeigt dann, ob sich die Regelkreise gegenseitig aufschaukeln. Solange es gelingt, ihre Zeitkonstanten deutlich unterschiedlich einzustellen, beeinflussen sich die Kreise wenig.

    Lass' mal hören, wie's weitergeht, Achim!

    Ciao,

    Harald.

Seite 4 von 5 ErsteErste ... 2345 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test