Mục lục:

HexaWalker: 5 bước
HexaWalker: 5 bước

Video: HexaWalker: 5 bước

Video: HexaWalker: 5 bước
Video: 【HEXA NFT 作品&クリエーター紹介】HEXA WALKER Vol.5 HEXANFT展@こはくの天使 2024, Tháng bảy
Anonim
Image
Image
HexaWalker
HexaWalker

Hemos echo un grupo de estudiantes de la UAB un robot hexapodo autonomo con una webcam con micrófono mediante la cual puedes tương tácuar con el. La idea era hacer un robot amistoso que regnociera ordenes de voz y pueda seguir mediante la cámara una pelota. Algo así como una "mascota" rebotica.

Cabe comentar que la estructura que hemos usedizado para nuestro hexapodo la hemos sacado del robot mã nguồn mở Hexy de ArcBotics.

Aquí el link al codigo:

Quân nhu

- lipo baterry 7.4V 2700mmAh

- x2 trình điều khiển servo adafruit

- x18 micro servos SG90s

- mắt máy chơi game webcam

-raspberry pi -LM2596 bước xuống -x2 công tắc - LED RGB

- các loại cáp

Bước 1: Bước 1: Imprimir Todas Las Piezas De La Estructura

Bước 1: Imprimir Todas Las Piezas De La Estructura
Bước 1: Imprimir Todas Las Piezas De La Estructura

Es necesario printmir todas las piezas.

Aqui podreis encontrar todos los archivos.stl:

Cabe destacar que las hemos impreso con las siguientes propiedades:

vật chất: PLA

điền vào: 25%

chiều cao lớp: 0,12

tốc độ: 55 mm / s

Bước 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 Guiducciones estrictamente para el buen funcionamiento del rô bốt, ya que en nuestro caso, solo las hemos Operatingizado como ayuda.

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

Bước 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

Các thành phần Aquí va una lista de los useizados y algunos consejos para el montaje.- lipo baterry 7.4V 2700mmAh - Trình điều khiển servo x2 adafruit

- x18 micro servos SG90s

- mắt máy chơi game webcam

-raspberry pi

-LM2596 bước xuống

-x2 công tắc

- Đèn LED RGB

- các loại cáp

Es importante que para conectar 2 adafruits servo driver, se suelde el bridge A0 de la segunda emba. 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 indferente ya que tensrás que configurar los mas adelante en el código. Explicado en el apartado de código.

Bước 4: Phần mềm: 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 Idificado 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.

"" "quy ước phím khớp: R - phải, L - trái F - trước, M - giữa, B - sau H - hông, K - đầu gối, A - Phím cổ chân: (kênh, tối thiểu_pulse_length, max_pulse_length)" "" GPIO.setwarnings (Sai) 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)}

Bước 5: Phần mềm: Modulos

Phần mềm: Modulos
Phần mềm: Modulos

Módulo de regnocimiento 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 procesarlas para accionar solo en los casos que nos Featsa.

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

Para Guardar las credenciales en una biến de entorno tenemos que ejecutar el siguiente comando (Raspbian):

xuấ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 está ratiocionado bởi google en su pagina of Justice, muy bien documentado:

La función major del streaming es 'listening_print_loop', la encargada de decidir cual es la respuesta que se aproxima más al input Recogbido, 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 recnocido, para que el robot realice un phimmiento 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: CÀI ĐẶT 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.

nhập numpy dưới dạng np

nhập 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'): ngắt

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

nhập hệ thống

import numpy dưới dạng np import cv2 blue = sys.argv [1] green = sys.argv [2] red = sys.argv [3] color = np.uint8 (

Una vez hayamos hecho la seekió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 una, lo cual dificultaría la detección bởi problemas 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 detar) converttida en una máscara, aislando todos los colres que no se encuentren en ese rango hsv que hemos Defdo.

nhập cv2

nhập numpy dưới dạng np

# Đọc hình ảnh - Điều 1 có nghĩa là chúng tôi muốn hình ảnh trong BGR

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

# thay đổi kích thước hình ảnh thành 20% trong mỗi trục

img = cv2.resize (img, (0, 0), fx = 0.2, fy = 0.2) # chuyển đổi hình ảnh BGR thành hình ảnh HSV hsv = cv2.cvtColor (img, cv2. COLOR_BGR2HSV)

# NumPy để tạo mảng để giữ dải ô dưới và dải trên

# “Dtype = np.uint8” có nghĩa là kiểu dữ liệu là số nguyên 8 bit

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

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

# tạo mặt nạ cho hình ảnh

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

# hiển thị cả mặt nạ và hình ảnh cạnh nhau

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

# đợi người dùng nhấn [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 del centro de nuestro objeto. En este caso lo que crearemos será un script para que cuando el radio de nuestro objeto sea thị trưởng a 10, dibuje un roundo sobre el objeto y nos vaya mostrando por pantalla la posición en tiempo real sus coordenadas x e y.

# chỉ tiếp tục nếu bán kính đáp ứng kích thước tối thiểu

nếu radius> 10: # vẽ đường tròn và tâm trên khung, # sau đó cập nhật danh sách các điểm được theo dõi cv2.circle (frame, (int (x), int (y)), int (radius), (0, 255, 255), 2) cv2.circle (frame, center, 5, (0, 0, 255), -1) # in trung tâm của bản đồ tọa độ vòng trònObjectPosition (int (x), int (y)) # nếu led là chưa bật, hãy bật đèn LED nếu chưa ledOn: GPIO.output (redLed, GPIO. HIGH) ledOn = True def mapObjectPosition (x, y): print ("[INFO] Trung tâm đối tượng coordenates tại X0 = {0} và 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íearch de lo que será girar a la derecha nuestro robot, girar a la izquierda o bien no realizar ningún phimmiento al no salir por ningún límite.

PASO 5: THEO DÕI ĐỐI TƯỢNG trận chung kết Llegamos al paso. Una vez realizados thua anteriores puntos, estaremos listos para poder configurar un par de parámetros y poner a funcionar nuestra detección. Para ello utizaremos 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.

nếu (x 280):

print ("[ACTION] GIRAR DERECHA") self.hexa.rotate (offset = -15, số lần lặp lại = 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 effizar la biến 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.

nếu bán kính <105: self.hexa.walk (đu = 40, số lần lặp lại = 1, nâng lên = -30, sàn = 50, t = 0,3)

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

Đề xuất: