Seit 2003 besitze ich eine 6-DOF IMU der Firma Rotomotion. Dabei handelt es sich also um eine Sensoreinheit, die Inertialsensoren für 6 Freiheitsgrade (Degrees of Freedom) umfasst. Dies sind 3 separate Kreiselsensoren, sowie zwei Beschleunigungssensoren, von denen jeder die Beschleunigung auf 2 Achsen messen kann. Die Einheit wurde oft als Bausatz vertrieben und ist vermutlich aus diesem Grund größtenteils mit Standardbauelementen bestückt. Damit ergeben sich erhebliche Abmessungen und auch ein größeres Gewicht. Um die IMU in einem kleinen Modellflugzeug einsetzen zu können, musste ich vor allem die Abmessungen reduzieren.

IMU-Bausatz im Original

Verkleinerung der Hauptplatine

Die Einheit besteht aus 3 Platinen – der Hauptplatine (Mainboard), der xy-Platine und der z-Platine. Die Hauptplatine enthält neben dem Mikrocontroller noch eine Menge von Anschlussmöglichkeiten, u.a. für die Servos. Für meine Vorhaben benötige ich aber lediglich die Erfassung der Messdaten – alle weiteren Berechnungen werden von einem leistungsfähigen Hauptrechner ausgeführt. Aus diesem Grund habe ich ein neues Mainboard designed, das nur die notwendigsten Bauteile enthält und zwar in SMD-Bauweise. Zudem hat es Anschlussleisten, an welche die beiden Sensorplatinen direkt und im richtigen Winkel angeschlossen werden. Damit entfallen die Verbindungen über Bandkabel und die separate Befestigung der Sensorplatinen.

Verkleinerte Hauptplatine

Anpassung der Sensorplatinen

Damit die Sensorplatinen im rechten Winkel auf engen Raum aneinanderpassen, mussten einige bedrahtete Bauteile ebenfalls durch SMD ersetzt werden. Betroffen sind einige Widerstände. Die SMD-Bauteile wurden direkt auf die Pads ihrer Vorgänger gelötet. Weiterhin wurde die Platine an einer Stelle eingefräst, um Platz für den Yaw-Gyro zu machen. Auf dem Bild ist diese Stelle schwarz markiert.

Ersatz für Drahtwiderstände

Zusammenbau

Die Einheit lässt sich nun mittels der Steckkontakte auf dem Mainboard rechtwinklig zusammenstecken. Die ursprüngliche Pinbelegung wurde weitestgehend beibehalten. Die neuen Hauptplatine besteht im Wesentlichen aus einer Low-Drop-Spannungsregelung, einem ATMega168, der rückwärtskompatibel zum originalen Controller ist, einer LED, sowie einigen Anpassungen zur Verbesserung der AD-Wandlung. Die IMU wiegt 30g ohne Gehäuse und hat einen Stromverbrauch von 28 – 30mA.

IMU zusammengebaut

Visualisierung

Zur Verarbeitung der Daten wurden verschiedene Methoden getestet, unter anderem auch ein Kalman-Filter. Durch eine 3D-Visualisierung mittels Java-3D konnten diese Methoden in Echtzeit geprüft werden. Für den Kalman-Filter wurde auf den ursprünglichen Sourcecode des Autopilot-Projekts zurückgegriffen. Nach einigen Wochen des Testens und Anpassens fand ich schließlich auch noch einen entscheidenden Fehler im Sourcecode. Die Visualisierung setze ich in modifizierter Form auch für meinen Logfile-Betrachter „FlightViz“ ein. Dort dient allerdings ein Logfile als Datenquelle anstatt der direkten IMU-Daten über die serielle Leitung. Im realen Einsatz leistet der Kalman-Filter gute Arbeit. Bei stärkerem Wind treten allerdings Probleme beim Abgleich mit dem GPS-Heading auf, da die Flugrichtung mit unter 10-20 Grad von der Ausrichtung der Längsache abweicht. Hier wäre ein Kompass als zusätzliche Referenz hilfreich.

Visualisierung

Download

Eagle Schema:main_board_mini_r.sch
Eagle Board:main_board_mini_r.brd
AVR Source Code:adc.c
Java Source Code Visualisierung:src
Formeln des Rotomotion Kalman-Filter:Analyse_Rotomotion_Kalman.pdf