Cuprins:
- Provizii
- Step 1: Step 1: Imprimir Todas Las Piezas De La Estructura
- Pasul 2: Montaj De La Estructură
- Pasul 3: Montaj De La Electronica
- Pasul 4: Software: Calibraje De Servos
- Pasul 5: Software: Modulos
Video: HexaWalker: 5 pași
2025 Autor: John Day | [email protected]. Modificat ultima dată: 2025-01-09 20:34
Hemos echo un grup de studenți al UAB un robot hexapodo autonom cu o cameră web cu microfon prin care puteți interacționa cu el. La idea era hacer un robot amistoso care recunoaște ordinele de voce și pueda urmează prin intermediul camerei o pelotă. Algo así como una "mascota" rebotica.
Cabeți să comentăm că structura pe care am folosit-o pentru hexapodul nostru avem sacatul robotului open source Hexy de ArcBotics.
Aici el link-ul codigo:
Provizii
- baterie lipo 7.4V 2700mmAh
- x2 servo driver adafruit
- x18 micro servos SG90s
- ochi cu playstation webcam
-raspberry pi -LM2596 step down -x2 switches - RGB LED
- cabluri varios
Step 1: Step 1: Imprimir Todas Las Piezas De La Estructura
Este necesar să imprimați toate piesele.
Puteți găsi toate fișierele.stl:
Puteți să evidențiați faptul că am impreso cu următoarele proprietăți:
material: PLA
umplere: 25%
înălțimea stratului: 0,12
viteza: 55 mm / s
Pasul 2: Montaj De La Estructură
Pentru montajul structurii recomandăm să urmăm ghidul autorului pieselor 3D:
guía:
Nu este necesar să urmăm instrucțiunile strict pentru bunul funcționare al robotului, că în acest caz, doar că am folosit-o ca ajutor.
Nota: no fijéis los tornillos de los servos antes de calibrarlos en el apartado de cod.
Pasul 3: Montaj De La Electronica
Aici este o listă a componentelor utilizate și a unor consilii pentru montaj.- lipo baterry 7.4V 2700mmAh - x2 adafruit servo driver
- x18 micro servo SG90s
- ochi cu playstation webcam
-pă de zmeură
-LM2596 demisionează
-x2 comutatoare
- LED RGB
- cabluri varios
Este important pentru conectare 2 adafruits servo drivers, se suelde el bridge A0 de la segunda placa. În acest link este detaliat: https://learn.adafruit.com/16-channel-pwm-servo-d… Respecto a servos el orden in the that conectes los pines is indiferente ya that tendrás that configurar los mas adelante en el cod. Explicat în secțiunea de cod.
Pasul 4: Software: Calibraje De Servos
Antes de nada se tiene que configura los pulsos máximos y minimum de vuestros servos así como los pines donde estén conectados en el archivo hexapod_core.py.
fiecare servo este identificat după leyenda de abajo, por cada servo se tiene que indicar, el pin de conexión al servo driver, pulso minim, pulso máximo y el ultimo parámetro es por si el servo este funcionando al revés de como debería, solo tenies que cambiarlo de signo.
"" "Convenție joint_key: R - dreapta, L - stânga F - față, M - mijloc, B - spate H - șold, K - genunchi, A - Cheie gleznă: (canal, lungime_impuls minimă, lungime_impuls maximă)" "" GPIO.setwarnings (Fals) 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)}
Pasul 5: Software: Modulos
Modul de recunoaștere a vocii:
Pentru punerea în aplicare a acestui modul am făcut-o doar de API-ul Google 'Speech-to-Text'. Stabilim un streaming cu cloud-ul Google, pentru obținerea răspunsurilor în text, și astfel puterea procesează pentru acționarea solo în cazurile pe care le interesăm.
Pentru a putea face un astfel de API trebuie să avem un proiect înregistrat în Google Cloud, și să descărcați credențialele pentru a autenticiza robotul.
Pentru a păstra credențialele într-o variabilă de întoarcere, trebuie să executăm următorul comandă (Raspbian):
export GOOGLE_APPLICATION_CREDENTIALS = "/ tu / ruta / hacia / las / credenciales.json"
O dată am realizat această comandă și putem să facem acest lucru de la API-ul speech-to-text.
Codul pentru realizarea streamingului este furnizat de google în pagina sa oficială, foarte bine documentată:
La funcția principală a streaming-ului este 'listen_print_loop', encargada de a decide care este răspunsul care se aproxima mai mult la intrarea primită, și unde am controlat răspunsurile pentru puterea de comunicare a robotului când a făcut o acțiune, sau pentru avizarea căruia comanda de voce nu este recunoscut, pentru ca robotul să realizeze un mișcare care simulă nu a fost înțeles la utilizator.
Codul adaptat se găsește în depozitul git Hexawalker
github.com/RLP2019/HEXAWALKER/blob/master/…
PASO 1: INSTALL OPENCV
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 cu imaginea originală și alta cu imaginea în alb și negru.
import numpy ca np
import cv2
cap = cv2. VideoCapture (0)
while (True): ret, frame = cap.read () gri = cv2.cvtColor (cadru, cv2. COLOR_BGR2GRAY) cv2.imshow („cadru”, cadru) cv2.imshow („gri”, gri) dacă cv2.waitKey (1) & 0xFF == ord ('q'): pauză
cap.release ()
cv2.destroyAllWindows ()
PASO 3: DETECCIÓN DEL COLOR CON OPENCV Pentru următorul pas pe care ne vom realiza o detectare de culoare. Pentru ello, primul de toate vamos a realiza un script care ne permite să transformăm un color în ordine BGR a HSV (format în care openți este capabil de interpretare).
import sisteme
import numpy ca np import cv2 albastru = sys.argv [1] verde = sys.argv [2] roșu = sys.argv [3] culoare = 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 o gamă de culori între două culori hsv și nu numai unul, lo cual dificultaría la detección por problemas de luz o contraste.
Următorul pas este cu o imagine anterior realizată, creează un alt script pentru care ne vom servi pentru a verifica pasul anterior. Lo que nos mostrará como result será la imagen que nosotros le pasemos (con el color u objeto a detectar) convertită într-o mască, izolând toate culorile care nu se întâlnesc în acest rang hsv pe care le-am definit.
import cv2
import numpy ca np
# Citiți imaginea - 1 înseamnă că vrem imaginea în BGR
img = cv2.imread ('yellow_object.jpg', 1)
# redimensionează imaginea la 20% în fiecare axă
img = cv2.resize (img, (0, 0), fx = 0.2, fy = 0.2) # converti imaginea BGR într-o imagine HSV hsv = cv2.cvtColor (img, cv2. COLOR_BGR2HSV)
# NumPy pentru a crea tablouri pentru a menține gama inferioară și superioară
# „Dtype = np.uint8” înseamnă că tipul de date este un număr întreg de 8 biți
gamă_inferioară = np.array ([24, 100, 100], dtype = np.uint8)
gama_punct superior = np.array ([44, 255, 255], dtype = np.uint8)
# creați o mască pentru imagine
mask = cv2.inRange (hsv, lower_range, upper_range)
# afișează atât masca, cât și imaginea unul lângă altul
cv2.imshow („mască”, mască) cv2.imshow („imagine”, img)
# așteptați ca utilizatorul să apese [ESC]
while (1): k = cv2.waitKey (0) if (k == 27): break cv2.destroyAllWindows ()
PASO 4: POSICIONAMIENTO DEL OBJETO În acest pas probarem că o dată camara se află în funcționare și avem configurat nivelul nostru minim și maxim de culoare hsv, care este mare capabil să găsim coordonatele x e și centrul nostru. În acest caz ceea ce vom crea va fi un script pentru când radio al nostru obiect mare sea a 10, desenat un circulant asupra obiectului și noi vaya arătând pentru ecranul poziției în timp real sus coordonate x e y.
# continuați numai dacă raza îndeplinește o dimensiune minimă
dacă raza> 10: # desenează cercul și centroidul pe cadru, # apoi actualizează lista punctelor urmărite cv2.circle (cadru, (int (x), int (y)), int (rază), (0, 255, 255), 2) cv2.circle (cadru, centru, 5, (0, 0, 255), -1) # centru de imprimare a coordonatelor cercului mapObjectPosition (int (x), int (y)) # dacă ledul este nu este deja aprins, porniți LED-ul dacă nu este ledOn: GPIO.output (redLed, GPIO. HIGH) ledOn = True def mapObjectPosition (x, y): print ("[INFO] Object Center coordenates la X0 = {0} și 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 la stânga sau bine nu se realizează niciun fel de mișcare la nici un salt pentru nici un limită.
PASO 5: URMĂRIREA OBIECTULUI Llegamos al paso final. O singură dată realizate după punctele anterioare, vom fi listate pentru a putea configura un parametri și a pune la dispoziția noastră detecția. Pentru ello utilizăm ca anterior am spus, parametrii de culoare hsv maxim și minim pentru a putea crea masca și dectectarea obiectului.
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.
dacă (x 280):
print ("[ACTION] GIRAR DERECHA") self.hexa.rotate (offset = -15, repetări = 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 stânga. În cazul în care sea mai mult, gire a la dreapta.
Para el caso en el que se quiera avanzar hacia adelante lo que se realizará es utiliza la variable dónde calculamos el radio para marcar otro límite en caso de proximitate de la pelota. Cuanto mas cerca este pelota de nostru robot ¡, mai mare va fi pe radio și pentru atât mai mult va căuta nostru robot în atingerea obiectivului.
dacă raza <105: self.hexa.walk (leagăn = 40, repetări = 1, ridicat = -30, etaj = 50, t = 0,3)
A partir de acest punct programatorul este liber de realizat modificări și se jugează cu parametri și culori.
Recomandat:
Cum să faci 4G LTE dublă antenă BiQuade Pași simpli: 3 pași
Cum să fac 4G LTE Double BiQuade Antenna Pași simpli: De cele mai multe ori mă confrunt, nu am o putere de semnal bună pentru lucrările mele de zi cu zi. Asa de. Căut și încerc diferite tipuri de antenă, dar nu funcționează. După un timp pierdut, am găsit o antenă pe care sper să o fac și să o testez, pentru că nu se bazează pe principiul
Design de joc în Flick în 5 pași: 5 pași
Designul jocului în Flick în 5 pași: Flick este un mod foarte simplu de a crea un joc, în special ceva de genul puzzle, roman vizual sau joc de aventură
Sistemul de alertă pentru parcarea inversă a autovehiculului Arduino - Pași cu pași: 4 pași
Sistemul de alertă pentru parcarea inversă a autovehiculului Arduino | Pași cu pas: în acest proiect, voi proiecta un senzor senzor de parcare inversă Arduino Car Circuit folosind senzorul cu ultrasunete Arduino UNO și HC-SR04. Acest sistem de avertizare auto bazat pe Arduino poate fi utilizat pentru navigație autonomă, autonomie robotică și alte r
Detectarea feței pe Raspberry Pi 4B în 3 pași: 3 pași
Detectarea feței pe Raspberry Pi 4B în 3 pași: În acest instructabil vom efectua detectarea feței pe Raspberry Pi 4 cu Shunya O / S folosind Biblioteca Shunyaface. Shunyaface este o bibliotecă de recunoaștere / detectare a feței. Proiectul își propune să obțină cea mai rapidă viteză de detectare și recunoaștere cu
Cum să faci un contor de pași ?: 3 pași (cu imagini)
Cum să fac un contor de pași ?: obișnuiam să performez bine la multe sporturi: mersul pe jos, alergatul, mersul pe bicicletă, jocul de badminton etc. Îmi place să călăresc să călătoresc în preajmă. Ei bine, uită-te la burtica mea ostilă …… Ei bine, oricum, decid să reîncep să fac mișcare. Ce echipament ar trebui să pregătesc?