Spisu treści:

HexaWalker: 5 kroków
HexaWalker: 5 kroków

Wideo: HexaWalker: 5 kroków

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

Hemos echo grupa studentów UAB autonomicznego sześcioboku robota z kamerą internetową z środkowym mikrofonem do interakcji z 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.

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

Uzyskaj link do kodu:

Kieszonkowe dzieci

- bateria lipo 7,4V 2700mmAh

- sterownik serwo x2 adafruit

- x18 mikro serwa SG90s

- kamera na konsole PlayStation oko

-raspberry pi -LM2596 step down -x2 przełączniki - RGB LED

- kable varios

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

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

materiał: PLA

wypełnienie: 25%

wysokość warstwy: 0,12

prędkość: 55 mm/s

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

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

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

Krok 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. - bateria lipo 7.4V 2700mmAh - x2 adafruit serwosterownik

- x18 mikro serwa SG90s

- kamera na konsole PlayStation oko

-pić malinowa

-LM2596 krok w dół

-x2 przełączniki

- LED RGB

- kable varios

Es Importante que para conectar 2 adafruits serwonapędy, 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 kodygo. Explicado en el apartado de código.

Krok 4: Oprogramowanie: Calibraje De Servos

Antes de nada se tiene que configurar los pulsos maximos y minimo de vuestros servo 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 minimo, pulso máximo y el ultimo parametro es por si el servo esta funcioínando de solo de como al revés que cambarlo de signo.

""" konwencja klawiszy_połączeń: R - prawy, L - lewy F - przód, M - środek, B - tył H - biodro, K - kolano, A - klawisz kostki: (kanał, minimalna_długość_impulsu, maksymalna_długość_impulsu) """ GPIO.setwarnings (Fałsz) GPIO.setmode(GPIO. BOARD)

wspólne_właściwości = {

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

Krok 5: Oprogramowanie: Modulos

Oprogramowanie: Modulos
Oprogramowanie: Modulos

Módulo de reconocimiento de voz:

Para la implementación de éste módulo hemos hecho úso de la API de Google „Speech-to-Text”. Establecemos un streaming con el cloud de Google, para obtener las respuestas en texto, y así poder processarlas para accionar solo en los casos que nos interesa.

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

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

eksportuj 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 jest proporcjonalny przez google en su pagina oficjalna, 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, 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: ZAINSTALUJ OPENCVHemos seguido instalacji profesjonalnej kompanii Adrian Rosebrock, en na stronie internetowej:

PASO 2: PROBAR LA CAMARA Pierwszy krok do wykonania instalacji 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, z oryginalnym obrazem y otra z obrazem en blanco y negro.

importuj numer jako np

importuj 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', gray) if cv2.waitKey (1) & 0xFF == ord('q'): przerwa

cap.zwolnienie()

cv2.zniszczWszystkieOkna()

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

system importu

importuj numpy jako np import cv2 niebieski = sys.argv[1] zielony = sys.argv[2] czerwony = sys.argv[3] kolor = 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 entrenica dos uno colores hs cual dificultaría la detección por problemas de luz o 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 en ese rango hsv que hemos definido.

importuj cv2

importuj numer jako np

# Przeczytaj zdjęcie - 1 oznacza, że chcemy obraz w BGR

img = cv2.imread('żółty_obiekt.jpg', 1)

# zmień rozmiar obrazu do 20% w każdej osi

img = cv2.resize(img, (0, 0), fx=0.2, fy=0.2) # przekonwertuj obraz BGR na obraz HSV hsv = cv2.cvtColor(img, cv2. COLOR_BGR2HSV)

# NumPy do tworzenia tablic do przechowywania dolnego i górnego zakresu

# „dtype = np.uint8” oznacza, że typ danych to 8-bitowa liczba całkowita

dolny_zakres = np. tablica ([24, 100, 100], dtype=np. uint8)

górny_zakres = np. tablica ([44, 255, 255], dtype=np.uint8)

# utwórz maskę dla obrazu

maska = cv2.inRange(hsv, dolny_zakres, górny_zakres)

# wyświetlaj maskę i obraz obok siebie

cv2.imshow('maska', maska) cv2.imshow('obraz', img)

# poczekaj, aż użytkownik naciśnie [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 minimo y maximo de color hsv, que este sea capaz de encontrar las coordenadas centro e. En este caso lo que crearemos será un script para que cuando el radio de nuestro objeto sea burmistrz 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.

# postępuj tylko wtedy, gdy promień spełnia minimalny rozmiar

jeśli promień > 10: # narysuj okrąg i środek ciężkości na ramie, # następnie zaktualizuj listę śledzonych punktów cv2.circle(frame, (int(x), int(y)), int(radius), (0, 255, 255), 2) cv2.circle(frame, center, 5, (0, 0, 255), -1) # wypisz środek okręgu mapObjectPosition(int(x), int(y)) # jeśli dioda jest jeszcze nie włączona, włącz diodę LED, jeśli nie jest ledOn: GPIO.output(redLed, GPIO. HIGH) ledOn = True def mapObjectPosition (x, y): print ("[INFO] Object Center współrzędne w 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 de lo que será girar a la derecha nuestro robot, girar a la izquierda o bien no realizar ningún movimiento al no.

PASO 5: ŚLEDZENIE OBIEKTÓW Llegamos al paso final. 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 minimo para poder crear la máscara y dtectar el objeto.

kolorDolny = (-2, 100, 100)

kolorgórny = (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.

jeśli (x 280):

print ("[AKCJA] GIRAR DERECHA") self.hexa.rotate(offset = -15, powtórzenia = 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.

jeśli promień < 105: self.hexa.walk(swing = 40, powtórzenia = 1, podniesiony = -30, podłoga = 50, t = 0,3)

Partir de este punto el programador ya es libre de realizar modificaciones e ir jugando con parametros y colores.

Zalecana: