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

Lovi loptu

Cilj

Definirati kretanje robota tako da dođe do lopte.

Program

void RobotSoccer::loop() {
	if (setup())
	 	headingToMaintain = heading();
	if (mrm_ir_finder3->distance() > 100) {
		float direction = -mrm_ir_finder3->angle();
		if (fabsf(direction) > 5)
			direction += (direction > 0 ? 
				60 : -60);
		go(35, direction, pidRotation->calculate(
			heading()-headingToMaintain));
		print("Ball angle: %i\n\r", 
			(int)mrm_ir_finder3->angle());
	}
	else
		go(0, 0, heading()-headingToMaintain));
Kao i dosad, prvo spremimo smjer robota.

"mrm_ir_finder3->distance()" daje udaljenost lopte od robota. U našem slučaju samo gledamo ima li lopte ili ne, jer je 100 mali broj za ovu funkciju. Ako je vrijednost ispod 100, moguće je da postoji neki drugi izvor infracrvenog svjetla, ali on nije lopta.

"-mrm_ir_finder3->angle()" daje smjer lopte. Minus je zato što su kutovi suprotni u odnosu na kutove koji se koriste za motore. Proučavamo "fabsf(direction) > 5" - odstupa li smjer lopte za više od 5°, gdje bi 0° bilo točno ispred robota. Ako je to slučaj, onda povećamo kut u kojem će se robot kretati za 60°, kako bismo išli iza lopte, ne direktno u nju. Direktno kretanje bi rezultiralo udarom boka robota u loptu, umjesto da ju uhvatimo udubljenjem, koje je predviđeno na njen prihvat.

Funkcija "go()" djeluje kao što smo dosad opisivali. Brzina kretanja je 35.

Ne kraju else-dio zaustavlja robota kad nema lopte.

Video

Kratki video pokazuje robota koji izvršava gornji program.

Zadatak: ulovite loptu.

Popravite parametre gornjeg programa, dodajte naredbe ili promijenite konstrukciju robota kako bi stvarno ulovio loptu u udubljenje za loptu.

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.