Cuprins:

HexaWalker: 5 pași
HexaWalker: 5 pași

Video: HexaWalker: 5 pași

Video: HexaWalker: 5 pași
Video: 【HEXA NFT 作品&クリエーター紹介】HEXA WALKER Vol.5 HEXANFT展@こはくの天使 2024, Iulie
Anonim
Image
Image
HexaWalker
HexaWalker

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

Step 1: Imprimir Todas Las Piezas De La Estructura
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ă

Montaje De La Estructura
Montaje De La Estructura

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

Montaj De La Electronica
Montaj De La Electronica
Montaj De La Electronica
Montaj De La Electronica
Montaj De La Electronica
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

Software: Modulos
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: