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.
Rješenje
Nema jedinstvenog rješenja jer je svaki robot, i svaki njegov senzor lopte, jedinstven. Varirajte dodani kut (60), otklon od kursa 0 (sad je 5) ili probajte podići senzor lopte više, kako ne bi vidio žice.
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.