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

Nestepeničasto praćenje

Cilj

Učinimo povratnu spregu finijom.

Arena

×
Arena je ista kao i u prošloj vježbi.

Izbjeći stepenice

void RobotLine::loop() {
	if (rightFront() > 100)
		go(80, 20);
	else
		go(20, 80);
}
Program koji prati zid je još jednom prikazan lijevo. Omogućava praćenje zida, ali vrlo nemirno.

Robot se ne kreće po glatkoj liniji, koja bi trebala biti što bliža pravcu, nego po trzavoj, stepeničastoj liniji.

Koji je uzrok problemu?
Kad bismo imali sustav koji savršeno (trenutno i točno) popravlja grešku, kretanje bi bilo glatko.

Međutim, sustav korekcije ovisi o tromosti rotora motora, samog robota, o trenju i o drugim faktorima.

Ako je robot na 120 mm od zida, on se neće vratiti na 100, nego npr. 80 mm, jer će mu trebati dosta vremena za ispravak greške.

Nakon 80 mm će se opet vratiti na 120 mm - evo otprilike stepeničastog gibanja.

Kako doskočiti problemu?

Korekciju greške treba učiniti proporcionalnom; kad je robot jako daleko od idealne udaljenosti, treba skretati jako. Kad je greška mala, skretanje također treba biti slabo.

U gornjem programu to nije slučaj. Npr. ako je robot na 101 mm od zida, on će i dalje skretati maksimalnom snagom prema zidu. Kad dođe na 100 mm, bit će jako okrenut prema zidu i jasno da neće moći trenutno ispraviti poziciju, nego će se nastaviti kretati prema zidu.

Popravljeni program

void RobotLine::loop() {
	int error = (rightFront() - 100) * 0.5;
	error = constrain(error, -50, 50);
	go(50 + error, 50 - error);
}
Program uvodi novu varijablu "error", koja mjeri grešku: razliku udaljenosti i idealne udaljenosti (100). Faktor 0.5, koji regulira snagu povratne sprege, se može mijenjati.

Red s funkcijom constrain je opcijalan. Ova funkcija ograničava vrijednost prvog parametra ("error") na vrijednosti između 2. i 3. (-50 i 50). Na taj način sprečavamo da vrijednosti greške ne poraste previše.

Zadnji red je ključan. Ostvaruje proporcionalnu povratnu spregu jer korigira smjer kretanja robota proporcionalno izmjerenoj grešci.

Proučite ovu liniju za pozitivnu i negativnu grešku. Uočite da radi za oba slučaja.

Video

Kratki video pokazuje robota koji izvršava gornji program.

Zadatak: brže.

Promijenite gornji program na način da se robot kreće najvećom mogućom brzinom (bar jedna strana brzinom 127).

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.