Table des matières:

HexaWalker : 5 étapes
HexaWalker : 5 étapes

Vidéo: HexaWalker : 5 étapes

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

Hemos echo un grupo de estudiantes de la UAB un robot hexapodo autonome avec une webcam avec micrófono mediante la cual puedes interactuar con el. L'ère de l'idée 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 commenter que la estructura que hemos utilizado para nuestro hexapodo la hemos sacado del robot open source Hexy de ArcBotics.

Aquí el link al codigo:

Fournitures

- batterie lipo 7.4V 2700mmAh

- x2 servomoteur adafruit

- x18 micro servos SG90s

- webcam playstation oeil

-raspberry pi -LM2596 abaisseur -x2 interrupteurs - LED RVB

- câbles divers

Étape 1: Étape 1: Imprimir Todas Las Piezas De La Estructura

Étape 1: Imprimir Todas Las Piezas De La Estructura
Étape 1: 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:

matériel: PLA

remplissage: 25 %

hauteur de couche: 0,12

vitesse: 55 mm/s

Étape 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 autor de las piezas 3D:

guide:

Pas besoin de suivre les instructions pour le bon fonctionnement du robot, vous êtes en nuestro caso, solo las hemos utilizado como ayuda.

Nota: pas de fijéis los tornillos de los servos antes de calibrarlos en el apartado de código.

Étape 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

Aquí va una lista de los componentes utilizados y algunos consejos para el montaje.- lipo batterie 7.4V 2700mmAh - x2 servodriver adafruit

- x18 micro servos SG90s

- webcam playstation oeil

-tarte aux framboises

-LM2596 abaisser

-x2 commutateurs

- LED RVB

- câbles divers

Es important que para conectar 2 servodrivers adafruits, 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 configurar los mas adelante en el codigo. Explicite en el apartado de code.

Étape 4: Logiciel: 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 que cambiarlo de signo.

""" convention joint_key: R - droite, L - gauche F - avant, M - milieu, B - arrière H - hanche, K - genou, A - Cheville clé: (canal, minimum_pulse_length, maximum_pulse_length) """ GPIO.setwarnings (Faux) GPIO.setmode(GPIO. BOARD)

propriétés_jointes = {

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

Étape 5: Logiciel: Modulos

Logiciel: Modulos
Logiciel: Modulos

Module de reconnaissance de voix:

Pour la mise en œuvre de l'éste modulo hemos hecho úso de l'API de Google 'Speech-to-Text'. Establecemos un streaming con el cloud de Google, para obtener las respuestas in texto, y así Poder procesarlas para accionar solo in los casos que no interesa.

Para poder hacer úso de esta API necesitamos tener un proyecto registrado in Google Cloud, y de ise descargar las credenciales para poder autenticar el robot.

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

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

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

El código para realizar el streaming está proporcionado por google en su pagina oficial, muy bien documentado:https://cloud.google.com/speech-to-text/docs/stre…

La fonction principale du streaming 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 comanarle que el 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: INSTALLER OPENCVHemos seguido la instalación de un profesional como es Adrian Rosebrock, en su pàgina web:

PASO 2: 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.

importer numpy en tant que np

importer cv2

cap = cv2. Capture Vidéo(0)

while(True): ret, frame = cap.read() gray = cv2.cvtColor(frame, cv2. COLOR_BGR2GRAY) cv2.imshow('frame', frame) cv2.imshow('gray', gray) if 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 une couleur en orden BGR a HSV (formato en el que opencv es capaz de interpretar).

importer le système

import numpy as np import cv2 bleu = sys.argv[1] vert = sys.argv[2] rouge = sys.argv[3] couleur = np.uint8(

Una vez hayamos hecho la conversion 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 detección por problemas de luz o contraste.

El siguiente paso es con une 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.

importer cv2

importer numpy en tant que np

# Lire l'image - Le 1 signifie que nous voulons l'image dans BGR

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

# redimensionner l'image à 20% dans chaque axe

img = cv2.resize(img, (0, 0), fx=0.2, fy=0.2) # convertir l'image BGR en image HSV hsv = cv2.cvtColor(img, cv2. COLOR_BGR2HSV)

# NumPy pour créer des tableaux pour contenir les plages inférieure et supérieure

# Le "dtype = np.uint8" signifie que le type de données est un entier de 8 bits

plage_inférieure = np.array([24, 100, 100], dtype=np.uint8)

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

# créer un masque pour l'image

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

# afficher le masque et l'image côte à côte

cv2.imshow('masque', masque) cv2.imshow('image', img)

# attendre que l'utilisateur appuie sur [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 objet del centro de nuestro. 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.

# ne procéder que si le rayon correspond à une taille minimale

si rayon > 10: # tracer le cercle et le centroïde sur le cadre, # puis mettre à jour la liste des points suivis cv2.circle(frame, (int(x), int(y)), int(radius), (0, 255, 255), 2) cv2.circle(frame, center, 5, (0, 0, 255), -1) # imprime les coordonnées du centre du cercle mapObjectPosition(int(x), int(y)) # si la led est pas déjà allumé, allumez la LED si pas ledOn: GPIO.output(redLed, GPIO. HIGH) ledOn = True def mapObjectPosition (x, y): print ("[INFO] Object Center se coordonne à X0 = {0} et 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 movimienting alún lún lí por.

PASO 5: SUIVI D'OBJETS Finale de Llegamos al paso. Una vez realizados los anteriores puntos, estaremos listos para poder configurar un par de parametros y poner a funcionar nuestra detección. Para ello utilizaremos como anteriormente hemos dicho, los parametros del color hsv máximo y mínimo para poder crear la máscara y dtectar el objeto.

colorLower = (-2, 100, 100)

couleurSupérieur = (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.

si (x 280):

print ("[ACTION] GIRAR DERECHA") self.hexa.rotate(offset = -15, répétitions = 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.

si rayon < 105: self.hexa.walk(swing = 40, répétitions = 1, surélevé = -30, floor = 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.

Conseillé: