Stereo-Tiefenkarten mit OpenCV und Jetson Nano erstellen
Inhaltsverzeichnis
- Einführung
- Der Bau meines DIY-Drohnenprojekts
- Die Herausforderung: Fliegen und Folgen mit künstlicher Intelligenz
- Die Wahl des NVIDIA Jetson Nano für die künstliche Intelligenz
- Das Unboxing des NVIDIA Jetson Nano
- Die Leistung des NVIDIA Jetson Nano
- Einrichten der Stereo-Kamera mit dem Jetson Nano
- Die Berechnung der Tiefenkarte mit OpenCV
- Kalibrieren der Stereo-Kamera
- Erstellen der Tiefenkarte mit den Algorithmen Stereo BM und Stereo SGBM
- Vergleich der Leistung der Algorithmen
- Auswahl des Algorithmen Stereo SGBM
- Weitere Ansätze zur Tiefenkartenberechnung
- Zusammenfassung und Ausblick auf Teil 3
🚁 Video Nummer zwei: Eine DIY-Drohne mit künstlicher Intelligenz
In diesem Video setze ich meine DIY-Drohnenreihe fort und baue eine Drohne auf Basis eines Raspberry Pi. Im Gegensatz zur vorherigen Version möchte ich diesmal jedoch erreichen, dass die Drohne mir autonom folgen kann, und zwar mithilfe von künstlicher Intelligenz. Dies erfordert eine umfangreiche Entwicklung, darunter die Erkennung von Personen im Kamerabild und die Berechnung der Flugroute, um diesen Personen zu folgen. In diesem Video zeige ich, wie ich den Nvidia Jetson Nano einsetze, um die erforderliche Rechenleistung für diese Aufgaben zu erzielen.
Der Bau meines DIY-Drohnenprojekts
Bevor ich in die Details der künstlichen Intelligenz einsteige, möchte ich kurz auf den Bau meiner DIY-Drohne eingehen. Im vorherigen Video habe ich eine Drohne auf Basis eines Raspberry Pi Zero entwickelt, der für die Flugsteuerung zuständig ist. Allerdings reicht die Rechenleistung des Raspberry Pi Zero nicht aus, um die Kameraauswertung und die autonome Flugverfolgung zu bewältigen. Deshalb habe ich mich für den Nvidia Jetson Nano entschieden, um diese Aufgaben zu übernehmen.
Die Wahl des NVIDIA Jetson Nano für die künstliche Intelligenz
Der Nvidia Jetson Nano ist ein leistungsstarker Single-Board-Computer, der speziell für KI-Anwendungen entwickelt wurde. Trotz seiner geringen Größe bietet er erstaunliche Rechenleistung und ist mit seinen fünf Watt äußerst energieeffizient. Im Vergleich zu meinem alten Raspberry Pi ist der Jetson Nano deutlich kompakter und bietet dennoch die benötigte Leistung für mein Projekt.
Das Unboxing des NVIDIA Jetson Nano
Das Unboxing des Nvidia Jetson Nano ist eine spannende Angelegenheit. Das kleine Gerät passt problemlos in meine HAND und ist deutlich kleiner als meine alten Raspberry Pi Boards. Es besteht größtenteils aus der Entwicklerplatine und einer angeschlossenen Kühlung. Obwohl diese Version des Jetson Nano als Entwicklungskit gilt, ist der Großteil der Hardware in dieser kleinen Platine integriert. Ich bin gespannt, was dieser kleine Computer kann und freue mich darauf, ihn auszuprobieren.
Die Leistung des NVIDIA Jetson Nano
Ein großer Vorteil des Nvidia Jetson Nano ist seine beeindruckende Leistung. Obwohl er so klein ist, kann er komplexe KI-Anwendungen problemlos bewältigen. Mit nur fünf Watt Energieverbrauch wirkt sich sein Betrieb auch kaum auf die Flugzeit der Drohne aus, wenn er an den Batteriestrom angeschlossen ist. Ich habe mich dafür entschieden, meine Stereo-Kamera mit dem Jetson Nano zu verbinden, um eine Tiefenkarte zu erstellen. Damit kann die Drohne die Entfernungen zu Objekten einschätzen und autonom fliegen.
Einrichten der Stereo-Kamera mit dem Jetson Nano
Um die Tiefenkarte zu generieren, muss ich meine Stereo-Kamera mit dem Jetson Nano verbinden. Dazu habe ich mein Entwicklungssystem mit einem Monitor und einer Bluetooth-Tastatur eingerichtet, um meinen Code direkt auf dem Jetson Nano zu schreiben. Obwohl ich normalerweise meinen MacBook zum Entwickeln verwende, ist die direkte Programmierung auf dem Jetson Nano deutlich schneller und effizienter. Natürlich habe ich beim Experimentieren die thermischen Grenzen des Nano überschritten und ihn dazu gebracht, sich mehrmals neu zu starten. Aber er hat sich als äußerst widerstandsfähig erwiesen.
Die Berechnung der Tiefenkarte mit OpenCV
Um die Tiefenkarte zu generieren, habe ich mich für OpenCV entschieden, eine beeindruckende Computer-Vision-Bibliothek, die für solche Aufgaben entwickelt wurde. Vorher musste ich jedoch meine Stereo-Kamera kalibrieren, da Kameras oft Verzerrungen in den aufgenommenen Bildern verursachen, die bei der Bildverarbeitung zu Fehlern führen können. Mit Hilfe der Kalibrierungsfunktion von OpenCV konnte ich die Verzerrungen berechnen und korrigieren.
Kalibrieren der Stereo-Kamera
Die Kalibrierung meiner Stereo-Kamera war ein wichtiger Schritt, um korrekte Tiefenkarten zu generieren. Hierfür habe ich viele Fotos mit einem Schachbrettmuster aufgenommen und diese Fotos dann der Kalibrierungsfunktion von OpenCV übergeben. Dadurch erhielt ich eine Matrix, die die Verzerrungen der Kamera beschreibt und zur Korrektur verwendet werden kann. Mit dieser kalibrierten Stereo-Kamera konnte ich nun die Tiefenkarte berechnen.
Erstellen der Tiefenkarte mit den Algorithmen Stereo BM und Stereo SGBM
Um die Tiefenkarte zu erstellen, habe ich zwei Algorithmen in OpenCV verwendet: Stereo BM und Stereo SGBM. Stereo BM ist der schnellere der beiden und basiert auf einer Block-Matching-Technik, bei der Blöcke von Pixeln im linken Bild mit entsprechenden Blöcken im rechten Bild verglichen werden. Dabei wird der Abstand zwischen den passenden Blöcken als Disparitätswert berechnet. Stereo SGBM hingegen verwendet eine semiglobale Block-Matching-Technik und liefert präzisere Tiefenkarten. Beide Algorithmen geben jedoch Disparitätswerte anstelle von Tiefenwerten aus.
Vergleich der Leistung der Algorithmen
Um die Leistung der beiden Algorithmen zu vergleichen, habe ich sie auf meiner Hardware getestet. Bei einer Auflösung von 640 x 480 habe ich die Geschwindigkeit durch Herunterrechnen der Bilddaten halbiert, um eine bessere Echtzeitnutzung zu ermöglichen. Nachdem ich beide Algorithmen getestet hatte, entschied ich mich aufgrund der Genauigkeit und der Geschwindigkeit für Stereo SGBM.
Auswahl des Algorithmen Stereo SGBM
Stereo SGBM hat sich als die beste Wahl für mein Drohnenprojekt erwiesen, da es präzise Tiefenkarten liefert und sogar schneller als der OpenCV-Standardalgorithmus auf dem Jetson Nano ist. Wenn Sie selbst mit dem Jetson Nano und der Tiefenkartenerstellung experimentieren möchten, finden Sie in der Video-Beschreibung einen Link zu meinem Python-Code.
Weitere Ansätze zur Tiefenkartenberechnung
Natürlich gibt es auch noch andere Ansätze zur Berechnung von Tiefenkarten. Ich habe mich auch mit der Verwendung eines neuronalen Netzwerks für die Schätzung von Tiefenwerten und mit der Verwendung einer dedizierten Tiefenkamera wie der Intel RealSense D435 befasst. Aufgrund der Verfügbarkeit und der Lieferzeiten habe ich mich jedoch für den Jetson Nano und OpenCV entschieden. Wenn Sie selbst mit Tiefenkarten experimentieren möchten, empfehle ich Ihnen, verschiedene Ansätze zu untersuchen und den für Ihre Anforderungen besten zu wählen.
Zusammenfassung und Ausblick auf Teil 3
In diesem Video habe ich gezeigt, wie ich den Nvidia Jetson Nano für die Berechnung von Tiefenkarten mit einer Stereo-Kamera verwendet habe. Mit Hilfe der Algorithmen in OpenCV konnte ich präzise Tiefenkarten erstellen und somit die Entfernungen zu Objekten ermitteln. Im nächsten Video werde ich darauf eingehen, wie ich den Jetson Nano beibringe, Personen zu erkennen, damit die Drohne mir autonom folgen kann. Bleiben Sie also gespannt auf Teil 3 meiner DIY-Drohnenreihe.