Cov txheej txheem:
- Khoom siv
- Kauj Ruam 1: Kauj Ruam 1: Imprimir Todas Las Piezas De La Estructura
- Kauj Ruam 2: Montaje De La Estructura
- Kauj Ruam 3: Montaje De La Electronica
- Kauj Ruam 4: Software: Calibraje De Servos
- Kauj ruam 5: Software: Modulos
Video: HexaWalker: 5 Kauj Ruam
2024 Tus sau: John Day | [email protected]. Kawg hloov kho: 2024-01-30 09:26
Hemos echo un grupo de estudiantes de la UAB un robot hexapodo autonomo con una webcam con micrófono 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 as como una "mascota" rebotica.
Cabe comentar que la estructura que hemos utilizado para nuestro hexapodo la hemos sacado del neeg hlau qhib qhov chaw Hexy de ArcBotics.
Aquí el link al codigo:
Khoom siv
lipo roj teeb 7.4V 2700mmAh
x2 x2 adafruit servo tsav tsheb
x18 micro servos SG90s
- webcam playstation qhov muag
-raspberry pi -LM2596 nqis nqis -x2 hloov pauv -RGB LED
- cov kab sib txawv
Kauj Ruam 1: Kauj Ruam 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:
Khoom siv: PLA
Cov ntsiab lus: 25%
txheej qhov siab: 0.12
ceev: 55 hli/s
Kauj Ruam 2: Montaje De La Estructura
Para el montaje de la estructura recomendamos seguir la guía del autor de las piezas 3D:
guía:
Tsis yog necesario seguir las instrucciones estrictamente para el buen funcionamiento del neeg hlau, ya que en nuestro caso, solo las hemos utilizado como ayuda.
Nota: tsis muaj fijéis los tornillos de los servos antes de calibrarlos en el apartado de código.
Kauj Ruam 3: Montaje De La Electronica
Aquí va una lista de los componentes utilizados y algunos consejos para el montaje.- lipo baterry 7.4V 2700mmAh - x2 adafruit servo tsav
x18 micro servos SG90s
- webcam playstation qhov muag
-raspberry pib
-LM2596 nqis nqis
-x2 hloov
- RGB LED
- cov kab sib txawv
Es tseem ceeb que para conectar 2 adafruits servo tsav tsheb, se suelde el choj 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 codd ua. Explicado en el apartado de código.
Kauj Ruam 4: Software: 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, nyob ib leeg que cambiarlo de npe.
"" "sib koom_key convention: R - txoj cai, L - sab laug F - pem hauv ntej, M - nruab nrab, B - nraub qaum H - lub duav, K - hauv caug, A - pob taws pob qhov rooj: (channel, yam tsawg kawg_pulse_length, max_pulse_length)" "" GPIO.setwarnings (Tsis raug) GPIO.setmode (GPIO. BOARD)
khoom_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)}
Kauj ruam 5: Software: Modulos
Lub ntsiab lus ntawm kev sib raug zoo ntawm 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 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 neeg hlau.
Para guardar las credenciales en una variable de entorno tenemos que ejecutar el siguiente comando (Raspbian):
export GOOGLE_APPLICATION_CREDENTIALS = "/tu/ruta/hacia/las/credenciales.json"
Una vez hemos realizado esta comando ya podemos hacer úso de la API de hais lus-rau-ntawv.
El código para realizar el streaming está proporcionado por google en su pagina oficial, muy bien documentado:
La función tus thawj xibfwb del streaming es 'mloog_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 profesional como es Adrian Rosebrock, en su pàgina web: https://www.pyimagesearch.com/2017/09/04/raspbian …
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.
import numpy as np
ua cv2
cap = cv2. VideoCapture (0)
thaum (Tseeb): ret, thav duab = cap.read () grey = cv2.cvtColor (thav duab, cv2. COLOR_BGR2GRAY) cv2.imshow ('thav duab', thav duab) cv2.imshow ('grey', grey) yog cv2.waitKey (1) & 0xFF == ord ('q'): so
cap.release () thov
cv2.destroyAllWindows ()
PASO 3: DETECCIÓN DEL COLOR CON OPENCV Para el siguiente paso lo que vamos a realizar es una detección de xim. Para ello, primero de todo vamos a realizar un script que nos permita convertir un colour en orden BGR a HSV (formato en el que opencv es capaz de translatear).
ntshuam sys
import numpy as 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 xim deseado, el tsab ntawv 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 cual dificultaría la detección por problemas de luz o contraste.
El siguiente paso es con una imagen previamente realizada, crear otro tsab ntawv el cual nos servirá para probar el paso anterior. Lo que nos mostrará como resultado será la imagen que nosotros le pasemos (con el colou u objeto a detectar) convertida en una máscara, aislando todos los colores que no se encuentren en ese rango hsv que hemos definido.
ua cv2
import numpy as np
# Nyeem daim duab - Qhov 1 txhais tau tias peb xav tau daim duab hauv BGR
img = cv2.imread ('daj_object.jpg', 1)
# hloov qhov kev xav mus rau 20% hauv txhua lub axis
img = cv2.resize (img, (0, 0), fx = 0.2, fy = 0.2) # hloov BGR duab rau HSV duab hsv = cv2.cvtColor (img, cv2. COLOR_BGR2HSV)
# NumPy los tsim cov arrays los tuav qis thiab sab saud
# Tus “dtype = np.uint8” txhais tau tias hom ntaub ntawv yog 8 ntsis integer
lower_range = np.array ([24, 100, 100], dtype = np.uint8)
upper_range = np.array ([44, 255, 255], dtype = np.uint8)
# tsim daim npog ntsej muag rau duab
daim npog = cv2.inRange (hsv, qis dua, sab saud)
# tso ob daim npog qhov ncauj thiab daim duab ib sab
cv2.imshow ('daim npog', daim npog ntsej muag) cv2.imshow ('duab', img)
# tos rau tus neeg siv nias [ESC]
thaum (1): k = cv2.waitKey (0) yog (k == 27): so 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 colour hsv, que este hiav txwv capaz de encontrar las coordenadas x e y del centro de. En este caso lo que crearemos será un script para que cuando el radio de nuestro objeto tus kav nroog hiav txwv 10, dibuje un circulo sobre el objeto y nos vaya mostrando por pantalla la posición en tiempo tiag sus coordenadas x e y.
# tsuas yog ua yog tias lub vojvoog ua tau raws li qhov tsawg kawg nkaus
yog lub vojvoog> 10: # kos lub voj voog thiab centroid ntawm tus ncej, # tom qab hloov kho cov npe ntawm cov ntsiab lus taug qab cv2.circle (thav duab, (int (x), int (y)), int (vojvoog), (0, 255), 255), 2) cv2.circle (frame, center, 5, (0, 0, 255), -1) # print center of circle coordinates mapObjectPosition (int (x), int (y)) # if the led is tseem tsis tau qhib, tig lub LED rau yog tias tsis coj On: GPIO.output (redLed, GPIO. HIGH) ledOn = True def mapObjectPosition (x, y): print ("[INFO] Lub Hom Phiaj Chaw sib koom tes ntawm X0 = {0} thiab Y0 = {1} ". Format (x, y))
Con esto lo que vamos fij en es el el siguiente paso poder jugar con las coordenadas para establecer los límites de lo que será girar a la derecha nuestro neeg hlau, girar a la izquierda o bien no realizar ningún movimiento al no salir por ningún límite.
PASO 5: LEEJ TWG taug Llegamos al paso zaum kawg. 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 xim hsv máximo y mínimo rau 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.
yog (x 280):
print ("[ACTION] GIRAR DERECHA") self.hexa.rotate (offset = -15, rov ua dua = 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 hiav txwv 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 neeg hlau ¡, más grande será su xov tooj cua y por tanto más cerca estará nuestro neeg hlau en conseguir su objetivo.
yog lub vojvoog <105: self.hexa.walk (viav vias = 40, rov ua dua = 1, tsa = -30, pem teb = 50, t = 0.3)
Ib feem ntawm este punto el programador ya es libre de realizar modificaciones e ir jugando con parámetros y colores.
Pom zoo:
Arduino Tsheb Rov Qab Chaw Nres Tsheb Ceeb Toom - Cov Kauj Ruam ntawm Kauj Ruam: 4 Kauj Ruam
Arduino Tsheb Rov Qab Chaw Nres Tsheb Ceeb Toom | Cov kauj ruam ib kauj ruam: Hauv txoj haujlwm no, kuv yuav tsim qhov yooj yim Arduino Tsheb Rov Qab Tsheb Nres Tsheb Nres Sensor Siv Arduino UNO thiab HC-SR04 Ultrasonic Sensor. Qhov no Arduino raws Lub Tsheb Rov Qab ceeb toom tuaj yeem siv rau Kev Tshawb Fawb Txog Tus Kheej, Robot Ranging thiab lwm yam
Tsev Automation Kauj Ruam ntawm Kauj Ruam Siv Wemos D1 Mini Nrog PCB Tsim: 4 Kauj Ruam
Tsev Automation Kauj Ruam Ib Leeg Siv Wemos D1 Mini Nrog PCB Tsim: Tsev Automation Kauj Ruam los ntawm Kauj Ruam siv Wemos D1 Mini nrog PCB Tsim cov tub ntxhais kawm ntawv qib siab. Tom qab ntawd ib tus ntawm peb cov tswv cuab tuaj
RC Taug Qab Neeg Hlau Siv Arduino - Kauj Ruam Ib kauj ruam: 3 Kauj Ruam
RC Tracked Robot Siv Arduino - Kauj Ruam Ib Nrab: Hav guys, Kuv rov qab los nrog lwm tus neeg hlau txias chassis los ntawm BangGood. Vam tias koj tau dhau los ntawm peb cov phiaj xwm yav dhau los - Spinel Crux V1 - Tus Cwj Pwm Tswj Tus Neeg Hlau, Spinel Crux L2 - Arduino Xaiv thiab Muab Neeg Hlau nrog Robotic caj npab thiab Badland Braw
Kawm Yuav Ua Li Cas Kos Tus Tswm Ciab - Kauj Ruam Ib Kauj Ruam: 6 Kauj Ruam
Kawm Yuav Ua Li Cas Thiaj Li Tswmciab - Kauj Ruam Ib kauj ruam: Cov tswm ciab no siv sijhawm 10 feeb los kos yog tias koj ua raws kuv cov kauj ruam ua tib zoo
DIY Arduino Robotic Arm, Kauj Ruam ntawm Kauj Ruam: 9 Kauj Ruam
DIY Arduino Robotic Arm, Kauj Ruam ntawm Kauj Ruam: Cov ntawv qhia no yog qhia koj yuav tsim lub Caj Npab Caj Npab ntawm koj tus kheej li cas