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

Udaljenost

Cilj

U vježbi ćemo naučiti kako mjeriti udaljenost, podatak koji nam može nam jako koristiti za određivanje putanje robota.

Senzori

Senzori su osjetila robota. Njihova je funkcija otkrivanje događaja u okolini i dostavljanje informacija robotu.

Moglo bi se reći da je robot uređaj koji prima vanjske poticaje senzorima, procesira ih i, na temelju poticaja i svog prethodnog unutarnjeg stanja, djeluje na okolinu efektorima (npr. motorima).

Motore već znamo koristiti. Sad ćemo naučiti kako upotrijebiti jedan senzor. U robotici su senzori udaljenosti vrlo bitni. Naučit ćemo raditi s lidarima, uređajima koji vrlo precizno određuju udaljenost mjereći vrijeme potrebno svjetlosti za put do objekta i natrag.

Kasnije ćemo upoznati i druge senzore.

Test

×
Čim sistem detektira uređaj, on se pojavi u meniju. Za ovaj lidar ćemo dobiti red "li2 - Test li. 2m" (1).

Pomoću "li2" naredbe ćemo testirati rad senzora prije nego što se bacimo na programiranje. Uvijek je dobro prvo testirati. Ako test ne daje rezultat, potrošit ćemo puno vremena tražeći grešku u programu koji u stvari nema grešku.

Znači, utipkajmo "li2" (2) i pričekajmo nekoliko sekundi, ne odgovarajući na pitanje koji senzor želimo testirati. Naše nedjelovanje će pokrenuti test svih senzora.

Počet će ispis udaljenosti svih lidara (3). Imamo ih 3 pa ćemo dobiti 3 kolone. Vrijednosti su u mm.

Program

void RobotLine::loop() {
	print("%i mm\n\r", front());
}
Promijenio "loop" na način prikazan lijevo. U jednoj liniji ima više novosti.

Zasad prepišimo tekst, pokrenimo program, uvjerimo se da senzor mjeri udaljenosti pa ćemo dati objašnjenje.

Objašnjenja

×
Upisali smo program (1), pokrenuli ga desnom strelicom i dobili rezultate (2).

Prvo, front(). Više puta smo spominjali riječ funkcija. Da, ovo je još jedna funkcija. Logički povezan dio koda. U našem slučaju je veza prema laseru. Funkcija može, kao rezultat rada "vraćati" rezultat. "front()" vraća, pogađate, udaljenost ("front" - mjereno s prednje strane robota prema naprijed).

U sistemu su 3 lidara. Pomičite ruku ispred svakog dok ne otrkrijete koji od njih je prednji senzor.

"Vraćena" vrijednost se pojavljuje u kodu na mjestu na kojem smo "pozvali" funkciju. Recimo da je udaljenost 89 (mm). Pojednostavljeno, program će, tokom izvršavanja, svaki put zamijeniti tekst "front()" s "89". Nakon toga će naša instrukcija izgledati ovako:
	print("%i mm\n\r", 89);
Sad je to već sličnije "print" funkciji koju smo upoznali. Idemo na sljedeću novost: " mm". Da, mi možemo koristiti odjednom pomiješan tekst i mjesta za ispis cijelih brojeva. Rezultat će biti kao na slici lijevo, brojčana udaljenost, nakon koje slijedi tekst " mm".

×
Zadnja je novost "\n\r", koji predstavlja još jednu grubost C++-a prema početniku. Funkcija je jednostavna: "skoči u novi red i nastavi ispis tamo". Ovo su kontrolni znakovi pa tekst neće biti ispisan, nego će samo biti izvršena naredba.

Nažalost, VS Code nam neće pomoći u pamćenju oznake jer su mogućnosti, tokom unosa teksta, vrlo velike i on ne može znati što bismo željeli utipkati dalje.

"n" dolazi od izraza "new line" - skoči u novu liniju. r je vezan na mehaničke pisaće mašine gdje je "carriage" bio valjak koji je operater ručno pomicao na početak". U našem slučaju znači: "počni ispis od početka linije".

Kao i obično, ispis prekinite naredbom "x".

Zadatak: Ispis upozorenja

Napišite program koji ispisuje "Alarm" kad je udaljenost pred lidarom manja od 100 mm.

Uputa: dio logičkog izraza može biti vrijednost funkcije. Npr.

	front() == 100
je ispravan logički izraz. Umjesto "front()" će biti vraćena udaljenost (cijeli broj, npr. 25), nakon čega će izraz primiti vrijednost npr. "25 == 100".

Eksperti,

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.