Quadrocopter-PID-Abstimmung

13

In Fortsetzung der hier gestellten Frage: Quadcopter-Instabilität mit einfachem Start im autonomen Modus ... Ich möchte einige Fragen zur Implementierung einer Basis-PID für einen Quadrotor stellen, der von einem APM 2.6-Modul gesteuert wird. (Ich benutze einen Rahmen von 3DRobotics)

Ich habe das gesamte Steuerungssystem auf nur zwei PID-Blöcke reduziert, einen zur Steuerung des Rollens und einen zur Steuerung der Tonhöhe (Gieren und alles andere ... darüber würde ich später nachdenken).

Ich teste dieses Setup auf einem Rig, das aus einem frei drehenden Balken besteht, wobei ich zwei Arme des Quadrotors festgebunden habe. Die anderen beiden können sich frei bewegen. Ich teste also tatsächlich jeweils einen Freiheitsgrad (Rollen oder Nicken).

Überprüfen Sie das Bild unten: hier markiert A, B den frei drehenden Strahl, auf dem das Setup montiert ist. Bildbeschreibung hier eingeben

Durch vorsichtiges Einstellen der P- und D-Parameter habe ich es geschafft, einen dauerhaften Flug von etwa 30 Sekunden zu erreichen.

Aber mit "aufrechterhalten" meine ich einfach einen Test, bei dem die Drohne nicht zur Seite fällt. Felsstabiler Flug ist immer noch nirgends in Sicht und mehr als 30 Sekunden Flug sieht auch ziemlich schwierig aus. Es wackelt von Anfang an. Wenn es 20 - 25 Sekunden erreicht, beginnt es, sich zur Seite zu neigen. Innerhalb von 30 Sekunden ist es um einen nicht akzeptablen Abstand zur Seite gekippt. Ich finde es bald verkehrt herum

Was den PID-Code selbst angeht, so berechne ich den Proportionalfehler aus einem 'komplementären Filter' von Gyro + Beschleunigungsmesserdaten. Der Integralterm wird auf Null gesetzt. Der P-Term beträgt ungefähr 0,39 und der D-Term liegt bei 0,0012. (Ich verwende die Arduino PID-Bibliothek nicht absichtlich. Ich möchte nur eine meiner eigenen PIDs hier implementieren lassen.)

Überprüfen Sie dieses Video, wenn Sie sehen möchten, wie es funktioniert.

http://www.youtube.com/watch?v=LpsNBL8ydBA&feature=youtu.be [Ja, das Setup ist ziemlich alt! Genau. :)]

Bitte lassen Sie mich wissen, was ich möglicherweise tun kann, um die Stabilität in dieser Phase zu verbessern.

@ Ian: Von den vielen Tests, die ich mit meinem Setup durchgeführt habe, habe ich Diagramme für einige der Tests mit dem Messwert vom seriellen Monitor erstellt. Hier ist eine Beispielablesung von Roll vs 'Motor1 & Motor2 - PWM-Eingang' (die zwei Motoren, die die Roll steuern):

Roll vs Motor PWM-Eingang

Wie für die Eingabe / Ausgabe:

Eingabe: Roll- und Nickwerte (in Grad), wie durch eine Kombination von Beschleunigungsmesser + Kreisel ermittelt

Ausgabe: PWM-Werte für die Motoren, die mit der motor.write () -Funktion der Servobibliothek ausgegeben werden


Auflösung

Ich habe das Problem gelöst. Hier ist wie:

  1. Der Kern des Problems lag in der Art und Weise, wie ich das Arduino-Programm implementiert habe. Ich habe die Funktion write () verwendet, um die Servowinkel zu aktualisieren, die zufällig nur ganzzahlige Schritte im Argument akzeptieren (oder irgendwie nur auf ganzzahlige Eingaben reagieren, 100 und 100.2 ergeben dasselbe Ergebnis). Ich habe es in "writeMicroseconds ()" geändert, was den Copter erheblich stabiler gemacht hat.

  2. Ich habe die Drehzahl eines Motors addiert, während der andere auf einem konstanten Wert gehalten wurde. Ich habe dies geändert, um die Drehzahl in einem Motor zu erhöhen und gleichzeitig den Gegenmotor zu verringern. Auf diese Weise bleibt der horizontale Gesamtschub unverändert, was mir helfen könnte, wenn ich versuche, das Ding in vertikaler Höhe in den Griff zu bekommen.

  3. Ich habe die Drehzahl auf das Maximum angehoben, weshalb der Quadcopter bei Vollgas die Kontrolle verlor. Es gab keinen Raum für eine Erhöhung der Drehzahl, wenn eine Neigung festgestellt wurde.

  4. Ich stellte fest, dass einer der Motoren von Natur aus schwächer war als der andere, ich weiß nicht warum. Ich habe einen Offset in den PWM-Eingang des Motors hartcodiert.

Danke für all die Unterstützung.


Quellcode:

Wenn Sie interessiert sind, ist hier der Quellcode meiner Bare-Bones-PID-Implementierung: PID-Quellcode

Bitte zögern Sie nicht, es in Ihrer Hardware zu testen. Beiträge zum Projekt sind willkommen.

Metsburg
quelle
1
Was ist der Eingang und was ist der Ausgang der Schleife?
Guy Sirton
@ GuySirton: Aktualisiert meine Frage
Metsburg
Was sind diese flachen Abschnitte in Ihren Motorbefehlen? Sieht aus wie etwas gesättigt ist. Sie rollen Änderungen wie eine kontinuierliche Funktion, aber Ihre Befehle sehen sehr abrupt aus. Auch warum driften beide Motor-PWM-Befehle nach oben, während Ihre Rolleneingabe in einem Bereich bleibt, der wie derselbe aussieht? Was ist übrigens die ungefähre Zeitskala?
Guy Sirton
1
Der Grund, warum Sie nach 30 Sekunden die Kontrolle verlieren, hängt wahrscheinlich damit zusammen, dass beide Befehle nach oben driften. Ich denke, Sie versuchen, den Unterschied zwischen den Befehlen zu kontrollieren, aber Sie können nicht zulassen, dass diese weiter nach oben driften.
Guy Sirton
@GuySirton: Sie driften nicht nach oben, ich erhöhe sie von Null nach oben, so dass sie innerhalb von 3/4 Sekunden einen bestimmten stationären Zustand erreicht. Ich denke jedoch, Sie haben Recht, wenn Sie sagen, dass "der Grund, warum Sie nach 30 Sekunden die Kontrolle verlieren, wahrscheinlich damit zusammenhängt, dass beide Befehle nach oben driften". Wenn ich dieses schrittweise Inkrement nicht verwende und meinen PWM-Eingang auf einem bestimmten Pegel fixiere (niedriger als der oben gezeigte maximale Eingang), verschwindet das Problem, die Kontrolle nach 30 Sekunden zu verlieren.
Metsburg

Antworten:

6
  1. Ihre proportionale Verstärkung scheint zu hoch zu sein.
  2. Sie scheinen die Drehzahl eines Motors ständig zu erhöhen, während Sie den anderen Motor blockieren, um das System in Drehung zu versetzen. Dies ist keine gute Kontrollstrategie, da diese letztendlich sättigen und Sie die Kontrolle verlieren. Mit zunehmender Zeit verringert sich auch die Befehlsfähigkeit des Systems. Sie brauchen also ein besseres Modell des Systems.
  3. Wenn Sie sich mit Nr. 1 und Nr. 2 befassen, haben Sie ein stabileres System, sind jedoch möglicherweise nicht mit der Steuerungsbandbreite zufrieden. Um damit umzugehen, müssen Sie Ihr System steifer machen, was auch die Beseitigung von Verzögerungen auf der Sensorseite und auf der Steuerungsseite einschließt.
Guy Sirton
quelle
3

Ich beginne mit der Lektüre dieser Frage: Was sind gute Strategien zum Optimieren von PID-Schleifen?

Wenn ich raten müsste, würde ich sagen, dass Sie ein Problem in der Art und Weise haben, wie Ihr kostenloser Filter aufgebaut ist. Wenn die Quadcopter-Motoren ausgeschaltet sind, sollten Sie den Rahmen vor und zurück kippen und prüfen, ob die angegebenen Roll- / Nickwerte tatsächlich korrekt sind.

Für mich scheint es eine Verzögerung zwischen der Eingabe vom Beschleunigungsmesser und der Ausgabe Ihres Filters zu geben - die Oszillation könnte durch späte Reaktionen auf die Eingabedaten erklärt werden. Das eventuelle Wenden sieht aus wie ein möglicher Integrationsfehler, der sich im Laufe der Zeit ansammelt - mit anderen Worten, während Ihr Quadcopter auf der Seite ist, denkt er tatsächlich, dass er gerade schwebt.

(Update) In Bezug auf Ihre Grafik bedeutet die Tatsache, dass Ihre Motordrehzahlen weiter ansteigen (anstatt ausgeglichen zu bleiben), dass Sie irgendwo einen Fehler haben. Vielleicht wächst Ihr Integralbegriff unbegrenzt, und Sie sollten ein angemessenes Maximum dafür angeben.

Ian
quelle
Ich habe meine Frage mit den Rollwerten aktualisiert, wenn ich vor und zurück kippe. Ich habe das eventuelle Umdrehen behoben, indem ich meinen maximalen PWM-Eingang gesenkt habe. Es scheint, dass die Korrekturwerte bei sehr hohen Drehzahlen nicht funktionieren. Ich kann das Rig mit meiner Hand leicht drehen, wenn ich mit hoher Drehzahl arbeite. Bei niedrigerer Drehzahl spüre ich einen beträchtlichen Widerstand und der Quadcopter scheint in seine ursprüngliche Position zurückzukehren (was gut ist, denke ich). Das Problem mit dem Wenden wird also wahrscheinlich durch Verringern der Drehzahl gelöst (ich weiß nicht, ob die Drohne überhaupt startet oder nicht, hoffe, das tut sie). Das Oszillationsproblem bleibt weiterhin bestehen.
Metsburg
-3-5±90
Nun, die Grafik ist nicht genau für den im Video gezeigten Test. Wie oben erwähnt, stammt die Grafik aus einem der vielen Tests, die ich mit diesem Setup durchgeführt habe, und ich erinnere mich nicht genau, wie dieser spezielle Fall ausgesehen hat. Das Diagramm soll Ihnen nur eine Vorstellung davon geben, wie sich die Eingangs- / Ausgangsantwort verhält, und ich wollte auch feststellen, dass zwischen Eingang und Ausgang keine große Verzögerung besteht (vorausgesetzt, die Schleife läuft mit 150+ Hz). Das Video mit der Grafik abzugleichen, macht möglicherweise nicht viel Sinn. Ich habe nicht den genauen Datensatz für den Test im Video.
Metsburg
Mir ist aufgefallen, dass die Grafik etwas irreführend ist. Tut mir leid. Ich werde versuchen, das Diagramm mit einem genaueren zu aktualisieren. Tatsächlich war das Arduino-Board mit dem Laptop verbunden, da ich Daten von der seriellen Schnittstelle plottete, als ich dieses Diagramm erstellte. Nach einer gewissen Schwingung musste ich eingreifen und die Schwingung manuell verlangsamen. Das ist der Grund, warum Sie sehen, dass es sich bei - 5 Grad beruhigt, während es in Wirklichkeit bei 90 Grad liegt. Ich werde später versuchen, ein genaueres Diagramm zu aktualisieren.
Metsburg
Eine andere Sache, die ich aus der Grafik sehe, ist, dass Ihr kombinierter Schub immer größer wird. Das scheint falsch zu sein.
Ian
1

Nun, hier könnte eine Reihe von Dingen vor sich gehen ...

1) Sind Ihre Winkelangaben korrekt? laut? Sie können dies leicht überprüfen, indem Sie Ihr Quad manuell kippen und die herauskommenden Werte überwachen.

2) Ihre eigene PID-Implementierung hat einen Fehler. Sie können die vertrauenswürdige Implementierung verwenden, um Ihren Code zu überprüfen.

3) Requisiten, Motoren falsch herum montiert.

4) ...

dm76
quelle
1) Ich habe die angegebenen Winkel gekippt und überprüft, fast richtig, aber definitiv laut. 2) sehr wahrscheinlich ... in der Tat denke ich, das fasst es vollständig zusammen: P 3) nicht sehr wahrscheinlich, zwei im Uhrzeigersinn, zwei gegen den Uhrzeigersinn ... Ich habe die Requisiten mehrmals überprüft + Ich denke, diese Art von Fehler würde haben zu wilden Fehlern geführt, die weit außerhalb der Kontrolle liegen. 4) ....
Metsburg
4) ... eine falsche PID-Tuning-Dose macht die Sache schlimmer, als wenn Sie überhaupt keine PID hätten!
dm76
Ja, das sehe ich jetzt. Ich werde morgen daran arbeiten. Mein erster Plan ist die Verwendung der vertrauenswürdigen PID-Bibliothek und der zweite, die Ausgabe der PID von PWM-Signalen auf Roll-Pitch-Korrektur zu ändern.
Metsburg