RCK Ruđera Boškovića - mobilna / uslužna robotika

Vježbe - Kružnica

Zadatak

Koristeći nogometaša i uslužnog robota, pokrenimo ih na način da se kreću kružnicom. Dodatno, neka robot bude uvijek okrenut u istom smjeru. Nije potrebna povratna sprega za korekciju smjera.

Koristeći robota za labirint, također se krećite po kružnici. U ovom slučaju robot uvijek ide naprijed i skreće.

Priprema

Za vježbu je potrebno:

Izbor robota za nogomet

Uzmite robota za nogomet. Radit ćemo program za njega.

Otvorite stranicu "MRMS.ino", u Arduino IDE.

Ako ju ne vidite, ili proširite ekran, tako da svi tabovi postanu vidljivi, ili kliknite na 3 točke.

Nakon toga kliknite na "MRMS.ino", kako biste datoteku otvorili u editoru.
void setup() {
	...
	robot = new RobotSoccer((char*)"Two"); // RobotLine, RobotMaze, RobotMin, RobotSoccer, or Your custom robot. "My robot" is Bluetooth name.
	robot->print("Start.\n\r");
	...
}
Nakon riječi "new" mora biti "RobotSoccer". Program koji se sprema u robota se sastoji od programa za razne robote. Na ovaj način se bira program baš za ovu vrstu robota.

"Two" je proizvoljno (ali ne predugo) ime robota. Ime se pojavljuje prilikom Bluetooth uparivanja robota s mobitelom pa je nužno da svaki robot ima drugačije ime.

Umjesto "Two", slobodno upišite "Marko", "Ivica" ili nešto drugo.

Pozicija programa

Otvorite datoteku "mrm-robot-soccer.cpp" u Arduino IDE.

Ako ju ne vidite, ili proširite ekran, tako da svi tabovi postanu vidljivi, ili kliknite na 3 točke.

Nakon toga kliknite na "mrm-robot-soccer.cpp", kako biste datoteku otvorili u editoru.
void RobotSoccer::loop() {
	...
}
Nađite dio koda s lijeve strane. Umjesto "..." je možda upisan neki kod.

"..." je mjesto gdje ćemo uvijek upisivati kod u ovim vježbama.

Zašto pišemo program baš ovako? Piše ovdje.

Priprema

Srećom, funkcija za pokretanje motora robota za nogomet ima parametar koji bira smjer. Samo ga trebamo mijenjati od 0 do punog kuta i robot će ići po kružnici.

Za početak zabilježimo početno vrijeme u ms.

Koristite ugrađenu funkciju:

Željeni kut

Izračunajte trenutni željeni kut u stupnjevima kao proteklo vrijeme u ms podijeljeno s 30.

Pokretanje motora

Pokrenite motore brzinom 30.

Koristite ugrađenu funkciju:

Izbor robota za labirint

Uzmite robota za labirint. Radit ćemo program za njega.

Otvorite stranicu "MRMS.ino", u Arduino IDE.

Ako ju ne vidite, ili proširite ekran, tako da svi tabovi postanu vidljivi, ili kliknite na 3 točke.

Nakon toga kliknite na "MRMS.ino", kako biste datoteku otvorili u editoru.
void setup() {
	...
	robot = new RobotMaze((char*)"Two"); // RobotLine, RobotMaze, RobotMin, RobotSoccer, or Your custom robot. "My robot" is Bluetooth name.
	robot->print("Start.\n\r");
	...
}
Nađite ovaj dio koda.

Nakon riječi "new" mora biti "RobotMaze". Program koji se sprema u robota se sastoji od programa za razne robote. Na ovaj način se bira program baš za ovu vrstu robota.

"Two" je proizvoljno (ali ne predugo) ime robota. Ime se pojavljuje prilikom Bluetooth uparivanja robota s mobitelom pa je nužno da svaki robot ima drugačije ime.

Umjesto "Two", slobodno upišite "Marko", "Ivica" ili nešto drugo.

Pozicija programa

Otvorite datoteku "mrm-robot-maze.cpp" u Arduino IDE.

Ako ju ne vidite, ili proširite ekran, tako da svi tabovi postanu vidljivi, ili kliknite na 3 točke.

Nakon toga kliknite na "mrm-robot-maze.cpp", kako biste datoteku otvorili u editoru.
void RobotMaze::loop() {
	...
}
Nađite dio koda s lijeve strane. Umjesto "..." je možda upisan neki kod.

"..." je mjesto gdje ćemo uvijek upisivati kod u ovim vježbama.

Zašto pišemo program baš ovako? Piše ovdje.

Robotom za labirint po kružnici

Kako se robot za labirint ne može kretati bočno, učinit ćemo da cijelo vrijeme skreće, dok ide naprijed, opisujući kružnicu.

Koristit ćemo enkodere. Za početak ih inicijalizirajte na isti način kao u vježbi "Ravno naprijed".

Trebat će nam i varijabla u koju ćemo spremati početak mjerenja.

Omjer brzina

Pokrenite robota na način da je omjer broja impulsa lijevog i desnog kotača konstantan.

Prvo izračunajte omjer broja impulsa lijevog i desnog enkodera.

Onda pokrenite kotače na način da se taj broj drži konstatntim. Koristite ugrađenu funkciju: Mjeranje izvršite u intervalima od npr. 20 ms. Nakon toga resetirajte brojače.

Kružnica danog radijusa

Napravite program koji će robota pogoniti po kružnici radijusa 1 m.

Nisu dozvoljeni pokušaj i pogreška, nego treba izračunati.

Uslužni robot

Uzmimo uslužnog robota. Kako se on prijavljuje kao "RobotMaze", nije potrebno mijenjati "MRMS_ESP32.ino" sketch.

Želimo se kretati po kružnici. Znači da na svakoj točki smjer kretanja robota mora biti tangencijalan na kružnicu u toj točki.

Uočimo da se taj vektor može postaviti s početnom točkom u ishodištu koordinatnog sustava. Kretanje vektora po obodu kružnice u tom slučaju postaje opisivanje završne točke vektora po kružnici. To nije ista kružnica, ali to sad nije tako bitno.

Sad možemo rastaviti vektor kretanja na 2 komponente: po x i y osi.

Izračunajte x i y komponente brzine koristeći trigonometriju, funkcije sinus i kosinus.

Za početak deklarirajte varijablu koja će mjeriti broj milisekundi i u nju spremite početnu vrijednost.

Koristite ugrađenu funkciju:

Željeni kut

Izračunajte trenutni željeni kut u radijanima kao proteklo vrijeme podijeljeno s 1500.

Projekcije

Izračunajte x komponentu brzine tako da uzmete kosinus kuta * 50, y kao sinus * 50.

Nakon toga pokrenite robota u smjeru y prema naprijed i x prema desno. Koristite ugrađenu funkciju:

Primjedbe