Inhoudsopgave:
- Stap 1: Inleiding
- Stap 2: Benodigde materialen en software
- Stap 3: Het Rover-chassis bouwen
- Stap 4: Ultrasone afstandsmeter bouwen
- Stap 5: Schema's en elektrische aansluitingen
- Stap 6: SSH en Open CV Installatie
- Stap 7: De Python-code voor Rover uitvoeren
Video: Raspberry Pi - Autonome Mars Rover met OpenCV Object Tracking - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:16
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
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
Vereiste materialen
- Raspberry Pi (alle behalve nul)
- Raspberry PI-camera of een webcam
- L293D motorstuurprogramma IC
- Robotwielen (7x4cm) X 4
- Geared DC-motoren (150 RPM) X 4"
- PVC-buizen voor chassis
Software vereist
- Putty voor SSH in de Pi
- Open CV voor objectherkenning
Stap 3: 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
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
Maak de elektrische aansluitingen volgens het bijgevoegde schakelschema.
Stap 6: 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.
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
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:
Uw Roomba in een Mars Rover veranderen: 5 stappen
Uw Roomba in een Mars Rover veranderen:
Mars Rover met Raspberry Pi: 5 stappen
Mars Rover met Raspberry Pi: Beste allemaal geweldige leerling, ik ben altijd nieuwsgierig naar mars rover, met 6 wielen die over het hele oppervlak van mars kunnen gaan en dingen vanaf de aarde kunnen verkennen. Ik wil ook dingen verkennen door op mijn laptop te zitten. Dus nu denk ik dat het de juiste tijd is om het te maken en
GEMOTORISEERDE CAMERA SLIDER MET TRACKING SYSTEEM (3D geprint): 7 stappen (met afbeeldingen)
GEMOTORISEERDE CAMERASCHUIF MET TRACKINGSYSTEEM (3D-geprint): In principe zal deze robot een camera/smartphone op een rail verplaatsen en een object "volgen". De locatie van het doelobject is al bekend bij de robot. De wiskunde achter dit volgsysteem is vrij eenvoudig. We hebben een simulatie gemaakt van het volgproces
Objectdetectie met Dragonboard 410c of 820c met OpenCV en Tensorflow: 4 stappen
Objectdetectie met Dragonboard 410c of 820c met behulp van OpenCV en Tensorflow.: Deze instructie beschrijft hoe OpenCV, Tensorflow en machine learning-frameworks voor Python 3.5 moeten worden geïnstalleerd om de toepassing Objectdetectie uit te voeren
IRobot Create-Mars Expedition Rover Mark I: 4 stappen
IRobot Create-Mars Expedition Rover Mark I: deze instructable leert je hoe je de iRobot Create kunt instellen met behulp van MatLab-codering. Je robot kan mineralen zoeken door vormen te onderscheiden, ruig terrein manoeuvreren door het gebruik van klifsensoren en heeft de mogelijkheid