Taula de continguts:

HexaWalker: 5 passos
HexaWalker: 5 passos

Vídeo: HexaWalker: 5 passos

Vídeo: HexaWalker: 5 passos
Vídeo: 【HEXA NFT 作品&クリエーター紹介】HEXA WALKER Vol.5 HEXANFT展@こはくの天使 2024, Juliol
Anonim
Image
Image
HexaWalker
HexaWalker

Hemos echo un grupo de estudiantes de la UAB un robot hexapodo autonomo amb una webcam amb micròfon mitjançant el com es pot interactuar amb el. La idea era fer un robot amistós que reconeixia ordres de veu i pueda seguir mitjançant la càmera una pilota. Algo així com una "mascota" rebòtica.

Cabeu comentar que l’estructura que hem utilitzat per al nostre hexapode l’hem sacat del robot de codi obert Hexy d’ArcBotics.

Aquí el link al codigo:

Subministraments

- bateria lipo 7.4V 2700mmAh

- servo controlador adafruit x2

- micro servos x18 SG90s

- ull de playstation per càmera web

-raspberry pi -LM2596 redueix els commutadors -x2 - LED RGB

- cables diversos

Step 1: Step 1: Imprimir Todas Las Piezas De La Estructura

Step 1: Imprimir Todas Las Piezas De La Estructura
Step 1: Imprimir Todas Las Piezas De La Estructura

Es necessari imprimir totes les peces.

Aqui podreu trobar tots els fitxers.stl:

Es pot destacar que hem impreso amb les següents propietats:

material: PLA

omplir: 25%

alçada de la capa: 0,12

velocitat: 55 mm / s

Pas 2: Montatge De La Estructura

Montaje De La Estructura
Montaje De La Estructura

Per al muntatge de l’estructura recomanem seguir la guia de l’autor de les peces 3D:

guia:

No és necessari seguir les instruccions estrictament per al bon funcionament del robot, ja que en el nostre cas, només hem utilitzat com a ajuda.

Nota: no es fixen els tornells dels serveis abans de calibrar-los en l’apartat de codi.

Pas 3: Muntatge de l'electrònica

Montatge De La Electronica
Montatge De La Electronica
Montatge De La Electronica
Montatge De La Electronica
Montatge De La Electronica
Montatge De La Electronica

Aquí va una llista dels components utilitzats i alguns consells per al muntatge.- lipo baterry 7.4V 2700mmAh - x2 adafruit servo driver

- Micro servos x18 SG90s

- ull de playstation per càmera web

-pi de gerds

-LM2596 baixa

-x2 commutadors

- LED RGB

- cables diversos

Es important que per connectar 2 adafruits servo drivers, se suelde el bridge A0 de la segona placa. En aquest enllaç aquest detallat: https://learn.adafruit.com/16-channel-pwm-servo-d… Respecte als serveis l’ordenació en el que connecta els pins és indiferent ja que tinc que configurar els més adelant en codi. Explicat en l’apartat de codi.

Pas 4: Programari: Calibraje De Servos

Antes de res té que configurar els pulsos màxims i mínims de serveis així com els pins on estiguin connectats en l’arxiu hexapod_core.py.

cada servo esta identificado según la leyenda de abajo, por cada servo se tiene que indicar, el pin de conexión al servo driver, pulso mínimo, pulso máximo y el último parámetro es por si el servo está funcionando al revés de como debería, solo tenies que canviar de signe.

Convenció "" de la clau conjunta: R - dreta, L - esquerra F - davantera, M - mitja, B - posterior H - maluc, K - genoll, A - Tecla del turmell: (canal, longitud_puls mínima, longitud_pulsió_màxima) "" GPIO.setwarnings (Fals) GPIO.setmode (GPIO. BOARD)

