Taula de continguts:

Robot de seguiment de boles: 8 passos
Robot de seguiment de boles: 8 passos

Vídeo: Robot de seguiment de boles: 8 passos

Vídeo: Robot de seguiment de boles: 8 passos
Vídeo: Колыма - родина нашего страха / Kolyma - Birthplace of Our Fear 2024, De novembre
Anonim
Robot de seguiment de boles
Robot de seguiment de boles
Robot de seguiment de boles
Robot de seguiment de boles
Robot de seguiment de boles
Robot de seguiment de boles

Així doncs, en això, explicaré com fer que un robot de seguiment de boles que sigui un robot identifiqui una bola i la segueixi. Bàsicament és una tècnica de vigilància automatitzada que es pot utilitzar al món modern. Per tant, deixeu-nos entrar i començar a construir …

NOTA: Aquesta és la tasca de la part presentada a la Universitat de Deakin, Facultat de TI, SIT-210 Desenvolupament de sistemes incrustats

Subministraments

www.hackster.io/junejarohan/ball-tracking-robot-7a9865

Pas 1: Introducció

Introducció
Introducció

La vigilància actual presenta un gran inconvenient: es basa en la implicació dels humans que, com tots sabem, es pot distreure fàcilment, de manera que era de la nostra màxima importància descobrir un sistema que pogués controlar les regions de forma autònoma i contínua. I també volem identificar coses i perills desagradables o no desitjats alhora de prendre decisions i respondre en conseqüència. Per tant, el seguiment d’objectes amb l’ús de sistemes i ordinadors intel·ligents és essencial i crucial per aconseguir una vigilància automatitzada.

Qualsevol sistema de vigilància exterior ha de ser capaç de rastrejar objectes que es mouen en el seu camp de visió, classificar aquests objectes i detectar algunes de les seves activitats. He desenvolupat un mètode per rastrejar i classificar aquests objectes en escenaris realistes. El seguiment d'objectes en una sola càmera es realitza mitjançant la resta de fons, seguit de la correspondència de regió. Això té en compte múltiples senyals, incloses les velocitats, mides i distàncies de les caixes delimitadores.

Pas 2: Materials i productes fets utilitzats en aquest projecte

Materials i aparells suaus utilitzats en aquest projecte
Materials i aparells suaus utilitzats en aquest projecte
Materials i aparells suaus utilitzats en aquest projecte
Materials i aparells suaus utilitzats en aquest projecte
Materials i aparells suaus utilitzats en aquest projecte
Materials i aparells suaus utilitzats en aquest projecte

Components de maquinari utilitzats:

  • Raspberry Pi (x1)
  • Mòdul de càmera Raspberry Pi (x1)
  • Sensor d'ultrasons (x3)
  • Controladors de motor SparkFun Dual H-Bridge L298 (x1)
  • Motor CC (x1)
  • Taula de pa (x1)
  • Connexió de cables

Programari utilitzat:

OpenCV

Eines de mà:

Python

Pas 3: què cal fer?

Qualsevol sistema de vigilància exterior ha de ser capaç de rastrejar objectes que es mouen en el seu camp de visió, classificar aquests objectes i detectar algunes de les seves activitats. He desenvolupat un mètode per rastrejar i classificar aquests objectes en escenaris realistes. El seguiment d'objectes en una sola càmera es realitza mitjançant la resta de fons, seguit de la correspondència de regió. Això té en compte múltiples senyals, incloses les velocitats, mides i distàncies de les caixes delimitadores.

El que era crucial en detectar imatges fotograma per fotograma era evitar caigudes de fotogrames, ja que el bot pot entrar en un estat de limbo si el bot no nota la direcció del moviment de la pilota a causa de les caigudes de fotogrames. Si la bola surt del rang de la càmera, passarà al que anomenem un estat de limbo, en aquest cas, el bot fa un gir de 360 graus per veure l’espai que l’envolta fins que la bola torni al marc de la càmera i després començar a moure’s en la seva direcció.

Per a l’anàlisi d’imatges, estic agafant cada fotograma i emmascarant-lo amb el color necessari. Després trobo tots els contorns i en trobo el més gran i el vinculo en un rectangle. I mostreu el rectangle a la imatge principal i trobeu les coordenades del centre del rectangle.

Finalment, el robot intenta portar les coordenades de la pilota al centre del seu eix de coordenades. Així funciona el robot. Això es pot millorar encara més mitjançant l’ús d’un dispositiu IoT com una partícula de fotó que us permetrà informar-vos quan es detecta una cosa i que el robot la segueix o quan el robot ha perdut la pista i ara torna a la base..

A l’efecte del processament d’imatges, heu d’instal·lar el programari OpenCV al vostre raspberry pi, cosa que em va resultar bastant complicat.

Podeu obtenir tota la informació necessària per instal·lar OpenCV a través d’aquest enllaç: feu clic aquí

Pas 4: Esquemes

Image
Image
Esquemes
Esquemes
Esquemes
Esquemes

A la part superior he proporcionat els esquemes del meu projecte i juntament amb ell hi ha la placa de circuit imprès (PCB).

I aquí teniu algunes de les principals connexions que heu de fer:

• En primer lloc, el mòdul Raspberry Pi Camera està connectat directament al Raspberry Pi.

• Els sensors ultrasònics VCC estan connectats al terminal comú amb el GND (terra) i els dos ports restants del sensor ultrasònic es connecten als pins GPIO del Raspberry Pi.

• Els motors es connecten mitjançant el pont H.

• L'alimentació es subministra mitjançant la bateria.

També he afegit el vídeo que us pot ajudar a entendre el funcionament del sensor d'ultrasons i el seu funcionament.

i també podeu seguir aquest enllaç si no trobeu el vídeo anterior.

Pas 5: Com fer-ho?

Vaig fer aquest projecte representant un robot bàsic que pot rastrejar una pilota. El robot utilitza una càmera per processar la imatge agafant fotogrames i rastrejant la pilota. Per fer un seguiment de la pilota s’utilitzen diverses funcions com el seu color, mida, forma.

El robot troba un color codificat i després busca la bola d’aquest color i la segueix. He escollit Raspberry Pi com a microcontrolador en aquest projecte perquè ens permet utilitzar el mòdul de la càmera i proporciona una gran flexibilitat en el codi, ja que utilitza un llenguatge Python molt fàcil d’utilitzar i també ens permet utilitzar la biblioteca OpenCV per analitzar les imatges.

S'ha utilitzat un pont H per canviar el sentit de rotació dels motors o per aturar-los.

Per a l’anàlisi d’imatges, estic agafant cada fotograma i emmascarant-lo amb el color necessari. Després trobo tots els contorns i en trobo el més gran i el vinculo en un rectangle. I mostreu el rectangle a la imatge principal i trobeu les coordenades del centre del rectangle.

Finalment, el robot intenta portar les coordenades de la pilota al centre del seu eix de coordenades. Així funciona el robot. Això es pot millorar encara més mitjançant l’ús d’un dispositiu IoT com una partícula de fotó que us permetrà informar-vos quan es detecta una cosa i que el robot la segueix o quan el robot ha perdut la pista i ara torna a la base.. Per fer-ho, utilitzarem una plataforma de programari en línia que connecta els dispositius i els permet realitzar certes accions en activadors específics que són els activadors IFTTT.

Pas 6: pseudocodi

Pseudo-Codi
Pseudo-Codi

Aquí teniu el pseudocodi de la part de detecció mitjançant OpenCV, on detectem una bola.

Pas 7: Codi

Codi
Codi
Codi
Codi
Codi
Codi
Codi
Codi

A la part superior es mostren els fragments del codi i, a continuació, la descripció detallada del codi.

# importeu els paquets necessaris

IMPORTEM TOTS ELS PAQUETS NECESSARIS

des de picamera.array importació PiRGBArray # Com que hi ha un problema de resolució al raspberry pi, VideoCapture no podrà capturar fotogrames.

d'importació de càmeres d'importació PiCamera d'importació RPi. GPIO com a importació de temps d'importació GPIO numpy com np

ARA CONFIGUREM EL HARDWARE I ASSIGNEM ELS PINS CONNECTATS AL RASPBERRY PI

GPIO.setmode (GPIO. BOARD)

GPIO_TRIGGER1 = 29 #Sensor d'ultrasons esquerre

GPIO_ECHO1 = 31

GPIO_TRIGGER2 = 36 # Sensor d'ultrasons frontal

GPIO_ECHO2 = 37

GPIO_TRIGGER3 = 33 #Sensor d'ultrasons dret

GPIO_ECHO3 = 35

MOTOR1B = 18 #Motor esquerre

MOTOR1E = 22

MOTOR2B = 21 # Motor dret

MOTOR2E = 19

LED_PIN = 13 #Si troba la pilota, encendrà el led

# Estableix els pins com a sortida i entrada

GPIO.setup (GPIO_TRIGGER1, GPIO. OUT) # Trigger GPIO.setup (GPIO_ECHO1, GPIO. IN) # Echo GPIO.setup (GPIO_TRIGGER2, GPIO. OUT) # Trigger GPIO.setup (GPIO_ECHO2, GPIO. IN) GPIO.setup (GPIO_ECHO2, GPIO. IN) GPIO_TRIGGER3, GPIO. OUT) # Trigger GPIO.setup (GPIO_ECHO3, GPIO. IN) GPIO.setup (LED_PIN, GPIO. OUT)

# Estableix el disparador a Fals (Baix)

GPIO.output (GPIO_TRIGGER1, fals) GPIO.output (GPIO_TRIGGER2, fals) GPIO.output (GPIO_TRIGGER3, fals)

AQUESTA FUNCIÓ EMPLETA TOTS ELS SENSORS ULTRASONICS QUE RECOLLEN LA DISTÀNCIA DELS OBJECTES AL VOLTANT DEL NOSTRE BOT

# Permetre que el mòdul es resolgui

def sonar (GPIO_TRIGGER, GPIO_ECHO): start = 0 stop = 0 # Estableix els pins com a sortida i entrada GPIO.setup (GPIO_TRIGGER, GPIO. OUT) # Trigger GPIO.setup (GPIO_ECHO, GPIO. IN) # Echo # Estableix el disparador a Fals (Baixa) GPIO.output (GPIO_TRIGGER, fals) # Permetre que el mòdul resolgui time.sleep (0.01) # while distance> 5: #Envia un impuls de 10us per activar GPIO.output (GPIO_TRIGGER, True) time.sleep (0.00001) GPIO. sortida (GPIO_TRIGGER, fals) begin = time.time () mentre GPIO.input (GPIO_ECHO) == 0 i time.time ()

COM FER TREBALLAR ELS MOTORS DC AMB LA PI FRASSA

GPIO.setup (MOTOR1B, GPIO. OUT)

GPIO.setup (MOTOR1E, GPIO. OUT)

GPIO.setup (MOTOR2B, GPIO. OUT) GPIO.setup (MOTOR2E, GPIO. OUT)

DEFINICIÓ DE FUNCIONS PER FUNCIONAR EL ROBOT I FER-LO MOURE EN DIFERENTS DIRECCIONS

def forward ():

GPIO.output (MOTOR1B, GPIO. HIGH) GPIO.output (MOTOR1E, GPIO. LOW) GPIO.output (MOTOR2B, GPIO. HIGH) GPIO.output (MOTOR2E, GPIO. LOW) def reverse (): GPIO.output (MOTOR1B, GPIO. LOW) GPIO.output (MOTOR1E, GPIO. HIGH) GPIO.output (MOTOR2B, GPIO. LOW) GPIO.output (MOTOR2E, GPIO. HIGH) def rightturn (): GPIO.output (MOTOR1B, GPIO. LOW) GPIO.output (MOTOR1E, GPIO. HIGH) GPIO.output (MOTOR2B, GPIO. HIGH) GPIO.output (MOTOR2E, GPIO. LOW) def leftturn (): GPIO.output (MOTOR1B, GPIO. HIGH) GPIO.output (MOTOR1E, GPIO. LOW) GPIO.output (MOTOR2B, GPIO. LOW) GPIO.output (MOTOR2E, GPIO. HIGH)

def stop ():

GPIO.output (MOTOR1E, GPIO. LOW) GPIO.output (MOTOR1B, GPIO. LOW) GPIO.output (MOTOR2E, GPIO. LOW) GPIO.output (MOTOR2B, GPIO. LOW)

FENT FUNCIONAR EL MUDUL DE CÀMERA I AJUSTANT LA CONFIGURACIÓ

#CÀMERA CAPTURA

#inicialitzar la càmera i agafar una referència a la càmera de captura de càmera bruta = PiCamera () camera.resolution = (160, 120) camera.framerate = 16 rawCapture = PiRGBArray (camera, size = (160, 120)) # permetre la càmera fins a temps d’escalfament.sleep (0,001)

ARA IMPLANTANT EL PRINCIPAL ON EL BOT SEGUEIX LA PILOTA I EVITI QUALSEVOL OBSTACLE DE LA MANERA

mentre que (1 <10): {#distància del sensor d'ultrasons davanter distància C = sonar (GPIO_TRIGGER2, GPIO_ECHO2) #distància del sensor d'ultrasons dret R = sonar (GPIO_TRIGGER3, GPIO_ECHO3) #distància del sensor d'ultrasons esquerreL = sonar (GPIO_TRIGGER1, GPIO_ECHO1) if (distanceC = 8: rightturn () time.sleep (0,00625) stop () time.sleep (0,0125) forward () time.sleep (0,00625) stop () time.sleep (0,0125) # while found == 0: leftturn () time.sleep (0.00625) elif distanceL> = 8: leftturn () time.sleep (0.00625) stop () time.sleep (0.0125) forward () time.sleep (0.00625) stop () time.sleep (0,0125) rightturn () time.sleep (0,00625) stop () time.sleep (0,0125) else: stop () time.sleep (0,01) else: #en cas contrari avança cap endavant () time.sleep (0,00625) si (distanceC> 10): #it porta les coordenades de la bola al centre de l'eix imaginari de la càmera. if (centre_x = 20): if (centre_x0): flag = 1 leftturn () time.sleep (0.025) forward () time.sleep (0.00003125) stop () time.sleep (0,00625) else: stop () time.sleep (0,01)

en cas contrari:

#si funda la pilota i està massa a prop il·lumina el led. GPIO.output (LED_PIN, GPIO. HIGH) time.sleep (0.1) stop () time.sleep (0.1) # cv2.imshow ("draw", frame) rawCapture.truncate (0) # neteja el flux en preparació per a la fotograma següent}

FER LES NETEJES NECESSÀRIES

GPIO.cleanup () #free tots els pins GPIO

Pas 8: enllaços externs

Enllaç al vídeo de demostració: feu clic aquí (Youtube)

Enllaç al codi de Git-hub: feu clic aquí (Git-Hub)

Recomanat: