Satura rādītājs:

HexaWalker: 5 soļi
HexaWalker: 5 soļi

Video: HexaWalker: 5 soļi

Video: HexaWalker: 5 soļi
Video: Lego walker version 2 2024, Jūlijs
Anonim
Image
Image
HexaWalker
HexaWalker

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

Cabe komentāri que la estructura que hemos utilizado para nuestro hexapodo la hemos sacado del robot open source Hexy de ArcBotics.

Ūdens saite uz kodu:

Piegādes

- lipo akumulators 7.4V 2700mmAh

- x2 adafruit servo vadītājs

- x18 mikro servos SG90

- tīmekļa kameras playstation acs

-raspberry pi -LM2596 soli uz leju -x2 slēdži -RGB LED

- kabeļu varianti

1. darbība: 1. darbība: Imprimir Todas Las Piezas De La Estructura

1. darbība: Imprimir Todas Las Piezas De La Estructura
1. darbība: Imprimir Todas Las Piezas De La Estructura

Es necesario imprimir todas las piezas.

Aqui podreis encontrar todos los archivos.stl:

Cabe destacar que las hemos impreso con las siguientes propiedades:

materiāls: PLA

aizpildījums: 25%

slāņa augstums: 0,12

ātrums: 55 mm/s

2. solis: Montaje De La Estructura

Montaje De La Estructura
Montaje De La Estructura

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

Guija:

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

Piezīme: no fijéis los tornillos de los servos antes de calibrarlos en el apartado de código.

3. solis: 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 va una list de los komponentu utilizados y algunos consejos para el montaje.- lipo baterry 7.4V 2700mmAh - x2 adafruit servo driver

- x18 mikro servos SG90

- tīmekļa kameras playstation acs

-aveņu pi

-LM2596 atkāpieties

-x2 slēdži

- RGB LED

- kabeļu varianti

Es importante que para conectar 2 adafruits servo vadītājiem, se suelde el bridge A0 de la segunda placa. Es este 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 configurar los mas adelante en el kodio. Explicado en el apartado de código.

4. solis: programmatūra: Calibraje De Servos

Antes de nada se tiene que configurar los pulsos máximos y mínimo de vuestros servos así como los pines donde estén conectados en el archivo hexapod_core.py.

cada servo esta identifado 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.

"" "locītavu_taustiņš: R - pa labi, L - pa kreisi F - priekšā, M - vidū, B - aizmugurē H - gūža, K - ceļgals, A - potītes atslēga: (kanāls, minimālais impulsa_garums, maksimālais_pulsa_garums)" "" GPIO.setwarnings [False] GPIO.setmode (GPIO. BOARD)

kopīgi_īpašumi = {

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

5. solis: programmatūra: Modulos

Programmatūra: Modulos
Programmatūra: Modulos

Reconocimiento de voz:

Para la implementación de éste metood hemos hecho úso de la API de Google 'Speech-to-Text'. Establecemos un streaming on Google cloud, para obtener las respuestas en texto, y así poder procesarlas para accionar solo and los casos que nos interesa.

Para poder hacer úso de esta API need tenams un proyecto registerrado en Google Cloud, y de este descargar las credenciales para poder autenticar el robot.

Para Guardar las credenciales en unaa variable de entorno tenemos que ejecutar el siguiente comando (raspbian):

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

Una vez hemos realizado esta comando ya podemos hacer úso de la API de speech-to-text.

El Código para realizar el streaming estate proporcionado por google en su pagina official, muy bien documentado:

Funkcijas galvenais straumēšanas es 'listen_print_loop', la encargada de decidir cual es la respuesta que se aproxima más al input recibido, y donde hemos controlado las respuestas para poder comunicarle al robot cuando ha de hacer una acción, o para avisarle que el comando de voz no es reconocido, para 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 seguido in instalación de un professional como es Adrian Rosebrock, kā arī tīmekļa vietnē:

2. PASO: PROBAR LA CAMARA Primero de todo una vez instalado opencv, lo que vamos a hacer es un pequeño script en 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ēt numpy kā np

importēt cv2

cap = cv2. VideoCapture (0)

kamēr (True): ret, frame = cap.read () pelēks = cv2.cvtColor (kadrs, cv2. COLOR_BGR2GRAY) cv2.imshow ('rāmis', rāmis) cv2.imshow ('pelēks', pelēks), ja cv2.waitKey (1) & 0xFF == ord ('q'): pārtraukums

cap.release ()

cv2.destroyAllWindows ()

3. PASO: 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 en orden BGR a HSV (formato en el que opencv es capaz de interpretar).

importēt sistēmu

importēt numpy kā np importēt cv2 zils = sys.argv [1] zaļš = sys.argv [2] sarkans = sys.argv [3] krāsa = 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 únicamente uno, lo cual dificultaría la detekcija por problēmas 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ēt cv2

importēt numpy kā np

# Izlasiet attēlu - 1 nozīmē, ka mēs vēlamies attēlu BGR

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

# mainīt attēla izmēru līdz 20% katrā asī

img = cv2.izmērs (img, (0, 0), fx = 0.2, fy = 0.2) # konvertēt BGR attēlu uz HSV attēlu hsv = cv2.cvtColor (img, cv2. COLOR_BGR2HSV)

# NumPy, lai izveidotu masīvus apakšējā un augšējā diapazona turēšanai

# “Dtype = np.uint8” nozīmē, ka datu tips ir 8 bitu vesels skaitlis

low_range = np.array ([24, 100, 100], dtype = np.uint8)

augšējais_diapazons = np.masīvs ([44, 255, 255], dtype = np.uint8)

# izveidojiet masku attēlam

maska = cv2.inRange (hsv, apakšējais_diapazons, augšējais_diapazons)

# parādīt masku un attēlu blakus

cv2.imshow ('maska', maska) cv2.imshow ('attēls', img)

# pagaidiet, līdz lietotājs nospiež [ESC]

kamēr (1): k = cv2.waitKey (0), ja (k == 27): break cv2.destroyAllWindows ()

4. PASO. En este caso lo que crearemos será un script para que cuando el radio de nuestro objeto sea Mayer 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.

# turpiniet tikai tad, ja rādiuss atbilst minimālajam izmēram

ja rādiuss> 10: # uzzīmējiet apli un centrālo rāmi, # tad atjauniniet izsekoto punktu sarakstu cv2.circle (frame, (int (x), int (y)), int (rādiuss), (0, 255, 255), 2) cv2.aplis (rāmis, centrs, 5, (0, 0, 255), -1) # apļa koordinātu kartes drukāšanas centrsOBjectPosition (int (x), int (y)) #, ja LED ir vēl nav ieslēgts, ieslēdziet LED, ja tas nav ieslēgts Ieslēgts: GPIO.output (redLed, GPIO. HIGH) ledOn = True def mapObjectPosition (x, y): print ("[INFO] Objektu centrs koordinē pie X0 = {0} un Y0 = {1} ". Formāts (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.

5. PASO: OBJEKTA IZSEKOŠANA Llegamos al paso final. Una vez realizados los anteriores puntos, estaremos listos para poder configurar un par de parámetros 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.

ja (x 280):

print ("[ACTION] GIRAR DERECHA") self.hexa.rotate (nobīde = -15, atkārtojumi = 1)

Lo que estamos realizando con los condicionales anteriores es decir que si nuestra coordenada x es citu 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 second límite en caso de proximidad de la pelota. Cuanto mas cerca este la pelota de nuestro robot ¡, más grande será su radio and por tanto más cerca estará nuestro robot en conseguir su objetivo.

ja rādiuss <105: self.hexa.walk (šūpošanās = 40, atkārtojumi = 1, pacelts = -30, grīda = 50, t = 0,3)

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

Ieteicams: