Praćenje linije

HuskyLens kamera ima način rada za učenje i praćenje linije određene boje čime se može predviđati put kretanja robota ili nekog drugog uređaja koji koristi kameru.

Odabir načina rada praćenje linije

Za odabir načina rada praćenje linije potrebno je uključiti kameru (USB kabelom ili preko robota) te ju pomicanjem funkcijskog tipkala pronaći i odabrati u izborniku. Ako kamera u tom trenutku nije usmjerena prema nekoj određenoj liniji, pokušat će je pronaći sama u okruženju koje vidi (bijela strelica će se pojavljivati na zaslonu kao znak da traži liniju).

I u ovom je načinu rada zadana postavka da nauči boju jedne linije te se preporučuje da tako i ostane radi stabilnosti kretanja robota koji preko kamere prati liniju i kreće se po njoj.

Dodatne preporuke su da prilikom učenja linije, kamera bude paralelna s njom te da linija bude jednobojna s očitom bojom različitom od pozadine. Detekcija boje linije povezana je i s ambijentalnim svjetlom, stoga je savjet održavati ambijentalno svjetlo nepromijenjenim.

Učenje i praćenje linije

Savjet za učenje linije je da unutar vidnog polja kamere nema ničega osim linije koju je potrebno naučiti i da se ona nigdje ne križa.

1. korak

Usmjerite znak plus na liniju. Kamera će automatski otkriti liniju i na zaslonu će se pojaviti bijela strelica.

2. korak

Dugim pritiskom tipkala za učenje zapamtite liniju. Dok držite tipkalo pritisnuto, bijela strelica će postati žuta.

3. korak

Nakon otpuštanja tipkala strelica postaje plava i znak je da je linija naučena. Smjer strelice na zaslonu kamere pokazuje predviđeni smjer linije.

Primjer: Koordinatni sustav zaslona kamere

Nakon što je kamera naučila prepoznati crnu liniju na bijeloj podlozi, u ovom primjeru naučite kako robot prepoznaje poziciju linije prema koordinatnom sustavu kamere. Taj će primjer poslužiti kao uvod za izradu programa za kretanje robota praćenjem linije.

Da bi robot mogao pratiti liniju, potrebno je izraditi program u kojem će dobiti uputu da vozi ravno ako je linija ispod njega ravna. U slučaju da je linija zakrivljena robot će se morati zakrenuti ulijevo ili udesno, ovisno o smjeru njene zakrivljenosti, kako bi uvijek bio iznad linije i uspješno je pratio. Kamera je smještena na robotu tako da vidi prostor ispred njega. Preporučuje se da kamera bude postavljena maksimalno paralelno uz liniju jer će ju tako robot preciznije pratiti. Inače će se događati da kamera detektira primjerice zakrivljenu liniju desetak centimetara ispred robota, a on će odmah skrenuti (i prije nego dođe do tog zavoja). Odvijačem otpustite vijke kojima je kamera pričvršćena za robot i nagnite kameru prema dolje.

Promotrite sljedeće tri slike na kojima je prikazano gdje se nalazi linija detektirana kamerom u odnosu na robot.

Ako je robot s desne strane u odnosu na liniju, on mora skrenuti lijevo.

Ako je robot otprilike centriran u odnosu na liniju, tada treba voziti ravno.

Ako je robot s lijeve strane u odnosu na liniju, on mora skrenuti desno.

Robot informaciju o tome gdje se nalazi linija u odnosu na njegovo središte (i središte kamere) dobiva od kamere. Koordinatni sustav zaslona kamere ima sljedeće vrijednosti:

(0, 0) – početna točka zaslona u gornjem lijevom kutu,

(160, 160) – središte zaslona,

(320, 240) – završna točka zaslona u donjem desnom kutu.

Vrijednost po x osi raste na zaslonu s lijeva na desno, a vrijednost y osi raste odozgo prema dolje.

Kada kamera detektira liniju koju je prethodno naučila, prikaže se plava strelica na njoj. Točke u kojoj strelica počinje i završava imaju svoje vrijednosti u koordinatnom sustavu te se one uzimaju za određivanje pozicije i smjera linije. Ako je linija ravna i nalazi se na sredini zaslona, tada je vrijednost koordinate početne i završne točke linije po x osi otprilike jednaka 160.

Da biste to bolje razumjeli, izradite program u kojem će se pritiskom  na tipkalo A na zaslonu kamere ispisivati početne i završne vrijednosti koordinata plave strelice koja obuhvaća liniju detektiranu kamerom.

Na početku programa nalazi se naredba HuskyLens initialize pin until success za inicijalizaciju kamere. Zatim slijedi naredba HuskyLens switch algorithm to kojom je definirano da kamera radi u načinu rada praćenje linije (Line Tracking).

U forever petlji nalaze se naredbe kojom kamera micro:bitu šalje informaciju o svom zapažanju (javlja je li ono što zapaža kamerom naučeno). Nakon toga se u varijable x1, y1, x2 i y2(koje je potrebno kreirati u kategoriji Variables) pohranjuju vrijednosti koordinata početne i završne točke plave strelice.

Naredbama za pritisak na tipkalo A ispisuju se vrijednosti varijabli.

Uključite robot i ispred kamere postavite crnu liniju na poziciju koju želite. Pritiskom na tipkalo A na micro:bitu na zaslonu kamere ispisat će se vrijednosti koordinata plave strelice. Mijenjajte pozicije i smjer linije te pratite vrijednosti koje će se ispisati kad pritisnete na tipkalo A. Uočit ćete da je vrijednost x osi (i početna i završna) oko 160 kad je linija na sredini zaslona kamere.

Primjer: Kretanje robota praćenjem linije

Sad kad ste naučili kako robot preko kamere može odrediti poziciju linije koju treba pratiti, izradite program kojim će se robot kretati prateći liniju. Za to mu je potrebna informacija o završnoj koordinati plave strelice po x osi jer je to smjer linije u kojem robot mora ići.

Nakon inicijalizacije kamere i postavljanja načina rada u Line Tracking, kao u prethodnom primjeru, dodana su naredbe kojima robot čeka pritisak na tipkalo A i nakon pola sekunde kreće s praćenjem linije.

U forever petlji nalaze se naredbe kojima kamera micro:bitu šalje informaciju o svom zapažanju, odnosno javlja je li ono što zapaža kamerom naučeno. Nakon toga u varijablu x, koju je potrebno kreirati u kategoriji Variables, pohranjuje vrijednost koordinate završne točke plave strelice po x osi.

Zatim se izvršava posebno kreirani blok naredbi PratiLiniju. U njemu se provjerava vrijednosti varijable x i određuje smjer kretanja robota. Ako je vrijednost varijable x između 150 i 170, znači da je linija ravna i robot mora voziti ravno. Ako je vrijednost varijable x manja od 150, znači da je linija s lijeve strane u odnosu na središte robota te on mora skrenuti lijevo. Ako je pak vrijednost varijable x veća od 170, tada je linija s desne strane u odnosu na središte robota i on mora skrenuti desno.

Sadržaj materijala isključiva je odgovornost Instituta za razvoj i inovativnost mladih.

Projekt je 85% financiran iz EGP financijskog mehanizma, a 15% financiran iz državnog proračuna.

Tags: