Urmărire obiect pe ev3
Cu ajutorul unui aparat de fotografiat web și un set de învățământ MINDSTORMS LEGO Education EV3 Designer (45,544), este posibil să se facă un robot care urmărește obiect în mișcare. Robotul nu numai că se poate roti camera în direcția obiectului, dar, de asemenea, pentru a menține o anumită distanță de ea, și anume de a conduce mai aproape, în cazul în care obiectul este scos din cameră, sau să călătorească în continuare, în cazul în care un obiect se apropie. Pentru a afla cum să faceți discuta în acest articol.

pregătire
Deci, să înțelegem, pentru că avem nevoie. În plus față de setul de LEGO MINDSTORMS Education EV3 (45,544). Avem nevoie de camera web cel mai simplu cu USB-conexiune cu nu grele, puteți rezolva pe robot. Rezoluția rol nu contează, pentru că puterea EV3 nu este încă suficient pentru procesarea imaginilor de mari dimensiuni.
EV3 pentru a putea lucra cu un webcam, vom folosi un firmware alternativ leJOS. în loc de standard. Aceasta este leJOS, cum să pregătească un card SD de boot și cum se programează folosind leJOS, se poate citi în articolul „robot programabil LEGO Mindstorms ev3 pe Java». Prelucrarea imaginilor luate cu aparatul de fotografiat, vom face cu biblioteca OpenCV computer vision. care a apărut ca parte a leJOS în versiunea 0.9.1. astfel încât această versiune va folosi.
După ce ați pregătit modulul EV3 pentru leJOS, este de dorit să verifice dacă un webcam cu EV3 cu exemple simple, care pot fi găsite în articolul „robot programabil LEGO Mindstorms EV3 pe Java», consultați „Utilizarea camerei Web leJOS EV3 pentru capturarea imaginilor. " În cazul în care aparatul foto se execută, puteți trece.
Aici sunt instrucțiunile de asamblare „Cercetatorii EV3»:

Descrierea programului
După pornirea programului, dacă totul este în ordine, următoarele indicații apar pe ecran:
Prima linie spune că aparatul de fotografiat este gata. Next post invită pentru a selecta modul de operare. normal sau depanare. Următoarele 2 linii - sfaturi. În acest moment, programul așteaptă decizia ta. Puteți opri programul apăsând Esc de pe unitatea de EV3 sau apăsați „“ pentru a selecta modul normal, sau apăsați pe „jos“ - pentru depanare.
Înainte de a selecta un mod pentru a înlocui obiectivul camerei, va fi de urmărire. În acest caz, încercați obiectul să fie iluminate precum și pentru urmărirea în viitor. Nu trebuie să fie o minge. Principalul lucru este că obiectul a fost o culori saturate luminoase. Cel mai bine este de a folosi culoarea albastru sau verde.
Apoi apăsați butonul în sus sau în jos, în funcție de modul selectat, iar robotul va lua o mostră de culoare. De fapt, proba este prelevată de 7 ori cu un interval de timp ușoară, iar culoarea finală se calculează ca media aritmetică a celor 7 probe. Acest lucru reduce dependența de pâlpâirea și regla balansul de alb. Apare pe ecran:
Aici, robotul spune ce culoare este obținută din camera în modelul de culoare HSV. Prima cifră - o nuanță (Hue), al doilea - Saturation (Saturație), iar al treilea - valoarea sau luminozitatea (Value). Ton de culoare determină exact culoarea. În OpenCV el poate lua valori de la 0 la 179 cm. Figura de mai jos.
Este pentru nuanța robotului încearcă să determine numele culorii și scoate în evidență întrebarea Este albastru? (Este albastru?). Răspunde cu siguranță nu are nevoie de un robot de îndoială :)
Saturația și luminozitatea poate fi în intervalul de la 0 la 255. mai mici de saturație, apropierea de culoare alb sau gri va fi cea mai mică luminanță - mai aproape de negru. Din care putem concluziona că o mai mare valoarea saturația și luminozitatea, cu atât mai ușor va fi pentru a determina culoarea și urmăriți subiectul.
După ce a luat proba, într-un simplu program de acțiune poate fi descrisă după cum urmează: programul va bucla pentru a face fotografii cu aparatul de fotografiat, uita-te la ei obiectele de aceeași culoare ca și culoarea probei, cu o alocație mică, și pentru a muta robot, astfel încât obiectul urmărit a fost de aproximativ centrul cadrului și a fost doar despre mărimea potrivită. In fiecare iterație, ecranul desenat cerc pe ecran ev3, în locul unde a fost găsit obiectul pe cadru și mărimea care ar putea fi determinată. De îndată ce robotul pierde obiectul, se oprește și așteaptă până când obiectul apare din nou.
Pentru a opri programul, apăsați și mențineți apăsată tasta Esc bit.
căutare obiect folosind OpenCV
Aici aveți nevoie pentru a face o oprire și de a scrie separat, cum pot uita pentru un obiect în imagini luate cu aparatul de fotografiat. Acest lucru se face foarte simplu, vom căuta pata pe imaginea de o anumită culoare - acest lucru va fi obiectul nostru.
În cazul în care vopseaua în detalii, apoi face acest lucru. În primul rând translate obținut din imaginea camerei în format HSV folosind functia cvtColor. În acest format este mai ușor de a găsi culoarea specificată, deoarece este determinată numai de o singură cifră în intervalul de la 0 la 179 cm. De mai sus.
Apoi, uita la imaginea ne interesează în slotul de culoare în cadru. Faptul că culoarea care a fost memorat inițial robotul poate varia în funcție de lumină și umbră care se încadrează pe obiect. Pe lângă minge, așa cum se vede de aparatul de fotografiat, vopsite neuniforma: în mijlocul mai ușoare și mai închisă spre margini. Acesta este motivul pentru care programul folosim intervalul. Cu toate acestea, intervalul nu trebuie să fie prea mare, în caz contrar vom avea o mulțime de greșeli.
Programul Folosesc interval ton -10 <= h <= +10. где h – это значение цветового тона снятое во время первой пробы, и интервалы насыщенности и яркости, соответственно, -50 <= s <= 50 и -50 <= v <= 50. Но не больше предельных значений. Т.е. если проба цвета была 109, 208, 251, то искомый интервал будет 99-119, 198-218, 241-255.
Intervalul este căutat utilizând funcția inRange. Ca urmare, funcția de lucru devine imagine alb-negru, în cazul în care puncte albe indică puncte, a căror culoare a fost într-un anumit interval de timp, și negru - restul.
Apoi, cu ajutorul funcției findContours găsi contururile pieselor albe, adică, obiecte. Desigur, pot exista mai mult de un obiect, dar nu este nimic de făcut cu privire la aceasta. În acest caz, am ales cel mai mare obiect găsit.
Asta e de fapt tot. Am găsit circuitul am găsit centrul și dimensiunea. Și, în funcție de locul în care circuitul, adică, obiectul este situat în imagine, am putea concluziona că, în cazul în care este necesar să se rotească aparatul de fotografiat și pentru a muta robot.
modul de depanare
Cu modul normal de înțeles, acum voi scrie cum funcționează în modul de depanare. Când apăsați este selectat modul „în jos“ - executați modul de depanare. În acest moment, robotul va avea exact aceeași culoare a eșantionului, și apoi apare următorul mesaj:
Acesta este un apel pentru a se asigura că sunteți conectat la ev3 cu un browser. Programul de la acest punct se va închide până când nu. EV3 pentru conectarea pentru a crea un fișier .html cu următorul conținut:

Imaginea, după cum se poate vedea, un pic. Măsurarea doar 160x120. Crede-mă, chiar și cu o astfel de dimensiuni mici, veți simți frânele. Cu toate acestea, această dimensiune este suficient pentru a urmări obiectul. În browser-ul dvs., puteți mări, astfel încât nu trebuie să privească în imagine. Iată cum arată pe o scară de 200%:

O linie roșie încercuiește găsit folosind circuitul de bibliotecă OpenCV. iar al doilea - un cerc. în care diametrul cea mai mare dimensiune este contur egal centrat în centrul conturului.
EV3 pe ecran următorul text este scris în acest moment:
Urmatoarea modul - masca. În acest mod, veți vedea rezultatul funcției bibliotecii inRange OpenCV.


Modul - nici unul - este un mod în care imaginea în browser-ul nu merge. Acest mod funcționează la fel ca și în cazul în care nu depanare.
Deci, am scris toate gândurile pe care am avut-o despre experimentul pentru a urmări obiecte folosind biblioteca OpenCV.
În dezvoltarea acestui experiment, am folosit următoarele articole și surse: