120 likes | 273 Views
JAVNO DOSTUPAN SOFTVER ZA IZUČAVANJE ROBOTIKE NA UNIVERZITETIMA. Aleksandar Nedić Janko Simonović Vladimir Elez. Definicija pojma robotike i robota. Robotika je nauka o dizajniranju, konstruisanju i upotrebi robota .
E N D
JAVNO DOSTUPAN SOFTVER ZA IZUČAVANJE ROBOTIKE NA UNIVERZITETIMA Aleksandar Nedić Janko Simonović Vladimir Elez ROBOTIKA
Definicija pojma robotike i robota • Robotika je nauka o dizajniranju, konstruisanju i upotrebi robota. • Robot je tehnički uređaj koji može da izvršava neka kretanja i funkcije koje su karakteristične za čoveka i koji se odlikuje određenom samostalnošću u radu. • Robot je automatizovan uređaj koji obavlja funkcije koje se obično pripisuju čoveku. ROBOTIKA
senzori percepcija stvarnost Inteligentni spoj percepcije i akcije robot akcija pokretači Princip rada robota ROBOTIKA
Senzori • Skupljaju informacije o okolini. • Zasnovani su na konverziji energije iz jednog oblika u drugi. • Komande senzora (Lego robot): - SetSensor(sensor, config) - SetSensorType(sensor, type) - SetSensorMode(sensor, mode) - ClearSensor(sensor) ROBOTIKA
SENZOR ZA ROTACIJU • Senzor za rotaciju je veoma korisna vrsta senzora. Senzor za rotaciju poseduje rupu kroz koju možete staviti osovinu. Senzor za rotaciju meri iznos rotiranja ose. Jedna puna rotacija ose je 16 koraka (ili -16 ukoliko je rotirate u drugom pravcu). Možete učiniti da osovina pokreće tačan iznos koji želite. Ukoliko želite kontrolu bolju od 16 koraka uvek možete koristiti zupčanike koje ćete povezati na osovinu koja se brže kreće i da je koristite za brojanje koraka. • Jedna standardna aplikacija je da imamo dva rotaciona senzora povezana na dva točka robota koja kontrolišete sa dva motora. Želite da se oba točka kreću podjednakom brzinom. Koristeći senzore za rotaciju možete videti da se jedan motor brže kreće. Tada možete da privremeno zaustavite motor ( najbolje koristeći Float() ) sve dok oba senzora ne pokažu opet istu vrednost. ROBOTIKA
SENZOR ZA ROTACIJU ROBOTIKA
IZRADA SENZORA ZA BLIZINU • Upotrebom senzora za dodir vaš robot može da reaguje kada udari u nešto. Ali bilo bi mnogo lepše kada bi robot mogao da reaguje pre nego što udari u nešto. Trebalo bi da zna da je blizu neke prepreke. Nažalost ne postoje senzori za ovo. Ali postoji medjutim trik koji možemo ovde da upotrebimo. Robot ima infra-crveni port uz pomoć koga može biti u vezi sa kompjuterom ili sa drugim robotima. Senzor za svetlo koji dolazi sa robotom je veoma osetljiv na infra-crveno svetlo. Na osnovu ovoga možemo napraviti senzor za blizinu. Ideja je da jedan task šalje infra-crvene poruke. Drugi task meri fluktuacije (promene, kolebanja) jačine svetla koje objekti odražavaju. • Da bi ste iskoristili ovu ideju postavite senzor za svetlo iznad infra-crvenog porta robota uperen napred. Na ovaj način on samo meri reflektovano infra-crvenu svetlost. Koristimo raw mod za senzor svetlosti da bismo, što je moguće bolje, videli fluktuacije (promene, kolebanja). Evo jednostavnog programa koji omogućava robotu da ide napred dok ne dodje do objekta a zatim napravi okret udesno od 90 stepeni. ROBOTIKA
IZRADA SENZORA ZA BLIZINU • Slaba strana ove tehnike je da ona radi samo u jednom pravcu. Verovatno će vam još uvek biti potrebni senzori za dodir sa strane da bi se izbegli sudari. Ali ova tehnika je vrlo korisna kod robota koji moraju da se kreću u lavirintima. Druga slabost je da ne možete biti u vezi sa robotom preko kompjutera pošto će se ometati infra-crvenim komandama koje šalje robot. ROBOTIKA
Pokretači • Koriste se za kretanje i manipulaciju. • Tipični pokretači su elektromotori. • Komande motora(Lego robot): - On(outputs) - Off(outputs) - Float(outputs) - Fwd(outputs) - Rev(outputs) - Toggle(outputs) - OnFwd(outputs) - OnRev(outputs) - OnFor(outputs, time) - SetOutput(outputs, mode) - SetDirection(outputs, dir) - SetPower(outputs, power) ROBOTIKA
Praćenje crne linije int ok; task main() { SetPower(OUT_A+OUT_B,4); SetSensorType(SENSOR_1,SENSOR_TYPE_LIGHT); SetSensorType(SENSOR_2,SENSOR_TYPE_LIGHT); SetSensorType(SENSOR_3,SENSOR_TYPE_LIGHT); SetSensorMode(SENSOR_1,SENSOR_MODE_RAW); SetSensorMode(SENSOR_2,SENSOR_MODE_RAW); SetSensorMode(SENSOR_3,SENSOR_MODE_RAW); start prati; } ROBOTIKA
task prati(){ ok=1; while (ok==1){ start napred; if (SENSOR_3 < 100){ stop napred; SetOutput(OUT_A+OUT_B,OUT_OFF); ok=0; } if ((SENSOR_3 < 750)&&(SENSOR_3 > 100)){ stop napred; SetOutput(OUT_A+OUT_B,OUT_OFF); if (SENSOR_1 > 750){ start r_levo; until (SENSOR_3 > 750); stop r_levo; SetOutput(OUT_A+OUT_B,OUT_OFF);} else if (SENSOR_2 >750){ start r_desno; until (SENSOR_3 > 750); stop r_desno; SetOutput(OUT_A+OUT_B,OUT_OFF);} else { ok=0; SetOutput(OUT_A+OUT_B,OUT_OFF); } } } } ROBOTIKA
task napred() { while (true) { SetDirection(OUT_A+OUT_B,OUT_FWD); SetOutput(OUT_A,OUT_ON); SetOutput(OUT_B,OUT_ON); }} task r_levo() { while (true) { SetDirection(OUT_A+OUT_B,OUT_FWD); SetOutput(OUT_A,OUT_OFF); SetOutput(OUT_B,OUT_ON); }} task r_desno() { while (true) { SetDirection(OUT_A+OUT_B,OUT_FWD); SetOutput(OUT_A,OUT_ON); SetOutput(OUT_B,OUT_OFF); }} ROBOTIKA