Raskrižje
Cilj
Vježba praćenja linije u novim okolnostima. Osnova za kasnije skretanje na temelju markera u boji.
Program
void RobotLine::loop() {
if (line(8)
go(-90, 90);
else if (line(0))
go(90, -90);
else if (line(5))
go(10, 90);
else if (line(3))
go(90, 10);
else
go(60, 60);
}
Postavimo si zadatak da robot na svakom raskrižju skreće lijevo.
Počnimo s programom iz prethodne vježbe, koji je na slici lijevo.
Trebat će nam još jedan uvjet, još jedan "if", prije svih drugih, jer želimo da raskrižje ima najveći prioritet izvršavanja: kad dođe na raskrižje, skreće lijevo, bez o obzira što bi raskrižje bilo i oštri zavoj.
Kako prepoznati raskrižje? Pretpostavimo da se crte sijeku pod pravim kutevima. U tom slučaju bi moglo biti dovoljno pogledati oba krajnja tranzistora. Ako vide liniju, to je raskrižje. Pogledajmo kod u sljedećem odjeljku.
void RobotLine::loop() {
if (line(0) && line(8))
stop(), end();
else if (line(8))
go(-90, 90);
else if (line(0))
go(90, -90);
else if (line(5))
go(-30, 90);
else if (line(3))
go(90, -60);
else
go(60, 60);
}
Dodali smo "if" koji prepoznaje raskrižje i zaustavlja robota u njemu.
Nakon zaustavljanja, "end()" završava program.
Ostatak je predmet zadatka koji slijedi.
Arena
Prvo sastavimo arenu sličnu prethodnoj. Uzmimo 9 donjih spojnica i rasporedimo ih na podlogu otprilike prema slici.
Pronađimo ploču s pravokutnim zavojem. Položimo ju na 4 spojnice prema slici.
Ponovimo akciju za preostale 3 ploče. Arenu ćemo isprobati u sljedećem zadatku.
Video
Robot izvodi gornji kod.
Neće?
void RobotLine::loop() {
if (line(0) && line(8))
stop(), end();
else if (line(8))
go(-90, 90);
else if (line(0))
go(90, -90);
else if (line(5))
go(0, 60);
else if (line(3))
go(60, 0);
else
go(40, 40);
}
Ukoliko robot ne izvodi zadatak dobro, smanjite brzine.
Primjer je lijevo. Brzine mogu biti još manje.
Nemojte koristiti "delayMs()" jer robot može propustiti trenutak kad mora stati.
Zadatak: skrenite.
Dovršite gornji kod: u raskrižju robot ne treba stati, nego skrenuti lijevo i nastaviti praćenje crte. Kad dovršite kod, probajte prati li crtu gornje arene u smjeru obrnutom od kazaljke na satu.
Rješenje
void RobotLine::loop() {
if (line(0) and line(8)){
go(-90, 90);
delayMs(500);
}
else if (line(8))
go(-90, 90);
else if (line(0))
go(90, -90);
else if (line(5))
go(-30, 90);
else if (line(3))
go(90, -60);
else
go(60, 60);
}
Kako umjesto 1 naredbe imamo 2, moramo definirati blok, pomoću { i }.
Okretanja smo već vježbali pa bi 2 umetnute naredbe trebale biti jasne.
500 sigurno neće biti broj dobar za Vaš primjer. Nađite pravu vrijednost da se robot okrene baš za pravi kut.
3D
Na
ovom linku možete pogledati 3D vizualizaciju modela i cijeloga ga otvoriti u Autodesk Fusion 360 programu.
Primjedbe
Projekt "Uvod u robotiku" sufinanciran je iz Europskog socijalnog fonda, poziv "Jačanje kapaciteta organizacija civilnoga društva za popularizaciju STEM-a".
Relevantne stranice:
Sadržaj vježbe za virtualne radionice isključiva je odgovornost Hrvatskog društva za robotiku.