Teilnehmerinnen und Teilnehmer des Projekts arbeiten in Gruppen von maximal vier Personen. Jede Gruppe erhält eine fertig aufgebaute und flugbereite FPV-Drohne sowie die erforderlichen Hard- und Softwarekomponenten. Ziel des Projekts ist die Entwicklung, Implementierung und experimentelle Bewertung einer drohnenbasierten Lösung zur automatischen Erkundung und Kartografierung von Innenräumen.
Die Drohne soll Räume und Gänge eines Gebäudes möglichst selbstständig erkunden und dabei eine zwei- oder dreidimensionale Karte der Umgebung erstellen. Da innerhalb von Gebäuden in der Regel kein zuverlässiger GPS-Empfang verfügbar ist, müssen alternative Verfahren zur Positionsbestimmung, Navigation und Hinderniserkennung untersucht und miteinander kombiniert werden. Hierfür kommen beispielsweise optischer Fluss, LiDAR, visuelle Odometrie, Inertialsensoren sowie Verfahren aus den Bereichen SLAM (Simultaneous Localization and Mapping) und künstliche Intelligenz infrage.
Die Verarbeitung kann vollständig auf der Drohne oder verteilt zwischen Drohne und Bodenstation erfolgen. In jedem Fall muss die Drohne auch bei eingeschränkter oder unterbrochener Funkverbindung in einen sicheren Zustand wechseln können. Neben der technischen Umsetzung sollen insbesondere die Genauigkeit und Vollständigkeit der erzeugten Karten, die Zuverlässigkeit der Positionsbestimmung sowie die Grenzen der verwendeten Hard- und Software untersucht und nachvollziehbar dokumentiert werden.
Das Projekt umfasst die folgenden Aufgaben:
Aufgabe 1: Drohnenplattform und Systemarchitektur.
Machen Sie sich mit der bereitgestellten FPV-Drohne sowie deren Hard- und Softwarekomponenten vertraut. Entwerfen Sie eine geeignete Gesamtarchitektur für die automatische Gebäudeerkundung und legen Sie fest, welche Verarbeitungsschritte auf der Drohne und welche gegebenenfalls auf einer Bodenstation ausgeführt werden.
Aufgabe 2: Autonomer Flug in Innenräumen.
Integrieren und konfigurieren Sie eine geeignete Autopilot-Lösung, vorzugsweise ArduPilot. Die Kommunikation zwischen Autopilot, Einplatinencomputer und Bodenstation kann über MAVLink erfolgen. Realisieren Sie einen stabilen und sicheren Flug ohne GPS. Verwenden Sie dazu geeignete Sensoren für Entfernungsmessung, optischen Fluss, Hinderniserkennung und Positionsschätzung. Die Drohne muss jederzeit manuell übernommen beziehungsweise über einen Not-Aus-Mechanismus sicher gestoppt werden können.
Aufgabe 3: Lokalisierung und Kartografierung.
Entwickeln Sie ein Verfahren, mit dem sich die Drohne innerhalb eines Gebäudes lokalisiert und gleichzeitig eine Karte ihrer Umgebung erzeugt. Als Ergebnis soll mindestens eine zweidimensionale Belegungskarte oder ein Grundriss entstehen. Eine dreidimensionale Punktwolke oder eine semantisch angereicherte Karte kann als Erweiterung umgesetzt werden. Geeignete Softwarelösungen sind beispielsweise Robot Operating System 2 (ROS), Open Computer Vision Library (OpenCV), Real-Time Appearance-Based Mapping (RTAB-Map), ORB-SLAM3 oder Cartographer.
Aufgabe 4: Automatische Erkundung und Navigation.
Die Drohne soll bislang unbekannte Bereiche selbstständig erkennen, geeignete Erkundungsziele bestimmen und eine möglichst kollisionsfreie Flugroute planen. Räume, Gänge, Türen, Sackgassen und Hindernisse sollen dabei sinnvoll berücksichtigt werden. Nach Abschluss der Erkundung oder beim Auftreten eines Fehlers soll die Drohne sicher landen oder zu einem bekannten Ausgangspunkt zurückkehren. Optional können Räume, Türen, Schilder oder andere relevante Objekte erkannt und in der Karte markiert werden.
Aufgabe 5: Integration und mechanische Anpassung.
Integrieren Sie die benötigten Kameras, Entfernungssensoren und Einplatinencomputer in die Drohnenplattform. Entwickeln Sie bei Bedarf geeignete Halterungen oder Erweiterungen des bestehenden Rahmens. Für Konstruktion und 3D-Druck können beispielsweise Tinkercad und UltiMaker Cura verwendet werden. Möglichkeiten zum 3D-Druck stehen zur Verfügung.
Aufgabe 6: Experimentelle Evaluation.
Testen Sie das System in unterschiedlich gestalteten Räumen und Gängen. Untersuchen Sie unter anderem die Kartenqualität, Lokalisierungsabweichung, Flächenabdeckung, Erkundungsdauer, Zahl der erforderlichen manuellen Eingriffe, Rechen- und Energiebedarf sowie die Robustheit gegenüber unterschiedlichen Lichtverhältnissen, spiegelnden Flächen, strukturlosen Wänden, engen Durchgängen und beweglichen Hindernissen. Vergleichen Sie die erzeugte Karte nach Möglichkeit mit einem bekannten Grundriss oder einer anderweitig vermessenen Referenz.
Aufgabe 7: Dokumentation und Präsentation.
Erstellen Sie eine vollständige und verständliche Online-Dokumentation, die Studierende, Forschende und Lehrende in die Lage versetzt, das entwickelte System nachzubauen und für eigene Lehr- und Forschungsprojekte weiterzuverwenden. Es werden keine Folienpräsentationen oder klassischen PDF-Projektberichte erstellt. Jedes Team dokumentiert seine Architektur, Implementierung, Experimente, Ergebnisse und bekannten Einschränkungen beispielsweise mit GitHub Pages und präsentiert das Projekt abschließend mit einem Poster und einer Live-Demonstration.
Bonusaufgabe: Entwicklung eines Propellerschutzes.
Entwerfen und fertigen Sie einen möglichst leichten, stabilen Propellerschutz (z.B. mit Tinkercad, FreeCAD oder Blender) oder einen Mantelpropeller (Englisch: Ducted Fan) bzw. einen Impeller, der den sicheren Betrieb der Drohne in Gebäuden und beengten Umgebungen ermöglicht. Untersuchen Sie experimentell dessen Schutzwirkung sowie die Auswirkungen auf Flugstabilität, Leistungsaufnahme, Flugzeit und Manövrierfähigkeit und dokumentieren Sie Konstruktion, Testverfahren und Ergebnisse. Einige Quellen zur Thematik:
[1],
[2],
[3],
[4],
[5],
[6],
[7],
[8],
[9],
[10],
[11],
[12],
[13],
[14]
Im Mittelpunkt des Projekts steht nicht allein eine erfolgreiche Demonstration. Ebenso wichtig sind eine systematische Vorgehensweise, reproduzierbare Experimente und eine fundierte Analyse der technischen Grenzen. Dazu gehören insbesondere die begrenzte Rechenleistung und Akkukapazität der Drohne, Fehler und Drift bei der Positionsbestimmung, unvollständige Sensordaten, Kommunikationsabbrüche sowie die sichere Navigation in einer unbekannten Umgebung.
Zeitplan für das Semester
!!! Achtung !!!
Sie müssen sich bis zum 2. November für die Modulprüfung in Cloud Computing anmelden. Die Anmeldung ist verpflichtend. Bitte melden Sie sich jetzt an! Eine nachträgliche Anmeldung ist nicht möglich!!!
Am 11. November, und 18. November ist die Mehrzweckhalle 10-MZH anderweitig belegt.
Am 4. November können wir die Mehrzweckhalle 10-MZH ausnahmsweise nur von 10 Uhr bis 11:30 Uhr nutzen.
Der Stundenplan kann sich u.a. wegen Dienstreisen und Belegungen der Mehrzweckhalle im Laufe des Semesters ändern. Bitte regelmäßig kontrollieren!
Mittwochs von 10 bis 12 Uhr können wir die Mehrzweckhalle in Gebäude 10 für Flugversuche nutzen. Zudem stehen uns immer die Labore in 1-022 und 2-033. Beide Labore verfügen über Lötausstattung. Das Labor 1-022 verfügt zudem über einen modernen 3D-Drucker, den Sie nutzen können.
RNGFND1_GNDCLEAR = 2 # Entfernung (in cm) vom Abstandssensor zum Boden
RNGFND1_MAX_CM = 1200 # Maximaler Messbereich (in cm) des Abstandssensors
RNGFND1_MIN_CM = 2 # Maximaler Messbereich (in cm) des Abstandssensors
RNGFND1_TYPE = 10 # MAVLink
RNGFND1_ORIENT = 25 # Down
Zudem müssen noch die Einstellungen bzgl. Extended Kalman Filter (EKF) für die verschiedenen Umgebungen (Flug mit GPS oder in Innenräumen) vorgenommen werden, und ein Kanal (z.B. mit RC8_OPTION) zum Umschalten der Umgebung definiert werden
EK3_ENABLE = 1 # Enabled
EK3_SRC1 zum Flug außen mit GPS
EK3_SRC1_POSXY = 3 # GPS als Quelle für Horizontale Position
EK3_SRC1_POSZ = 1 # Barometer als Quelle für Vertikale Position
EK3_SRC1_VELXY = 3 # GPS als Quelle für Horizontale Geschwindigkeit
EK3_SRC1_VELZ = 3 # GPS als Quelle für Vertikale Geschwindigkeit
EK3_SRC1_YAW = 1 # Kompass als Quelle für Yaw (Gieren) = Drehbewegung um die senkrechte Achse
EK3_SRC2 zum Flug im Innenräumen (ohne GPS) mit optischem Flusssensor, aber ohne Abstandssensor
EK3_SRC2_POSXY = 0 # Keine Quelle für Horizontale Position
EK3_SRC2_POSZ = 1 # Barometer als Quelle für Vertikale Position
EK3_SRC2_VELXY = 5 # Optischen Flusssensor als Quelle für Horizontale Geschwindigkeit
EK3_SRC2_VELZ = 0 # Keine Quelle für Vertikale Geschwindigkeit
EK3_SRC2_YAW = 1 # Kompass als Quelle für Yaw (Gieren) = Drehbewegung um die senkrechte Achse
EK3_SRC3 zum Flug im Innenräumen (ohne GPS) mit optischem Flusssensor und mit Abstandssensor
EK3_SRC3_POSXY = 0 # Keine Quelle für Horizontale Position
EK3_SRC3_POSZ = 2 # Entfernungssensor als Quelle für Vertikale Position
EK3_SRC3_VELXY = 5 # Optischen Flusssensor als Quelle für Horizontale Geschwindigkeit
EK3_SRC3_VELZ = 0 # Keine Quelle für Vertikale Geschwindigkeit
EK3_SRC3_YAW = 1 # Kompass als Quelle für Yaw (Gieren) = Drehbewegung um die senkrechte Achse
RNGFND1_GNDCLEAR = 2 # Entfernung (in cm) vom Abstandssensor zum Boden
RNGFND1_MAX_CM = 1200 # Maximaler Messbereich (in cm) des Abstandssensors
RNGFND1_MIN_CM = 2 # Maximaler Messbereich (in cm) des Abstandssensors
RNGFND1_TYPE = 10 # MAVLink
RNGFND1_ORIENT = 25 # Down
Zudem müssen noch die Einstellungen bzgl. Extended Kalman Filter (EKF) für die verschiedenen Umgebungen (Flug mit GPS oder in Innenräumen) vorgenommen werden, und ein Kanal (z.B. mit RC8_OPTION) zum Umschalten der Umgebung definiert werden
EK3_ENABLE = 1 # Enabled
EK3_SRC1 zum Flug außen mit GPS
EK3_SRC1_POSXY = 3 # GPS als Quelle für Horizontale Position
EK3_SRC1_POSZ = 1 # Barometer als Quelle für Vertikale Position
EK3_SRC1_VELXY = 3 # GPS als Quelle für Horizontale Geschwindigkeit
EK3_SRC1_VELZ = 3 # GPS als Quelle für Vertikale Geschwindigkeit
EK3_SRC1_YAW = 1 # Kompass als Quelle für Yaw (Gieren) = Drehbewegung um die senkrechte Achse
EK3_SRC2 zum Flug im Innenräumen (ohne GPS) mit optischem Flusssensor, aber ohne Abstandssensor
EK3_SRC2_POSXY = 0 # Keine Quelle für Horizontale Position
EK3_SRC2_POSZ = 1 # Barometer als Quelle für Vertikale Position
EK3_SRC2_VELXY = 5 # Optischen Flusssensor als Quelle für Horizontale Geschwindigkeit
EK3_SRC2_VELZ = 0 # Keine Quelle für Vertikale Geschwindigkeit
EK3_SRC2_YAW = 1 # Kompass als Quelle für Yaw (Gieren) = Drehbewegung um die senkrechte Achse
EK3_SRC3 zum Flug im Innenräumen (ohne GPS) mit optischem Flusssensor und mit Abstandssensor
EK3_SRC3_POSXY = 0 # Keine Quelle für Horizontale Position
EK3_SRC3_POSZ = 2 # Entfernungssensor als Quelle für Vertikale Position
EK3_SRC3_VELXY = 5 # Optischen Flusssensor als Quelle für Horizontale Geschwindigkeit
EK3_SRC3_VELZ = 0 # Keine Quelle für Vertikale Geschwindigkeit
EK3_SRC3_YAW = 1 # Kompass als Quelle für Yaw (Gieren) = Drehbewegung um die senkrechte Achse
Die Eingangsspannung des SpeedyBee TX800 VTX ist nur 3.7-5V. Der analoge VIDEO-OUT des MicoAir743 V2 Flugcontrollers hat aber eine Ausgangsspannung vin 9V. Aus diesem Grund befindet sich ein Battery Eliminator Circuit (BEC) zwischen Flugcontroller und Videosender.
Den Videosender betreffende Einstellungen in ArduPilot sind:
RNGFND1_GNDCLEAR = 2 # Entfernung (in cm) vom Abstandssensor zum Boden
RNGFND1_MAX_CM = 1200 # Maximaler Messbereich (in cm) des Abstandssensors
RNGFND1_MIN_CM = 2 # Maximaler Messbereich (in cm) des Abstandssensors
RNGFND1_TYPE = 10 # MAVLink
RNGFND1_ORIENT = 25 # Down
Zudem müssen noch die Einstellungen bzgl. Extended Kalman Filter (EKF) für die verschiedenen Umgebungen (Flug mit GPS oder in Innenräumen) vorgenommen werden, und ein Kanal (z.B. mit RC8_OPTION) zum Umschalten der Umgebung definiert werden
EK3_ENABLE = 1 # Enabled
EK3_SRC1 zum Flug außen mit GPS
EK3_SRC1_POSXY = 3 # GPS als Quelle für Horizontale Position
EK3_SRC1_POSZ = 1 # Barometer als Quelle für Vertikale Position
EK3_SRC1_VELXY = 3 # GPS als Quelle für Horizontale Geschwindigkeit
EK3_SRC1_VELZ = 3 # GPS als Quelle für Vertikale Geschwindigkeit
EK3_SRC1_YAW = 1 # Kompass als Quelle für Yaw (Gieren) = Drehbewegung um die senkrechte Achse
EK3_SRC2 zum Flug im Innenräumen (ohne GPS) mit optischem Flusssensor, aber ohne Abstandssensor
EK3_SRC2_POSXY = 0 # Keine Quelle für Horizontale Position
EK3_SRC2_POSZ = 1 # Barometer als Quelle für Vertikale Position
EK3_SRC2_VELXY = 5 # Optischen Flusssensor als Quelle für Horizontale Geschwindigkeit
EK3_SRC2_VELZ = 0 # Keine Quelle für Vertikale Geschwindigkeit
EK3_SRC2_YAW = 1 # Kompass als Quelle für Yaw (Gieren) = Drehbewegung um die senkrechte Achse
EK3_SRC3 zum Flug im Innenräumen (ohne GPS) mit optischem Flusssensor und mit Abstandssensor
EK3_SRC3_POSXY = 0 # Keine Quelle für Horizontale Position
EK3_SRC3_POSZ = 2 # Entfernungssensor als Quelle für Vertikale Position
EK3_SRC3_VELXY = 5 # Optischen Flusssensor als Quelle für Horizontale Geschwindigkeit
EK3_SRC3_VELZ = 0 # Keine Quelle für Vertikale Geschwindigkeit
EK3_SRC3_YAW = 1 # Kompass als Quelle für Yaw (Gieren) = Drehbewegung um die senkrechte Achse
RC8_OPTION = 90 # EKF Source Set auf Kanal 8
Konfiguration in ArduPilot (Screenshots von MicoConfigurator)
Diese Screenshots zeigen die wichtigsten Einstellungen in MicoConfigurator zu Beginn des Projekts und können dabei helfen, die bereitgestellten Drohnen zu verstehen und weiterzuentwickeln.
Die Lernkurve ist hoch! Hier finden Sie ein paar sinnvolle erste Schritte.
Machen Sie sich mit den Komponenten der Ausrüstung vertraut.
Verstehen Sie, wie die Komponenten der Drohne miteinander verbunden sind, welche Aufgaben sie erfüllen und wie Sie diese steuern können.
Das Handbuch (GitHub-Repository) ist ein guter Einstieg. Die Bereitschaft, zumindest die Kapitel 1-4 zu lesen, ist eine Voraussetzung für die Teilnahme an diesem Master-Projekt.
Zur Konfiguration der Drohne nutzen Sie vorzugsweise MicoConfigurator. Diese Lösung bietet eine benutzerfreundliche Oberfläche.
Als Software für die Bodenstation (Ground Control Station) nutzen Sie auf einem Smartphone, Tablet oder Laptop QGroundControl und/oder MicoPilot. MicoPilot bietet eine besonders benutzerfreundliche Oberfläche.
Erstellen Sie ein Konzept und einen Zeitplan für die einzelnen Teilaufgaben des Master-Projekts. Teilen Sie die Aufgaben fair auf und verlieren Sie keine Zeit. Das Wintersemester ist kurz.
Die verwendeten Li-Ion-Akkus haben keinen eingebauten Schutz gegen Tiefentladung. Auch sie können bei Beschädigung, Kurzschluss oder Fehlbehandlung brennen. Es ist Ihre Aufgabe, den Ladezustand und die Zellspannungen zu überwachen und die vom Hersteller vorgegebenen Spannungsgrenzen einzuhalten. Tiefentladung kann Akkus dauerhaft beschädigen und ein späteres Wiederaufladen gefährlich machen.
Fliegen erfordert Übung, insbesondere zu Beginn. Bestimmen Sie einen Piloten im Team, der Interesse und Talent mitbringt. Dieser sollte vor den ersten Flugversuchen mehrere Stunden mit einem Simulator üben. Das gilt auch für Flüge in der Halle. Unzureichend vorbereitete Flugversuche können Personen gefährden und Schäden an der Drohne verursachen, deren Behebung viel Zeit kostet.