Inhoudsopgave:

Jetson Nano Quadruped Robot Objectdetectie Tutorial - Ajarnpa
Jetson Nano Quadruped Robot Objectdetectie Tutorial - Ajarnpa

Video: Jetson Nano Quadruped Robot Objectdetectie Tutorial - Ajarnpa

Video: Jetson Nano Quadruped Robot Objectdetectie Tutorial - Ajarnpa
Video: Jetson Nano Quadruped Robot | Object Detection & Teleoperation 2024, Juni-
Anonim
Image
Image

Nvidia Jetson Nano is een ontwikkelaarskit, die bestaat uit een SoM (System on Module) en een referentiedragerkaart. Het is voornamelijk bedoeld voor het maken van embedded systemen die een hoge verwerkingskracht vereisen voor machine learning, machine vision en videoverwerkingstoepassingen. Je kunt een gedetailleerde recensie ervan bekijken op mijn YouTube-kanaal.

Nvidia heeft geprobeerd om Jetson Nano zo gebruiksvriendelijk en gemakkelijk mogelijk te maken om projecten mee te ontwikkelen. Ze lanceerden zelfs een kleine cursus over het bouwen van je robot met Jetson Nano, dagen nadat het bord werd gelanceerd. De details over dat project vind je hier.

Zelf had ik echter een paar problemen met de Jetbot als project:

1) Het was niet EPIC genoeg voor mij. Jetson Nano is een zeer interessant bord met geweldige verwerkingscapaciteiten en het leek me gewoon een heel … teleurstellend ding om te doen.

2) De hardwarekeuze. Jetbot vereist wat hardware die duur is/kan worden vervangen door andere alternatieven - ze gebruiken bijvoorbeeld een joystick voor telebediening. Klinkt leuk, maar heb ik echt een joystick nodig om een robot te besturen?

Dus meteen nadat ik Jetson Nano in handen had gekregen, begon ik aan mijn eigen project, een Jetspider, te werken. Het idee was om de basisdemo's van Jetbot te repliceren, maar met meer algemene hardware en toepasbaar op een grotere verscheidenheid aan projecten.

Stap 1: Bereid uw hardware voor

Bereid uw hardware voor
Bereid uw hardware voor

Voor dit project heb ik een vroeg prototype van de Zuri viervoeter robot gebruikt, gemaakt door Zoobotics. Het lag lange tijd in het laboratorium van ons bedrijf. Ik heb hem uitgerust met een lasergesneden houten houder voor Jetson Nano en een camerahouder. Hun ontwerp is gepatenteerd, dus als je voor je Jetson Nano-robot iets soortgelijks wilt maken, kun je het Meped-project bekijken, een vergelijkbare viervoeter met een open-sourceontwerp. Omdat niemand de broncode voor Zuri's microcontroller (Arduino Mega) in ons lab had, heb ik de code van Meped gebruikt met enkele kleine aanpassingen in de benen/voet-offset.

Ik gebruikte een gewone USB Raspberry Pi-compatibele webcam en een Wifi USB-dongle.

Het belangrijkste punt is dat aangezien we Pyserial gaan gebruiken voor seriële communicatie tussen microcontroller en Jetson Nano, je systeem in wezen elk type microcontroller kan gebruiken, zolang het maar kan worden gekoppeld aan Jetson Nano met een USB-seriële kabel. Als uw robot DC-motoren en een motordriver gebruikt (bijvoorbeeld op basis van L298P), is het mogelijk om de motordriver rechtstreeks te koppelen aan Jetson Nano GPIO. Maar helaas kun je voor het aansturen van servo's alleen een andere microcontroller of een speciale I2C-servodriver gebruiken, aangezien Jetson Nano geen hardware GPIO PWM heeft.

Om samen te vatten, je kunt het type robot gebruiken met elke microcontroller die kan worden aangesloten op Jetson Nano via een USB-datakabel. Ik heb de code voor Arduino Mega geüpload naar de github-repository voor deze tutorial en het onderdeel dat relevant is voor de interface van Jetson Nano met Arduino is hier:

if(Serial.available()) {switch(Serial.read()) {

{

zaak 1':

naar voren();

pauze;

geval '2':

rug();

pauze;

geval '3':

turn_right();

pauze;

geval '4':

sla linksaf();

pauze;

We controleren of er gegevens beschikbaar zijn, en zo ja, geven deze door aan de schakelkastbesturingsstructuur. Let op, gegevens uit het serienummer komen als karakters, let op het enkele aanhalingsteken rond de cijfers 1, 2, 3, 4.

Stap 2: Installeer de benodigde pakketten

Gelukkig voor ons wordt de standaard Jetson Nano-systeemafbeelding geleverd met veel dingen vooraf geïnstalleerd (zoals OpenCV, TensorRT, enz.), Dus we hoeven maar een paar andere pakketten te installeren om de code te laten werken en SSH in te schakelen.

Laten we beginnen met het inschakelen van SSH voor het geval u de rest van het werk op afstand wilt doen.

sudo apt update

sudo apt install openssh-server

De SSH-server wordt automatisch gestart.

Om via LAN verbinding te maken met uw Ubuntu-machine, hoeft u alleen de volgende opdracht in te voeren:

ssh gebruikersnaam@ip_adres

Als u een Windows-machine heeft, moet u een SSH-client installeren, bijvoorbeeld Putty.

Laten we beginnen met het installeren van Python Package Manager (pip) en Pillow voor beeldmanipulatie.

sudo apt install python3-pip python3-pil

Vervolgens installeren we de Jetbot-repository, omdat we op sommige delen van het framework vertrouwen om objectdetectie uit te voeren.

sudo apt install python3-smbus python-pyserial

git clone

cd jetbot

sudo apt-get install cmake

sudo python3 setup.py installeren

Kloon ten slotte mijn Github-repository voor dit project naar je thuismap en installeer Flask en enkele andere pakketten voor de afstandsbediening van de robot met behulp van een webserver.

git kloon

CD

sudo pip3 install -r requirements-opencv

Download het voorgetrainde SSD-model (Single Shot Detector) via deze link en plaats het in de map jetspider_demos.

Nu zijn we goed om te gaan!

Stap 3: Voer de code uit

Voer de code uit
Voer de code uit

Ik heb twee demo's gemaakt voor Jetspider, de eerste is een eenvoudige tele-operatie, zeer vergelijkbaar met degene die ik eerder heb gemaakt voor de Banana Pi rover en de tweede gebruikt TensorRT voor objectdetectie en stuurt de bewegingscommando's via de seriële verbinding naar de microcontroller.

Aangezien het grootste deel van de teleopration-code wordt beschreven in mijn andere tutorial (ik heb slechts enkele kleine aanpassingen gemaakt, de video-overdracht opnieuw beoordeeld), zal ik me hier concentreren op het gedeelte Objectdetectie.

Het hoofdscript voor het volgen van objecten is object_following.py in jetspider_object_following, voor teleoperation is spider_teleop.py in jetspider_teleoperation.

Het object-volgende script begint met het importeren van de benodigde modules en het declareren van variabelen en klasseninstanties. Dan starten we de Flask-webserver met deze regel

app.run(host='0.0.0.0', threaded=True)

Zodra we het adres 0.0.0.0 (localhost) openen in onze webbrowser of het Jetson Nano-adres op het netwerk (kan controleren met de opdracht ifconfig), wordt deze functie uitgevoerd

def-index():

Het geeft de webpagina-sjabloon weer die we in de map Sjablonen hebben. De sjabloon heeft een ingebedde videobron, dus zodra het laden is voltooid, wordt def video_feed(): uitgevoerd, dat een Response-object retourneert dat is geïnitialiseerd met de generatorfunctie.

Het geheim om in-place updates te implementeren (het bijwerken van de afbeelding op de webpagina voor onze videostream) is om een meerdelige reactie te gebruiken. Meerdelige antwoorden bestaan uit een kop die een van de meerdelige inhoudstypen bevat, gevolgd door de delen, gescheiden door een grensmarkering en elk met een eigen deelspecifiek inhoudstype.

In def gen(): function implementeren we de generatorfunctie in een oneindige lus die de afbeelding vangt en naar def execute(img): function stuurt, wat een afbeelding oplevert die daarna naar de webpagina wordt gestuurd.

def execute(img): functie is waar alle magie gebeurt, het neemt een afbeelding, verkleint het met OpenCV en geeft het door aan de Jetbot ObjectDetector klasse-instantie "model". Het retourneert de lijst met detecties en we gebruiken OpenCV om blauwe rechthoeken om hen heen te tekenen en annotaties te schrijven met de object gedetecteerde klasse. Daarna controleren we of er een object van ons belang is gedetecteerdmatching_detections = [d for d in detections[0] if d['label'] == 53]

U kunt dat nummer (53) wijzigen in een ander nummer uit de CoCo-dataset als u wilt dat uw robot andere objecten volgt, 53 is een appel. De hele lijst staat in het bestand category.py.

Als er ten slotte 5 seconden lang geen object wordt gedetecteerd, verzenden we het teken "5" zodat de robot over de serie kan stoppen. Als een object wordt gevonden, berekenen we hoe ver het van het midden van de afbeelding verwijderd is en handelen dienovereenkomstig (indien dicht bij het midden, ga rechtdoor (teken "1" op serienummer), indien aan de linkerkant, ga naar links, enz.). U kunt met die waarden spelen om te bepalen wat het beste is voor uw specifieke opstelling!

Stap 4: Laatste gedachten

Laatste gedachten
Laatste gedachten

Dit is de kern van de ObjectFollowing-demo. Als je meer wilt weten over Flask webserver Video streaming, kun je deze geweldige tutorial van Miguel Grinberg bekijken.

Je kunt hier ook een Nvidia Jetbot Object Detection-notebook bekijken.

Ik hoop dat mijn implementaties van Jetbot-demo's zullen helpen om uw robot te bouwen met behulp van het Jetbot-framework. Ik heb geen demo over het vermijden van obstakels geïmplementeerd, omdat ik denk dat de keuze van het model geen goede resultaten voor het vermijden van obstakels zal opleveren.

Voeg me toe op LinkedId als je een vraag hebt en abonneer je op mijn YouTube-kanaal om op de hoogte te blijven van interessantere projecten op het gebied van machine learning en robotica.

Aanbevolen: