Kameraaufhängung

1. Einleitung

2. Hardware

2.1 Konstruktionsprinzip

2.2 Antrieb

2.3 3D-Druck und CAD

2.4 Steuerungselektronik

2.5 Bodenstation

 3. Software

 4.Fazit


--------------------------------------------------------------------------------------------------------

 

1. Einleitung

Möchte man gute Videoaufnahmen mit einer am Luftfahrzeug befestigten Kamera erstellen, muss die Kamera, um die durch die Flugeigenschaften induzierte unerwünschten Bewegungen auszugleichen, entsprechend stabilisiert werden.

Ein weit verbreitetes Konzept zur Kamerastabilisierung ist eine Form der kardanischen Aufhängung. Diese besteht in seiner Grundform aus drei Ringen die um jeweils 90° versetzt drehbar gelagert sind. Dadurch sind Drehungen in drei Freiheitsgraden um alle Raumachsen möglich:

 

 

Neben einer rein mechanischen Stabilisierung (z.B. in Form einer Steadycam) ist es mit Hilfe einer elektronischen Stabilisierung möglich die Kamera auch in andere Positionen als der horizontalen zu drehen und dennoch ein stabiles Bild zu erhalten.

Das Ziel dieses Projekts besteht darin, eine Halterung zu konzipieren, mit der man die Kamera zusätzlich zu zum horizontalen Schwenken, sowohl nach vorne als auch senkrecht nach unten ausrichten kann. Damit ist unter anderem der First-Person-Flight (FPV) möglich.

Das Projekt gliedert sich in zwei Teilabschnitte: Hardware und Software. Die Arbeitszeit wurde in etwa zu gleichen Teilen zugeteilt.

 

2. Hardware

2.1 Konzeptionierung

Nach einer intensiven Internetrecherche kristallisierten sich zwei mögliche Konzepte für den mechanischen Aufbau heraus:

In der ersten Variante, die in erster Linie für größere (und schwerere) Kameras geeignet ist, befindet sich die Kamera im Schwerpunkt der Aufhängung und reduziert so die Anfälligkeit gegen Vibration. Desweiteren erlaubt sie 360° Drehungen um die Hoch-Achse (Yaw-Achse). Befestigt wird diese Art der Halterung normalerweise im Mittelpunkt eines Quadrocopters. Nachteilig ist die für den Rundumblick erforderliche relativ hohe Bauhöhe.

Die zweite Variante bietet von Theorie her die gleichen Freiheitsgrade und Winkel an. Sie unterscheidet sich durch die Befestigung der Roll-Achse. Der Vorteil dieser Konstruktion besteht neben der geringeren mechanischen Komplexität, in ihrer Kompaktheit. Sie eignet sich daher hervorragend für kleinere Kameras (z.B. der im Projekt verwendeten GlobeFlightOSC-600). Nunmehr ist die Güte der Aufhängung von der Qualität der verwendeten Antriebe abhängig, und nicht wie bei der ersten Variante vom mechanischen Aufbau. Daher fiel die Wahl auf das zweites Prinzip.

 

2.2 Antrieb

Für den Antrieb werden zwei digitale und ein analoger Servo mit Metallgetriebe und Kugellagerung eingesetzt. Modellbauservos enthalten eine eigene Regelelektronik, sind relativ einfach anzusteuern und sind in Lage die eingestellte Position auch bei großer Belastung zuverlässig zu halten. Modelle mit Metallgetriebe wurden wegen des geringen mechanischen Spiels und der allgemein besseren Stabilität ausgewählt.

2.3 3D-Druck und CAD

Als nächstes galt es, das 3D-Druckverfahren näher kennenzulernen. Den 3D-Druck kann man sich am besten als eine automatisierte Heißklebepistole vorstellen, die ein beliebiges Objekt mit feinen Kunststofffäden Schicht für Schicht auf eine beheizte Platte druckt. Dieses Verfahren wird auch Fused Deposition Modelling (FDM) genannt und wird hauptsächlich zum schnellen Anfertigen von Prototypen genutzt. Allerdings gibt es Prinzip bedingt bedürfen viele Löcher des Nachtbohrens. Dies muss beim Designprozess der Komponenten berücksichtigt werden. Der Drucker nimmt die Objekte in Form einer STL-Datei entgegen. Diese wird dann in ausführbaren GCode umgewandelt. Als CAD-Programm wurde nach einer kurzen Evaluierungsphase statt Blender  (http://www.blender.org), die freie CAD-Suite FreeCAD (http://www.freecadweb.org/) ausgewählt.

Nach der Einarbeitung, die dank diverser Videotutorials drastisch verkürzt wurde, begann ich mit der Konstruktion diverser Teile. In dieser Zeit wurde offensichtlich, dass sich FreeCAD noch in der Betaphase befindet: mit Fehlern und Abstürzen muss gerechnet werden.

Dennoch konnte das Programm überzeugen und die Halterung war modelliert:

 

Anschließend wurde die Halterung ausgedruckt und zusammengebaut.

Leider stellte sich später heraus, dass dieser Typ besonders anfällig für Schwingungen ist. Grund dafür ist die Position der Kamera, die sich nicht im Schwerpunkt der Aufhängung befindet. Das Design wurde entsprechend optimiert:

 

 

Durch diese Änderung konnte man zwar nicht alle Vibrationen gänzlich eliminieren, aber die Eigenschaften verbesserten sich gegenüber dem alten Modell drastisch.

 

 

2.4 Steuerungselektronik

Die Steuerungselektronik besteht hauptsächlich aus einem auf Atmel ATMEGA328P basierenden Arduino Pro Mini, das mit einer Versorgungsspannung von 5V und einer Taktfrequenz von 16MHz arbeitet und einer Inertial Measurement Unit (IMU). Für die Verwendung des Arduino spricht eine durch Hardwareabstraktionsmaßnahmen erreichte, relativ einfache Programmierbarkeit. Auch sind für viele Sensoren und Aktoren passende Programmierbibliotheken verfügbar.

Die IMU wird hier durch zwei eigenständige Module gebildet. Bei diesen handelt es sich um das Accelerometer ADXL345 und dem Gyroskop SD740. Erstere ist in der Lage Beschleunigung entlang aller Raumachsen zu erfassen. Per Tiefpassfilterung lässt so zum Beispiel die Wirkungsrichtung der Gravitation bestimmen, womit es möglich ist ein Maß für die Neigung zur Bodenebene zu finden. Zur Ansteuerung wurde eine fertige Bibliothek genutzt, die als Einheit ein Vielfaches der Erdbeschleunigung (g) nutzt. In der waagerechten Ruhelage wirkt also die Beschleunigung von 1.0g entlang der Z-Achse. Dreht man den Sensor auf den Kopf, so wird -1.0g angezeigt.

Da ein Accelerometer anfällig gegenüber hochfrequenten Vibrationen ist, kommt zusätzlich ein Drehratenmesser zum Einsatz. Diese liefert die momentane Winkelgeschwindigkeit in [°/s]. Das Besondere an diesem Sensor ist die Vielfalt an Schnittstellen. Es kann wahlweise mit Analog-Digital-Wandlern, per Serial Peripheral Interface (SPI) oder mit dem Inter-Integrated Circuit Bus (I2C-Bus) ausgelesen werden. Die Wahl fiel auf einen digitalen Kommunikationsweg und somit  auf die Nutzung von I2C für beide Sensoren. Da es keine Programmierbibliothek für diesen Sensor gab, wurde mit Hilfe des Datenblattes, eine eigene Library für den I2C-Modus geschrieben.

 Leider sind die Komponenten der IMU nicht mit 5V Pegeln kompatibel. Deswegen wurde noch ein Level-Shifter (Pegelwandler) von Sparkfun eingebaut. Die für die Funktion des I2C-Bus notwendigen Pull-Up-Widerstände entfallen in diesem Fall, da der Level-Converter beide Leitungen automatisch auf HIGH zieht.

Um die Kommunikation mit der Bodenstation kümmert sich ein 2.4GHz Funkmodul, das auf den Chip NRF24L01+ basiert. Angebunden wird dieser mit SPI. Die Pins CSN, CE und IRQ sind mit den Arduino Pins zehn (CSN), acht (CE) und zwei (IRQ) - externer Interrupt - verbunden. Das Modul arbeitet mit einer Betriebsspannung von 3.3V und verfügt über 5V tolerante Eingänge. Es kann also direkt mit dem Arduino verbunden werden. Die maximale Sendeleistung beträgt 0 dBm (1mW) mit einer maximalen Bandbreite von 2Mbps. Um die Reichweite im Freifeld  von ca. zehn auf 20-30 Meter zu erhöhen, wurde die Datenrate auf 250kbps reduziert.

Die Servos werden mit den Hardware Timern gesteuert und müssen daher an die Pulse Width Modulation (PWM) Pins des Arduinos angeschlossen werden, sodass durch die Pulsbreite die gewünschte Servoposition festgelegt werden kann. Hier wurden die Pins neun, sechs und drei verwendet.

Zur Stromversorgung des Funkmoduls und der IMU wird der 3.3V Linearregler TS2940 genutzt. Der Regler, die Servos und der Arduino werden direkt über das Bordnetz des Quadrocopter mit stabilisierter 5V Spannung versorgt. Um Stromspitzen zu dämpfen wird ein 470µF Kondensator parallel zum Rest der Schaltung geschaltet.

 

 

Aufgebaut wurde die Schaltung auf einer gewöhnlichen Lochrasterplatine mit kupfernen Lötaugen, die mittels Schrauben auf der Grundplatte der Halterung befestigt wurde. Es wurde zugunsten der Erweiterbarkeit und möglichen Pinbelegungsänderungen auf die Anfertigung einer gesonderten Leiterplatte verzichtet

2.5 Bodenstation


Die Bodenstation ist im Wesentlichen ein Arduino Duemilanove, an das ein weiteres Funkmodul obigen Typs angeschlossen wurde. Sie bekommt ihre Kommandos über ein serielles Terminal und leitet sie in kodierter Form an die Kamerahalterung weiter.

 

  3. Software

Damit nun mit den oben genannten Komponenten die Kamera stabilisiert werden kann, muss ein Regelungsalgorithmus implementiert werden. Im ersten Versuch wurde nur das Accelerometer zur Winkelbestimmung herangezogen. Neigt man den Sensor beispielsweise um ca. 45° um eine Achse, so kann man einen Wert von 0.5g entlang der jeweiligen Achse auslesen. Multipliziert man diesen Wert nun mit 90 so erhält man ein gutes Maß für die Neigung und kann damit direkt die Servos ansteuern. Die Servos werden über die entsprechenden Arduino Befehle, die Eingangswerte von 0 bis 180 erwarten, gesteuert. Die Servoposition pos[i] setzt sich aus der Summe von Wunschposition ang[i], dem Nullpunktoffset offset[i] und durch den Steueralgorithmus errechneten Steuerungswert reg[i] zusammen, also:
 


Bei dem gewählten Koordinatensystem handelt es sich ein kartesiches System: Die X-Achse (auch Roll Achse) zeigt in Flugrichtung während die Y-Achse (Pitch) in Flugrichtung links zeigt. Da es sich um ein Rechtssystem handelt, zeigt die Z-Achse (Yaw) nach oben .

Es stellte sich jedoch heraus, das ein Accelerometer alleine nicht sonderlich gut zur Bestimmung der räumlichen Orientierung geeignet ist. Grund dafür ist die Anfälligkeit gegenüber parasitären Beschleunigungen (z.B. Vibrationen ) und dem schnellen, parallelen Verschieben entlang der X-Y-Ebene.

Gelöst werden kann dieses Problem durch die Auswertung des Gyroskops, welches gegenüber den oben genannten Störungen kaum anfällig ist. Implementiert wurde also ein sogenannter Komplementärfilter:

 

Die Daten vom Gyroskop werden zunächst numerisch integriert, hochpassgefiltert und anschließend mit den tiefpassgefilterten Beschleunigungsdaten vom Accelerometer addiert. Bei letzterem kann je nach Implementierung noch ein Gewichtungsfaktor eingebracht werden.

Der zurückgelegte Winkel  φ berechnet sich folgendermaßen:



Der Parameter λ legt den Grad der Filterung fest. Für kleine $\alpha$ wirken sich hochfrequente Störungen des Beschleunigungssensors weniger auf das Ergebnis aus. Umgekehrt verhält es sich bei der Auswertung des Gyroskops: hier werden niederfrequente Änderungen gefiltert.

Eine alternative Implementierung ist das einzelne Filtern und Addieren der Sensordaten, wodurch es möglich wird auch Filter höherer Ordnung oder verschiedene Filterkoeffizienten zu nutzen. Dies wurde als alternative Methode mit Filtern erster Ordnung implementiert.

Ein digitaler Tiefpass (http://en.wikipedia.org/wiki/Low-pass_filter) wird wie folgt berechnet:




Im Vergleich dazu der Hochpass (http://en.wikipedia.org/wiki/High-pass_filter):



Diese Formeln wurden in der Programmiersprache C implementiert und auf die Sensorwerte angewandt.


Da die Sensorwerte einer Achse auch zur Steuerung jener herangezogen werden, tritt beim horizontalen Schwenken der Kamera das Problem auf, dass scheinbar die falsche Achse geregelt wird. Beispielsweise wären bei einem 90° Schwenk um die Z-Achse, die Y mit der X-Achse vertauscht. Dieses Problem kann folgendermaßen gelöst werden:


Die obige Gleichung beschreibt in kompakter Form einen durch den gewünschten Drehwinkel  φang,Z  gewichteten Übergriff zwischen den Regelwinkeln für die X und Y-Achse.

4.Fazit

 

Anschließend wurde die Kamerahalterung am Quadrocopter montiert. Als letztes mussten noch die Filter eingestellt werden. Danach konnte die Halterung endgültig bei Flugversuchen verwendet werden.

 

 

Anhänge:
Diese Datei herunterladen (SD740I2C.zip)SD740I2C.zip[ ]%2013-%05-%09 %1:%Mai%+02:00