Ich implementiere derzeit einen autonomen Quadcopter, den ich kürzlich fliegen ließ und der stabil war, der sich jedoch bei erheblichen externen Störungen nicht selbst korrigieren kann. Ich gehe davon aus, dass dies auf unzureichend eingestellte PID-Verstärkungen zurückzuführen ist, die im Flug weiter optimiert werden müssen.
Laufender Fortschritt:
- Ich habe ein Barometer ausgeschlossen, da der Umfang meiner Forschung nur der Innenflug ist und das Barometer laut meinem Kollegen eine Abweichung von + -5 Metern aufweist.
- Ich verwende derzeit einen Ultraschallsensor (HC-SR04) für die Höhenschätzung mit einer Auflösung von 0,3 cm. Ich fand jedoch, dass die Bildwiederholfrequenz des Ultraschallsensors von 20 Hz zu langsam ist, um eine ausreichend schnelle Reaktion für die Höhenkorrektur zu erhalten.
- Ich habe versucht, die Beschleunigungen auf der Z-Achse vom Beschleunigungsmesser zu verwenden, um Höhendaten zu erhalten, indem ich die Beschleunigung integriert habe, um die Geschwindigkeit zu erhalten, die für die PID-Rate in einem kaskadierten PID-Reglerschema verwendet werden soll. Die aktuelle Implementierung für den Höhen-PID-Regler ist ein Einzelschleifen-PID-Regler, der einen P-Regler mit der vom Ultraschallsensor eingegebenen Position verwendet.
- Ich hatte die negativen Beschleunigungsmessungen aufgrund der Schwerkraft berücksichtigt, aber egal wie viel ich den Versatz berechne, es gibt immer noch eine negative Beschleunigung (z. B. -0,0034). Ich habe den Gravitationsversatz berechnet, indem ich den Quadcopter so eingestellt habe, dass er sich noch auf einer ebenen Fläche befindet, und dann 20.000 Proben von der Z-Achse des Beschleunigungsmessers gesammelt habe, um den "Versatz" zu erhalten, der als konstante Variable gespeichert ist. Diese Variable wird dann vom Z-Achsen-Ausgang des Beschleunigungsmessers subtrahiert, um den Versatz zu entfernen und ihn auf "Null" zu bringen, wenn er nicht beschleunigt. Wie in der Frage gesagt, besteht immer noch eine negative Beschleunigung (z. B. -0,0034). Mein Quad steigt dann ständig in die Höhe. Mit nur dem Ultraschallsensor P-Regler schwingt mein Quad um 50 cm.
Wie kann mit dieser konsistenten negativen Beschleunigungsmessung effektiv umgegangen werden?
Mögliche Lösung : Ich plane, einen kaskadierenden PID-Regler für den Höhenhalt mit dem Innerloop (PID-Regler) unter Verwendung des Beschleunigungsmessers und dem äußeren Regelkreis (P-Regler) unter Verwendung des Sonarsensors durchzuführen. Mein Berater sagte, dass bereits ein P-Regler mit einer Schleife ausreicht, um den Quadcopter auch mit einem langsamen Sensor auf seiner Höhe zu halten. Ist das genug? Ich bemerkte, dass der Quadcopter nur mit der P-Verstärkung seine Höhe überschreiten würde.
Leaky Integrator: Ich fand diesen Artikel, in dem erklärt wurde, wie er mit den negativen Beschleunigungen mit einem Leaky Integrator umgegangen ist. Ich habe jedoch einige Probleme zu verstehen, warum dies funktionieren würde, da ich denke, dass der negative Fehler nur zu einem positiven Fehler führen würde, der das Problem nicht löst. Ich bin mir nicht ganz sicher. http://diydrones.com/forum/topics/multi-rotors-the-altitude-yoyo-effect-and-how-to-deal-with-it
Single-Loop-PD-Controller nur mit Ultraschallsensor: Ist dies mit der Rückmeldung eines langsamen Sensors möglich?
Quellen:
LSM303DLHC-Datenblatt: http://www.st.com/web/en/resource/technical/document/datasheet/DM00027543.pdf
Undichter Integrator: http://diydrones.com/forum/topics/multi-rotors-the-altitude-yoyo-effect-and-how-to-deal-with-it
ArduPilot PID-Schleife: http://copter.ardupilot.com/wp-content/uploads/sites/2/2012/12/Alt-Hold-PID-version-3.0.1.jpg
quelle
Antworten:
Das auf dem Pixhawk getragene Barometer hat eine Höhenauflösung von 10 cm. Wenn dies nicht ausreicht, können Sie einen Kalman-Filter schreiben, der die Beschleunigungsmesserdaten im Vorhersageschritt und den Ultraschallsensor und / oder das Barometer im Korrekturschritt verwendet.
Aber ich sehe nicht, dass dies Ihr Problem löst. Eine genaue Messung der Höhe bei 20 Hz sollte ausreichend sein, wenn Sie nur versuchen, die Höhe zu halten.
Was ist die Zeitkonstante / Eigenfrequenz und Dämpfung Ihres Controllers?
Ich glaube, ich hatte Ihre Frage heute Morgen noch nicht fertig gelesen (es war vor meinem Kaffee). Die Beschleunigung vom imu ist die Messung von Beschleunigung plus Schwerkraft. Subtrahieren Sie den Schwerkraftvektor von der Messung, um die Trägheitsbeschleunigung des Imu zu erhalten. Sie können integrierte Beschleunigungsmessungen niemals steuern. Die Messungen sind durch Rauschen verfälscht und Sie können dies nicht korrigieren.
--- Antwort auf den Kontrollteil der Frage
Nehmen wir an, Sie versuchen nur, eine Höhe zu halten, und sind vorerst nicht besorgt, eine Position zu halten (obwohl dieser Ansatz auch dafür funktioniert). Und wenn Sie davon ausgehen, dass Sie den gewünschten Schub (im Rahmen der Vernunft) befehlen können, wird dies zu einem einfachen Problem.
Ein erster Durchgang zur Systemdynamik sieht so aus
Unsere neue Dynamik sieht aus wie
Cool! Jetzt entwerfen wir ein Kontrollgesetz, damit wir eine gewünschte Höhe erreichen können.
Unser Steuerungssystem wird eine virtuelle Feder und ein Dämpfer zwischen unserem Quad und der gewünschten Höhe sein (dies ist ein PD-Controller).
An dieser Stelle möchte ich noch einmal betonen, dass die Integration von Beschleunigungsmesserdaten kein guter Weg ist, um Zustandsschätzungen zu generieren. Wenn Sie wirklich schnell etwas zusammen hacken möchten, führen Sie die Sonarmessungen durch einen Tiefpassfilter mit einer geeigneten Abfallfrequenz. Ihr Fahrzeug wird nicht mit 20 Hz schwingen, daher ist es in Ordnung, nur die Sonardaten auszuschalten.
quelle