-
        

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 24

Thema: Quadkopter stabilisieren

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    12.02.2008
    Beiträge
    61

    Quadkopter stabilisieren

    Anzeige

    SMARTPHONES & TABLETS-bis zu 77% RABATT-Kostenlose Lieferung-Aktuell | Cool | Unentbehrlich
    Hallo,

    ich baue an einem Quadkopter. Die Regelung übernimmt ein stm32 mit 2 Murata enc-03 Gyros. Die Motorregler werden mit 500Hz über I2C angesteuert.
    Ich hab versucht die Regelung mit einem PID Regler zu machen aber der I und der D Anteil macht mir Kopfzerbrechen. Das Beste Regelverhalten hab ich bisher nur mit P-Regler ohne I und D erreicht. Fliegt auch durchaus kontrollierbar(eigentlich erstaunlich)..- aber da ist noch Verbesserungpotential!

    Wär' toll wenn mir jemand einen Tipp geben könnte!

    - kounst

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von Willa
    Registriert seit
    26.10.2006
    Ort
    Bremen
    Alter
    37
    Beiträge
    1.269
    Hi! Die Begriffe "P", "I", und "D" sind für Regelungstechniklaien wie mich ziemlich mehrdeutig. Beschreib doch mal was du mathematisch mit den Werten aus den Gyroskopen machst. Vielleicht fällt mir dann was auf.
    Viele Grüße, William
    -> http://william.thielicke.org/

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    12.02.2008
    Beiträge
    61
    ok,

    also für die roll achse wäre das: (für nick natürlich genauso)

    roll_error = roll_vorgabe - gyro;
    roll_stellwert = K_p * roll_error + rollerrot_int / K_i + K_d * (roll_error - last_roll_error); //die einzelnen Summanden entsprechen P, I und D.
    last_roll_error = roll_error;

    motor_links = kollektiver_pitch + roll_stellwert + gier;
    motor_rechts = kollektiver_pitch - roll_stellwert + gier

    diese berechnung wird alle 500µs wiederholt an die Motoren gesendet.
    Wie bereits erwähnt fliege ich momentan mit K_i und K_d = 0 es ist also nur der Teil K_p *roll_error wirksam

  4. #4
    Erfahrener Benutzer Roboter Genie Avatar von Willa
    Registriert seit
    26.10.2006
    Ort
    Bremen
    Alter
    37
    Beiträge
    1.269
    Hi! Sieht eigentlich gut aus... Ich habe bei meinem Projekt vielfach versucht den D-Anteil zu verrechnen, aber das hat nie geklappt. Meistens war das Differential viel zu verrauscht und hat alles eher schlechter gemacht. Darauf kann man aber auch gut verzichten.
    Wie groß sind denn die Faktoren bei dir? Bei mir z.B. ist K_p = 0.4 und K_i = 0.003 (nur mal um das Verhältnis darzustellen).
    Mein Copter fliegt mit ausschließlich K_p eher schlecht. K_i ist auf jeden Fall notwendig damit er seinen Winkel konstant hält. Wie möchtest du denn überhaupt steuern? Wie einen Modellhubi (=winkelgeschwindigkeit) oder möchtest du mit dem Stick den Winkel direkt vorgeben? Hast du irgendwas unternommen um den Drift der Gyros abzufangen? Ansonsten sollte das mit k_i nur wenige Sekunden gutgehen (besonders bei den Murata Gyros...)
    Ich habe zwei Modes programmiert, die ich im Flug umschalten kann:
    Winkelgeschw. Steuerung:
    A=Gyro-Knüppel
    B=B+A
    Motorsoll=A+B

    Winkelsteuerung (eigenstabil):
    A=Gyro
    B=B+A
    C=B-Knüppel
    Motorsoll=A+C
    Hoffe ich konnte helfen...
    Viele Grüße, William
    -> http://william.thielicke.org/

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    12.02.2008
    Beiträge
    61
    Hey,
    dass das Rauschen vom Gyro ein Problem beim D anteil macht hab ich schon mal irgendwo gelesen..- ich hoffe bzw hatte gehofft das ich das problem beseitigen könnte.
    In meinen Regelkreis geht der ADC-Wert vom Gyro nicht direkt ein sondern ein mittelwert aus 16 ADC Werten. Wozu hat man den son fetten Micro
    Der Vergleich der verstärkungsfaktoren fällt jetzt etwas schwer weil ich meine Regelabweichung so berechne: roll_error = roll_vorgabe/16 - gyro /64
    und mein K_p = 30 -> also auf das gyro signal bezogen ergibt sich etwa 0,47
    da wär ich ja von deinem Wert nicht so weit weg. Beim I Anteil konnte ich bisher keinen finden der das Regelverhalten verbessert hätte also flieg ich mit K_i = 0 (also ohne integrierenden Anteil)
    Du hast natürlich Recht das ich einen I- Anteil bräuchte wegen der bleibenden Regelabweichung- aber ich vermutlich weil die Regelstrecke selbst integrierend ist komme ich eigentlich ganz gut ohne aus. Ich möchte den Quadkopter wie einen Heli steuern!
    Gegen den Gyrodrift hab ich nix gemacht - ich wüste auch nicht was ich da machen kann- das könnte natürlich tatsächlich der grund sein warum ich mit dem der Suche nach einem guten K_i wenig erfolgreich was!

    also A entspricht dann wohl meinem roll_error und B roll_error_int?!

    Willa, ich hab gesehen das du in deinem Blog angekündigt hast den Quellcode hochzuladn. Das würd mich jetzt sehr interessieren. Auch wie du die Regelung mit Gyro und ACC verknüpft hast..

  6. #6
    Erfahrener Benutzer Roboter Genie Avatar von Willa
    Registriert seit
    26.10.2006
    Ort
    Bremen
    Alter
    37
    Beiträge
    1.269
    Hi!
    Also den Drift kannst du entweder mit nem ACC weg bekommen, oder du ziehst in jedem Durchgang vom Integral etwas ab (wenn es größer null ist) oder rechnest was dazu (wenn kleiner null). Dadurch kann der Copter dann zwar nicht 100% gerade bleiben, aber es funktioniert schon nicht schlecht.
    Mit dem Mittelwertbilden würde ich vorsichtig sein... Ein schöner analoger Tiefpass vor dem ADC (fg ~ 40Hz) wirkt meiner Erfahrung nach viel besser als digitale Filterung im µC.
    Das mit dem Quelltext ist so eine Sache... Ich möchte den nicht einfach per Copy + paste irgendwo hinstellen, sondern eine runde story draus machen. Mit erklärungen, so dass es wirklich jeder verstehen kann. Aber das benötigt natürlich Zeit.....
    Viele Grüße, William
    -> http://william.thielicke.org/

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    12.02.2008
    Beiträge
    61
    Das mit dem etwas abziehen bzw addieren muss ich morgen mal ausprobieren.
    Einen analogen Tiefpass hab ich auch eingebaut. Bei der Grenzfrequenz hab ich 150Hz(bei den Mikrokopterern abgekupfert )
    Ich glaub nicht das der digitale Filter ein Problem darstellt. aber evtl sollt ich mit der Grenzfrequenz vom Tiefpass noch weiter runter.. du fliegst mit 40Hz?
    Ja das mit dem Quellcode ist klar - hatte nur gehofft weil du den ja schon am 2. 9 angekündigt hat. aber no pressure

    Danke für deine Anregungen!

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.01.2004
    Beiträge
    2.441
    @Willa
    Also den Drift kannst du entweder mit nem ACC weg bekommen, oder du ziehst in jedem Durchgang vom Integral etwas ab (wenn es größer null ist) oder rechnest was dazu (wenn kleiner null). Dadurch kann der Copter dann zwar nicht 100% gerade bleiben, aber es funktioniert schon nicht schlecht.
    Der Teil mit dem ADC leuchtet mir ein, aber warum es hilft in jeden Durchgang etwas vom Integral zu subtrahieren oder addieren?
    Ohne hierfür einen Sensor, z.B. ACC auszuwerten kann man dann doch eigentlich immer nur einen konstanten Wert abziehen oder hinzufügen. Die Integration selber ist nichts anderes als in jedem Durchgang den (positiven oder negativen) Messwert zu addieren.

    D.h. anstatt:
    SummeMesswerte = SummeMesswerte + Messwert
    rechnet man:
    SummeMesswerte = SummeMesswerte + (Messwert-x)

    D.h. eigentlich rechnet man schon im ersten Durchgang falsch und man rechnet keinen Drift raus, sonder verzögert nur, dass das Integral durch Aufsummieren der Fehler aus dem Rahmen läuft.
    Das bezahlt man aber halt damit, dass man schon mit falschen Werten rechnet, selbst wenn gar kein Drift da ist.
    Wäre es da nicht besser, den Faktor mit dem das Integral in die Regelung eingeht niedriger zu machen?

    In einem anderen Thread hast du geschrieben, dass das Integral aufgrund der sich addierenden Fehler irgendwann völlig falsch wird und man es dann auf 0 zurücksetzen muss.

    D.h. z.B.
    SummeMesswerte = SummeMesswerte + Messwert
    If SummeMesswerte > X then SummeMesswerte = 0
    If SummerMesswerte < -X then SummeMesswerte = 0

    Eigentlich müsste man das was der obige Teil bezwecken soll hier doch besser erreichen können.
    Wenn man hier X kleiner macht, erreicht man auch, dass das Integral nicht soweit aus dem Ruder läuft, verfälscht aber nicht jeden einzelnen Messwert.

    Nachdem ich deinen Beitrag dazu in dem anderen Thead gelesen habe, habe ich mal als Regelung für mein Chassis das auf 2 Rädern stehen soll (Balancierener Roboter) angewendet.
    D.h.:
    SummeGyro = SummeGyro + Gyro
    If SummeGyro > X then SummeGyro = 0
    If SummeGyro < -X then SummeGyro = 0

    Die Summe der Gyro-Messwerte ist die einzige Grösse die ich Auswerte und als PWM auf die Motoren gebe, d.h. meine Regelung hat eigentlich nur einen I-Anteil.
    Das Ding steht damit teilweise über eine Minute auf der Stelle ohne umzukippen.
    (Warum weiss ich auch nicht, tuts aber )

    Um einen Quadrocopter stabil in der Luft zu halten reicht das sicher nicht.
    Ich könnte mir aber gut vorstellen, dass es für "kounst" als zusätzlicher I-Anteil hillft den Copter ruhiger zu halten.

    Wobei man hier mit "Nur I-Anteil" vielleicht auch wieder vorsichtig sein muss. Die Summe der Gyrosignale über die Zeit, sprich Integral oder I-Anteil - entspricht ja eigentlich dem Winkel, also der Grösse die man regeln will. Damit wäre es dann ja irgendwie auch der P-Anteil.

    Wenn man den Winkel regeln will, wäre das eigentliche Gyro-Signal sprich die Winkelgeschwindigkeit - irgendwie auch der D-Anteil.
    Oder sehe ich das wieder völlig falsch? Regelungstechnik werde ich nie kapieren.

  9. #9
    Erfahrener Benutzer Roboter Genie Avatar von Willa
    Registriert seit
    26.10.2006
    Ort
    Bremen
    Alter
    37
    Beiträge
    1.269
    Hallo Recycle!
    aber warum es hilft in jeden Durchgang etwas vom Integral zu subtrahieren oder addieren?
    Ohne hierfür einen Sensor, z.B. ACC auszuwerten kann man dann doch eigentlich immer nur einen konstanten Wert abziehen oder hinzufügen. Die Integration selber ist nichts anderes als in jedem Durchgang den (positiven oder negativen) Messwert zu addieren. D.h. eigentlich rechnet man schon im ersten Durchgang falsch und man rechnet keinen Drift raus, sonder verzögert nur, dass das Integral durch Aufsummieren der Fehler aus dem Rahmen läuft.
    Das bezahlt man aber halt damit, dass man schon mit falschen Werten rechnet, selbst wenn gar kein Drift da ist.
    In der Theorie hast du eigentlich Recht, in der Praxis hat sich das Vorgehen aber bewährt. Durch das Abziehen eines konstanten (pos oder neg) Wertes vom Integral bekommt man einen Teil der realen Bewegung nicht mit. Diesen Teil sieht aber der Pilot sehr wohl. Der Drift wird also vom Piloten ausgesteuert.
    Man kann übrigens auch das Integral in jedem Durchgang mit dem Faktor 0.99999 multiplizieren... Sollte auch gehen.
    Wäre es da nicht besser, den Faktor mit dem das Integral in die Regelung eingeht niedriger zu machen?

    In einem anderen Thread hast du geschrieben, dass das Integral aufgrund der sich addierenden Fehler irgendwann völlig falsch wird und man es dann auf 0 zurücksetzen muss.
    Wenn man den Faktor niedriger macht, hat es keine regelnden Eigenschaften mehr. Du musst folgendes beachten beim Drift: Er hat fatale Folgen für einen Copter, denn das Integral gibt die Winkelgeschwindigkeit vor. Wenn das Integral nun gaaaaaaanz langsam wegläuft (z.B. beim Wert "10" rumkriecht), dann heisst dass, das der Copter die ganze Zeit eine Winkelgeschwindigkeit hat. Es wird quasi doppelt integriert wenn man sagt dass die zu regelnde Größe der Winkel ist (oder...?).
    SummeGyro = SummeGyro + Gyro
    If SummeGyro > X then SummeGyro = 0
    If SummeGyro < -X then SummeGyro = 0
    Dieser Code würde bewirken, dass der Copter sich erst wehrt nach vorne gekippt zu werden, dann aber plötzlich die nach vorne gekippte Lage schlagartig akzeptiert und von nun an nach vorne gekippt bleiben will.
    Regelungstechnik werde ich nie kapieren.
    Das geht mir genauso... Da unterhalten sich ja die richtigen ;-D
    Viele Grüße, William
    -> http://william.thielicke.org/

  10. #10
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.01.2004
    Beiträge
    2.441
    Hallo Willa,
    Durch das Abziehen eines konstanten (pos oder neg) Wertes vom Integral bekommt man einen Teil der realen Bewegung nicht mit. Diesen Teil sieht aber der Pilot sehr wohl. Der Drift wird also vom Piloten ausgesteuert.
    Ok, d.h. die Regelung ist nicht dazu gedacht den Copter selbstständig in der waagerechten zu halten und der Drift der Gyros muss auch gar nicht rausgerechnet werden.
    Die Regelung soll den Copter eigentlich soweit beruhigen, dass er für den Piloten steuerbar wird.
    Den Drift der Gyros und sicherlich auch noch so einige Einflüsse durch Wind usw. gleicht der Pilot dann aus.
    Man kann übrigens auch das Integral in jedem Durchgang mit dem Faktor 0.99999 multiplizieren... Sollte auch gehen
    Das ist ja dasselbe was ich mit "den Faktor mit dem das Integral in die Regelung eingeht niedriger machen" gemeint habe.
    Der wesentliche Unterschied ist, er Faktor wirkt proportional. D.h. wenn das Integral gross wird, bewirkt der Faktor viel, wenn es klein ist, ändert der Faktor wenig.
    Der Idealfall wäre ja sicherlich, wenn der Copter still und waaherecht in der Luft "klebt" und das Gyro nicht driftet. Dann ergäbe das Gyro-Integral 0.
    An dieser Stelle hinzugehen und in jedem Durchlauf einen konstanten Wert abzuziehen, bzw. hinzuzufügen, sollte theoretisch eher schädlich sein.
    Praktiisch schadet es vermutlich nicht, weil man damit in der Nähe vom Nullpunkt den konstanten Wert in einen Durchlauf dazu addiert, das Integral dann das Vorzeichen wechselt und dadurch schon im nächsten Durchlauf derselbe Wert wieder abgezogen wird.
    D.h wenn die Regelung schnell genug ist, kommt die ganze Aktion gar nicht bei den Motoren an und schadet daher nicht.
    Vielleicht klappt es sogar (mehr oder weniger) zufällig besser als ein Faktor, weil die Reaktion des Copters und die Störgrössen auch nicht linear sind.

    Wenn man den Faktor niedriger macht, hat es keine regelnden Eigenschaften mehr.
    Nach deiner Beschreibung weiter oben hast du ihn mit Ki=0.003 ja schon so klein gemacht, dass ich mich aus dem Bauch heraus eh wundere, wie der noch was bewirkt.

    Er hat fatale Folgen für einen Copter, denn das Integral gibt die Winkelgeschwindigkeit vor.
    Das stimmt so glaube ich nicht.
    Dem Datenblatt nach misst dein Gyro-Sensor die Winkel-Geschwindigkeit (Angular Rate).
    Das Integral aus der Winkelgeschwindigkeit müsste demnach der Winkel sein.

    Wenn das Integral nun gaaaaaaanz langsam wegläuft (z.B. beim Wert "10" rumkriecht), dann heisst dass, das der Copter die ganze Zeit eine Winkelgeschwindigkeit hat.
    Ich glaube der Drift im eigentlichen Sinne spielt hier gar keine so grosse Rolle. Ein ganz langsames wegdriften wird der Pilot ausgleichen können.
    Kritischer sind die Fehler die durch die Berechnung selber entstehen. Du wertest den Gyro ja nur in Intervallen aus. Zwischen den Intervallen passiert ja auch etwas, d.h. die Messwerte sind eigentlich immer etwas falsch. Dann kommt noch ein Messfehler dazu und ein Fehler durch die Digitalisierung des analogen Messwertes.
    Bei 40 Hz addierst du alle diese Fehler 40 mal pro Sekunde auf. D.h. dein Integral hat ganz schnell nichts mehr mit der Realität zu tun und sagt dir dein Copter steht auf dem Kopf obwohl er noch wunderbar in der Waage ist.
    Es wird quasi doppelt integriert wenn man sagt dass die zu regelnde Größe der Winkel ist (oder...?).
    Kommt daraus an, was du machst.
    Wenn du wirklich den Winkel als Sollgrösse nimmst, müsstest du die Messwerte des Gyros schon für den P-Anteil integrieren und für den I-Anteil dann das Integrall nochmal integrieren.
    Ob du das so machst ist mir noch nicht ganz klar geworden.

    Aber auch wenn du das nicht machst, geht das Integral sehr stark in deine Regelung ein.
    Wenn der eigentliche Messwert am Gyro die Winkelgeschwindigkeit ist, sagt dir der nur, wie schnell dein Copter kippt.
    Wenn dein Copter auf dem Boden liegt, hat er keine Winkelgeschwindigkeit. Der direkte Messwert des Gyros kann also nichts regeln. Dein Integral summiert aber fleissig weiter die Messfehler auf und sagt irgenwann trotzdem, dass der Copter auf dem Kopf steht.

    Für den Piloten ist es sicherlich unangenehm, wenn er den Copter wunderbar ruhig hält und die Regelung in aber auf den Kopf drehen möchte
    Mit deiner Addition, bzw. Subtraktion oben, die ja auch 40 mal pro Sekunde durchgeführt wird, stellst du das Integral kontinuierlich Richtung Null zurück.
    D.h. der Winkel den das Integral angibt ist eigentlich nach kürzester Zeit immer wieder Null Grad, selbst wenn der Copter auf dem Kopf steht.
    Da die Regelung bei Null aber nichts macht, stört das den Piloten nicht sonderlich, weil der den Copter ja manuell in ausgleicht.

    D.h. eigentlich stellt dein Integral den Winkel dar. Den stellt es zwar falsch dar, das macht aber nichts, weil die anderen Bestandteile der Regelung und der Pilot den Winkel halten.
    Das Integral verlangsamt/verhindert nur sehr schnelle Richtungsänderungen des Copters. Das ist als Pilot aber vermutlich genau die Untzerstützung die man benötigt.

    In die Theorie der Regelungstechnik passt es dann ja auch wieder rein, denn da soll der I-Anteil ja auch nur die Regelabweichung des P-Anteils reduzioeren und nicht selber den Sollwert halten.

    SummeGyro = SummeGyro + Gyro
    If SummeGyro > X then SummeGyro = 0
    If SummeGyro < -X then SummeGyro = 0
    Dieser Code würde bewirken, dass der Copter sich erst wehrt nach vorne gekippt zu werden, dann aber plötzlich die nach vorne gekippte Lage schlagartig akzeptiert und von nun an nach vorne gekippt bleiben will.
    Stimmt genau. War auch Sinn meines Tests.
    Die Routine hält mein Fahrgestell eine Zeit lang ausrecht. Wenn das dann umkippt oder ich es umkippe, versucht die Routine es in dieser Position zu halten.
    Die Lage zu halten ist aber doch glaube ich auch beim Copter gewünscht und das "plötzliche" Kippen eine Frage davon mit welchen Anteil diese Routine - sprich der I-Anteil in die gesamte Regelung und Steuerung durch den Piloten eingeht.
    Wenns Ki wie bei dir nur ca. 1% von Kp ist, kann der I-Anteil sich ja nicht sonderlich heftig gegen den P-Anteil und das was der Pilot an der Fernsteuerung sagt wehren.

    Das geht mir genauso... Da unterhalten sich ja die richtigen ;-D
    Das stimmt auf jedenfall insofern, dass ich deine Sprache verstehe, die Formelsprache der theoretischen Regelungstechniker eher nicht
    Ausserdem hast du das überzeugende Argument, dass dein Copter fliegt, das was du machst also funktioniert.
    Dass die Parameter für die meisten Regelungen in der Praxis durch Ausprobieren ermittelt werden, spricht ja nicht unbedingt dafür, dass die ganzen theoretischen Formeln der Regelungstechnik sonderlich hilfreich sind

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

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