Sisällysluettelo:
- Tarvikkeet
- Vaihe 1: Vaihe 1: Imprimir Todas Las Piezas De La Estructura
- Vaihe 2: Montaje De La Estructura
- Vaihe 3: Montaje De La Electronica
- Vaihe 4: Ohjelmisto: Calibraje De Servos
- Vaihe 5: Ohjelmisto: Modulos
Video: HexaWalker: 5 vaihetta
2025 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2025-01-09 20:34
Hemos echo un grupo de estudiantes de la UAB ja robot hexapodo autonomo on webcam con micrófono mediante la cual puedes interactuar con el. Idean aikakausi hacer ja robot amistoso que reconociera ordenes de voz y pueda seguir mediante la cámara una pelota. Algo así como una "mascota" rebotica.
Cabe kommentti que la estructura que hemos utilizado para nuestro hexapodo la hemos sacado del robot open source Hexy de ArcBotics.
Katso linkki al codigoon:
Tarvikkeet
- lipoakku 7.4V 2700mmAh
- x2 adafruit -servokuljettaja
- x18 mikropalvelua SG90
- verkkokameran playstation -silmä
-mansikka pi -LM2596 askel alas -x2 kytkimet -RGB LED
- kaapelivaihtoehdot
Vaihe 1: Vaihe 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:
materiaali: PLA
täyttö: 25%
kerroksen korkeus: 0,12
nopeus: 55 mm/s
Vaihe 2: Montaje De La Estructura
Para el montaje de la estructura recomendamos seguir la guía del autor de las piezas 3D:
ohje:
Ei välttämättömiä sekoituksia lasin opetusohjelmiin, joita käytetään robottitoiminnoissa, ya que en nuestro caso, solo las hemos utilizado como ayuda.
Huomautus: ei fijéis los tornillos de los servos antes de calibrarlos en el apartado de código.
Vaihe 3: Montaje De La Electronica
Aquí va una list de los komponentes utilizados y algunos consejos para el montaje. - lipo -akku 7.4V 2700mmAh - x2 adafruit servo -ohjain
- x18 mikropalvelua SG90
- verkkokameran playstation -silmä
-mansikka pi
-LM2596 astu alas
-x2 kytkimet
- RGB -LED
- kaapelivaihtoehdot
Tärkeää que para conectar 2 adafruits -servo -ohjainta, katso A silta A0 de la segunda placa. Tässä linkki 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 código. Explicado en el apartado de código.
Vaihe 4: Ohjelmisto: 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 identifado 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.
"" "yhteinen_avain: R - oikea, L - vasen F - edessä, M - keskellä, B - takana H - lonkka, K - polvi, A - nilkka -avain: (kanava, minimipulssin_pituus, maksimi_pulssinpituus)" "" GPIO.setwarnings (Väärä) GPIO.setmode (GPIO. BOARD)
yhteiset_ominaisuudet = {
'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)}
Vaihe 5: Ohjelmisto: Modulos
Reconocimiento de voz:
Googlen 'Speech-to-Text' -sovellusliittymän käyttöönotto ja käyttötapa hemos hecho úso de la API. Establecemos ja streaming Google -pilvipalvelussa, para obtener las respuestas en texto, y así poder processarlas para accionar solo ja los casos que nos interesa.
Paikallisen hacerin, myös esta -sovellusliittymän, joka on välttämätön tener ja proyecto -rekisteröinti Google Cloudissa, jos haluat ladata luottokortin autentikariin.
Para guardar las credenciales ja una variable de entorno tenemos que ejecutar el siguiente comando (raspbian):
vie 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á proporcionado por google en su pagina virallinen, muy bien documentado:
Suoratoiston päätoiminto esittelee kuuntelu_print_loopia, laittaa 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: ASENNA OPENCV
PASO 2: PROBAR LA CAMARA Alkuperäinen todiste avoimesta asennuksesta, katso, onko hacer es un pequeño script ja python para probam la camara. Para ello haremos que se abran dos ventanas, una con la imagen original y otra con la imagen en blanco y negro.
tuo numpy np: nä
tuoda cv2
cap = cv2. VideoCapture (0)
kun taas (True): ret, frame = cap.read () grey = cv2.cvtColor (frame, cv2. COLOR_BGR2GRAY) cv2.imshow ('kehys', kehys) cv2.imshow ('harmaa', harmaa), jos cv2.waitKey (1) & 0xFF == ord ('q'): tauko
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 permita convertir un color en orden BGR a HSV (formato en el que opencv es capaz de interpretar).
tuontijärjestelmä
tuoda numpy np: nä tuoda cv2 sininen = sys.argv [1] vihreä = sys.argv [2] punainen = sys.argv [3] väri = 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 problem 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 an detectar) convertida en una máscara, aislando todos los colores que no se encuentren en ese rango hsv que hemos definido.
tuoda cv2
tuo numpy np: nä
# Lue kuva - 1 tarkoittaa, että haluamme kuvan BGR -muodossa
img = cv2.imread ('keltainen_objekti.jpg', 1)
# muuta kuvan kokoa 20%: iin kullakin akselilla
img = cv2.resize (img, (0, 0), fx = 0.2, fy = 0.2) # muuntaa BGR -kuvan HSV -kuvaksi hsv = cv2.cvtColor (img, cv2. COLOR_BGR2HSV)
# NumPy luo matriiseja alemman ja ylemmän alueen pitämiseksi
# "Dtype = np.uint8" tarkoittaa, että tietotyyppi on 8 -bittinen kokonaisluku
alempi_alue = np.array ([24, 100, 100], dtype = np.uint8)
ylempi_alue = np.array ([44, 255, 255], dtype = np.uint8)
# luo naamio kuvalle
maski = cv2.inRange (hsv, alempi_alue, ylempi_alue)
# näyttää sekä maskin että kuvan vierekkäin
cv2.imshow ('naamio', naamio) cv2.imshow ('kuva', img)
# odota, että käyttäjä painaa [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 del de. En este caso lo que crearemos -sarja ja käsikirjoitus 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.
# jatka vain, jos säde on vähimmäiskoko
jos säde> 10: # piirrä ympyrä ja keskipiste kehykseen, # päivitä seurattujen pisteiden luettelo cv2.circle (frame, (int (x), int (y)), int (säde), (0, 255, 255), 2) cv2.circle (kehys, keskikohta, 5, (0, 0, 255), -1) # ympyrän koordinaattien tulostuskeskus mapObjectPosition (int (x), int (y)) # jos led on ei ole jo päällä, sytytä LED, jos se ei pala Päällä: GPIO.output (redLed, GPIO. HIGH) ledOn = True def mapObjectPosition (x, y): print ("[INFO] Objektikeskus koordinoi kohdissa X0 = {0} ja Y0 = {1} ". Muoto (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 límite.
PASO 5: OBJEKTIN SEURANTA Llegamos al paso final. 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 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.
jos (x 280):
tulosta ("[TOIMINTO] GIRAR DERECHA") self.hexa.rotate (offset = -15, toistot = 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 seria su radio y por tanto más cerca estará nuestro robot en obguivo su objetivo.
jos säde <105: itse.heksa.
A partir de este punto el programador ya es libre de realizar modificaciones e ir jugando con parámetros y colores.
Suositeltava:
DIY Raspberry Pi Downloadbox: 4 vaihetta
DIY Raspberry Pi Downloadbox: Löydätkö usein itsesi lataamasta suuria tiedostoja, kuten elokuvia, torrentteja, kursseja, TV -sarjoja jne., Niin tulet oikeaan paikkaan. Tässä Instructable -ohjelmassa muuttaisimme Raspberry Pi zero -laitteemme latauskoneeksi. Joka voi ladata minkä tahansa
Akustinen levitaatio Arduino Unon kanssa Askel askeleelta (8 vaihetta): 8 vaihetta
Akustinen levitaatio Arduino Unon kanssa Askel askeleelta (8 vaihetta): ultraäänikaiuttimet L298N DC-naarasadapterin virtalähde urospuolisella dc-nastalla ja analogiset portit koodin muuntamiseksi (C ++)
4G/5G HD -videon suoratoisto DJI Dronesta alhaisella latenssilla [3 vaihetta]: 3 vaihetta
4G/5G HD -videon suoratoisto DJI Dronesta alhaisella latenssilla [3 vaihetta]: Seuraava opas auttaa sinua saamaan live-HD-videovirtoja lähes mistä tahansa DJI-dronesta. FlytOS -mobiilisovelluksen ja FlytNow -verkkosovelluksen avulla voit aloittaa videon suoratoiston droonilta
Pultti - DIY -langaton latauskello (6 vaihetta): 6 vaihetta (kuvilla)
Pultti - DIY -langaton latausyökello (6 vaihetta): Induktiiviset lataukset (tunnetaan myös nimellä langaton lataus tai langaton lataus) on langattoman voimansiirron tyyppi. Se käyttää sähkömagneettista induktiota sähkön tuottamiseen kannettaville laitteille. Yleisin sovellus on langaton Qi -latauslaite
4 vaihetta akun sisäisen vastuksen mittaamiseksi: 4 vaihetta
4 vaihetta akun sisäisen vastuksen mittaamiseksi: Tässä on 4 yksinkertaista vaihetta, joiden avulla voit mitata taikinan sisäisen vastuksen