Indholdsfortegnelse:

Raspberry Pi - Autonom Mars Rover Med OpenCV Object Tracking: 7 trin (med billeder)
Raspberry Pi - Autonom Mars Rover Med OpenCV Object Tracking: 7 trin (med billeder)

Video: Raspberry Pi - Autonom Mars Rover Med OpenCV Object Tracking: 7 trin (med billeder)

Video: Raspberry Pi - Autonom Mars Rover Med OpenCV Object Tracking: 7 trin (med billeder)
Video: Adeept MARS ROVER Raspberry Pi Smart Car Robot Kit PiCar-B is Coming Soon... 2024, November
Anonim
Raspberry Pi - Autonom Mars Rover med OpenCV Object Tracking
Raspberry Pi - Autonom Mars Rover med OpenCV Object Tracking

Drevet af en Raspberry Pi 3, åben CV -genkendelse, ultralydssensorer og gearede DC -motorer. Denne rover kan spore ethvert objekt, den er trænet til, og bevæge sig på ethvert terræn.

Trin 1: Introduktion

Image
Image
Materialer og software påkrævet
Materialer og software påkrævet

I denne Instructables skal vi bygge en autonom Mars Rover, som kan genkende objekter og spore dem ved hjælp af Open CV -softwaren, der kører på en Raspberry Pi 3 med mulighed for at bruge en webcam -enhed eller det originale hindbærpi -kamera. Det er også udstyret med en ultralydssensor monteret på en servo for at spore sin vej i mørke miljøer, hvor kameraet ikke ville fungere. Signaler modtaget fra Pi sendes til motordriverens IC (L293D), som driver 4 x 150 omdr./min. DC -motorer monteret på et karosseri bygget med PVC -rør.

Trin 2: Materialer og software påkrævet

Materialer og software påkrævet
Materialer og software påkrævet
Materialer og software påkrævet
Materialer og software påkrævet

Materialer påkrævet

  1. Raspberry Pi (alt andet end nul)
  2. Hindbær PI -kamera eller et webcam
  3. L293D motor driver IC
  4. Robothjul (7x4cm) X 4
  5. Geardrevne DC -motorer (150 o / min) X 4
  6. PVC -rør til chassis

Software påkrævet

  1. Kitt til SSH i Pi
  2. Åbn CV for genkendelse af objekter

Trin 3: Opbygning af Rover Chassis

Bygger Rover Chassis
Bygger Rover Chassis
Bygger Rover Chassis
Bygger Rover Chassis
Bygger Rover Chassis
Bygger Rover Chassis

For at bygge dette PVC -chassis skal du bruge

  • 2 x 8"
  • 2 x 4"
  • 4 T-samlinger

Arranger PVC-rørene i en stige som struktur og indsæt i T-samlinger. Du kan bruge PVC -fugemassen til at gøre samlingerne endnu stærkere.

De gearede DC -motorer er forbundet med PVC -rørchassiset ved hjælp af klemmer, og derefter er hjul forbundet med motorerne ved hjælp af skruer.

Trin 4: Bygning af ultralydsmåler

Bygning af ultralydsmåler
Bygning af ultralydsmåler

Den ultralydsmåler er opbygget ved hjælp af en HC-SR04 ultralydssensor forbundet med en mikro servomotor. Kabler er forud forbundet med ultralydssensoren, før de sættes i plastikhuset, der er forbundet til servomotoren via skruer.

Trin 5: Skemaer og elektriske forbindelser

Skemaer og elektriske forbindelser
Skemaer og elektriske forbindelser
Skemaer og elektriske forbindelser
Skemaer og elektriske forbindelser

Foretag de elektriske forbindelser i henhold til det vedlagte kredsløbsdiagram.

Trin 6: SSH og åben CV -installation

SSH og Open CV Installation
SSH og Open CV Installation

Nu skal vi SSH ind i vores hindbær pi for at installere den nødvendige software. Vi starter med SSHing til vores Raspberry Pi. Sørg for, at din Pi er forbundet til den samme router som din pc, og du ved, at den er IP -adresse, som din router har tildelt den. Åbn nu en kommandoprompt eller PUTTY, hvis du er på Windows, og kør følgende kommando.

ssh [email protected]

Din Pi's IP kan være anderledes, min er 192.168.1.6.

Indtast nu din standardadgangskode - "hindbær"

Nu hvor du har SSH'et ind i din Pi, lad os starte med at opdatere med denne kommando.

sudo apt-get update && sudo apt-get upgrade

Lad os installere de nødvendige udviklerværktøjer nu, sudo apt-get install build-essential cmake pkg-config

Dernæst skal vi installere nogle billed -I/O -pakker, der hjælper vores Pi med at hente forskellige billedformater fra disken.

sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev

Nu nogle pakker til hentning af video, livestreaming og optimering af OpenCV -ydeevne

sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev

sudo apt-get install libxvidcore-dev libx264-dev

sudo apt-get install libgtk2.0-dev libgtk-3-dev

sudo apt-get install libatlas-base-dev gfortran

Vi skal også installere Python 2.7 og Python 3 header -filer, så vi kan kompilere OpenCV med pythonbindinger

sudo apt-get install python2.7-dev python3-dev

Download af OpenCV -kildekode

cd ~

wget -O opencv.zip

udpakke opencv.zip

Downloader opencv_contrib -depot

wget -O opencv_contrib.zip

udpakke opencv_contrib.zip

Det anbefales også at bruge et virtuelt miljø til installation af OpenCV.

sudo pip installer virtualenv virtualenvwrapper

sudo rm -rf ~/.cache/pip

Nu, hvor virtualenv og virtualenvwrapper er blevet installeret, skal vi opdatere vores ~/.profil til at omfatte følgende linjer nederst

eksport WORKON_HOME = $ HOME/.virtualenvs eksport VIRTUALENVWRAPPER_PYTHON =/usr/bin/python3 source /usr/local/bin/virtualenvwrapper.sh

Opret dit virtuelle python -miljø

mkvirtualenv cv -p python2

skifte til det oprettede virtuelle miljø

kilde ~/.profil

arbejdet cv

Installation af NumPy

pip installer numpy

Kompiler og installer OpenCV

cd ~/opencv-3.3.0/

mkdir build

cd -opbygning

cmake -D CMAKE_BUILD_TYPE = RELEASE / -D CMAKE_INSTALL_PREFIX =/usr/local / -D INSTALL_PYTHON_EXAMPLES = ON / -D OPENCV_EXTRA_MODULES_PATH = ~/opencv_contrib -3.3.0/modules / -DPLES..

Saml endelig OpenCV

lav -j4

Efter at denne kommando er færdig med at køre. Alt du skal gøre er at installere det.

sudo lav konfigur

sudo ldconfig

Trin 7: Kørsel af Python -koden til Rover

Image
Image

Opret en Python -fil kaldet tracker.py, og tilføj følgende kode til den.

sudo nano tracker.py

kode:-

#ASAR -program

