Inhaltsverzeichnis:
- Schritt 1: Bereiten Sie Ihre Hardware vor
- Schritt 2: Installieren Sie die erforderlichen Pakete
- Schritt 3: Führen Sie den Code aus
- Schritt 4: Letzte Gedanken
Video: Jetson Nano Quadruped Robot Object Detection Tutorial - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:19
Nvidia Jetson Nano ist ein Entwicklerkit, das aus einem SoM (System on Module) und einem Referenzträgerboard besteht. Es ist in erster Linie darauf ausgerichtet, eingebettete Systeme zu erstellen, die eine hohe Rechenleistung für maschinelles Lernen, maschinelles Sehen und Videoverarbeitungsanwendungen benötigen. Eine ausführliche Rezension dazu könnt ihr euch auf meinem YouTube-Kanal anschauen.
Nvidia hat versucht, Jetson Nano so benutzerfreundlich und einfach wie möglich zu gestalten. Sie haben sogar einen kleinen Kurs darüber gestartet, wie Sie Ihren Roboter mit Jetson Nano bauen, Tage nach der Einführung des Boards. Details zu diesem Projekt finden Sie hier.
Allerdings hatte ich selbst ein paar Probleme mit dem Jetbot als Projekt:
1) Es war mir nicht EPIC genug. Jetson Nano ist ein sehr interessantes Board mit großartigen Verarbeitungsmöglichkeiten und einen einfachen Roboter mit Rädern daraus zu machen, schien einfach eine sehr … enttäuschende Sache zu sein.
2) Die Hardware-Auswahl. Jetbot erfordert einige Hardware, die teuer ist / durch andere Alternativen ersetzt werden kann - zum Beispiel verwenden sie Joystick für die Teleoperation. Klingt nach Spaß, aber brauche ich wirklich einen Joystick, um einen Roboter zu steuern?
Sofort nachdem ich Jetson Nano in die Finger bekommen hatte, begann ich mit der Arbeit an meinem eigenen Projekt, einem Jetspider. Die Idee war, grundlegende Demos zu replizieren, die Jetbot hatte, jedoch mit gängigerer Hardware und auf eine größere Vielfalt von Projekten anwendbar.
Schritt 1: Bereiten Sie Ihre Hardware vor
Für dieses Projekt habe ich einen frühen Prototyp des Zuri-Vierbeinroboters verwendet, der von Zoobotics hergestellt wurde. Es lag lange Zeit im Labor unserer Firma herum. Ich habe es mit einer lasergeschnittenen Holzhalterung für Jetson Nano und einer Kamerahalterung ausgestattet. Ihr Design ist proprietär. Wenn Sie also für Ihren Jetson Nano-Roboter etwas Ähnliches erstellen möchten, können Sie sich das Meped-Projekt ansehen, das ein ähnlicher Vierbeiner mit einem Open-Source-Design ist. Da niemand den Quellcode für Zuris Mikrocontroller (Arduino Mega) in unserem Labor hatte, habe ich den Code von Meped mit einigen geringfügigen Anpassungen im Bein-/Fußversatz verwendet.
Ich habe eine normale USB Raspberry Pi-kompatible Webcam und einen Wifi-USB-Dongle verwendet.
Der Hauptpunkt ist, dass Ihr System, da wir Pyserial für die serielle Kommunikation zwischen Mikrocontroller und Jetson Nano verwenden werden, im Wesentlichen jede Art von Mikrocontroller verwenden kann, solange es über ein serielles USB-Kabel mit Jetson Nano verbunden werden kann. Wenn Ihr Roboter Gleichstrommotoren und einen Motortreiber (zum Beispiel L298P-basiert) verwendet, ist es möglich, den Motortreiber direkt mit Jetson Nano GPIO zu verbinden. Aber leider können Sie zur Steuerung von Servos nur einen anderen Mikrocontroller oder einen dedizierten I2C-Servotreiber verwenden, da Jetson Nano kein Hardware-GPIO-PWM hat.
Zusammenfassend lässt sich sagen, dass Sie einen Robotertyp mit jedem Mikrocontroller verwenden können, der über ein USB-Datenkabel mit Jetson Nano verbunden werden kann. Ich habe den Code für Arduino Mega für dieses Tutorial in das Github-Repository hochgeladen und der Teil, der für die Anbindung von Jetson Nano an Arduino relevant ist, ist hier:
if(Serial.available()) {switch(Serial.read()) {
{
Fall 1':
nach vorne();
brechen;
Fall '2':
zurück();
brechen;
Fall '3':
Biegen Sie rechts ab();
brechen;
Fall '4':
Biegen Sie links ab();
brechen;
Wir prüfen, ob Daten verfügbar sind, und geben sie gegebenenfalls an die Schaltkasten-Kontrollstruktur weiter. Achten Sie darauf, dass Daten aus der Serie als Zeichen vorliegen, beachten Sie die einfachen Anführungszeichen um die Zahlen 1, 2, 3, 4.
Schritt 2: Installieren Sie die erforderlichen Pakete
Zum Glück für uns enthält das standardmäßige Jetson Nano-Systemabbild eine Menge vorinstallierter Dinge (wie OpenCV, TensorRT usw.), sodass wir nur ein paar andere Pakete installieren müssen, damit der Code funktioniert und SSH aktiviert wird.
Beginnen wir mit der Aktivierung von SSH, falls Sie den Rest der Arbeit aus der Ferne erledigen möchten.
sudo apt-Update
sudo apt install openssh-server
Der SSH-Server wird automatisch gestartet.
Um sich über LAN mit Ihrem Ubuntu-Rechner zu verbinden, müssen Sie nur den folgenden Befehl eingeben:
Wenn Sie einen Windows-Rechner haben, müssen Sie einen SSH-Client installieren, zum Beispiel Putty.
Beginnen wir mit der Installation von Python Package Manager (pip) und Pillow für die Bildbearbeitung.
sudo apt installieren python3-pip python3-pil
Dann installieren wir das Jetbot-Repository, da wir uns auf einige Teile seines Frameworks verlassen, um die Objekterkennung durchzuführen.
sudo apt installieren python3-smbus python-pyserial
git-Klon
CD-Jetbot
sudo apt-get install cmake
sudo python3 setup.py installieren
Klonen Sie schließlich mein Github-Repository für dieses Projekt in Ihren Home-Ordner und installieren Sie Flask und einige andere Pakete für die Fernbedienung des Roboters über den Webserver.
git-Klon
CD
sudo pip3 install -r anforderungen-opencv
Laden Sie das vortrainierte SSD-Modell (Single Shot Detector) von diesem Link herunter und legen Sie es im Ordner jetspider_demos ab.
Jetzt können wir loslegen!
Schritt 3: Führen Sie den Code aus
Ich habe zwei Demos für Jetspider gemacht, die erste ist eine einfache Teleopration, sehr ähnlich der, die ich zuvor für den Banana Pi Rover gemacht habe und die zweite verwendet TensorRT zur Objekterkennung und sendet die Bewegungsbefehle über die serielle Verbindung an den Mikrocontroller.
Da der größte Teil des Teleopration-Codes in meinem anderen Tutorial beschrieben ist (ich habe nur einige kleinere Optimierungen vorgenommen, die Videoübertragung angepasst), konzentriere ich mich hier auf den Teil der Objekterkennung.
Das Hauptskript für die Objektverfolgung ist object_following.py in jetspider_object_following, für Teleoperation ist spider_teleop.py in jetspider_teleoperation.
Das dem Objekt folgende Skript beginnt mit dem Importieren der erforderlichen Module und der Deklaration von Variablen und Klasseninstanzen. Dann starten wir den Flask-Webserver mit dieser Zeile
app.run(host='0.0.0.0', threaded=True)
Sobald wir die 0.0.0.0(localhost)-Adresse in unserem Webbrowser oder die Jetson Nano-Adresse im Netzwerk öffnen (kann mit dem Befehl ifconfig überprüfen), wird diese Funktion ausgeführt
def-index():
Es rendert die Webseitenvorlage, die wir im Vorlagenordner haben. Die Vorlage hat eine eingebettete Videoquelle, so dass nach dem Laden def video_feed(): ausgeführt wird, das ein Response-Objekt zurückgibt, das mit der Generatorfunktion initialisiert wird.
Das Geheimnis der Implementierung von In-Place-Updates (Aktualisierung des Bildes auf der Webseite für unseren Videostream) besteht darin, eine mehrteilige Antwort zu verwenden. Mehrteilige Antworten bestehen aus einem Header, der einen der mehrteiligen Inhaltstypen enthält, gefolgt von den Teilen, die durch eine Begrenzungsmarkierung getrennt sind und jeweils einen eigenen teilspezifischen Inhaltstyp aufweisen.
In der Funktion def gen(): implementieren wir die Generatorfunktion in einer Endlosschleife, die das Bild erfasst, an die Funktion def execute(img): sendet, wodurch ein Bild entsteht, das danach an die Webseite gesendet wird.
def execute(img): Funktion ist der Ort, an dem die ganze Magie passiert, sie nimmt ein Bild auf, ändert die Größe mit OpenCV und übergibt es an die Jetbot ObjectDetector-Klasseninstanz "model". Es gibt die Liste der Erkennungen zurück und wir verwenden OpenCV, um blaue Rechtecke um sie herum zu zeichnen und Anmerkungen mit der Objekterkennungsklasse zu schreiben. Danach prüfen wir, ob es ein Objekt von unserem Interesse gibt detectmatching_detections = [d for d in detections[0] if d['label'] == 53]
Sie können diese Nummer (53) in eine andere Nummer aus dem CoCo-Datensatz ändern, wenn Ihr Roboter anderen Objekten folgen soll, 53 ist ein Apfel. Die gesamte Liste befindet sich in der Datei Categories.py.
Wenn schließlich 5 Sekunden lang kein Objekt erkannt wird, senden wir das Zeichen "5" für den Roboter, um über die Serie anzuhalten. Wenn ein Objekt gefunden wird, berechnen wir, wie weit es vom Zentrum des Bildes entfernt ist und handeln entsprechend (wenn es nahe am Zentrum ist, gehen Sie geradeaus (Zeichen "1" in der Serie), wenn es links ist, gehen Sie nach links usw.). Sie können mit diesen Werten spielen, um das Beste für Ihr spezielles Setup zu bestimmen!
Schritt 4: Letzte Gedanken
Dies ist der Kern der ObjectFollowing-Demo. Wenn Sie mehr über Flask-Webserver-Videostreaming erfahren möchten, können Sie sich dieses großartige Tutorial von Miguel Grinberg ansehen.
Sie können sich hier auch das Notebook zur Nvidia Jetbot Object Detection ansehen.
Ich hoffe, dass meine Implementierungen von Jetbot-Demos dazu beitragen, Ihren Roboter mit dem Jetbot-Framework zu bauen. Ich habe keine Hindernisvermeidungs-Demo implementiert, da ich denke, dass die Wahl des Modells keine guten Ergebnisse zur Hindernisvermeidung liefert.
Fügen Sie mich auf LinkedId hinzu, wenn Sie Fragen haben, und abonnieren Sie meinen YouTube-Kanal, um über weitere interessante Projekte im Bereich Machine Learning und Robotik informiert zu werden.
Empfohlen:
AVR Assembler Tutorial 2: 4 Schritte
AVR Assembler Tutorial 2: Dieses Tutorial ist eine Fortsetzung von "AVR Assembler Tutorial 1" Wenn Sie Tutorial 1 noch nicht durchlaufen haben, sollten Sie jetzt aufhören und das zuerst tun. In diesem Tutorial werden wir unser Studium der Assemblersprachprogrammierung des atmega328p u
AVR Assembler Tutorial 1: 5 Schritte
AVR Assembler Tutorial 1: Ich habe beschlossen, eine Reihe von Tutorials zum Schreiben von Assemblerprogrammen für den Atmega328p, den Mikrocontroller des Arduino, zu schreiben. Wenn die Leute interessiert bleiben, werde ich weiterhin eine Woche oder so veröffentlichen, bis ich keine mehr habe
AVR-Assembler-Tutorial 6: 3 Schritte
AVR Assembler Tutorial 6: Willkommen bei Tutorial 6!Das heutige Tutorial wird kurz sein, in dem wir eine einfache Methode entwickeln, um Daten zwischen einem atmega328p und einem anderen über zwei Ports zu übertragen, die sie verbinden. Wir nehmen dann den Würfelroller aus Tutorial 4 und das Register
AVR-Assembler-Tutorial 8: 4 Schritte
AVR Assembler Tutorial 8: Willkommen zu Tutorial 8!In diesem kurzen Tutorial werden wir eine kleine Ablenkung von der Einführung neuer Aspekte der Assemblerprogrammierung nehmen, um zu zeigen, wie unsere Prototyping-Komponenten in eine separate "gedruckte" Leiterplatte. Die
Auspacken von Jetson Nano & ein Schnellstart für die Two Vision Demo – wikiHow
Auspacken von Jetson Nano & ein Quick Start-Up für Two Vision Demo: ZusammenfassungWie Sie wissen, ist Jetson Nano jetzt ein Starprodukt. Und es kann neuronale Netzwerktechnologie umfassend für eingebettete Systeme bereitstellen. Hier ist ein Unboxing-Artikel mit Details zum Produkt, dem Startvorgang und zwei visuellen Demos … Wortzahl: 800