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

Prilaz golu

Cilj

Programirati nogometaša za prilaz golu kad ulovi loptu.

Nužni uvjeti

void RobotSoccer::goalApproach(){
	if (lineAny())
		actionSet(actionLineAvoid);
	else if (!barrier())
		actionSet(actionIdle);
	else{
		...
	}
}
Programiramo funkciju "goalApproach()", koja se normalno izvršava u primjeru programa, koji dolazi s robotom, nakon što uhvati loptu.

Nužni uvjeti za nastavak prilaska je:
  • nije naišao na liniju,
  • još uvijek ima loptu.
Ako nešto od toga nije zadovoljeno, akcija će biti promijenjena u odgovarajuću za to opažanje.

Greške

void RobotSoccer::goalApproach(){
	if (lineAny())
		actionSet(actionLineAvoid);
	else if (!barrier())
		actionSet(actionIdle);
	else{
		float errorL = SOCCER_SIDE_DISTANCE_WHEN_CENTERED - left();
		float errorR = right() - SOCCER_SIDE_DISTANCE_WHEN_CENTERED;
		float errorX = fabsf(errorL) > fabsf(errorR) ? errorL : errorR;
		float errorY = front();

		...
	}
}
Izračunamo greške, razliku trenutne pozicije i željene.

Željena je u sredini gola.

Greška po x osi je veća od grešaka lijevo i desno.

Kretanje

void RobotSoccer::goalApproach(){
	if (lineAny())
		actionSet(actionLineAvoid);
	else if (!barrier())
		actionSet(actionIdle);
	else{
		float errorL = SOCCER_SIDE_DISTANCE_WHEN_CENTERED - left();
		float errorR = right() - SOCCER_SIDE_DISTANCE_WHEN_CENTERED;
		float errorX = fabsf(errorL) > fabsf(errorR) ? errorL : errorR;
		float errorY = front();

		float direction = atan2(errorX, errorY) / PI * 180;
		go(60, direction, pidRotation->calculate(heading() - headingToMaintain));
		print("Goal approach\n\r");
	}
}
Izračuna se arcus tangens i dobije kut do željene pozicije.

Robot se pokrene prema njoj ("go()").

Zadatak: brzina

Smanjite brzinu kretanja proporcionalno približavanju golu.

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.