propietats_juntes = {

"LFH": (0, 248, 398, -1), "LFK": (1, 195, 492, -1), "LFA": (2, 161, 580, -1), "RFH": (31, 275, 405, 1), "RFK": (30, 260, 493, -1), "RFA": (29, 197, 480, -1), "LMH": (3, 312, 451, -1), "LMK": (4, 250, 520, -1), "LMA": (5, 158, 565, -1), "RMH": (28, 240, 390, 1), "RMK": (27, 230, 514, -1), "RMA": (26, 150, 620, -1), "LBH": (6, 315, 465, 1), "LBK": (8, 206, 498, -1), "LBA": (7, 150, 657, -1), "RBH": (25, 320, 480, 1), "RBK": (24, 185, 490, -1), "RBA": (23, 210, 645, -1), "N": (18, 150, 650, 1)}

Pas 5: Programari: Modulos

Programari: Modulos
Programari: Modulos

Mòdul de reconeixement de veu:

Per a la implementació d'aquest mòdul hem fet únic l'API de Google 'Speech-to-Text'. Establim un streaming amb el núvol de Google, per obtenir les respostes en text, i així poder processar-les per accionar només en els casos que ens interessin.

Per poder fer l’únic d’aquesta API necessitem tenir un projecte registrat a Google Cloud, i d’aquest es descarreguen les credencials per poder autenticar el robot.

Per guardar les credencials en una variable d'entorn tenim que executar el següent comandament (Raspbian):

exporta GOOGLE_APPLICATION_CREDENTIALS = "/ tu / ruta / hacia / las / credenciales.json"

Una vegada hem realitzat aquest comandament ja podem fer-ho únicament de l'API de speech-to-text.

El codi per realitzar el streaming està proporcionat per google a la seva pàgina oficial, molt bé documentat:

La funció principal del streaming és 'listen_print_loop', l'encarregada de decidir qualsevol que sigui la resposta que s'aproxima més a l'entrada rebuda, i on hem controlat les respostes per poder comunicar al robot quan ha de fer una acció, o per avisar que el comandament de veu no és reconegut, per al que el robot realitza un moviment que simula no s’ha entès a l’usuari.

El codi adaptat es troba al dipòsit de git Hexawalker

github.com/RLP2019/HEXAWALKER/blob/master/…

PASO 1: INSTALL OPENCVHemos seguido la instalación de un profesional como es Adrian Rosebrock, a la seva pàgina web:

PASO 2: PROBAR LA CAMARA Primer de tot una vegada instal·lat obert, lo que vamos a hacer es un pequeño script en python para probar la camara. Per a ell farem que s’obrin dos ventanes, una amb la imatge original i una altra amb la imatge en blanc i negre.

importar numpy com a np

importar cv2

cap = cv2. VideoCapture (0)

while (True): ret, frame = cap.read () gray = cv2.cvtColor (frame, cv2. COLOR_BGR2GRAY) cv2.imshow ('frame', frame) cv2.imshow ('gray', gris) si cv2.waitKey (1) & 0xFF == ord ('q'): interrupció

cap.release ()

cv2.destroyAllWindows ()

PASO 3: DETECCIÓN DEL COLOR CON OPENCV Per al següent pas el que vamos a realitzar és una detecció de color. Per a ell, primer de tot vamos a realitzar un script que no permetem convertir un color en ordre BGR a HSV (format en el que obrirem és capaç d’interpretar).

importar sistemes

import numpy as np import cv2 blue = sys.argv [1] green = sys.argv [2] red = sys.argv [3] color = np.uint8 (

Una vegada hem fet la conversió del nostre color desitjat, el script ens imprimirà per consola el límit per baix i el límit per dalt, el que ens servirà per a que la detecció tingui un rang de colors entre dos colors hsv i no únicament un, el qual dificultat la detecció per problemes de llum o contraste.

El següent pas és amb una imatge prèviament realitzada, crear un altre script el qual ens servirà per provar el pas anterior. Lo que nos mostrará como resultado será la imagen que nosotros le pasemos (con el color y objeto a detectar) convertida en una máscara, aïllant tots els colors que no es troben en aquest rang hsv que hem definit.

importar cv2

importar numpy com a np

# Llegiu la imatge: l'1 significa que volem la imatge a BGR

img = cv2.imread ('yellow_object.jpg', 1)

# canvieu la mida de la imatge al 20% a cada eix

img = cv2.resize (img, (0, 0), fx = 0.2, fy = 0.2) # convertir la imatge BGR en una imatge HSV hsv = cv2.cvtColor (img, cv2. COLOR_BGR2HSV)

# NumPy per crear matrius per mantenir l'interval inferior i superior

# El "dtype = np.uint8" significa que el tipus de dades és un enter de 8 bits

gamma_ inferior = matriu np ([24, 100, 100], dtype = np.uint8)

gamma_alta = np.array ([44, 255, 255], dtype = np.uint8)

# creeu una màscara per a la imatge

màscara = cv2.inRang (hsv, rang inferior, rang superior)

# mostra la màscara i la imatge una al costat de l’altra

cv2.imshow ('màscara', màscara) cv2.imshow ('imatge', img)

# espera que l'usuari premgui [ESC]

while (1): k = cv2.waitKey (0) if (k == 27): break cv2.destroyAllWindows ()

PASO 4: POSICIONAMIENTO DEL OBJETO En este paso probaremos que una vez la camara se encuentre en funcionamiento y hayamos configurado nuestro rango mínimo y máximo de color hsv, que este sea capaz de encontrar las coordenadas x e y del centro de nuestro objeto. En aquest cas el que crearem serà un guió per a quan la ràdio del nostre objectiu sea mayor a 10, dibuixi un circulant sobre l’objecte i ens vaja mostrant per pantalla la posició en temps real les seves coordenades x e y.

# només procediu si el radi compleix una mida mínima

si radi> 10: # dibuixa el cercle i el centre del marc, # llavors actualitza la llista de punts seguits cv2.circle (marc, (int (x), int (y)), int (radi), (0, 255, 255), 2) cv2.circle (marc, centre, 5, (0, 0, 255), -1) # centre d'impressió de coordenades del cercle mapObjectPosition (int (x), int (y)) # si el led és encara no està engegat, enceneu el LED si no està ledOn: GPIO.output (redLed, GPIO. HIGH) ledOn = True def mapObjectPosition (x, y): print ("[INFO] Object Center coordenates a X0 = {0} i Y0 = {1} ". Format (x, y))

Con esto lo que vamos a conseguir es en el siguiente paso poder jugar con las coordenadas para establecer los límites del que será girar a la derecha nuestro robot, girar a la izquierda o bien sin realizar ningún movimiento al no salir por ningún límite.

PASO 5: SEGUIMENT D'OBJECTES Llegamos al paso final. Una vegada realitzats els anteriors punts, estarem llistats per poder configurar un paràmetre i posar a funcionar la nostra detecció. Per a utilitzar-los com anteriorment hem dit, els paràmetres del color hsv màxim i mínim per poder crear la màscara i detectar l’objecte.

colorLower = (-2, 100, 100)

colorUpper = (18, 255, 255)

També necessitarem les coordenades x e per al límit dret i el límit esquerre elegits en el pas anterior.

si (x 280):

print ("[ACCIÓ] GIRAR DERECHA") self.hexa.rotate (desplaçament = -15, repeticions = 1)

Lo que estamos realizando con los condicionales anteriores es decir que si nuestra coordenada x es más pequeña que 220, gire a la izquierda. En el cas de que mar més gran, gire a la dreta.

Per al cas en el que es vulgui avançar cap a adelantar el que es realitzarà és utilitzar la variable on es calcula la ràdio per marcar un altre límit en cas de proximitat de la pilota. Quant més cerca aquesta pilota del nostre robot, més gran serà la seva ràdio i per tant més a prop estarà el nostre robot en aconseguir el seu objectiu.

si radi <105: self.hexa.walk (oscil·lació = 40, repeticions = 1, elevat = -30, sòl = 50, t = 0,3)

A partir d’aquest punt el programador ja és lliure de realitzar modificacions i jugant amb paràmetres i colors.

Recomanat: