Indholdsfortegnelse:

HexaWalker: 5 trin
HexaWalker: 5 trin

Video: HexaWalker: 5 trin

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

Hemos echo un grupo de estudiantes de la UAB un robot hexapodo autonomo con una webcam con micrófono mediante la cual puedes interactuar con el. La idé æra hacer un robot amistoso que reconociera ordenes de voz y pueda seguir mediante la cámara una pelota. Algo así como una "mascota" rebotica.

Vi kan også kommentere, hvad der kan bruges til at bruge en ny hexapodo til en open source -robot til Hexy de ArcBotics.

Link til alle oplysninger:

Forbrugsvarer

- lipobatteri 7,4V 2700mmAh

- x2 adafruit servo driver

- x18 mikroservoer SG90s

- webcam playstation øje

-raspberry pi -LM2596 trin ned -x2 switches -RGB LED

- kabler forskellige

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

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

Es necesario imprimir todas las piezas.

Aqui podreis encontrar todos los archivos.stl:

Det kan fjernes, da det er muligt at imponere med følgende egenskaber:

materiale: PLA

fyldning: 25%

laghøjde: 0,12

hastighed: 55 mm/s

Trin 2: Montaje De La Estructura

Montaje De La Estructura
Montaje De La Estructura

Para el montaje de la estructura recomendamos seguir la guía del author de las piezas 3D:

guía:

No es necesario seguir las instrucciones estrictamente para el buen funcionamiento del robot, ya que en nuestro caso, solo las hemos utilizado como ayuda.

Bemærk: no fijéis los tornillos de los servos antes de calibrarlos en el apartado de código.

Trin 3: Montaje De La Electronica

Montaje De La Electronica
Montaje De La Electronica
Montaje De La Electronica
Montaje De La Electronica
Montaje De La Electronica
Montaje De La Electronica

Aqua har en liste over komponenter, der kan bruges og bruges til at montere dele. - Lipo Baterry 7.4V 2700mmAh - x2 adafruit servodriver

- x18 mikroservoer SG90s

- webcam playstation øje

-hindbær pi

-LM2596 træder ned

-x2 kontakter

- RGB LED

- kabler forskellige

Es importante que para conectar 2 adafruits servo drivers, se suelde el bridge A0 de la segunda placa. En este link esta detallado: https://learn.adafruit.com/16-channel-pwm-servo-d… Respecto a los servos el orden en el que conectes los pines es indiferente ya que tendrás que configar los mas adelante en el código. Explicado en el apartado de código.

Trin 4: Software: Calibraje De Servos

Antes de nada se tiene que configurar los pulsos máximos y minimo de vuestros servos así como los pines donde estén conectados en el archivo 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 ultimo parámetro es por si el servo esta funcionando al revés de como debería, solo tenies que cambiarlo de signo.

"" "joint_key convention: R - højre, L - venstre F - front, M - midten, B - bag H - hofte, K - knæ, A - Ankelnøgle: (kanal, minimum_puls_længde, maksimal_puls_længde)" "" GPIO.setwarnings (Falsk) GPIO.setmode (GPIO. BOARD)

joint_properties = {

'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)}

Trin 5: Software: moduler

Software: moduler
Software: moduler

Reconcimiento de voz:

Para la implementación de éste módulo hemos hecho úso de la API 'Google' Speech-to-Text '. Oprettelse af streaming med Google -skyen, som kan bruges til at svare og skrive en tekstprocessor, der kan bruges af en solo -bruger, og vi kan interesere.

Til poder kan vi også bruge API'en til at registrere en Google Cloud, og den kan hentes til autenticering af en robot.

Para guardar las credenciales en una variable de entorno tenemos que ejecutar el siguiente comando (Raspbian):

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

Du kan også virkeliggøre, at der kan bruges en række API'er til tale-til-tekst.

El código for realizar el streaming está proporcionado por google en su page oficial, myy bien documentado:

Streamingens funktionalitet er 'listen_print_loop', der kan bestemme, om det er muligt at indtaste mere end én gang, og vi kan også kontrollere, om der kan bruges en robotkommunikation til en robot, der kan hente en optagelse, eller for en avisarle que el comando de voz no es reconocido, for que el robot realice un movimiento que simula no haber entendido al usuario.

El código adaptado se encuentra en el repositorio de git Hexawalker

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

PASO 1: INSTALL OPENCVHemos kan installeres på en professionel måde af Adrian Rosebrock på webstedet:

PASO 2: PROBAR LA CAMARA Primero de todo una vez instalado opencv, lo que vamos a hacer es un pequeño script and python para probar la camara. Para ello haremos que se abran dos ventanas, una con la imagen original y otra con la imagen en blanco y negro.

import numpy som np

import cv2

cap = cv2. VideoCapture (0)

mens (True): ret, frame = cap.read () grå = cv2.cvtColor (frame, cv2. COLOR_BGR2GRAY) cv2.imshow ('frame', frame) cv2.imshow ('grå', grå) hvis cv2.waitKey (1) & 0xFF == ord ('q'): pause

cap.release ()

cv2.destroyAllWindows ()

PASO 3: DETECCIÓN DEL COLOR CON OPENCV Para el siguiente paso lo que vamos a realizar es una detección de color. Para ello, primero de todo vamos a realizar un script que nos permita convertir un color and orden BGR a HSV (formato en el que opencv es capaz de interpretar).

import sys

import numpy som np import cv2 blå = sys.argv [1] grøn = sys.argv [2] rød = sys.argv [3] farve = np.uint8 (

Una vez hayamos hecho la conversión de nuestro color deseado, el script nos printará por consola el límite por debajo y el límite por arriba, el cual nos servirá para que la detección tenga una gama de colores entre dos colores hsv y no unnicamente uno, lo cual dificultaría la detección por problemas de luz o contraste.

El siguiente paso es con una imagen previamente realizada, crear otro script el cual nos servirá para probar el paso anterior. Lo que nos mostrará como resultado será la imagen que nosotros le pasemos (con el color u objeto a detectar) convertida en una máscara, aislando todos los colores que no se encuentren en ese rango hsv que hemos definido.

import cv2

import numpy som np

# Læs billedet - 1 betyder, at vi vil have billedet i BGR

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

# ændre billedstørrelse til 20% i hver akse

img = cv2.resize (img, (0, 0), fx = 0.2, fy = 0.2) # konverter BGR -billede til et HSV -billede hsv = cv2.cvtColor (img, cv2. COLOR_BGR2HSV)

# NumPy for at oprette arrays til at holde lavere og øvre område

# "Dtype = np.uint8" betyder, at datatypen er et 8 -bit heltal

lavere_område = np.array ([24, 100, 100], dtype = np.uint8)

øvre_område = np.array ([44, 255, 255], dtype = np.uint8)

# opret en maske til billede

mask = cv2.inRange (hsv, lower_range, upper_range)

# vis både masken og billedet side om side

cv2.imshow ('maske', maske) cv2.imshow ('billede', img)

# vent til brugeren trykker på [ESC]

mens (1): k = cv2.waitKey (0) hvis (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 minimo y máximo de color hsv, que este sea capaz de encontrar las coordenadas x e y del centro de nuest. En este caso lo que crearemos será un script para que cuando el radio de nuestro objeto sea mayor a 10, dibuje un circulo sobre el objeto y nos vaya mostrando por pantalla la posición en tiempo real sus coordenadas x e y.

# fortsæt kun, hvis radius opfylder en minimumsstørrelse

hvis radius> 10: # tegne cirklen og centroid på rammen, # opdater derefter listen over sporede punkter cv2.circle (ramme, (int (x), int (y)), int (radius), (0, 255, 255), 2) cv2.circle (frame, center, 5, (0, 0, 255), -1) # print center of circle coordinates mapObjectPosition (int (x), int (y)) # hvis lysdioden er ikke allerede tændt, tænd lysdioden hvis ikke ledOn: GPIO.output (redLed, GPIO. HIGH) ledOn = True def mapObjectPosition (x, y): print ("[INFO] Object Center koordinerer ved X0 = {0} og 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 de lo que será girar a la derecha nuestro robot, girar a la izquierda o bien no realizar ningún movimiento al no salir por ningún límite.

PASO 5: OBJECT TRACKING Llegamos al paso final. Una vez realizados los anteriores puntos, estaremos listos for poder configar un par de metmetros y poner a funcionar nuestra detección. Para ello utilizaremos como anteriormente hemos dicho, los parámetros del color hsv máximo y mínimo para poder crear la máscara y dtectar el objeto.

colorLower = (-2, 100, 100)

colorUpper = (18, 255, 255)

También necesitaremos las coordenadas x e y para el límite derecho y el límite izquierdo elegidos en el paso anterior.

hvis (x 280):

print ("[ACTION] GIRAR DERECHA") self.hexa.rotate (offset = -15, gentagelser = 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 caso de que sea más grande, gire a la derecha.

Para el caso en el que se quiera avanzar hacia adelante lo que se realizará es utilizar la variable dónde calculamos el radio para marcar otro límite en caso de proximidad de la pelota. Cuanto mas cerca este la pelota de nuestro robot ¡, más grande será su radio y por tanto más cerca estará nuestro robot en conseguir su objetivo.

hvis radius <105: self.hexa.walk (sving = 40, gentagelser = 1, hævet = -30, gulv = 50, t = 0,3)

A partir de este punto el programador ya es libre de realizar modificaciones e ir jugando con parámetros y colores.

Anbefalede: