Taula de continguts:
- Subministraments
- Step 1: Step 1: Imprimir Todas Las Piezas De La Estructura
- Pas 2: Montatge De La Estructura
- Pas 3: Muntatge de l'electrònica
- Pas 4: Programari: Calibraje De Servos
- Pas 5: Programari: Modulos
Vídeo: HexaWalker: 5 passos
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:13
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
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
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
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
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:
Disseny de jocs en Flick en 5 passos: 5 passos
Disseny de jocs en Flick en 5 passos: Flick és una manera molt senzilla de fer un joc, sobretot com un trencaclosques, una novel·la visual o un joc d’aventures
Detecció de cares a Raspberry Pi 4B en 3 passos: 3 passos
Detecció de cares a Raspberry Pi 4B en 3 passos: en aquest manual, farem la detecció de cares a Raspberry Pi 4 amb Shunya O / S mitjançant la biblioteca Shunyaface. Shunyaface és una biblioteca de reconeixement / detecció de cares. El projecte té com a objectiu aconseguir una velocitat de detecció i reconeixement més ràpida amb
Com fer un comptador de passos ?: 3 passos (amb imatges)
Com fer un comptador de passos ?: Jo solia tenir un bon rendiment en molts esports: caminar, córrer, anar en bicicleta, jugar a bàdminton, etc. M’encanta viatjar poc després. Bé, mireu el meu ventre corpulent … Bé, de totes maneres, decideixo tornar a començar a fer exercici. Quin equip he de preparar?
Mirall de vanitat de bricolatge en passos senzills (amb llums de tira LED): 4 passos
Mirall de vanitat de bricolatge en passos senzills (amb llums de tires LED): en aquest post vaig crear un mirall de vanitat de bricolatge amb l'ajut de les tires LED. És molt genial i també heu de provar-les
Arduino Halloween Edition: pantalla emergent de zombis (passos amb imatges): 6 passos
Arduino Halloween Edition: pantalla emergent de zombis (passos amb imatges): voleu espantar els vostres amics i fer soroll a Halloween? O simplement voleu fer una bona broma? Aquesta pantalla emergent de Zombies ho pot fer! En aquest instructiu us ensenyaré a fer zombis fàcilment amb Arduino. L'HC-SR0