Als Berater bei GoDataDriven haben wir reichlich Gelegenheit, mit neuen Technologien zu experimentieren, zum Beispiel bei den monatlichen
Hack-What-You-Want Friday, an dem wir einen ganzen Tag lang alles ausprobieren, hacken oder studieren können, was uns gefällt. Für größere Projekte haben wir
Der Plan
Deep Learning ist zwar für sich genommen schon sehr interessant, aber noch viel interessanter ist es natürlich, wenn es mit fliegenden Objekten kombiniert wird. Bei diesem Projekt hatten wir einen Traum: Wir wollten einen fliegenden Begrüßer für unser schönes Büro in der Wibautstraat bauen. Und weil Drohnen (Quadcopter) heutzutage zu alltäglich sind, haben wir beschlossen, einen autonomen Luftschiff zu bauen!
Ein Luftschiff finden
Ein Luftschiff von Grund auf zu bauen ist cool, aber auch sehr zeitaufwändig. Da wir uns hauptsächlich für maschinelles Lernen interessierten, beschlossen wir, ein Blimp-Paket zu bestellen, das einen Ballon, einen Controller und Propeller enthält. Natürlich brauchten wir auch etwas Helium. Das Aufblasen eines Luftschiffs ist buchstäblich ein Kinderspiel. Was für eine Freude, Ihr erstes Luftschiff auf dem Dach kleben zu sehen!
Das Paket enthielt einige Gegengewichte, um den Auftrieb des Luftschiffs zu neutralisieren: sehr praktisch. Und es wurde mit einer Smartphone-App geliefert, mit der es gesteuert werden kann. Was für ein cooles Spielzeug! Aber natürlich haben wir es nicht gekauft, um es selbst zu fliegen.
Gehirne hinzufügen
Der nächste Schritt bestand darin, das Luftschiff mit einem Gehirn in Form einer Kamera und Rechenleistung auszustatten. Leider kann unser Luftschiff höchstens 15 g tragen, das sind etwa 10 große Büroklammern. Es gibt nicht viele Kameras, die so wenig wie 15 g wiegen, vor allem nicht , wenn sie auch noch eine externe Batterie benötigen!
Es war also nicht möglich, eine Kamera am Luftschiff zu befestigen. Stattdessen haben wir uns für eine stationäre Kamera entschieden, die an einen Raspberry Pi angeschlossen ist. Natürlich ist der Pi nicht für umfangreiche Berechnungen geeignet, aber er lässt sich sehr leicht bewegen. Wir installierten einen Flask-Webserver, der Bilder auf Abruf bereitstellt, und richteten auf einem unserer Laptops, einem Macbook Pro, einen Client ein, der das Bild anfordert und etwas Deep Learning anwendet.
Die Verwendung einer stationären Kamera hatte einen großen Vorteil: Statt 'Objekte' im Sichtfeld des Luftschiffs erkennen zu müssen, mussten wir nur das Luftschiff selbst erkennen. Und während ein Zeppelin eine sehr gut definierte Form hat, gibt es in unserem Büro viele verschiedene Formen und Größen von Objekten, mit denen ein Zeppelin zusammenstoßen könnte.
Erkennen eines Luftschiffs
Das erste, was wir ausprobiert haben, war unsere Einrichtung von YOLO, einem Objekterkennungsmodell, das mit einer Webcam verbunden ist. Es ist darauf trainiert, eine Fülle von Dingen zu erkennen: Stühle, Tische, Pflanzen, Data Scientists und dergleichen.
Als wir das Modell einschalteten und den Zeppelin vor die Kamera hielten, erwarteten wir natürlich, dass es den Zeppelin erkennen würde. Tatsächlich erkannte das Modell unser Luftschiff, aber zu unserer Überraschung nannte es es lieber 'Handtasche'.
YOLO so zu modifizieren, dass es unser Luftschiff korrekt erkennt, ist kompliziert und zeitaufwändig. Unser nächster Schritt bestand also darin, nach einer anderen Möglichkeit zu suchen, ein Luftschiff auf einem Bild zu identifizieren und eine Schätzung seiner Position zu erhalten.
Auf dem Blog von Waleed Abdullah haben wir genau das gefunden, wonach wir gesucht haben:
ein vortrainiertes Modell, das Ballons erkennt! Und natürlich ist ein Luftschiff eine Art Ballon, nicht wahr? Leider stellt
Wir brauchen mehr Luftballons
Schließlich fanden wir eine einfache Lösung für unser Problem: Wir befestigten einen echten Ballon an dem Luftschiff und nutzten , um diesen Ballon zu erkennen. Also machten wir uns auf den Weg zum Supermarkt, wo wir einen Vergleich anstellten, um die leichtesten verfügbaren Ballons zu finden.
Es reicht nicht aus, einen Ballon aufzublasen: Er ist so schwer! Stattdessen brauchte unser zusätzlicher Ballon auch noch etwas Helium.
Zu unserer großen Freude konnten wir feststellen, dass unser Modell den zweiten Ballon recht gut erkennen konnte. Allerdings war es nicht sehr schnell... Es dauerte etwa 8 Sekunden, um ein Bild zu verarbeiten! Das Luftschiff müsste sich sehr langsam bewegen, um bei dieser Geschwindigkeit eine nützliche Rückkopplungsschleife aufzubauen.
Eingabe der GPU
Es ist nie schlecht, wenn Sie feststellen, dass Sie ein paar zusätzliche Pferdestärken benötigen. Zum Glück hat unser Büro genau das:
Diese Schönheit ist in Verbindung mit einem NUC ein großartiger Server. Er kann etwa 3 Bilder pro Sekunde klassifizieren und erzeugt so einen schönen, gleichmäßigen Strom von Feedback.
Solange sich das Luftschiff innerhalb des Blickfelds der Kamera bewegt, sollten wir in der Lage sein, seine Position zu bestimmen.
Wenn das Luftschiff im oberen Teil des Bildschirms erscheint, muss seine vertikale Koordinate etwas größer sein. In ähnlicher Weise wird
Im Prinzip 'sieht' die Kamera in sphärischen Koordinaten, und die Mathematik für die Übersetzung dieser Koordinaten in normale kartesische Koordinaten ist ziemlich einfach. Aber bevor Sie das tun können, müssen Sie die Position auf der Kamera in tatsächliche sphärische Koordinaten umrechnen - und das hängt vom Blickwinkel Ihres Objektivs ab. Wir haben diese Umrechnung kalibriert, indem wir das Luftschiff in einer festen Position hielten und die von der Kamera angezeigte Position mit der tatsächlichen Position verglichen.
Der nächste Schritt: die Steuerung des Luftschiffs.
Hacken des Bluetooth-Controllers
Das Luftschiff kann über eine Smartphone-App über Bluetooth ferngesteuert werden. Leider war keine öffentliche API verfügbarbluepy) auszuprobieren. Nach einigem Herumprobieren gelang es uns, eine Verbindung zum Controller herzustellen. Als wir
die Verbindung untersuchten, fanden wir etwa 10 verschiedene 'Merkmale': Register/Variablen, die einen Wert zwischen 0 und 128 enthalten.
Zusammen bestimmen die Werte in den Merkmalen das Ausgangsverhalten des Motors.
Da diese Merkmale keine aussagekräftigen Namen haben und keine Anleitungen verfügbar waren, machten wir uns an die einzig sinnvolle Sache, die noch übrig hatte: Schreiben Sie in die Registrierungen und versuchen Sie herauszufinden, was sie tun! Nach etwa einer Stunde hatten wir es geschafft, ein Python-Programm zu schreiben, das Tastatureingaben den entsprechenden Änderungen in der Registrierung zuordnet. Zeit, unseren ersten computergesteuerten Testflug zu machen!
Die Eroberung der vertikalen Ebene
Als ersten Versuch des autonomen Fliegens haben wir uns nur auf die Steuerung der vertikalen Achse konzentriert. Die vertikale Steuerung war bei weitem am einfachsten: Einer der Propeller befand sich an der Unterseite des Luftschiffs und war entlang der vertikalen Achse auf den Boden gerichtet. Mit Hilfe eines PID-Reglers, einem weit verbreiteten Steuerungsmechanismus, der im Laufe seiner Lebensdauer eine optimale Steuerungsfunktion erlernt, gelang es uns, das Luftschiff in einer bestimmten Höhe zu stabilisieren.
Wir stießen schnell auf einige Herausforderungen. Bald wurde klar, dass das Luftschiff auf die kleinste Windböe reagiert. Lassen Sie besser keine Türen offen!
Außerdem scheint es dem Luftschiff Spaß zu machen, einige unserer Kollegen zu ärgern.
Am Ende haben wir uns eine schöne Dockingstation ausgedacht.
Die Meister des Himmels
Nachdem wir einen grundlegenden Mechanismus gefunden hatten, um unser Luftschiff in der Luft zu halten, war es nun an der Zeit, es auf Reisen zu schicken. Das Luftschiff verfügt über
Unser erster Versuch bestand darin, eines der größten und universellsten Hilfsmittel der Büroorganisation einzusetzen: farbige Klebezettel. Wenn wir einen roten
Schließlich haben wir uns eine einfachere Aufgabe ausgedacht: Kreise fliegen. Der Trick besteht darin, etwas Gas zu geben, wenn Sie sich in der Startrichtung bewegen. Dies erzeugt eine Rückmeldung, die dem Controller mitteilt, wie der Ballon neu ausgerichtet werden sollte. Am Ende funktionierte dieses ziemlich gut!
Die eiserne Faust der Natur
Alle guten Dinge haben ein Ende, und das Ende unseres Luftschiffs war klar, als es eintraf: Nach einer beeindruckenden Anzahl von Abstürzen brach der vertikale Propeller des Luftschiffs ab. Ein natürlicher Tod, ein würdiges Ende, im Namen der Wissenschaft.
Hat Sie unser Deep Learning-Luftschiff inspiriert?
Bauen Sie mit dem Wissen, das Sie in unserem dreitägigen Deep Learning-Kurs erworben haben, Ihr eigenes System auf!
Verfasst von
Jelte Hoekstra
Unsere Ideen
Weitere Blogs
Contact




