Selbst gemachter Autopilot auf einem Single Board Computer (SBC) Tinker Board und Arduino DUE

Bild

Die Idee, einen Autopiloten zu bauen, kam vor ungefähr 2 Jahren. Ich wollte einen vollständig autonomen Apparat schaffen, der in der Lage ist, von Punkt A nach Punkt B zu gelangen, mit der Möglichkeit, Kollisionen zu vermeiden und um Hindernisse herumzufliegen, Störzonen zu überwinden oder kein Satellitensignal zu haben. Ich wollte auch eine bequeme und einfache Steuerung mit der Maus haben, da diese in Spielen (Strategien) implementiert ist, die die Bewegung des Flugzeugs mithilfe von Punkten steuern. Ich musste alles von vorne beginnen, wie in diesem Artikel. Wenn es also Fehler gibt, schreibe darüber in den Kommentaren. Ich werde in der richtigen Reihenfolge beginnen.



Hardware


Anfangs wusste ich nicht, welches Eisen für dieses Projekt besser geeignet ist, aber am Ende kam ich zu dem Schluss, dass die beste Option ein Haufen Mikrocontroller (MK) + Einplatinencomputer wäre. Wenn MK das Problem der Stabilisierung eines Flugzeugs (LA) löst, löst seine Bewegung auf einem bestimmten Kurs und in einer bestimmten Höhe, und ein Einplatinencomputer löst das Problem der Navigation und Bewegung entlang einer Route. Da der Plan war, Kollisionen zu vermeiden, musste der Computer leistungsfähig genug sein, um Informationen von Hinderniserkennungssensoren zu verarbeiten, kompakt und zu dieser Zeit nicht zu teuer. TinkerBoard war für diese Beschreibung am besten geeignet, dann war Raspbery 3B + und hatte viel schlechtere Eigenschaften. Als MK wollte ich einen Arduino-kompatiblen Controller haben, weil Arduino hatte eine riesige Basis an vorgefertigten Skizzen und daher fiel die Wahl auf DUE 84 MHz, 32 Bit ARM Cortex-M3, weiler war der mächtigste und musste die Direktheit meiner Hände ausgleichen)).

Ursprünglich wollte ich die MPU 9250 mit einem Majevik-Filter als Orientierungssensoren verwenden, und die Ergebnisse waren ausgezeichnet. Der Hauptvorteil dieser Option bestand darin, dass alle Berechnungen, einschließlich der Kalibrierung der Sensoren (Beschleunigungsmesser, Gyroskop und Magnetometer), auf dem MK durchgeführt wurden. Es gab jedoch ein Problem, der Filter kompensierte die Linearbeschleunigung, die ständig bei Stößen oder einer starken Kursänderung auftritt, schlecht. Dies drückt sich in den Ablesungen von Nick- und Rollbewegungen aus. Im Moment der Beschleunigung beginnen sie wegzuschweben und passieren durch das Proportionaldifferentialregler (PD) und insbesondere den Differentialteil das Schweben verursachte Probleme. Daher musste ich einen Sensor mit einem bereits implementierten BNO 055 Filter verwenden.

Im Gegensatz zur MPU 9250 verfügt der BNO über den integrierten Cortex M0 MK, der sofort die Ausrichtung in Euler-Winkeln, die Quaternine mit absoluter Ausrichtung und die Linearbeschleunigung berechnet, obwohl dieser Sensor auch einige Nachteile hat. Das Hauptproblem dieses Sensors ist die Autokalibrierung, oder vielmehr, dass er nicht ausgeschaltet werden kann, ist eine solche „Passung“ dieses Sensors, und diese Kalibrierung hat die unangenehme Eigenschaft, zu verschwinden, manchmal absolut plötzlich sogar nur an einem Ort ohne Bewegung. Dies spiegelt sich hauptsächlich in dem Gieren wider, das an dem Magnetometer in diesem Sensor angebracht ist und die Richtung zum magnetischen Nordpol (Kurs) anzeigen sollte, aber manchmal zeigt es 100 Grad in Strona, und nach dem Kalibrieren kann es zurückgehen))). In anderen Fällen kann das Kursproblem weiterhin durch Synchronisation mit GPS gelöst werden. Ansonsten funktioniert der Sensor einwandfrei,Er bestimmt die Neigung und das Rollen immer richtig, und lineare Beschleunigungen haben keinen großen Einfluss auf seine Arbeit, es sei denn, die Beschleunigung überschreitet natürlich nicht 2G, weil Diese Schwelle wird verwendet, um den Schwerkraftvektor zu messen und die Drift von Gyroskopen zu kompensieren.

Der Rest des Bügeleisens ist wie folgt: GPS Ublox Neo M8N mit USB-Ausgang,
BMP 280-Barometer, HSCR 04-Sonar zum Empfangen von Daten zur Bodenverfügbarkeit und genaueren vertikalen Geschwindigkeit, EEPROM 24c16 zum Speichern von Kalibrierungsdaten und PID-Einstellungen, Neoway M509E GSM-Modul zum Senden Meldungen über die Koordinaten des Flugzeugs im Falle eines Unfalls.

Das Funktionsdiagramm ist in Abbildung 1 dargestellt:

Bild
Abbildung 1 - Funktionsdiagramm des Autopiloten .

Software


Für die Softwareentwicklung verwende ich QT zusammen mit der QT Creator IDE. Er ist mir am vertrautesten und dank der plattformübergreifenden Funktionalität kann ich meine Programme sowohl auf einem Einplatinen-PC mit Debian als auch auf einem Desktop mit Windows ausführen, was sehr praktisch ist. Für die Entwicklung von Mikrocontroller-Software wird die Arduino IDE verwendet. Aus Gründen der Übersichtlichkeit werde ich versuchen, alle Abschnitte in Abbildung 2 darzustellen.

Bild
Abbildung 2. - Architektur des AP (BNO 080 für die Zukunft hinzugefügt).

1) Grafische Steueroberfläche - ist eine Satellitenkarte, mit deren Hilfe das Flugzeug gesteuert wird. Das Satellitenbild-Anzeigeprogramm selbst gehört nicht mir, es wurde von mir hier gestohlen (sein Autor hat auch versucht, etwas Ähnliches zu tun).

Sie können das Flugzeug mit Punkten (Markierungen) oder WADS-Tasten steuern. Um Punkte zu kontrollieren, muss die Flugroute mit grünen Markierungen versehen werden, sie werden mit der Maus (RMB) gesetzt und auf Route laden geklickt oder die (rote) Sofortbewegungsmarkierung (LMB) verwendet, und dann fliegt das Flugzeug von der aktuellen Position zu diesem Punkt, für dessen Betrieb muss es eingestellt werden Kontrollkästchen im Kontrollkästchen "Manuell" bei versehentlichem Klicken.

Alle Markierungsparameter werden in die entsprechenden Felder des Formulars eingegeben. Sie können die Markierungen entfernen, indem Sie mit der mittleren Maustaste doppelklicken. Während sie weiterhin im Flugzeugspeicher verbleiben, müssen Sie sie mit der Schaltfläche Route löschen aus dem Speicher löschen. Sobald der Punkt erreicht ist, dreht er sich wie in den Strategien des Flugzeugs um ihn. Tastensteuerung WADS steuert die Lenkräder direkt über PD-Steuerungen. Wenn jede Taste gedrückt wird, wird ein Wert in den Eingang der Steuerung eingegeben, z. B. wenn S gedrückt wird, Tonhöhe 30 und wenn losgelassen wird 0. Wenn W-30 gedrückt wird usw. WADS wird über Kontrollkästchen aktiviert: "manuell", "Tasten". In diesem Modus können Sie vor dem Start die Funktionalität aller Ruder überprüfen. Die grafische Oberfläche läuft auf dem Laptop, Steuerbefehle von der grafischen Oberfläche über den TCP-Socket werden an den Kernel übertragen. Die grafische Bedienoberfläche ist in Abbildung 3 dargestellt:

Bild
Abbildung 3 - Grafische Verwaltungsoberfläche.

