Gigapixel-Kamera mit Arduino bauen

Wie versprochen gibt es heute mal wieder „frische“ Inhalte für den Blog.

Zum Bachelor-Studium gehört im Studiengang Druck- und Medientechnologie, wie in den meisten anderen auch, eine Projektarbeit, die mit 12 Credit Points vergütet wird.

Was man da macht ist relativ flexibel, ich wählte damals ein praktisches Thema.

Meine Aufgabe war es dann ein Aufnahmesystem zu konstruieren, mit dem man Gigapixelbilder aufnehmen kann. Das Ganze sollte mit einem Arduino gesteuert werden, die Weiterverarbeitung der erfassten Bilddaten sollte mit kostenfreier Software erfolgen.


Endergebnis meiner Bachelor-Projektarbeit

Endergebnis meiner Bachelor-Projektarbeit


Entstanden ist ein System das, vor allem kamerabedingt, nicht ganz Gigapixelbilder aufnehmen kann. Die Maximalauflösung der erzeugten Bilder liegt bei rund 150 Megapixeln was aber schon für interessante, detailreiche Panoramaaufnahmen genügt. Im weiteren Verlauf benutze ich trotzdem die Bezeichnung „Gigapixelbild“.

Ziel dieses Projektes war es, unter anderem, zu zeigen, dass sich Gigapixelbilder auch mit relativ günstiger Ausrüstung anfertigen lassen. Während man für automatisiert bewegte Panoramaköpfe mehrere Tausend Euro ausgeben kann, kommt dieses Projekt mit einem Bruchteil dieser Kosten aus. Der Automatisierungsgrad ist dabei allerdings nicht geringer als bei entsprechenden Lösungen.

Dazu kann auch die kostenfreie (Open Source)-Software „Hugin“ mit den Ergebnissen der Bilder überzeugen. Auch kommerzielle Lösungen in diesem Bereich sind nicht zwangsläufig besser, was die Ergebnisse der verrechneten Bilder angeht.

Aber fangen wir vorne an.


Während unseres Studiums lernten wir ja nicht nur druck- und medien-spezifische Sachen kennen, zum Beispiel die einzelnen Druckverfahren, sondern auch viele Grundlagen. Dazu gehören unter anderem Informatik (C und C++), Elektrotechnik, Mechanik und auch „Maschinenelemente“. All das stellte sich als äußerst nützlich für diese Arbeit heraus.

Nach kurzer Zeit, und einer Recherche was es so an Lösungen auf dem Markt gibt, entstand also folgender Plan für die Konstruktion des Gesamtsystems.

Gesamtkonstruktion

Das „doppelte U“ ist eine von zwei hauptsächlich verwendeten Konstruktionen im Bereich von Panoramasystemen. Die andere sieht einen einzigen Arm vor, der an seinen Achsen entsprechend gelagert ist.

Das doppelte U zeichnet sich allerdings dadurch aus, dass es leichter zu konstruieren ist. Besonders die Kräfte in den Lagern sind deutlich geringer, da es zwei Auflagepunkte und damit keinen Hebelarm gibt, auf dem das Kameragewicht lastet.

Die Metallteile konnte ich kostengünstig aus Reststücken Aluminium gefertigt bekommen, Holz/MDF wäre dafür mindestens auch denkbar. Wenn man günstig an andere feste Materialien kommt, dann dürften die wohl auch gehen.


Irgendwann stand also die Konstruktion und die Entwicklung wurde vorangetrieben.

Aufgrund der einfachen Ansteuerungsmöglichkeit kamen Servomotoren aus dem Modellbau zum Einsatz. Zusammen mit Zahnrädern aus dem Modellbau (Hauptantriebsräder für Helikopterrotoren) konnte sehr einfach Kraft vom Motor auf die Bewegungsachsen gebracht werden.

Die Zahnräder weisen aufgrund der hohen Zahnzahl ein angenehm geringes Spiel auf, was der Genauigkeit des Systems sehr zuträglich ist. Nichtsdestotrotz würde ich bei einer Neukonstruktion oder einer Verbesserung doch auf Zahnriemen setzen. Die weisen noch weniger Spiel auf, man kann sich daran nicht die Finger oder Kabel einklemmen (okay, kann man schon, aber es ist schwieriger) und sie sind platzsparender zu verbauen.


Nun gab es also ein funktionsfähiges mechanisches System, das die Kamera motorbetrieben nach links und rechts drehen sowie nach oben und unten neigen konnte. Das ist natürlich die Basis eines automatischen Aufnahmesystems, die Steuerung ist der nächste wichtige Teil.

MOSFET mittels eines Transistors über den Arduino ein- und ausschalten. Nützlich um die Servos abzuschalten.

MOSFET mittels eines Transistors über den Arduino ein- und ausschalten. Nützlich um die Spannungsversorgung der Servos abzuschalten.


Meine Projektbetreuer sind selber von der Arduino-Plattform begeistert und so sollte das auch hier Anwendung finden.

Ein Arduino Uno, genauer der darauf eingesetzte Chip, reichen locker für die Anforderungen dieses Projektes aus und so entstand nach und nach ein Schaltplan für das ganze System.

Dabei musst die Eingabe von Daten (Wo fange ich an Bilder zu machen, wo höre ich auf? Wie groß ist meine Brennweite?) bedacht werden, hierzu wurde übrigens ein Joystick aus einer Playstation 2 eingesetzt, ebenso die Ausgabe von Informationen auf einem Display (aus einem Nokia 5110).

Die Servos aber auch der Arduino und die daran hängende Steuerung wollen mit Strom versorgt werden, entsprechend sind Spannungswandler einzusetzen, um Betriebs- und Steuerspannungen für die einzelnen Komponenten bereit zu stellen.

Als Akku kommt übrigens ein LiPo-Akku aus dem Modellsport-Bereich zum Einsatz. Der kann bis zu 30 Ampere Spitzenstrom abgeben, was für plötzliche Anfahrten der Servos ausreichend Reserven bietet. Normale AA-Akkus waren bei meinen Versuchen regelmäßig unter der Last zusammengebrochen und hatten den Arduino mit in den Tod (Neustart, sobald Motor eingeschaltet wurde) gerissen.

Gute Kontakte zu Elektrotechnikern zahlen sich übrigens spätestens hier aus. Ohne die hätte ich das Ganze vermutlich nicht so sauber hinbekommen, wie es jetzt der Fall ist. Statt einer Darlington-Schaltung von Transistoren stieg ich zum Beispiel auf MOSFETs um, die entsprechende Lasten ohne Probleme schalten können.

So wuchs also eine Schaltung erst auf Papier und später auf einer Lochrasterplatine heran. Meine „Lötkünste“ sind zwar unterirdisch aber bis heute funktioniert alles ohne Probleme.

Die Buchsenleisten nehmen später die Kabel für Joystick und Display auf, im leeren IC-Sockel findet sich dann der ATMEGA 328P ein, der Prozessor vom Uno.

Da ich mein Prototyping-Board nicht opfern wollte, habe ich eine entsprechende Beschaltung wie auf selbigem vorgenommen. Es gibt einen 16 MHz-Quarz, diverse kleine Kondensatoren etc. pp. um dem Prozessor sein Arduino-Board vorzugaukeln. Als kleines Extra habe ich auch ICSP-Header ausgeführt, damit könnte man den Prozessor im eingebauten Zustand neu programmieren.

Die ganze Schaltung kam natürlich zusammen mit dem Akku, Display und Joystick in ein vernünftiges Gehäuse, Cinch-Buchsen dienen als Schnittstelle zum mechanischen System (den Servos) und ermöglichen eine Fernauslösung der Kamera.


Der Software-Teil fällt relativ übersichtlich aus. Der Nutzer kann mittels des Joysticks die Kamera in Ausgangs- und Endposition fahren, gibt die Brennweite und die Sensorgröße an und der Rest wird von der Software automatisch erledigt.

Dazu wird aus Sensorgröße und Brennweite automatisch der Bildwinkel berechnet, aus den beiden Positionen der Winkel, der durchfahren muss. So lässt sich leicht ermitteln, wieviele Bilder in X- und Y-Richtung jeweils gemacht werden müssen.

Dazu wird die Kamera auch an den entsprechenden Stellen automatisch ausgelöst. Dies wird möglich durch die Installation der Firmware-Erweiterung „CHDK“ (Canon Hacker Development Kit) auf der Kamera. Darauf weiter einzugehen würde den Rahmen sprengen, das CHDK erlaubt auf jeden Fall eine Menge sehr cooler Sachen, die sehr nützlich sind.


Nach Mechanik, Elektronik und Informatik fällt noch der letzte Teil in diesem Projekt, die Weiterverarbeitung der gemachten Bilder.

Das erledigt in meinem Fall Hugin, dazu lässt sich aber auch jede andere Panorama-Stitching-Software nutzen.

Der Prozess unterscheidet sich dabei im Hintergrund nicht wirklich voneinander, die Oberflächen sehen natürlich immer anders aus und hier und da hat man mal mehr und mal weniger Eingriffsmöglichkeiten in das Endergebnis.

Wichtig für ein gutes Ergebnis sind aber vor allem gute Kameraeinstellungen und daraus folgend gute Bilder. Ohne gutes Ausgangsmaterial kann man einfach nichts Schönes daraus machen. In meinem Fall, mit einer sehr günstigen Kamera, wird dieser Punkt nochmal kritischer. Bei gutem Licht macht die gute Bilder, danach geht es rapide abwärts.

Auf Hugin gehe ich jetzt auch nicht weiter ein, das ist mir zu spezifisch, gerade wenn man andere Software nutzen will. Wer sich dennoch dafür interessiert, der findet in der Dokumentation, am Ende des Beitrages, einiges dazu.


Wichtiger ist an dieser Stelle, dass es endlich ein paar Bilder zu sehen gibt.

Wie bereits eingangs erwähnt liegt die maximale Bildgröße dieses Systems, bedingt durch die Kamera und dessen Zoombereich, bei rund 150 Megapixeln. Etwas mehr ist theoretisch möglich, aufgrund des dann überspannten Bildwinkels wirken die Bilder allerdings merkwürdig verzehrt, weil unser Kopf weiß, dass da was nicht stimmt.

Die jetzt folgenden Bilder sind mit meinem Aufnahmesystem entstanden und haben garantiert keinerlei Nachbearbeitung in Photoshop erfahren.

Vorsichtig! Das sind richtig große Bilder!

Beeindruckend finde ich die Details, die sich auf der Hauswand, an Gegenständen etc. pp. zeigen, die im normalen Bild nicht sichtbar sind. Gerade für sowas sind Gigapixelbilder hervorragend geeignet.

Testpanorama klein

Volle Größe: 21609 × 7855 Pixel (169 Megapixel)

In diesem Bild verstecken sich so genannte „Geister“, also Personen oder Objekte die eigentlich nicht da sein könnten, schaut ob ihr sie findet. ;-D

Volle Größe: 7260 × 3809 Pixel (28 Megapixel)

Auch hier finde ich die Details schön, die sich zeigen, wenn man sich das Bild in voller Größe anschaut. Tiere im Hintergrund etc.

Volle Größe: 10438 × 3884 (41 Megapixel)


Tja, soviel in der gebotenen Kürze/Länge zu meiner Projektarbeit. Ich habe sie im Januar diesen Jahres abgegeben und dafür eine 1,0 bekommen.

Was will man mehr?

Das ihr was noch Besseres daraus macht!

Ich fände es schön, wenn jemand sich diese Projektarbeit und meine Unterlagen dazu nimmt und das Ganze verbessert. Nehmt zum Beispiel eine bessere Kamera und macht echte Gigapixelbilder damit. Oder tauscht die Zahnräder durch Zahnriemen aus. Verbessert die Schaltung oder die Software, ganz wie ihr wollt.

Nur berichtet dann bitte hier von den Ergebnissen.

Aber auch so freue ich mich natürlich über eure Meinungen, Kommentare und alles mögliche, was euch dazu einfällt.


Downloads:


Über mich

Ich bin gelernter Mediengestalter, studierter Druck- und Medientechniker und leidenschaftlicher Tüftler und Bastler.

Beruflich beschäftige ich mich mit der digitalen Transformation von Unternehmen, sowie der Automatisierung von Unternehmensprozessen, in der Druck- und Medienbranche. Mehr dazu findet sich im Lebenslauf.

Privat interessieren mich Kaffee(maschinen), Themen rund um Webentwicklung, das Internet im Allgemeinen und Speziellen und vieles, vieles mehr.

Ich freue mich auf Feedback per E-Mail unter kontakt@flomei.de, einen Euro für die Kaffeekasse oder etwas von meiner Amazon Wunschliste.