Inhoudsopgave:

Raspberry Pi - Autonome Mars Rover met OpenCV Object Tracking - Ajarnpa
Raspberry Pi - Autonome Mars Rover met OpenCV Object Tracking - Ajarnpa

Video: Raspberry Pi - Autonome Mars Rover met OpenCV Object Tracking - Ajarnpa

Video: Raspberry Pi - Autonome Mars Rover met OpenCV Object Tracking - Ajarnpa
Video: Adeept MARS ROVER Raspberry Pi Smart Car Robot Kit PiCar-B is Coming Soon... 2024, November
Anonim
Raspberry Pi - Autonome Mars Rover met OpenCV Object Tracking
Raspberry Pi - Autonome Mars Rover met OpenCV Object Tracking

Aangedreven door een Raspberry Pi 3, Open CV-objectherkenning, Ultrasone sensoren en gelijkstroommotorreductoren. Deze rover kan elk object volgen waarvoor hij is getraind en zich op elk terrein verplaatsen.

Stap 1: Inleiding

Image
Image
Benodigde materialen en software
Benodigde materialen en software

In deze Instructables gaan we een autonome Mars Rover bouwen die objecten kan herkennen en volgen met behulp van de Open CV-software op een Raspberry Pi 3 met een optie om een webcam-apparaat of de originele Raspberry Pi-camera te gebruiken. Het is ook uitgerust met een ultrasone sensor gemonteerd op een servo om zijn weg te vinden in donkere omgevingen waar de camera niet zou werken. Signalen die van Pi worden ontvangen, worden verzonden naar het motorstuurprogramma-IC (L293D) dat 4 x 150 RPM DC-motoren aandrijft die zijn gemonteerd op een behuizing die is gebouwd met PVC-buizen.

Stap 2: Benodigde materialen en software

Benodigde materialen en software
Benodigde materialen en software
Benodigde materialen en software
Benodigde materialen en software

Vereiste materialen

  1. Raspberry Pi (alle behalve nul)
  2. Raspberry PI-camera of een webcam
  3. L293D motorstuurprogramma IC
  4. Robotwielen (7x4cm) X 4
  5. Geared DC-motoren (150 RPM) X 4"
  6. PVC-buizen voor chassis

Software vereist

  1. Putty voor SSH in de Pi
  2. Open CV voor objectherkenning

Stap 3: Het Rover-chassis bouwen

Het Rover-chassis bouwen
Het Rover-chassis bouwen
Het Rover-chassis bouwen
Het Rover-chassis bouwen
Het Rover-chassis bouwen
Het Rover-chassis bouwen

Om dit PVC-chassis te bouwen, heb je nodig:

  • 2X8"
  • 2X4"
  • 4 T-verbindingen

Leg de PVC-buizen in een ladderachtige structuur en steek ze in T-verbindingen. U kunt de PVC-kit gebruiken om de voegen nog sterker te maken.

De gelijkstroommotorreductoren worden met behulp van klemmen met het PVC-buischassis verbonden en vervolgens worden de wielen met schroeven met de motoren verbonden.

Stap 4: Ultrasone afstandsmeter bouwen

Ultrasone afstandsmeter bouwen
Ultrasone afstandsmeter bouwen

De ultrasone afstandsmeter is gebouwd met behulp van een HC-SR04 ultrasone sensor die is verbonden met een microservomotor. Kabels zijn vooraf verbonden met de ultrasone sensor voordat ze in de plastic behuizing worden geplaatst die via schroeven met de servomotor is verbonden.

Stap 5: Schema's en elektrische aansluitingen

Schema's en elektrische aansluitingen
Schema's en elektrische aansluitingen
Schema's en elektrische aansluitingen
Schema's en elektrische aansluitingen

Maak de elektrische aansluitingen volgens het bijgevoegde schakelschema.

Stap 6: SSH en Open CV Installatie

SSH en Open CV Installatie
SSH en Open CV Installatie

Nu moeten we SSH naar onze raspberry pi sturen om de vereiste software te installeren. We beginnen met SSHing naar onze Raspberry Pi. Zorg ervoor dat uw Pi is verbonden met dezelfde router als uw pc en dat u weet dat het IP-adres eraan is toegewezen door uw router. Open nu een opdrachtprompt of PUTTY als u Windows gebruikt en voer de volgende opdracht uit.

ssh [email protected]

Het IP-adres van je Pi kan anders zijn, de mijne is 192.168.1.6.

Voer nu uw standaardwachtwoord in - "framboos"

Nu je SSH in je Pi hebt, laten we beginnen met updaten met deze opdracht.

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

Laten we nu de vereiste ontwikkelaarstools installeren, sudo apt-get install build-essentiële cmake pkg-config

Vervolgens moeten we enkele image I/O-pakketten installeren die onze Pi helpen om verschillende afbeeldingsformaten van schijf op te halen.

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

Nu enkele pakketten voor het ophalen van video, livestreaming en het optimaliseren van OpenCV-prestaties

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

We moeten ook de headerbestanden van Python 2.7 en Python 3 installeren, zodat we OpenCV kunnen compileren met python-bindingen

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

OpenCV-broncode downloaden

cd ~

wget -O opencv.zip

unzip opencv.zip

Opencv_contrib repository downloaden

wget -O opencv_contrib.zip

unzip opencv_contrib.zip

Het wordt ook aanbevolen om een virtuele omgeving te gebruiken voor het installeren van OpenCV.

sudo pip install virtualenv virtualenvwrapper

sudo rm -rf ~/.cache/pip

Nu virtualenv en virtualenvwrapper zijn geïnstalleerd, moeten we ons ~/.profile bijwerken om de volgende regels onderaan op te nemen

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

Creëer uw virtuele Python-omgeving

mkvirtualenv cv -p python2

overschakelen naar de gecreëerde virtuele omgeving

bron ~/.profile

werk op cv

NumPy installeren

pip installeer numpy

Compileer en installeer OpenCV

cd ~/opencv-3.3.0/

mkdir bouwen

cd bouwen

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 / -D BUILD_EXAMPLES.

Compileer eindelijk OpenCV

maak -j4

Nadat deze opdracht is voltooid. Het enige wat u hoeft te doen is het te installeren.

sudo make config

sudo ldconfig

Stap 7: De Python-code voor Rover uitvoeren

Image
Image

Maak een Python-bestand met de naam tracker.py en voeg de volgende code eraan toe.

sudo nano tracker.py

code:-

#ASAR-programma

#Dit programma volgt een rode bal en instrueert een Raspberry Pi om deze te volgen. import sys sys.path.append('/usr/local/lib/python2.7/site-packages') import cv2 import numpy als np import os importeer RPi. GPIO als 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)#Linker motor achteruit IO.output(22, 1) IO.output(13, 0)#Rechter motor achteruit IO.output (15, 1) def ryt(): IO.output(21, 0) #Linker motor achteruit IO.output(22, 1) IO.output(13, 1)#Rechter motor vooruit IO.output(15, 0) def lft(): IO.output(21, 1)#Linker motor vooruit IO.output(22, 0) IO.output(13, 0)#Right Motor achteruit IO.output(15, 1) def stp(): IO.output(21, 0)#Linker Motor stop IO.output(22, 0) IO.output(13, 0)#Right Motor stop IO.output(15, 0) ############################ ################################################## ##################### def main(): capWebcam = cv2. VideoCapture(0) # verklaar een VideoCapture-object en koppelen aan webcam, 0 => eerste webcam gebruiken # originele resolutie weergeven print "default resolution = " + 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) # verander resolutie naar 320x240 voor snellere verwerking capWebcam.set(cv2. CAP_PROP_FRAME_HEIGHT, 240.0) # toon bijgewerkte resolutie print "bijgewerkte resolutie = " + str(capWebcam.get(cv2. CAP_IDP_FRAME_W)) + "x" + str(capWebcam.get(cv2. CAP_PROP_FRAME_HEIGHT)) if capWebcam.isOpened() == False: # controleer of VideoCapture-object succesvol aan webcam is gekoppeld print "fout: capWebcam niet succesvol benaderd\n\n" # zo niet, druk dan een foutmelding af om os.system("pause") uit te drukken # pauzeer totdat de gebruiker op een toets drukt zodat de gebruiker de foutmelding kan zien terugkeren # en de functie afsluiten (waardoor het programma wordt afgesloten) # end if while cv2.waitKey(1) != 27 en capWebcam.isOpened(): # totdat de Esc-toets wordt ingedrukt of de webcamverbinding wordt verbroken blnFrameReadSuccessf ully, imgOriginal = capWebcam.read() # lees volgend frame indien niet blnFrameReadSuccessfully of imgOriginal is Geen: # als frame niet succesvol is gelezen print "error: frame niet gelezen van webcam\n" # print foutmelding naar standaard os.system ("pauze") # pauzeer totdat de gebruiker op een toets drukt zodat de gebruiker de onderbreking van het foutbericht kan zien # exit while-lus (die het programma afsluit) # end if 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(imgThresh, np.ones((5, 5), np.uint8)) imgThresh = cv2.erode(imgThresh, np.ones((5, 5), np.uint8)) intRows, intColumns = imgThresh.shape circles = cv2. HoughCircles(imgThresh, cv2. HOUGH_GRADIENT, 5, intRows / 4) # vul variabele cirkels met alle cirkels in de verwerkte afbeelding als cirkels is niet Geen: # deze regel is nodig om te voorkomen dat het programma crasht op de volgende regel als er geen cirkels zijn gevonden IO.output(7, 1) voor cirkel in cirkels[0]: # voor elke cirkel x, y, straal = cirkel # break out x, y, en radius print "ball position x = " + str(x) + ", y = " + str(y) + ", radius = " + str(radius) # print bal positie en 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) # teken een kleine groene cirkel in het midden van het gedetecteerde object cv2.circle(imgOriginal, (x, y), straal, (0, 0, 255), 3) # teken een rode cirkel rond het gedetecteerde object # end for # end if else: IO.output(7, 0) cv2.namedWindow("imgOriginal", cv2. WINDOW_AUTOSIZE) # maak vensters, gebruik WINDOW_AUTOSIZE voor een vaste venstergrootte cv2.namedWindow("imgThresh", cv2. WINDOW_AUTOSIZE) # of gebruik WINDOW_NORMAL om de grootte van het venster cv2.imshow("imgOriginal", imgOri) toe te staan ginal) # show windows cv2.imshow("imgThresh", imgThresh) # end while cv2.destroyAllWindows() # verwijder windows uit geheugen return ##################### ################################################## ############################ if _name_ == "_main_": main()

Nu hoeft u alleen nog het programma uit te voeren

python tracker.py

Proficiat! je zelfrijdende rover is klaar! Het op ultrasone sensor gebaseerde navigatiegedeelte zal binnenkort worden voltooid en ik zal dit instructable bijwerken.

Bedankt voor het lezen!

Aanbevolen: