NVIDIA Jetson Nano: Spurerkennung und -verfolgung

Zachariah Peterson
|  Erstellt: April 9, 2020  |  Aktualisiert am: März 23, 2021
Tarnkappenflugzeuge und Quantenradar

Autonome Fahrzeuge werden langsam zu einem wichtigen Teil der Automobilindustrie. Viele glauben, dass vollständig autonome Fahrzeuge bald neben Menschen fahren werden, und Technologieunternehmen befinden sich in einem Wettlauf, um vollständig autonome Fahrzeuge einzusetzen. Im Dezember 2018 hat Waymo, das Unternehmen, das aus Googles Projekt für selbstfahrende Autos hervorgegangen ist, offiziell seinen kommerziellen Dienst für selbstfahrende Autos in den Vororten von Phoenix gestartet. Unternehmen wie May Mobility, Drive.ai und Uber folgen dem gleichen Weg.

Autonome Fahrzeuge mögen wie eine großartige Vision erscheinen, aber semi-autonome Fahrzeuge sind bereits unter uns. Neue Tesla-Autos verfügen über die Tesla-Autopilot-Funktion, die in der Lage ist, Spurerkennung und -verfolgung, adaptive Geschwindigkeitsregelung und Selbstparken durchzuführen. Die Fähigkeit, Fahrspuren auf der Straße zu identifizieren und zu verfolgen, ist eine von vielen Voraussetzungen für fahrerlose Fahrzeuge. Obwohl die Spurerkennung wie ein schwieriges Problem erscheinen mag, können Sie mit der Entwicklung von Algorithmen zur Spurerkennung und -verfolgung auf der Hardwareplattform NVIDIA Jetson Nano beginnen.

Einführung in Jetson Nano

Das Jetson Nano COM ist etwas größer als ein Raspberry Pi 3, kann aber parallele neuronale Netzwerke mit 472 Gflops Leistung betreiben. Das ist etwa 22x leistungsfähiger als der Raspberry Pi 3 und dabei sehr energieeffizient, mit einem Verbrauch von nur 5 W. Dieses Board eignet sich perfekt für eingebettete KI-Anwendungen, die auf einem abgespeckten Linux-Kernel laufen. Es verfügt über genügend Rechenleistung und On-Board-Speicher für hochwertige Bild- und Videoverarbeitungsanwendungen. Zu den Schlüsselfunktionen von Jetson Nano gehören:

  • GPU: 128-Kern NVIDIA Maxwell™ Architektur-basierte GPU
  • CPU: Quad-Core ARM® A57
  • Kamera: MIPI CSI-2 DPHY Lanes, 12x (Modul) und 1x (Entwicklerkit)
  • Speicher: 4 GB 64-Bit LPDDR4; 25,6 Gigabyte/Sekunde
  • Konnektivität: Gigabit Ethernet
  • Betriebssystemunterstützung: Linux für Tegra®
  • Modulgröße: 70mm x 45mm
  • Das Entwicklerkit ist ein großartiges Werkzeug zum Testen eines neuen Algorithmus für Computer Vision/Bildverarbeitungsanwendungen. Wenn Sie nicht mit der Jetson Nano Plattform vertraut sind, schauen Sie sich diesen Artikel an. Andernfalls lesen Sie weiter, um zu sehen, wie Sie einfach eine leistungsfähige Bildverarbeitungsanwendung für die Spurerkennung einsetzen können.
Developer kit for NVIDIA Jetson Nano
NVIDIA Jetson Nano Entwicklerkit. [Image source]

Spurerkennung mit Jetson Nano

Für dieses Projekt benötigen wir ein Jetson Nano COM oder Entwicklerboard und eine CSI-Kamera (eine Raspberry Pi CSI Kamera v2 funktioniert gut). Ich werde diese Anwendung unter Verwendung des Nano Entwicklerboards zeigen, aber Sie können problemlos eine benutzerdefinierte Basisplatine für ein Nano COM erstellen und diese Anwendung darauf ausführen. Die CSI-Kamera wird mit dem Kameraport am Jetson Nano verbunden, obwohl Sie auch eine USB-Kamera oder IP-Kameras verwenden könnten. Unten sind die notwendigen Anforderungen aufgeführt, um dieses Projekt erfolgreich umzusetzen:

Hardware

  • NVIDIA Jetson Nano
  • CSI Kamera

Softwarepakete

  • Python
  • OpenCV
  • Nanocamera

Implementierung

Die vollständige Implementierung für dieses Projekt finden Sie auf GitHub. Folgen Sie den kommenden Schritten, um eine Demo dieses Projekts in Betrieb zu nehmen. Diese Schritte sind wichtige Bildverarbeitungsschritte, die dazu dienen, die Spurerkennung genauer zu machen.

Wahrnehmung

Der erste Schritt unseres Spurerkennungssystems besteht darin, Live-Bilder von der Kamera lesen zu können. Für neue Benutzer, die mit dem Jetson Nano arbeiten, könnte die Arbeit mit den Kameras knifflig sein. Dafür werden wir die NanoCamera-Bibliothek verwenden. Diese Bibliothek ist nicht die beste Option für eine produktionsreife Anwendung, aber sie funktioniert für eine einfachere Anwendung, wie sie hier gezeigt wird.

Zuerst installieren Sie die Bibliothek mit pip:

.

Das Live-Bild von der Kamera lesen:

.

Rauschen mit Unschärfe entfernen

Um das Bild glatter zu machen und unerwünschtes Rauschen zu entfernen, können wir einen Gaußschen Weichzeichner anwenden. Dies beinhaltet die Berechnung des Wertes jedes Pixels als gewichteten Durchschnitt der umgebenden Pixel.

Gaussian blur algorithm for lane recognition
Gaußscher Weichzeichnungsalgorithmus zur Bildglättung. [Bildquelle]

OpenCV beinhaltet eine Funktion, um einen Gaußschen Weichzeichner auf ein Bild anzuwenden:

.

Farbtransformation

Nach dem Gaußschen Weichzeichner ist das Bild immer noch in RGB und muss in den HSV-Farbraum transformiert werden. Farbtrennung wird verwendet, um unerwünschte Farben aus dem Bild zu entfernen. Sobald das Bild in HSV ist, können wir alle unnötigen Farben aus dem Bild "heben", indem wir einen Graustufenbereich angeben.

.

Morphologische Operationen - Dilatation

Dilatation fügt den Grenzen von Objekten in einem Bild Pixel hinzu. Die Anwendung der Dilatation auf das Bild hilft, lose Räume in den Linienbildern zu schließen.

.

Canny (Kantenerkennung)

Um Fahrspurlinien zu erkennen, können wir eine Technik namens Canny-Kantenerkennung verwenden. Die Canny-Kantenerkennung kann verwendet werden, um nützliche strukturelle Informationen aus einem Objekt zu extrahieren. Die OpenCV-Bibliothek bietet eine Canny-Kantenerkennungsfunktion, die verwendet werden kann, um Kanten in einem Bild zu erkennen. Damit die Canny-Erkennung funktioniert, müssen wir minimale und maximale Schwellenwerte angeben. OpenCV empfiehlt normalerweise den Wert (100, 200) oder (200, 400), daher verwenden wir (200, 400).

.
Canny edge detection applied to a camera image
Bild mit Canny-Kantenerkennung. Beachten Sie die im Bild gezeigten Spuren.

Interessensbereich isolieren

Das Canny-Kanten-Ausgangsbild enthält etwas Rauschen. Alle Informationen außer den Fahrspuren im Bild können isoliert werden, indem der Interessensbereich reduziert wird. Bei der Fahrspurerkennung und -navigation müssen wir nicht unbedingt das gesamte Bild sehen. Eine einfache Möglichkeit, dies zu tun, besteht darin, einfach die obere Hälfte des Bildes auszuschneiden.

ROI reduction for lane recognition
Originalbild (links) und Bild mit beschnittenem Interessenbereich (rechts).

Der Code zur Reduzierung des Interessensbereichs lautet:

.

Linienabschnitte erkennen - Hough-Linien

Nachdem der Bereich von Interesse reduziert wurde, sind die Fahrspuren mit vier deutlichen Linien klar sichtbar. Der Computer weiß jedoch nicht, dass diese Linien die Grenzen von zwei Fahrspuren darstellen. Daher benötigen wir eine Methode, um die Koordinaten für diese Fahrspurlinien zu extrahieren. Eine Hough-Transformation ist eine Technik, die in der Bildverarbeitung verwendet wird, um Merkmale wie Linien, Kreise und Ellipsen zu extrahieren. Sie kann verwendet werden, um gerade Linien aus einer Anzahl von Pixeln zu finden, die scheinbar eine Linie bilden. Dies kann mit der Funktion HoughLinesP in OpenCV durchgeführt werden. Die Funktion passt viele Linien durch alle weißen Pixel und gibt das wahrscheinlichste Set von Linien zurück, unterliegt dabei jedoch einigen Mindestschwellenwert-Beschränkungen.

Lines found during lane recognition
Linienerkennung mit angewandter Hough-Transformation.

Hier ist unser Code, der Liniensegmente mit einer Hough-Transformation erkennt. Die meisten hier verwendeten Parameter können durch Versuch und Irrtum oder durch Auswahl von Parametern aus Referenzbildern bestimmt werden.

.

Liniensegmente zu zwei Fahrspurlinien kombinieren

Die Ausgabe der Funktion detect_line_segments() produziert eine Reihe von kleinen Linien mit Endpunktkoordinaten (x1, y1) und (x2, y2). Wir müssen einen Weg finden, sie zu nur zwei Linien für linke und rechte Fahrspurlinien zu kombinieren, aber wie erreichen wir das? Eine Möglichkeit ist, diese Liniensegmente nach ihren Steigungen zu klassifizieren.

Alle linken Fahrspurlinien haben eine positive Steigung, und die Liniensegmente, die zur rechten Fahrspur gehören, haben eine negative Steigung. Basierend auf diesen zwei neuen Gruppen können wir den Durchschnitt der Steigungen und Schnittpunkte der Liniensegmente nehmen, um die Steigungen und Schnittpunkte der linken und rechten Fahrspurlinien zu erhalten. Dies wird mit der Funktion average_slope_intercept() implementiert:

..

Die Funktion make_points() ist eine Hilfsfunktion für die average_slope_intercept() Funktion, die die Steigung und den Schnittpunkt einer Linie nimmt und die Endpunkte des Liniensegments zurückgibt. An diesem Punkt haben wir nun die Fahrspurlinien!

Was als Nächstes kommt

An diesem Punkt würde die Ausgabe dieser Funktion als Eingabe für einen anderen Algorithmus dienen, um die Geschwindigkeit und Fahrtrichtung des Fahrzeugs zu steuern. Um dies zu tun, kann ein Lenkwinkel aus den erkannten Fahrspurlinien berechnet und dann an einen PID-Regler weitergegeben werden, um den Lenkwinkel zu minimieren und das Fahrzeug zentriert zu halten.

Obwohl dies mit einem Nano-Entwicklungsboard durchgeführt wurde, bietet derselbe Code einen Ausgangspunkt für die Implementierung eines Systems in einem eingebetteten Bildverarbeitungssystem für eine Produktionsumgebung. Um dies zu tun, müssen Sie eine echte Basisplatine für den Jetson Nano bauen. Dies ist am einfachsten, wenn Sie die modularen Elektronik-Designwerkzeuge in der Upverter Board Builder-Anwendung verwenden. Durch einen modularen Ansatz können Sie leicht eine Basisplatine für einen Jetson Nano, Kameras und andere Sensoren für die Spurerkennung anpassen.

Die modularen Elektronik-Designwerkzeuge in Upverter geben Ihnen Zugang zu einer breiten Palette von branchenüblichen COMs und beliebten Modulen, ohne neue Software herunterladen oder installieren zu müssen. Sie können Produktions-Hardware für eine Vielzahl von Anwendungen erstellen, einschließlich Spurerkennung und anderen Bildverarbeitungsaufgaben mit Jetson Nano, indem Sie eine Drag-and-Drop-Benutzeroberfläche verwenden. Wenn Ihr System zusätzliche Funktionalitäten benötigt, können Sie drahtlose Konnektivität, ein Array von Sensoren und vieles mehr einbeziehen.

Werfen Sie einen Blick auf einige Gumstix-Kundenerfolgsgeschichten oder kontaktieren Sie uns heute, um mehr über unsere Produkte, Designwerkzeuge und Dienstleistungen zu erfahren.

Über den Autor / über die Autorin

Über den Autor / über die Autorin

Zachariah Peterson verfügt über einen umfassenden technischen Hintergrund in Wissenschaft und Industrie. Vor seiner Tätigkeit in der Leiterplattenindustrie unterrichtete er an der Portland State University. Er leitete seinen Physik M.S. Forschung zu chemisorptiven Gassensoren und sein Ph.D. Forschung zu Theorie und Stabilität von Zufallslasern. Sein Hintergrund in der wissenschaftlichen Forschung umfasst Themen wie Nanopartikellaser, elektronische und optoelektronische Halbleiterbauelemente, Umweltsysteme und Finanzanalysen. Seine Arbeiten wurden in mehreren Fachzeitschriften und Konferenzberichten veröffentlicht und er hat Hunderte von technischen Blogs zum Thema PCB-Design für eine Reihe von Unternehmen verfasst. Zachariah arbeitet mit anderen Unternehmen der Leiterplattenindustrie zusammen und bietet Design- und Forschungsdienstleistungen an. Er ist Mitglied der IEEE Photonics Society und der American Physical Society.

Ähnliche Resourcen

Zur Startseite
Thank you, you are now subscribed to updates.