2) Der Kern des Autopiloten ist der Teil der Software, der auf einem TinkerBoard-Einplatinencomputer berechnet wird. Der Kernel ist für die Navigation und Bewegung entlang der Route verantwortlich. Dazu wird ein GPS-Sensor an den Computer angeschlossen. Mit dieser Funktion können Sie die aktuelle Position des Flugzeugs (Breiten- und Längengrad) abrufen und diese Position mit der Position auf der Flugroute vergleichen. Infolge dieser Operation wird der Azimut zum Ziel erhalten, der zusammen mit den übrigen Flugparametern an den Mikrocontroller gesendet wird. In Zukunft kann der Kernel mit seinem IMU-Sensor ausgestattet werden, um die ANN zu implementieren. Sie können beispielsweise BNO 080 verwenden, um die Geschwindigkeit zu integrieren, zu beschleunigen und zu ermitteln. Durch Integrieren der Geschwindigkeit können Sie die Entfernung ermitteln. Die vom ANN empfangene Entfernung muss für die Berechnung des Azimuts in das GPS-Koordinatensystem (Breiten- und Längengrad) übersetzt werden.

Ein solches ANN kann in Verbindung mit einem GPS-Sensor verwendet werden, wenn die Kommunikation mit dem Satelliten vorübergehend unterbrochen wird, damit das Flugzeug keine „Abbiegung“ zu einem Punkt verpasst. Zum Zeitpunkt des GPS-Betriebs wird der ANN ständig anhand seiner Messwerte angepasst und füllt die Lücken zwischen den Aktualisierungsperioden des GPS-Sensors. Auf die gleiche Weise sollte der Bildverarbeitungsalgorithmus oder SLAM angepasst werden, indem die Höhe des Punkts geändert und Verzerrungen des berechneten Azimuts erzeugt werden. Nach Abschluss der Routenberechnung sendet der Kernel UART-Daten: Azimut, Höhe, Anstellwinkel, Punkttyp und auch, ob eine Drehung um diesen Punkt erforderlich ist.

3) Der Mikrocontroller führt die Kernbefehle aus. Die Hauptaufgabe des MK besteht darin, dem vorgegebenen Kurs in einer bestimmten Höhe zu folgen. Dafür ist die MKU mit einem IMU BNO 055 Sensor, einem BMP 280 Barometer und einem Sonar ausgestattet. Für die Bewegung entlang des Kurses wird der vom Kern erhaltene Azimut verwendet, er wird mit dem aktuellen Kurs verglichen und die resultierende Nichtübereinstimmung wird zum Gieren und Rollen an die PD-Steuerungen übertragen. Die Pitch-Steuerung wird von 2 PD-Controllern ausgeführt: Der 1. bestimmt die Nichtübereinstimmung des Stroms und der vorgegebenen Höhen, die dem Eingang des 2. Controllers zugeführt werden, während der Ausgang des Höhenreglers durch den aktuellen Anstellwinkel begrenzt wird, um seinen Satz zu steuern. Wenn in der grafischen Oberfläche der Punkttyp für Start oder Landung ausgewählt ist, wird ein Sonar verwendet, um die Höhe zu bestimmen. Sein Zeugnis wird mit den Daten des Barometers kombiniert,um den Abstand zum Boden und die vertikale Geschwindigkeit am genauesten zu bestimmen. Zusätzlich zu den Grundfunktionen sammelt MK Telemetrie über den Betrieb von IMU-Sensoren, die aktuelle Richtung und Höhe, überträgt sie an den Kernel, wo diese Daten durch Daten vom GPS ergänzt werden und in die grafische Oberfläche gelangen.

Fazit


Derzeit befindet sich der Autopilot noch in der Flugtestphase und ist nicht vollständig konfiguriert. Ich habe jedoch nur zwei Starts verbracht und die Koeffizienten für die Regulierungsbehörden noch nicht erfasst.

Im Allgemeinen scheinen mir PD-Regulatoren instabil zu sein, und ich möchte sie durch etwas Zuverlässigeres ersetzen, zumal sie bereits veraltet sind. Es ist auch notwendig, Berechnungen durch Euler-Winkel durch Berechnungen in Quaternionen zu ersetzen, weil Letztere verhalten sich stabiler, wenn das Flugzeug in einem Winkel von mehr als 120 Grad gedreht wird und während des Windes fliegt.

Eine detailliertere Aufnahme der Avionik


Bild



Link zum Quellcode des Giftes (mit Bibliotheken) Github hier nur die Quelle aber neuer

All Articles