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

Kalibracija

Cilj

Nekalibrirani senzor je teško koristiti. U vježbi ćemo naučiti kako ga kalibrirati, kako bismo lakše napravili programe za praćenje linije u vježbama koje slijede.

Digitalno ili analogno?

×
Reflektivni senzor može mjeriti analogno (1024 nijansi) ili digitalno (dvije vrijednosti: crta ili nije).

Dvije vrijednosti su očito bolji izbor, ali senzoru je potreban trening, kako bi naučio što je crta.

Trening se u našem slučaju zove "kalibracija". Svakom tranzistoru senzora ćemo dati na znanje koliko je tamna naša crta i koliko je svijetla podloga oko crte.

Ovi se podaci razlikuju, ovisno o materijalima. Na rezultat može utjecati i izrazito jako vanjsko osvjetljenje, npr. direktna sunčeva svjetlost. Zato je dobro izvršiti kalibraciju kad se uvjeti bitno promijene.

Kalibriraj

×
Provedimo kalibraciju. Stavimo robota na bijelu podlogu, ispred crne linije.

Utipkajmo naredbu "ref" (1), kako bismo doši do podmenija za reflektivni senzor.

Iz podmenija, birajmo naredbu "cal" (2) ("calibration").

Ispisat će se tekst (3). Odmah počnimo pomicati robota naprijed-natrag, tako da svi tranzistori vide liniju i podlogu više puta.

Nakon par sekundi će se ispisati tekst "OK". Kalibracija je gotova.

Za vrijeme kalibracije će LED reflektivnog senzora brzo treptati pa je i to način da se vidi kad je kalibracija okončana.

Digitalni test

×
Utipkajte naredbu "dgr" (1) ("digital read") iz istog podmenija.

Rezultat će biti ispis digitalnih očitanja svih tranzistora i pozicije linije (2).

Centar linije (3) nećemo zasad objašnjavati, ali jako će nam dobro doći za točno praćenje linije. Digitalno očitanje može dati informaciju da je linija na 1 ili 2 cm lijevo od sredine robota i to je maksimalna točnost. Podatak o centru linije ima točnost veću od 1 mm.

Digitalne vrijednosti su poredane jedna do druge u binarni broj (4). Nule su bijela podloga, jedinice predstavljaju crno, npr. crtu. Na slici je crta ispod 5. tranzistora.

Kod

void RobotLine::loop() {
	print("%i\n\r", line(3));
	delayMs(100);
}
Pročitajmo sad vrijednosti tranzistora programski.

U kodu je nova funkcija "line". Njen je zadatak pročitati vrijednost danog tranzistora i vratiti ju. Vraćenu veličinu preuzima "%i" i ona se ispisuje.

"3" je parametar funkcije, broj kojim funkciji sugeriramo koji tranzistor po redu nas zanima. Nova je činjenica, koju morate zapamtiti, da C++ ne broji od 1, nego od 0, tako da:
  • line(0) vraća vrijednost 1. tranzisotora,
  • line(1) vraća vrijednost 2. tranzisotora,
  • ...
  • line(8) vraća vrijednost 9. tranzisotora.
Znači, u kodu se čita 4. tranzistor po redu, označen brojkom 4 na pločici.

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.