Оглавление:

HexaWalker: 5 шагов
HexaWalker: 5 шагов

Видео: HexaWalker: 5 шагов

Видео: HexaWalker: 5 шагов
Видео: 【HEXA NFT 作品&クリエーター紹介】HEXA WALKER Vol.5 HEXANFT展@こはくの天使 2024, Июль
Anonim
Image
Image
HexaWalker
HexaWalker

Hemos echo un grupo de estudiantes de la UAB un robot hexapodo autonomo con una webcam con microfono mediante la cual puedes interactuar con el. La idea era hacer un robot amistoso que reconociera ordenes de voz y pueda seguir mediante la cámara una pelota. Algo asi como una "mascota" rebotica.

Позволяет добавить структуру, которая будет использоваться для гексаподстанции шестиугольника робота с открытым исходным кодом Hexy de ArcBotics.

Актуальная ссылка на код:

Запасы

- липо аккумулятор 7.4V 2700mmAh

- сервопривод x2 adafruit

- x18 микро сервоприводов SG90s

- веб-камера PlayStation Eye

-raspberry pi -LM2596 понижающий -x2 переключатели - светодиод RGB

- кабели varios

Шаг 1: Шаг 1: Imprimir Todas Las Piezas De La Estructura

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

материал: PLA

заполнение: 25%

высота слоя: 0,12

скорость: 55 мм / с

Шаг 2: Montaje De La Estructura

Montaje De La Estructura
Montaje De La Estructura

Рекомендуемая конструкция для монтажа по принципу "Гиа-де-автор де лас-пьезас" 3D:

гиа:

Нет необходимости следовать инструкциям по эксплуатации для буэн-функций-роботов, я хочу, чтобы они были в Nuestro caso, соло-лас-гемос, использующимися в комо-аюда.

Примечание: нет fijéis los tornillos de los servos antes de calibrarlos en el apartado de código.

Шаг 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 components utilizados y algunos Conjos para el montaje. - lipo baterry 7.4V 2700mmAh - x2 adafruit servo driver

- x18 микросервоприводов SG90s

- веб-камера PlayStation Eye

-Raspberry Pi

-LM2596 шаг вниз

-x2 переключатели

- светодиод RGB

- кабели varios

Это важно для двух коннекторов сервоприводов, это замша мост A0 на второй площадке. 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 tenrás que configurar los mas adelante en el código. Explicado en el apartado de código.

Шаг 4: Программное обеспечение: 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 identifyado 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 solo debería que cambiarlo de signo.

"" "условное обозначение Joint_key: R - правая, L - левая F - передняя, M - средняя, B - задняя H - бедра, K - колено, A - голеностопный ключ: (channel, minimum_pulse_length, maximum_pulse_length)" "" GPIO.setwarnings (Ложь) 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)}

Шаг 5: Программное обеспечение: Modulos

Программное обеспечение: Modulos
Программное обеспечение: Modulos

Módulo de reconocimiento de voz:

Для реализации éste módulo hemos hecho úso de la API de Google 'Speech-to-Text'. Establecemos un streaming con el cloud de Google, для получения ответов в тексте, и для того, чтобы обрабатывать отдельные файлы в казино, которые не интересуют.

Чтобы получить доступ к API-интерфейсу, который необходим для регистрации в Google Cloud, вы можете загрузить учетные данные для автоматического создания роботов.

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

экспорт GOOGLE_APPLICATION_CREDENTIALS = "/ tu / ruta / hacia / las / credenciales.json"

Una vez hemos реализует команду, которую вы можете использовать для преобразования речи в текст.

Код для реализации потоковой передачи является пропорциональной для Google на официальной странице, muy bien documentado:

Основная функция потоковой передачи 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 avisarle que el de voz no es reconocido, para que el robot realice un movimiento que simula no haber entendido al usuario.

El código adapado se encuentra en el repositorio de git Hexawalker

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

PASO 1: УСТАНОВИТЕ OPENCVHemos seguido la instalación de un profesional como es Adrian Rosebrock, на веб-сайте:

PASO 2: PROBAR LA CAMARA Primero de todo una vez instalado opencv, lo que vamos a hacer es un pequeño script en python for 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 как np

импорт cv2

cap = cv2. VideoCapture (0)

while (True): ret, frame = cap.read () gray = cv2.cvtColor (frame, cv2. COLOR_BGR2GRAY) cv2.imshow ('frame', frame) cv2.imshow ('серый', серый) if cv2.waitKey (1) & 0xFF == ord ('q'): перерыв

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. Для этого нужно сначала реализовать сценарий, который разрешает преобразование цвета в BGR и HSV (формат для открытых сценариев с возможностью интерпретации).

import sys

импортировать numpy как np import cv2 blue = sys.argv [1] green = sys.argv [2] red = sys.argv [3] color = np.uint8 (

Una vez hayamos hecho la convertió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 unounicamente cual Dificultaría la Detección por 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 detectar) converttida en una máscara, aislando todos los colores que no se encuentren en ese rango hsv que hemos Definido.

импорт cv2

импортировать numpy как np

# Прочтите изображение - 1 означает, что мы хотим, чтобы изображение было в BGR

img = cv2.imread ('желтый_объект.jpg', 1)

# изменить размер изображения до 20% по каждой оси

img = cv2.resize (img, (0, 0), fx = 0.2, fy = 0.2) # преобразовать изображение BGR в изображение HSV hsv = cv2.cvtColor (img, cv2. COLOR_BGR2HSV)

# NumPy для создания массивов для хранения нижнего и верхнего диапазона

# «Dtype = np.uint8» означает, что тип данных является 8-битным целым числом

нижний_ диапазон = np.array ([24, 100, 100], dtype = np.uint8)

верхний_ диапазон = np.array ([44, 255, 255], dtype = np.uint8)

# создаем маску для изображения

маска = cv2.inRange (HSV, нижний_диапазон, верхний_диапазон)

# отображаем и маску, и изображение бок о бок

cv2.imshow ('маска', маска) cv2.imshow ('изображение', img)

# ждать, пока пользователь нажмет [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 nurodenadas x e. En este caso lo que crearemos será un script para que cuando el radio de nuestro objeto sea mayor a 10, dibuje un circuitlo sobre el objeto y nos vaya mostrando por pantalla la posición en tiempo real sus coordenadas x e y.

# продолжаем, только если радиус соответствует минимальному размеру

если радиус> 10: # рисуем круг и центроид на кадре, # затем обновляем список отслеживаемых точек cv2.circle (frame, (int (x), int (y)), int (radius), (0, 255, 255), 2) cv2.circle (frame, center, 5, (0, 0, 255), -1) # вывести координаты центра круга mapObjectPosition (int (x), int (y)) # если светодиод еще не включен, включите светодиод, если он не светится ledOn: GPIO.output (redLed, GPIO. HIGH) ledOn = True def mapObjectPosition (x, y): print ("[INFO] Центр объектов имеет координаты X0 = {0} и Y0 = {1} ". Формат (x, y))

Con esto lo que vamos a consguir 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 salir l Por niteing.

ПАСО 5: ОТСЛЕЖИВАНИЕ ОБЪЕКТОВ Финал "Llegamos al paso". 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.

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.

если (x 280):

print ("[ДЕЙСТВИЕ] GIRAR DERECHA") self.hexa.rotate (смещение = -15, повторы = 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 probidad 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 conguir su objetivo.

если радиус <105: self.hexa.walk (качели = 40, повторения = 1, приподнятие = -30, пол = 50, t = 0,3)

Это часть программы, которая позволяет вам реализовывать модификации и игры с параметрами и цветами.

Рекомендуемые: