Hrvatsko društvo za robotiku - Uvod u robotiku - vježbe

Praćenje crte

Cilj

Cilj je napraviti najjednostavniji program za praćenje crte. Praćenje može biti vrlo izazovno. Ova će vježba biti osnova više vježbi koje slijede.

Povratna sprega

×
U automatici je važan pojam "povratne sprege", u kojem se izlaz iz sistema koristi kao njegov ulaz. Želimo li da stroj lijevo radi stabilnom brzinom, poželjno je brzinu (izlaz) opet vratiti na neki način u sistem, kako bi tim podatkom mogao povećati ili smanjiti dotok pare.

Bez povratne sprege bi brzina oscilirala svakom ubačenom lopatom ugljena u ložište. Ako bi netko utrpao jako puno ugljena, stroj bi se mogao raspasti.

Zato je ugrađen centrifugalni mjerač brzine, označen na slici strelicom.

Kako brzina raste, centrifugalna sila razmiče kugle. Razmicanje zatvara ventil dotoka pare.

U ovim vježbama nećemo koristiti parni stroj, ali ćemo obilato koristiti isti princip, povratnu spregu.

Počnimo s praćenjem crte.

Kod

void RobotLine::loop() {
	if (line(5))
		go(10, 80);
	else if (line(3))
		go(80, 10);
	else
		go(60, 60);
}
"line(5)" čita tranzistor 5, koji je lijevo od centralnog. Ako vraća "istinu", znači da vidi crtu.

U tom slučaju će prvi "if" izvršiti naredbu "go(10, 80);". Desni motori će raditi brže od lijevih, znači robot će skrenuti lijevo, na crtu.

Slijedi prvi "else" on će djelovati u slučaju da lijevi tranzistore ne vidi crtu - izvršavat će se drugi "if".

Želimo li odrediti optimalne brzine za praćenje linije baš ovog radijusa zakrivljenosti, pustimo robota da opiše kružnicu za zadani par brzina i provjerimo koliko njen radijus odstupa od radijusa zavoja. Mijenjajmo brzine dok radijusi ne postanu isti.
void RobotLine::loop() {
	if (line(5))
		go(10, 80);
	else 
		if (line(3))
			go(80, 10);
		else
			go(60, 60);
}
Ne dajte se zbuniti izgledom gornjeg programa. On je isti kao program lijevo, u kojem se jasno vidi da je iza "else" cijeli novi "if".

Zapamtite, C++ ne gleda praznine ni tabulatore. Gornji ispis je samo uobičajeni, skraćeni zapis više "if" naredbi, koje slijede jedna iza druge.

Vratimo se na slučaj da lijevi tranzistor ne vidi crtu. U tom slučaju dolazi na red drugi "if", koji gleda desni tranzistor line(3). Ako je taj izraz istinit (crta je tu), robot će skrenuti desno, opet na crtu.

U slučaju da ni on ne vidi crtu, izvršit će se zadnji "go", s istim brzinama motora. Robot će nastaviti ravno naprijed.

Zadatak: stop.

Modificirajte gornji program na način da stane, kad nestane crta.

Arena

×
Sastavimo prvu arenu. Uzmimo 9 donjih spojnica i rasporedimo ih na podlogu otprilike prema slici.
×
Pronađimo ploču sa zavojem. Položimo ju na 4 spojnice prema slici.
×
Ponovimo akciju za preostale 3 ploče. Formirali smo arenu na kojoj možemo provjeriti kako robot prati jednostavnu liniju. Probajte oba smjera.

Video

Kratki video željene putanje.

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.