#Dette program sporer en rød kugle og instruerer en hindbærpi i at følge den. import sys sys.path.append ('/usr/local/lib/python2.7/site-packages') import cv2 import numpy som np import os import RPi. GPIO som IO IO.setmode (IO. BOARD) IO.setup (7, IO. OUT) IO.setup (15, IO. OUT) IO.setup (13, IO. OUT) IO.setup (21, IO. OUT) IO.setup (22, IO. OUT) def fwd (): IO.output (21, 1) #Left Motor Forward IO.output (22, 0) IO.output (13, 1) #Right Motor Forward IO.output (15, 0) def bac (): IO.output (21, 0)#venstre motor bagud IO.output (22, 1) IO.output (13, 0)#højre motor bagud IO.output (15, 1) def ryt (): IO.output (21, 0) #Venstre motor bagud IO.output (22, 1) IO.output (13, 1)#højre motor frem IO.output (15, 0) def lft (): IO.output (21, 1)#venstre motor frem IO.output (22, 0) IO.output (13, 0)#Højre motor bagud IO.output (15, 1) def stp (): IO.output (21, 0)#Left Motor stop IO.output (22, 0) IO.output (13, 0) #Right Motor stop IO.output (15, 0) ############################## #################################################### ####################### def main (): capWebcam = cv2. VideoCapture (0)#erklærer en VideoCapture -objekt og tilknyt webcam, 0 => brug 1. webcam # vis original opløsning print "standard opløsning =" + str (capWebcam.get (cv2. CAP_PROP_FRAME_WIDTH)) + "x" + str (capWebcam.get (cv2. CAP_PROP_FRAME_HEIGHT)) capWebcam.set (cv2. CAP_PROP_FRAME_WIDTH, 320.0) # ændring af opløsningen til 320x240 for hurtigere behandling af capWebcam.set (cv2. CAP_PROP_FRAME_HEIGHT, 240.0) # vis opdateret opløsning print "updated resolution =" + str (capWebcam.get (cv2. CAP_PRO_PRO_PRO_PRO_PRO_PRO_PRO_PRO_PRO)) + "x" + str (capWebcam.get (cv2. CAP_PROP_FRAME_HEIGHT)) hvis capWebcam.isOpened () == Falsk: # tjek, om VideoCapture -objekt var tilknyttet webcam med succes udskrivning "fejl: capWebcam blev ikke åbnet korrekt / n / n" # hvis ikke, udskriv fejlmeddelelse for at fjerne os.system ("pause") # pause, indtil brugeren trykker på en tast, så brugeren kan se fejlmeddelelsen returnere # og afslutte funktion (som forlader program) # ende hvis mens cv2.waitKey (1)! = 27 og capWebcam.isOpened (): #, indtil der trykkes på Esc -tasten, eller webcamforbindelsen mistes blnFrameReadSuccessf ully, imgOriginal = capWebcam.read () # læs næste ramme hvis ikke blnFrameReadSuccessfully eller imgOriginal er Ingen: # hvis ramme ikke blev læst med succes print "fejl: ramme ikke læst fra webcam / n" # udskrivningsfejlmeddelelse for at fjerne os.system ("pause") # pause, indtil brugeren trykker på en tast, så brugeren kan se fejlmeddelelsen bryde # afslut, mens loop (der forlader programmet) # ende, hvis imgHSV = cv2.cvtColor (imgOriginal, cv2. COLOR_BGR2HSV) imgThreshLow = cv2.inRange (imgHSV, np.array ([0, 135, 135]), np.array ([18, 255, 255])) imgThreshHigh = cv2.inRange (imgHSV, np.array ([165, 135, 135]), np. array ([179, 255, 255])) imgThresh = cv2.add (imgThreshLow, imgThreshHigh) imgThresh = cv2. GaussianBlur (imgThresh, (3, 3), 2) imgThresh = cv2.dilate (imgThh (5, 5), np.uint8)) imgThresh = cv2.erode (imgThresh, np.ones ((5, 5), np.uint8)) intRows, intColumns = imgThresh.shape cirkler = cv2. HoughCircles (imgThresh, cv2. HOUGH_GRADIENT, 5, intRows / 4) # udfyld variable cirkler med alle cirkler i det behandlede billede, hvis cirkler er ikke Ingen: # denne linje er nødvendig for at forhindre programmet i at gå ned på næste linje, hvis der ikke blev fundet cirkler IO.output (7, 1) for cirkel i cirkler [0]: # for hver cirkel x, y, radius = cirkel # bryde x, y og radius ud "kugleposition x =" + str (x) + ", y =" + str (y) + ", radius =" + str (radius) # print kuglens position og radius obRadius = int (radius) xAxis = int (x) if obRadius> 0 & obRadius100 & xAxis180: print ("Moving Right") ryt () elif xAxis <100: print ("Moving Left") lft () else: stp () else: stp () cv2.circle (imgOriginal, (x, y), 3, (0, 255, 0), -1) # tegne lille grøn cirkel i midten af det registrerede objekt cv2.circle (imgOriginal, (x, y), radius, (0, 0, 255), 3) # tegne rød cirkel omkring det detekterede objekt # ende for # ende hvis ellers: IO.output (7, 0) cv2.namedWindow ("imgOriginal", cv2. WINDOW_AUTOSIZE) # opret vinduer, brug WINDOW_AUTOSIZE til en fast vinduesstørrelse cv2.namedWindow ("imgThresh", cv2. WINDOW_AUTOSIZE) # eller brug WINDOW_NORMAL til at tillade størrelse på vindue cv2.imshow ("imgOriginal", imgOri ginal)#show windows cv2.imshow ("imgThresh", imgThresh)#end while cv2.destroyAllWindows ()#remove windows from memory return ###################### #################################################### ############################# hvis _name_ == "_main_": main ()

Nu er det kun tilbage at køre programmet

python tracker.py

Tillykke! din selvkørende rover er klar! Den ultralydssensorbaserede navigationsdel vil snart blive afsluttet, og jeg vil opdatere denne instruerbare.

Tak fordi du læste!

Anbefalede: