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

Vježbe -Zadržavanje brzine

Zadatak

Robotom za labirint pratite liniju na način da održavate brzinu konstantnom, bez obzira na kosinu.

Priprema

Za vježbu je potrebno:

Arena

×
Sastavimo arenu.

Ovdje je primjer MRMS modularne arene.

Moguće konstruirati i drugačiju arenu, npr. lijepljenjem izolir-banda na bijelu podlogu.

Postavimo donje spojnice na podlogu otprilike prema slici.
×
Postavimo ploče.
×
Na 4 mjesta postavimo poklopce spojnica.
×
U poklopce spojnica umetnemo aluminijske profile.
×
Na vrhove profila umetnemo gornje spojnice.
×
Postavimo ploče mosta.

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.

Postavke na početku

Konstantnu brzinu možemo održavati putem povratne sprege bazirane na jednom od enkodera pogonskim motorima. Iako bismo mogli mjeriti samo jedan motor, u drugom dijelu vježbe ćemo trebati pratiti liniju konstantnom brzinom. U tom slučaju motori neće imati iste brzine. Zato ćemo odmah mjeriti oba.

Spojimo digitalne izlaze enkodera na pinove broj 16 (lijevi) i 17 (desni) ESP32 pločice.

Podesimo softversko čitanje pulseva na pinu.

pinMode() naredba će postaviti pin kao ulazni, znači čitat će signal.

attachInterrupt() će čitati interrupte svaki put kad se promijeni stanje na pinovima.

...
	pinMode(16, INPUT);
	attachInterrupt(16, encoder1Increase, CHANGE);
	pinMode(17, INPUT);
	attachInterrupt(17, encoder1Increase, CHANGE);
...
"encoder1Reset()" i "encoder2Reset()" su funkcije koje će resetirati brojač enkodera.

Zabilježite i početno vrijeme u milisekundama.

Brzina

Stalno mjerite broj impulsa i proteklo vrijeme.



Izaberite vrijeme u kojem ćete mjeriti obadvije veličine, npr. 20 ms. Nakon isteka vremena, resetirajte brojače.

Podijelite protekli broj impulsa s proteklim vremenom i tako ćete dobiti veličinu proporcionalnu (kutnoj) brzini: broj enkoder impulsa u sekundi.

Ako je premala, povećajte ju. Ako je prevelika, smanjite.

Sad smo došli do ciljne brzine, ali još treba pratiti liniju.

Praćenje linije

Kad robot treba ići ravno, obadva motora pogonite izračunatom brzinom.

Kad treba skrenuti, oduzmite ili zbrojite npr. 30 od izračunate brzine i na taj način pogonite brži i sporiji motor.

Kao i obično, koristite ugrađenu funkciju:

Natjecanje

Probajte proći stazu što brže, ali konstantnom brzinom. Bit će potrebne korekcije programa, ne samo konstante koja se dodaje i oduzima od izračunate brzine.

Primjedbe