void RobotLine::loop() {
static uint32_t target = heading();
int error = heading() - target;
go(50 - error, 50 + error);
}
Kako natjerati robota da ide baš ravno? Davanjem naredbe motorima da se kreću istim brzinama ćemo postići da ide ravno, ali baš potpuno ravno ne. Potrebna nam je povratna sprega za korekciju greške. Kretanje robota mora biti takvo da pokušava smanjiti grešku.
U nedostatku boljeg izvora povratne sprege, koristit ćemo kompas. Na početku spremimo željeni smjer, u varijablu "target".
U svakom sljedećem prolazu računamo grešku (varijabla "error") i koristimo ju za korekciju brzina motora. Varijabla je tipa "
int", cijeli broj (pozitivan i negativan) jer greška može biti negativna.
Zamislite da je "target" jednak nuli na početku. Ako robot ide previše desno, trenutni "heading()" će rasti, znači i "error" će rasti. Ako ga dodamo desnim motorima, oni će se okretati brže i vraćat će robota natrag u traženi smjer.
Želite li uspjeti u natjecanju koje slijedi, morat ćete koristiti ovu spregu.
Uočite manjkavost gornjeg primjera: sprema početni smjer samo jednom.