Inhaltsverzeichnis:

HexaWalker - Gunook
HexaWalker - Gunook

Video: HexaWalker - Gunook

Video: HexaWalker - Gunook
Video: hexawalker 2024, Juli
Anonim
Image
Image
HexaWalker
HexaWalker

Hemos Echo einer Gruppe von Lehrkräften der UAB von einem autonomen Hexapodo-Roboter mit einer Webcam mit einem Mikrophon, der mit einem interaktiven Computer mit el. La Idea era hacer un robot amistoso que reconociera ordenes de voz y pueda seguir mediante la cámara una pelota. Algo así como una "mascota" rebotica.

Kommentieren Sie die Struktur von Hemos, die für die neue Hexapodo-Hämos-Sacado des Roboters Open Source Hexy de ArcBotics verwendet werden.

Aquí el link al codigo:

Lieferungen

- Lipo-Akku 7,4V 2700mmAh

- x2 Adafruit-Servotreiber

- x18 Mikroservos SG90s

- Webcam-Playstation-Auge

-raspberry pi -LM2596 step down -x2 Schalter - RGB LED

- Kabel varios

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

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

Material: PLA

Füllung: 25%

Schichthöhe: 0,12

Geschwindigkeit: 55 mm/s

Schritt 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:

guía:

Es ist nicht erforderlich, die Anweisungen für die Roboterfunktion, die Sie im Nuestro-Caso, Solo-las-Hemos-Utilizado-Como-Ayuda zu verwenden, erforderlich ist.

Anmerkung: keine fijéis los tornillos de los servos antes de calibrarlos und el apartado de código.

Schritt 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 componentses utilizados y algunos consejos para el montaje. - Lipo-Batterie 7,4 V 2700 mmAh - x2 Adafruit-Servotreiber

- x18 Mikroservos SG90s

- Webcam-Playstation-Auge

-Himbeer-Pi

-LM2596 Schritt nach unten

-x2 Schalter

- RGB-LED

- Kabel varios

Es ist wichtig, dass Sie 2 Servotreiber von Adafruits anschließen, und die Brücke A0 de la segunda placa verwenden. En este link esta detallado: https://learn.adafruit.com/16-channel-pwm-servo-d… Respekt für die Servos el orden en el que conectes los pines es indiferente ya que tendrás que configurar los mas adelante en el código. Explicado und el Apartado de código.

Schritt 4: Software: Calibraje De Servos

Antes de nada se tiene que configurar los pulsos maximas y minimo de vuestros servos así como los pines donde estén conectados und 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 de al revébers que cambiarlo de signo.

""" Gelenkschlüsselkonvention: R - rechts, L - links F - vorne, M - Mitte, B - hinten H - Hüfte, K - Knie, A - Knöcheltaste: (Kanal, minimale_Impulslänge, maximale_Impulslänge) """ GPIO.setwarnings (Falsch) GPIO.setmode(GPIO. BOARD)

gemeinsame_eigenschaften = {

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

Schritt 5: Software: Modulos

Software: Modulos
Software: Modulos

Módulo de reconocimiento de voz:

Para la implementación de éste módulo hemos hecho úso de la API von Google 'Speech-to-Text'. Establecemos un streaming con el cloud de Google, für obtener las Antworten und texto, y así poder procesarlas para accionar solo und los casos que nos interesa.

Für den Zugriff auf eine API ist eine Registrierung in Google Cloud erforderlich, und Sie müssen die Anmeldeinformationen für einen autenticar el robot verwenden.

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

export 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 está proporcionado por google and su pagina oficial, muy bien documentado:

La función Principal del 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ónle, o que para avisar o 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: INSTALLIEREN SIE 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 ein pequeño script und 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.

numpy als np importieren

CV2 importieren

cap = cv2. VideoCapture(0)

while(True): ret, frame = cap.read() grey = cv2.cvtColor(frame, cv2. COLOR_BGR2GRAY) cv2.imshow('frame', frame) cv2.imshow('gray', grey) if cv2.waitKey (1) & 0xFF == ord('q'): break

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, primeo de todo vamos a realizar un script que nos allowa convertir un color en orden BGR a HSV (formato en el que opencv es capaz de interpretar).

Importsystem

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

Una vez hayamos hecho la conversión de nuestro color deseado, el script nos printará por consola el limite por debajo y el limite por arriba, el cual nos servirá para que la detección tenga una gama de colores entre dos noes únic cual dificultaría la detección por problemas de luz oder kontraste.

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 and this range hsv que hemos definido.

CV2 importieren

numpy als np importieren

# Bild lesen - Die 1 bedeutet, dass wir das Bild in BGR. wollen

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

# Bildgröße in jeder Achse auf 20 % ändern

img = cv2.resize(img, (0, 0), fx=0.2, fy=0.2) # BGR-Bild in ein HSV-Bild umwandeln hsv = cv2.cvtColor(img, cv2. COLOR_BGR2HSV)

# NumPy zum Erstellen von Arrays für den unteren und oberen Bereich

# „dtype = np.uint8“bedeutet, dass der Datentyp eine 8-Bit-Ganzzahl ist

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

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

# eine Maske für das Bild erstellen

mask = cv2.inRange(hsv, unterer_Bereich, oberer_Bereich)

# sowohl die Maske als auch das Bild nebeneinander anzeigen

cv2.imshow('Maske', Maske) cv2.imshow('Bild', img)

# warten, bis der Benutzer [ESC] drückt

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

# nur fortfahren, wenn der Radius eine Mindestgröße erreicht

if radius > 10: # Zeichnen Sie den Kreis und den Schwerpunkt auf dem Rahmen, # aktualisieren Sie dann die Liste der verfolgten Punkte cv2.circle(frame, (int(x), int(y)), int(radius), (0, 255, 255), 2) cv2.circle(frame, center, 5, (0, 0, 255), -1) # Druckmittelpunktkoordinaten mapObjectPosition(int(x), int(y)) # wenn die LED ist nicht bereits eingeschaltet, schalten Sie die LED ein, falls nicht ledOn: GPIO.output(redLed, GPIO. HIGH) ledOn = True def mapObjectPosition (x, y): print ("[INFO] Object Center koordiniert bei X0 = {0} und 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 limites de lo que será girar a la derecha nuestro robot, girar a la izquierda o bien no realizar ning porúning.

PASO 5: OBJEKTVERFOLGUNG 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 minimo para poder crear la máscara y dtectar el objeto.

FarbeLower = (-2, 100, 100)

FarbeUpper = (18, 255, 255)

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

wenn (x280):

print ("[AKTION] GIRAR DERECHA") self.hexa.rotate(Offset = -15, Wiederholungen = 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 limite en caso de proximidad de la pelota. Cuanto mas cerca este la pelota de nuestro robot ¡, más grande será su radio und port tanto más cerca estará nuestro robot en conseguir su objetivo.

wenn Radius < 105: self.hexa.walk(Swing = 40, Repetitions = 1, Raised = -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.