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

Oštri zavoji

Cilj

Uvest ćemo u upotrebu još 2 tranzistora u senzoru i poboljšati praćenje.

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);
}
Praćenje crte pomoću 2 senzora radi dobro, sve dok se ne pojave oštri zavoji. Problem je što, za praćenje blagih zavoja, razlika u brzinama lijevih i desnih koatača ne smije biti prevelika. Za oštre zavoje treba biti vrlo velika. U suprotnom će robot na zavoju produžiti ravno.

Znači, pomoću samo 2 tranzistora nije moguće skretati i jako i slabo. Srećom, tranzistora imamo dovoljno. Uključimo još 2 u program, kao što je u kodu lijevo:
  • 8, krajnji lijevi,
  • 5, lijevi,
  • 3, desni i
  • 0, krajnji desni.
U slučaju da jedan od krajnja 2 tranzistora zahvati liniju, okrećemo robota u mjestu (brzine 90 i -90).

Uočite da u kodu prvo proučavamo krajnje tranzistore jer oni imaju veći prioritet: ako u oštrom zavoju liniju vidi lijevi i krajnji lijevi, trebamo okretati robota u mjestu, ne skretati blago.

Arena

×
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. Formirali smo arenu na kojoj možemo provjeriti kako robot prati oštre zavoje. Probajte oba smjera.

Video

Robot pokretan gornjim programom.

Neće?

void RobotLine::loop() {
	if (line(8))
		go(-90, 90), delayMs(50);
	else if (line(0))
		go(90, -90), delayMs(50);
	else if (line(5))
		go(10, 80);
	else if (line(3))
		go(80, 10);
	else
		go(50, 50);
}
Gornji program u nekim slučajevima neće raditi: robot će u zavoju produljiti ravno.

Mogući su uzroci osunčanost ili velika reflektivnost crne trake. Štampana crna crta može reflektirati infracrvenu svjetlost jako dobro.

Prvo probajte kalibrirati senzor. Postupak za kalibraciju reflektivnog senzora opisan je u poglavlju "Kalibracija" (zadajemo naredbu "ref" - može i bez toga - pa tipkamo "cal").

Ako ne ide, pokušajte mijenjati program u smjeru lijevog: smanjite brzine i dodajte pauze, koje će pojačati okretanje na mjestu.

Svi senzori

	if (line(8))
		go(-90, 90);
	else if (line(0))
		go(90, -90);
	else if (line(1))
		go(70, -20);
	else if (line(2))
		go(60, 10);
	else if (line(3))
		go(50, 20);
	else if (line(5))
		go(20, 50);
	else if (line(6))
		go(10, 60);
	else if (line(7))
		go(-20, 70);
	else
		go(70, 70);
Umjesto gornjeg programa, možete probati program lijevo, koji koristi sve senzore.

Unatrag

	if (line(8))
		go(-90, 90);
	else if (line(0))
		go(90, -90);
	else if (line(1))
		go(70, -20);
	else if (line(2))
		go(60, 10);
	else if (line(3))
		go(50, 20);
	else if (line(5))
		go(20, 50);
	else if (line(6))
		go(10, 60);
	else if (line(7))
		go(-20, 70);
	else if (line(4))
		go(70, 70);
	else
		go(-70, -70);
Kod je vrlo sličan prošlom.

Dodano je čitanje senzora 4 (srednji), u kojem slučaju robot ide ravno.

"else" sad, budući da su testirani svi senzori, dolazi u igru samo kad više nema linije. Recimo kad je projurio prebrzo u oštrom zavoju i izletio van.

U tom slučaju je razumno vratiti se natrag, pa je zato dodana naredba go(-70, -70);.

Zadatak: brzina.

Brzine motora nisu optimalne. Promijenite ih s ciljem da robot što brže prođe arenu koju ste sastavili.

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.