Kazalo:
- Zaloge
- 1. korak: 1. korak: Imprimir Todas Las Piezas De La Estructura
- 2. korak: Montaje De La Estructura
- 3. korak: Montaje De La Electronica
- 4. korak: Programska oprema: Calibraje De Servos
- 5. korak: Programska oprema: Modulos
Video: HexaWalker: 5 korakov
2025 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2025-01-09 20:34
Hemos echo un grupo de estudiantes de la UAB un robot hexapodo autonomo with una webcam con micrófono mediaan 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 así como una "mascota" rebotica.
Cabe comentar que la estructura que hemos utilizado para nuestro hexapodo la hemos sacado del robot open source Hexy de ArcBotics.
Aquí el link al codigo:
Zaloge
- Lipo baterija 7,4V 2700mmAh
- x2 Adafruit servo gonilnik
- x18 mikro servomotorji SG90s
- oko za spletno kamero playstation eye
-raspberry pi -LM2596 stop navzdol -x2 stikala -LED RGB
- različni kabli
1. korak: 1. korak: 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
polnilo: 25%
višina sloja: 0,12
hitrost: 55 mm/s
2. korak: Montaje De La Estructura
Para el montaje de la estructura recomendamos seguir la guía del avtor 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.
Opomba: no fijéis los tornillos de los servos antes de calibrarlos en el apartado de código.
3. korak: Montaje De La Electronica
Aquí va una list de los components uptesados y algunos consejos para el montaje.- lipo baterry 7.4V 2700mmAh - x2 adafruit servo gonilnik
- x18 mikro servomotorji SG90s
- oko za spletno kamero playstation eye
-malina pi
-LM2596 stopite dol
-x2 stikala
- RGB LED
- različni kabli
Es importante que para conectar 2 adafruits servo gonilniki, ki so suelde el bridge A0 de la segunda placa. En este esta esta detalado: 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 código. Explicado en el apartado de código.
4. korak: Programska oprema: 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 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 al revés de como debería, solo tenies que cambiarlo de signo.
"" "dogovor skupnih ključev: R - desno, L - levo F - spredaj, M - srednji, B - zadaj H - kolk, K - koleno, A - ključ do gležnja: (kanal, minimalna_dulčna_dulzija, največja_pulzna_dolžina)" "" GPIO. nastavitve opozorila (Napačno) način GPIO.set (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. korak: Programska oprema: Modulos
Módulo de reconocimiento de voz:
Če želite izvesti uporabo tega orodja za uporabo API-ja v Googlu "Speech-to-Text". Establecemos un streaming con el cloud of Google, para obtener las respuestas en texto, y así poder procesarlas para accionar solo en los casos que nos interest.
Če želite, da vaš API potrebuje API, ki ga potrebujete za registracijo v Googlu Cloud, vam je treba naročiti lasten račun za podernega avtorskega robota.
Para guardar las credenciales en una variable de entorno tenemos que ejecutar el siguiente comando (Raspbian):
izvozi GOOGLE_APPLICATION_CREDENTIALS = "/tu/ruta/hacia/las/credenciales.json"
Ne vemo, da je realiziran sistem, ki vam omogoča, da uporabite API za govor v besedilo.
El código para realizar el streaming está proporcionado por google en na strani 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ón, o para avisarle que el comando 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: INSTALL OPENCVHemos seguido la instalación de un professional como es Adrian Rosebrock, en na strani:
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.
uvoz numpy kot np
uvoz cv2
cap = cv2. VideoCapture (0)
medtem ko (True): ret, frame = cap.read () grey = cv2.cvtColor (okvir, cv2. COLOR_BGR2GRAY) cv2.imshow ('okvir', okvir) cv2.imshow ('siv', siv), če cv2.waitKey (1) & 0xFF == ord ('q'): prelom
cap.release ()
cv2.destroyAllWindows ()
PASO 3: DETECCIÓN DEL COLOR CON OPENCV Para el siguiente paso lo que vamos and realizar es una detección de color. Para ello, primero de todo vamos a realizar un script que nos permita convertir un color en orden BGR a HSV (format en el que opencv es capaz de interpretar).
import sys
uvoz numpy kot np uvoz cv2 modra = sys.argv [1] zelena = sys.argv [2] rdeča = sys.argv [3] barva = 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 kual 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) convertida en una máscara, aislando todos los colores que no se encuentren en ese rango hsv que hemos definido.
uvoz cv2
uvoz numpy kot np
# Preberite sliko - 1 pomeni, da želimo sliko v BGR
img = cv2.imread ('yellow_object.jpg', 1)
# spremenite velikost slike na 20% v vsaki osi
img = cv2.resize (img, (0, 0), fx = 0,2, fy = 0,2) # pretvoriti sliko BGR v sliko HSV hsv = cv2.cvtColor (img, cv2. COLOR_BGR2HSV)
# NumPy za ustvarjanje nizov za držanje spodnjega in zgornjega območja
# "Dtype = np.uint8" pomeni, da je podatkovni tip 8 -bitno celo število
spodnji_območje = np.array ([24, 100, 100], dtype = np.uint8)
zgornji_razpon = np. matrika ([44, 255, 255], dtype = np.uint8)
# ustvarite masko za sliko
mask = cv2.inRange (hsv, spodnji_razpon, zgornji_dodel)
# prikazuje masko in sliko drug ob drugem
cv2.imshow ('maska', maska) cv2.imshow ('slika', img)
# počakajte, da uporabnik pritisne [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 objekt. En este caso lo que crearemos será un script para que cuando el radio de nuestro objeto sea Mayor 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.
# nadaljujte le, če polmer ustreza najmanjši velikosti
če je polmer> 10: # na okvir narišite krog in središče, # nato posodobite seznam sledljivih točk cv2.circle (okvir, (int (x), int (y)), int (polmer), (0, 255, 255), 2) cv2.circle (frame, center, 5, (0, 0, 255), -1) # center za tiskanje koordinat kroga mapObjectPosition (int (x), int (y)) # če je led še ni vklopljena, vklopite LED, če ni LEDOn: GPIO.output (rdeča, LED, GPIO. HIGH) ledOn = True def mapObjectPosition (x, y): print ("[INFO] Center objektov koordinira pri X0 = {0} in 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 salir por ningún
PASO 5: Sledenje objektom Llegamos al paso final. Una vez realizados los anteriores puntos, estaremos listos para poder configurar un par de parámetros y poner a funkcionar nuestra detección. Para ello utilizaremos 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.
če (x 280):
print ("[ACTION] GIRAR DERECHA") self.hexa.rotate (odmik = -15, ponovitve = 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 so objetivo.
če je polmer <105: self.hexa.walk (zamah = 40, ponovitve = 1, dvignjen = -30, tla = 50, t = 0,3)
Partr de este punto el programador ya es libre de realizar modificaciones e ir jugando con parámetros y colores.
Priporočena:
Števec korakov - mikro: Bit: 12 korakov (s slikami)
Števec korakov - Micro: Bit: Ta projekt bo števec korakov. Za merjenje korakov bomo uporabili senzor pospeška, ki je vgrajen v Micro: Bit. Vsakič, ko se Micro: Bit trese, bomo štetju dodali 2 in ga prikazali na zaslonu
Akustična levitacija z Arduino Uno Korak po korak (8 korakov): 8 korakov
Akustična levitacija z Arduino Uno Korak po korak (8 korakov): ultrazvočni pretvorniki zvoka L298N Dc ženski adapter z napajalnim vtičem za enosmerni tok Arduino UNOBreadboard Kako to deluje: Najprej naložite kodo v Arduino Uno (to je mikrokrmilnik, opremljen z digitalnim in analogna vrata za pretvorbo kode (C ++)
Vijak - Nočna ura za brezžično polnjenje DIY (6 korakov): 6 korakov (s slikami)
Bolt - Nočna ura za brezžično polnjenje DIY (6 korakov): Induktivno polnjenje (znano tudi kot brezžično polnjenje ali brezžično polnjenje) je vrsta brezžičnega prenosa energije. Za zagotavljanje električne energije prenosnim napravam uporablja elektromagnetno indukcijo. Najpogostejša aplikacija je brezžično polnjenje Qi
Merilnik korakov 1. del: Enobarvni zaslon 128x32 in Arduino: 5 korakov
Pedometer 1. del: Enobarvni zaslon 128x32 in Arduino: To je osnovna vadnica, ki uči, kako uporabljati zaslon OLED s svojim Arduinom. Uporabljam zaslon velikosti 128x32, lahko pa uporabite tudi drugačen zaslon z ločljivostjo in po potrebi spremenite ločljivost/koordinate. V tem delu vam bom pokazal, kako
Preklopna obremenitvena banka z manjšo velikostjo korakov: 5 korakov
Preklopna banka odpornikov obremenitve z manjšo velikostjo korakov: Banke uporovnih obremenitev so potrebne za preskušanje energetskih proizvodov, za karakterizacijo sončnih kolektorjev, v preskusnih laboratorijih in v industriji. Reostati zagotavljajo stalno spreminjanje odpornosti na obremenitev. Ker pa se vrednost upora zmanjša, moč