Sommario:
- Passaggio 1: prepara il tuo hardware
- Passaggio 2: installa i pacchetti necessari
- Passaggio 3: eseguire il codice
- Fase 4: Considerazioni finali
Video: Tutorial per il rilevamento di oggetti con robot quadruplo Jetson Nano: 4 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:02
Nvidia Jetson Nano è un kit per sviluppatori, che consiste in un SoM (System on Module) e una scheda portante di riferimento. È principalmente destinato alla creazione di sistemi embedded che richiedono un'elevata potenza di elaborazione per applicazioni di machine learning, visione artificiale ed elaborazione video. Puoi guardare una recensione dettagliata sul mio canale YouTube.
Nvidia ha cercato di rendere Jetson Nano il più user-friendly e facile da sviluppare con i progetti possibile. Hanno anche lanciato un piccolo corso su come costruire il tuo robot con Jetson Nano, giorni dopo il lancio della scheda. Puoi trovare i dettagli su quel progetto qui.
Tuttavia, io stesso ho avuto alcuni problemi con il Jetbot come progetto:
1) Non era abbastanza EPICO per me. Jetson Nano è una scheda molto interessante con grandi capacità di elaborazione e realizzare un semplice robot su ruote con essa sembrava una cosa molto… deludente da fare.
2) La scelta dell'hardware. Jetbot richiede un hardware costoso/sostituibile con altre alternative, ad esempio utilizzano il joystick per la teleoperazione. Sembra divertente, ma ho davvero bisogno di un joystick per controllare un robot?
Quindi, subito dopo aver messo le mani su Jetson Nano, ho iniziato a lavorare al mio progetto, un Jetspider. L'idea era di replicare le demo di base di Jetbot, ma con hardware più comune e applicabile a una più ampia varietà di progetti.
Passaggio 1: prepara il tuo hardware
Per questo progetto ho utilizzato un primo prototipo di robot quadrupede Zuri, realizzato da Zoobotics. È rimasto a lungo nel laboratorio della nostra azienda. L'ho dotato di un supporto in legno tagliato al laser per Jetson Nano e un supporto per fotocamera. Il loro design è proprietario, quindi se per il tuo robot Jetson Nano vuoi creare qualcosa di simile, puoi dare un'occhiata al progetto Meped, che è un quadrupede simile con un design open source. Infatti, poiché nessuno aveva il codice sorgente per il microcontrollore di Zuri (Arduino Mega) nel nostro laboratorio, ho usato il codice di Meped con alcune piccole modifiche nell'offset gambe/piedi.
Ho usato una normale webcam USB compatibile con Raspberry Pi e un dongle USB Wifi.
Il punto principale è che poiché utilizzeremo Pyserial per la comunicazione seriale tra microcontrollore e Jetson Nano, il tuo sistema essenzialmente può utilizzare qualsiasi tipo di microcontrollore, purché possa essere interfacciato con Jetson Nano con cavo seriale USB. Se il tuo robot utilizza motori DC e un driver del motore (ad esempio basato su L298P) è possibile interfacciare direttamente il driver del motore con Jetson Nano GPIO. Ma, sfortunatamente, per controllare i servi puoi usare solo un altro microcontrollore o un servo driver I2C dedicato, poiché Jetson Nano non ha hardware GPIO PWM.
Per riassumere, puoi utilizzare il tipo di robot con qualsiasi microcontrollore che può essere collegato a Jetson Nano tramite cavo dati USB. Ho caricato il codice per Arduino Mega nel repository github per questo tutorial e la parte relativa all'interfacciamento di Jetson Nano con Arduino è qui:
if(Serial.available()) {switch(Serial.read()) {
{
caso 1':
inoltrare();
rottura;
caso '2':
Indietro();
rottura;
caso '3':
Girare a destra();
rottura;
caso '4':
Girare a sinistra();
rottura;
Controlliamo se ci sono dati disponibili e, in caso affermativo, li passiamo alla struttura di controllo switch-case. Attenzione che i dati del seriale vengono forniti come caratteri, notare le virgolette singole attorno ai numeri 1, 2, 3, 4.
Passaggio 2: installa i pacchetti necessari
Fortunatamente per noi, l'immagine di sistema Jetson Nano predefinita viene fornita con molte cose preinstallate (come OpenCV, TensorRT, ecc.), Quindi abbiamo solo bisogno di installare un paio di altri pacchetti per far funzionare il codice e abilitare SSH.
Iniziamo abilitando SSH nel caso tu voglia fare tutto il resto del lavoro da remoto.
sudo apt update
sudo apt install openssh-server
Il server SSH si avvierà automaticamente.
Per connetterti alla tua macchina Ubuntu tramite LAN devi solo inserire il seguente comando:
ssh nomeutente@indirizzo_ip
Se hai una macchina Windows, dovrai installare il client SSH, ad esempio Putty.
Iniziamo installando Python Package Manager (pip) e Pillow per la manipolazione delle immagini.
sudo apt install python3-pip python3-pil
Quindi installeremo il repository Jetbot, poiché ci affidiamo ad alcune parti del suo framework per eseguire il rilevamento degli oggetti.
sudo apt install python3-smbus python-pyserial
git clone
cd jetbot
sudo apt-get install cmake
sudo python3 setup.py install
Infine clona il mio repository Github per questo progetto nella tua cartella home e installa Flask e alcuni altri pacchetti per il controllo remoto del robot utilizzando il server web.
git clone
cd
sudo pip3 install -r requisiti-opencv
Scarica il modello SSD (Single Shot Detector) preaddestrato da questo link e posizionalo nella cartella jetspider_demos.
Ora siamo a posto!
Passaggio 3: eseguire il codice
Ho realizzato due demo per Jetspider, la prima è una semplice teleoperazione, molto simile a quella che ho fatto in precedenza per il rover Banana Pi e la seconda utilizza TensorRT per il rilevamento degli oggetti e invia i comandi di movimento tramite la connessione seriale al microcontrollore.
Poiché la maggior parte del codice di teleoperazione è descritto nell'altro mio tutorial (ho apportato solo alcune modifiche minori, modificando la trasmissione video) qui mi concentrerò sulla parte del rilevamento degli oggetti.
Lo script principale per object following è object_following.py in jetspider_object_following, per teleoperation è spider_teleop.py in jetspider_teleoperation.
Lo script che segue l'oggetto inizia con l'importazione dei moduli necessari e la dichiarazione di variabili e istanze di classe. Quindi avviamo il server Web Flask con questa riga
app.run(host='0.0.0.0', threaded=True)
Non appena apriamo l'indirizzo 0.0.0.0 (localhost) nel nostro browser Web o l'indirizzo Jetson Nano sulla rete (puoi verificare con il comando ifconfig), questa funzione verrà eseguita
def indice():
Rende il modello di pagina web che abbiamo nella cartella dei modelli. Il modello ha una sorgente video incorporata al suo interno, quindi una volta terminato il caricamento, verrà eseguito def video_feed():, che restituisce un oggetto Response che viene inizializzato con la funzione generator.
Il segreto per implementare gli aggiornamenti sul posto (aggiornare l'immagine nella pagina web per il nostro flusso video) è utilizzare una risposta in più parti. Le risposte in più parti sono costituite da un'intestazione che include uno dei tipi di contenuto in più parti, seguito dalle parti, separate da un indicatore di confine e ciascuna con il proprio tipo di contenuto specifico per la parte.
In def gen(): function implementiamo la funzione generator in un ciclo infinito che cattura l'immagine, la invia alla funzione def execute(img):, ottenendo un'immagine da inviare successivamente alla pagina web.
def execute(img): la funzione è dove avviene tutta la magia, prende un'immagine, la ridimensiona con OpenCV e la passa all'istanza di classe Jetbot ObjectDetector "model". Restituisce restituisce l'elenco dei rilevamenti e usiamo OpenCV per disegnare rettangoli blu attorno ad essi e scrivere annotazioni con la classe dell'oggetto rilevato. Dopodiché controlliamo se c'è un oggetto di nostro interesse detectmatching_detections = [d for d in rilevamenti[0] if d['label'] == 53]
Puoi cambiare quel numero (53) in un altro numero dal set di dati CoCo se vuoi che il tuo robot segua altri oggetti, 53 è una mela. L'intero elenco è nel file categorie.py.
Infine, se non viene rilevato alcun oggetto per 5 secondi, trasmettiamo il carattere "5" affinché il robot si fermi sul seriale. Se l'oggetto viene trovato calcoliamo la distanza dal centro dell'immagine e agiamo di conseguenza (se vicino al centro, vai dritto (carattere "1" sul seriale), se a sinistra vai a sinistra, ecc.). Puoi giocare con quei valori per determinare il meglio per il tuo particolare setup!
Fase 4: Considerazioni finali
Questo è il succo della demo di ObjectFollowing, se vuoi saperne di più sullo streaming video del server web Flask, puoi dare un'occhiata a questo fantastico tutorial di Miguel Grinberg.
Puoi anche dare un'occhiata al notebook Nvidia Jetbot Object Detection qui.
Spero che le mie implementazioni delle demo Jetbot ti aiutino a costruire il tuo robot utilizzando il framework Jetbot. Non ho implementato la demo per evitare gli ostacoli, poiché penso che la scelta del modello non produrrà buoni risultati per evitare gli ostacoli.
Aggiungimi su LinkedId se hai qualche domanda e iscriviti al mio canale YouTube per ricevere notifiche su progetti più interessanti che coinvolgono l'apprendimento automatico e la robotica.
Consigliato:
Programmazione orientata agli oggetti: creazione di oggetti Metodo/tecnica di apprendimento/insegnamento utilizzando Shape Puncher: 5 passaggi
Programmazione orientata agli oggetti: creazione di oggetti Metodo/tecnica di apprendimento/insegnamento utilizzando Shape Puncher: metodo di apprendimento/insegnamento per studenti nuovi alla programmazione orientata agli oggetti. Questo è un modo per consentire loro di visualizzare e vedere il processo di creazione di oggetti dalle classi.Parti:1. EkTools punzone grande da 2 pollici; le forme solide sono le migliori.2. Pezzo di carta o c
Cursore della telecamera di rilevamento degli oggetti con asse di rotazione. Stampato in 3D e costruito su RoboClaw DC Motor Controller e Arduino: 5 passaggi (con immagini)
Cursore della telecamera di rilevamento degli oggetti con asse di rotazione. Stampato in 3D e costruito sul RoboClaw DC Motor Controller e Arduino: questo progetto è stato uno dei miei progetti preferiti da quando ho avuto modo di combinare il mio interesse per la creazione di video con il fai-da-te. Ho sempre guardato e voluto emulare quegli scatti cinematografici nei film in cui una telecamera si muove su uno schermo mentre fa una panoramica per tracciare
Robot di Halloween con rilevamento del volto e rilevamento del sorriso: 8 passaggi (con immagini)
Monitoraggio del viso e rilevamento del sorriso Robot di Halloween: Halloween sta arrivando! Abbiamo deciso di costruire qualcosa di interessante. Incontra i robot Ghosty e Skully. Possono seguire il tuo viso e sanno quando sorridi per ridere con te! Questo progetto è un altro esempio dell'utilizzo dell'app iRobbie che converte l'iPhone in
Programmazione orientata agli oggetti: creazione di oggetti Metodo/tecnica di apprendimento/insegnamento con le forbici: 5 passaggi
Programmazione orientata agli oggetti: creazione di oggetti Metodo/tecnica di apprendimento/insegnamento Utilizzo delle forbici: metodo di apprendimento/insegnamento per studenti nuovi alla programmazione orientata agli oggetti. Questo è un modo per consentire loro di visualizzare e vedere il processo di creazione di oggetti dalle classi. Parti: 1. Forbici (va bene qualsiasi tipo). 2. Pezzo di carta o cartoncino. 3. Indicatore
Rilevamento di oggetti visivi con una fotocamera (TfCD): 15 passaggi (con immagini)
Visual Object Detection With a Camera (TfCD): i servizi cognitivi in grado di riconoscere emozioni, volti di persone o semplici oggetti sono attualmente ancora in una fase iniziale di sviluppo, ma con l'apprendimento automatico questa tecnologia si sta sviluppando sempre più. Possiamo aspettarci di vedere più di questa magia in