Índice:

HexaWalker: 5 etapas
HexaWalker: 5 etapas

Vídeo: HexaWalker: 5 etapas

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

Hemos echo um grupo de estudiantes da UAB um robô hexapodo autônomo com uma webcam com micrófono mediante a interação pessoal com ele. A ideia era hacer um robô amistoso que reconociera ordenes de voz y pueda seguir mediante la cámara una pelota. Algo así como una "mascota" rebotica.

Cabe comentar que a estrutura que hemos utilizado para o novo hexapodo hemos sacado do robô de código aberto Hexy de ArcBotics.

Aquí el link al codigo:

Suprimentos

- lipo baterry 7,4V 2700mmAh

- x2 adafruit servo driver

- x18 micro servos SG90s

- webcam playstation eye

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

- cabos varios

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

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

Es necesario imprimir todas as piezas.

Aqui podreis encontrar todos los archivos.stl:

Cabe destacar que las hemos impreso con las siguientes propiedades:

material: PLA

preenchimento: 25%

altura da camada: 0,12

velocidade: 55 mm / s

Etapa 2: Montaje De La Estructura

Montaje De La Estructura
Montaje De La Estructura

Para a montagem da estrutura, recomendamos seguir a guia do autor das telas 3D:

guía:

Não é necessário seguir as instruções estritamente para o funcionamento do robô, você que no novo caso, apenas os hemos utilizados como ayuda.

Nota: no fijéis los tornillos de los servos antes de calibrarlos en el apartado de code.

Etapa 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 uma lista de los componentes utilizados y algunos consejos para el montaje.- lipo baterry 7.4V 2700mmAh - x2 adafruit servo driver

- x18 micro servos SG90s

- webcam playstation eye

-Raspberry Pi

-LM2596 descer

-x2 interruptores

- LED RGB

- cabos varios

É importante que para conectar 2 servo drivers adafruits, selecione a ponte A0 da 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 conecta los pines es indiferente ya que tendrás que configurar los mas adelante en el código. Explicado no separado de código.

Etapa 4: Software: Calibraje De Servos

Antes de nada se tiver que configurar os pulsos máximos e mínimos de vuestros servos assim como os pinheiros não estão conectados no arquivo hexapod_core.py.

cada servo esta identificado segundo a lei de abajo, por cada servo se tem que indicar, o pino de conexão ao servo driver, pulso mínimo, pulso máximo e o último parámetro é por si o servo funcionando al revés de como debería, solo tenies que cambiarlo de signo.

"" "convenção de teclas de junção: R - direita, L - esquerda F - frontal, M - meio, B - costas H - quadril, K - joelho, A - Tecla de tornozelo: (canal, comprimento_de_pulso mínimo, comprimento_de_pulsão máximo)" "" GPIO.setwarnings (Falso) 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)}

Etapa 5: Software: Módulos

Software: Módulos
Software: Módulos

Módulo de reconocimiento de voz:

Para a implementação de éste módulo hemos hecho úso da API do Google 'Speech-to-Text'. Estabelecemos um streaming com a nuvem do Google, para obter las respuestas em texto, e assim poder procesarlas para accionar solo en los casos que nos interesa.

Para podermos usar esta API, precisamos ter um projeto registrado no Google Cloud, e este descargar as credencias para poder autenticar o robô.

Para guardar las credenciales em uma variável de entorno tenemos que ejecutar o comando siguiente (Raspbian):

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

Uma vez que ele foi executado este comando e podemos ter a API de fala para texto.

O código para realizar o streaming está proporcionado pelo google em sua página oficial, muy bien documentado:

A função principal do streaming é 'listen_print_loop', a encargada de decidir cual é a resposta que se aproxima mais do recebimento de entrada, e donde hemos controlado as respostas para poder comunicar-se com o robô quando há de hacer uma ação, ou para avisarle que o comando de voz no es reconocido, para que o robô realice um movimento que simula no haber entendido al usuario.

O código adaptado se encuentra no repositório de git Hexawalker

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

PASO 1: INSTALAR OPENCVHemos seguido a instalação de um profissional como es Adrian Rosebrock, em sua 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.

importar numpy como np

import 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) se cv2.waitKey (1) & 0xFF == ord ('q'): pausa

cap.release ()

cv2.destroyAllWindows ()

PASO 3: DETECCIÓN DEL COLOR CON OPENCV Para o siguiente paso lo que vamos a realizar es una detección de color. Para ello, primeiro de tudo vamos realizar um script que nos permita converter uma cor em orden BGR para HSV (formato en el que opencv es capaz de interpretar).

import sys

import numpy como 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 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 é 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 all los colores that no se encuentren en ese rango hsv that hemos definido.

import cv2

importar numpy como np

# Leia a imagem - O 1 significa que queremos a imagem em BGR

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

# redimensionar imagem para 20% em cada eixo

img = cv2.resize (img, (0, 0), fx = 0.2, fy = 0.2) # converter imagem BGR em uma imagem HSV hsv = cv2.cvtColor (img, cv2. COLOR_BGR2HSV)

# NumPy para criar matrizes para manter o intervalo inferior e superior

# O “dtype = np.uint8” significa que o tipo de dados é um número inteiro de 8 bits

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

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

# crie uma máscara para a imagem

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

# exibe a máscara e a imagem lado a lado

cv2.imshow ('máscara', máscara) cv2.imshow ('imagem', img)

# esperar que o usuário pressione [ESC]

while (1): k = cv2.waitKey (0) if (k == 27): break cv2.destroyAllWindows ()

PASO 4: POSICIONAMIENTO DEL OBJETO En este paso probaremos que uma vez a camara se encuentre en funcionamiento y hayamos configurado nuestro rango mínimo y máximo de cor hsv, que este mar capaz de encontrar as coordenadas x e y del centro de nuestro objeto. Neste caso, se crearemos será um script para que acesse o rádio de nosso objeto sea mayor a 10, dibuje um círculo sobre o objeto y nos vaya mostrando por pantalla a posição em tiempo real sus coordenadas x e y.

# só prossegue se o raio atingir um tamanho mínimo

se raio> 10: # desenhe o círculo e o centroide no quadro, # então atualize a lista de pontos rastreados cv2.circle (quadro, (int (x), int (y)), int (raio), (0, 255, 255), 2) cv2.circle (frame, center, 5, (0, 0, 255), -1) # imprimir as coordenadas do centro do círculo mapObjectPosition (int (x), int (y)) # se o led for ainda não estiver ligado, ligue o LED se não ledOn: GPIO.output (redLed, GPIO. HIGH) ledOn = True def mapObjectPosition (x, y): print ("[INFO] Coordenadas do centro de objetos em X0 = {0} e Y0 = {1} ". Formato (x, y))

Vamos ver se vamos conseguir es no siguiente paso poder jugar com as coordenadas para estabelecer os límites de lo que será girar a la derecha nuestro robot, girar a la izquierda ou bien no realizar ningún movimiento al no salir por ningún límite.

PASO 5: RASTREAMENTO DE OBJETOS Llegamos al paso final. Uma vez realizada los anteriores puntos, estaremos listos para poder configurar un par de parámetros y poner a funcionar nuestra detección. Para podermos usar como anteriormente hemos dicho, os parâmetros da cor hsv máximo e mínimo para poder criar a máscara e dtectar o 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.

if (x 280):

print ("[AÇÃO] GIRAR DERECHA") self.hexa.rotate (deslocamento = -15, repetições = 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. No caso do mar mais grande, gire a la derecha.

Para o caso no caso em que se deseja fazer uma viagem adelante para que se realize, é utilizar a variável dónde calculamos o rádio para marcar otro límite em caso de proximidade da pelota. Cuanto mas cerca desta pelota de novo robô ¡, mais grande será no rádio e por tanto mais cerca do nuestro robô para conseguir seu objetivo.

se raio <105: self.hexa.walk (balanço = 40, repetições = 1, elevado = -30, piso = 50, t = 0,3)

A partir deste ponto o programador você está livre para realizar modificações e ir jugando com parâmetros e cores.

Recomendado: