Difference between revisions of "Krúžok Robotiky na GJH"
m |
m |
||
Line 420: | Line 420: | ||
== 26.03.2010== | == 26.03.2010== | ||
− | [ | + | [http://robotika.sk/misc/cov.3gp COV] |
Latest revision as of 15:17, 6 April 2010
Krúžok robotiky sa zaoberá stavbou a programovaním robotov zo stavebníc LEGO NXT. Učíme sa programovací jazyk NXC. V máji sa chceme zúčastniť na turnaji RoboCup Junior Slovensko v Banskej Bystrici a na jeseň na súťaži First LEGO League.
Pozri stránku RoboCup Junior Slovensko, kde sú aj pravidlá súťažných kategórií Záchranár, Futbal a Tanec robotov.
Stretnutie 22.4.2008
- Nainštalovali sme si programovací jazyk NXC s prostredím BricX
(treba stiahnuť súbor test_release.zip, rozbaliť ho a spustiť). USB driver: download
- Napísali sme prvý program pre robota, pomocou ktorého prejde o kúsok vpred:
task main() { OnFwd(OUT_AC, 75); Wait(1000); Float(OUT_AC); }
Prvý riadok zapne motory na portoch A a C na rýchlosť 75 (najväčšia rýchlosť je 100). Druhý riadok počká 1 sekundu (ale motory sú už zapnuté, takže robot ide 1s vpred). Tretí riadok vypne motory na portoch A a C.
- Potom si krúžkari sami zmenili program tak, aby robot prešiel do štvorca, použili sme
pritom príkaz:
OnRev(OUT_AC, 75);
ktorý zapne motor v spätnom chode (rýchlosťou 75 - tú môžeme samozrejme meniť).
Videli sme, že bolo zložité vyladiť dĺžku čakania pri zatáčaní a preto sme využili príkaz
RotateMotor(OUT_A, 75, 45);
ktorý spôsobí, že motor na porte A sa otočí len o 45 stupňov a potom zastane - využíva pritom otáčkové snímače, ktoré sú zabudované do motorov.
- Napokon sme na papieri fixkou nakreslili čiaru a naprogramovali sme robota tak, aby
chodil do kola po čiare (keď sme konečne našli správne príkazy :). Tu je výsledný program:
int s; task main() { SetSensorType(S1, SENSOR_TYPE_LIGHT_ACTIVE); SetSensorMode(S1, SENSOR_MODE_PERCENT); ResetSensor(S1); while (1) { if (Sensor(S1) < 48) { OnFwd(OUT_A, 75); Float(OUT_C); } else { OnFwd(OUT_C, 75); Float(OUT_A); } } }
Program najskôr nastaví typ senzora na porte 1 (čiže S1) na aktívny svetelný senzor. Potom opakuje donekonečna (lebo podmienka 1 je vždy splnená) jeden jednoduchý test: ak je intenzita odrazeného svetla menšia ako 45, robot je na čiernej čiare a má zatáčať vpravo. V opačnom prípade je robot na bielom papieri a má zatáčať vľavo. Takto robot sleduje hranu čiary medzi bielou a čiernou... Tento program treba prispôsobiť podľa toho, aká tmavá je čiara (hodnota 48 v podmienke) a podľa toho, na ktorých portoch má robot pripojené motory a ktorým smerom sú otočené (t.j. vymeniť časti podmienok).
Spoločné stretnutia pre všetkých zaújemcov budú pokračovať každý týždeň v utorok o 14.
Stretnutia 24. - 27. 4. 2008
Nasledujúci program vypisuje hodnoty ultrazvukového snímača na porte 1 na meranie vzdialenosti na LCD:
int s; task main() { SetSensorType(S1, SENSOR_TYPE_LOWSPEED); ClearScreen(); while(1) { ClearScreen(); NumOut(10,10,SensorUS(S1)); Wait(500); } }
Typy senzorov:
SENSOR_TYPE_TOUCH tlakový snímač (tlačidlo) SENSOR_TYPE_TEMPERATURE tepelný snímač (doplnkový senzor) SENSOR_TYPE_LIGHT svetelný snímač zo stavebnice RCX SENSOR_TYPE_ROTATION otáčkový snímač zo stavebnice RCX SENSOR_TYPE_LIGHT_ACTIVE svetelný NXT snímač v aktívnom režime SENSOR_TYPE_LIGHT_INACTIVE svetelný NXT snímač v pasívnom režime (dióda nesvieti) SENSOR_TYPE_SOUND_DB zvukový snímač SENSOR_TYPE_SOUND_DBA zvukový snímač (iné jednotky) SENSOR_TYPE_LOWSPEED ultrazvukový snímač
Snímače sa v programe čítajú pomocou funkcíí Sensor(S1) - Sensor(S4),
ale ultrazvukový snímač sa číta pomocou SensorUS(S1) - SensorUS(S4).
Na začiatku programu treba snímače nastaviť pomocou príkazu:
SetSensorType(S1,jeden_z_tychto_typov); SetSensorMode(S1,SENSOR_MODE_PERCENT); ResetSensor(S1);
Ak nechceme hodnoty 0-100, môžeme použiť iný mód, jeden z nasledujúcich:
SENSOR_MODE_RAW priama "surová" hodnota od 0 do 1023 SENSOR_MODE_BOOL 0 alebo 1 SENSOR_MODE_EDGE počíta koľkokrát prejde senzor z 0 do 1 alebo z 1 do 0 SENSOR_MODE_PULSE počíta koľkokrát prejde senzor z 0 do 1 a naspäť SENSOR_MODE_PERCENT hodnota 0 až 100 SENSOR_MODE_FAHRENHEIT jednotky F (pre tepelný snímač) SENSOR_MODE_CELSIUS stupne C (pre tepelný snímač) SENSOR_MODE_ROTATION počet otáčok (pre RCX otáčkový snímač)
Senzory HiTechnic na snímanie IR lotpy, farby, naklonenia a smeru (kompasový) sa nastavujú ako keby boli ultrazvukový senzor. Ak potrebujeme čítať hodnoty aj z iných I2C adries, ako 42H (pozri dokumentáciu k senzorom), môžeme použiť takýto program: accel.nxc - číta presné hodnoty naklonenia akceleračného snímača podľa troch osí X,Y,Z.
Podobne nasledujúci program číta presné hodnoty R,G,B zo svetelného senzora: color.nxc, a nasledujúci prečíta hodnoty pre všetkých 5 IR senzorov zabudovaných do IRSeeker senzora vrátane smeru 1-9: irseeker.nxc
Nasledujúca funkcia prikáže motorom urobiť zadaný počet otáčok v zadanom výkone:
void go(int powerA, int powerB, int rotations) { SetOutput(OUT_A, TachoLimit, rotations, Power, powerA, OutputMode, OUT_MODE_MOTORON, RunState, OUT_RUNSTATE_RUNNING, UpdateFlags, UF_UPDATE_MODE + UF_UPDATE_SPEED + UF_UPDATE_TACHO_LIMIT ); SetOutput(OUT_B, TachoLimit, rotations, Power, powerB, OutputMode, OUT_MODE_MOTORON, RunState, OUT_RUNSTATE_RUNNING, UpdateFlags, UF_UPDATE_MODE + UF_UPDATE_SPEED + UF_UPDATE_TACHO_LIMIT ); while( GetOutput ( OUT_A, RunState ) != OUT_RUNSTATE_IDLE); }
napríklad:
go(75,75,1000); - prejdi 1000 krokov (stupňov otočenia motora) vpred rýchlosťou 75 go(-75,-75,1000); - prejdi 1000 krokov vzad... go(75,-75,1000); - otáčaj sa jedným smerom... go(-75,75,1000); - otáčaj sa druhźm smerom...
Nasledujúci program zapne motory v spätnom chode a ked robot narazí na prekážku, t.j. motory sa začnú prešmykovať, tak začne pískať:
task main () { int rot0, x; OnRev(OUT_BC,100); do { rot0 = GetOutput(OUT_C, TachoCount); Wait(15); x = GetOutput(OUT_C, TachoCount); if ((x - rot0) > -7) PlayTone(200,200); } while (true); }
(+) | (+) | (+) | (+) | (+) |
Nasledujúca funkcia využíva kompasový senzor na porte 1 a vráti uhol 0-180 - smer oproti začiatočnému smeru pri odštartovaní programu.
int r; int uhol() { int u, mensi, vacsi, roz1, roz2; u = SensorUS(S1); if (u > r) { mensi = r; vacsi = u; } else { mensi = u; vacsi = r; } roz1 = vacsi - mensi; roz2 = mensi + 180 - vacsi; if (roz1 < roz2) return 2*roz1; return 2*roz2; }
Môžeme ju v programe použiť takto:
task main () { SetSensorType(S1,SENSOR_TYPE_LOWSPEED); // compass Wait(1000); // pocka 1 sekundu r = (SensorUS(S1)); // nacita pociatocnu hodnotu snimaca while(ButtonPressed(BTN2,true) == false); // pocka na stlacenie sipky vpravo PlayTone(2000,500); // potom zapiska ... if (uhol() < 90) { // robot je otoceny spravnym smerom } else { // robot je otoceny opacnym smerom } }
V dňoch 1. a 2. mája sme sa zúčastnili Súťaže v stavbe a programovaní robotov RoboCup Junior Slovensko 2008 v Banskej Bystrici s týmami v kategóriách Futbal 2-na-2 a Záchranár. Hoci náš záchranársky robot nedopadol veľmi dobre - keďže sme mali na prípravu menej ako 2 týždne, futbalové roboty boli postavené a naprogramované spoľahlivo a získali pekné 3. miesto (2. v kategórii stredných škôl). Tu sú súťažné roboty:
Záchranárske roboty odvtedy vylepšujeme/staviame odznova. Tu sú dve verzie z polovičky mája, ktoré čoskoro otestujeme:
Staviame i novú verziu futbalistických robotov, ktoré v prototypoch vyzerajú takto:
Stretnutie 20.5.2008
Prvý dnešný program hľadá ľudí dookola a keď niekoho nájde, ide za ním, až kým nepríde bližšie, keď zastane: hladac.nxc.
Druhý program naopak chodí vpred dokiaľ nepríde k prekážke, ktorej sa vyhne a pokračuje ďalej:vyhybac.nxc.
A takto vyzerá zábava s robotom:
Stretnutie 24.6.2008
Tvoríme 3D model zachranárskych robotov v programe LEGO Digital Designer. Tu je skoro kompletný model robota:
Vymýšľame algoritmus pre futbalistické roboty:
1.Nacitanie vstupnych udajov kam som otoceny na ktorej som polke(svetla/tmava) cakanie na stlacanie startovneho tlacidla nekonecny cyklus(do vypnutia programu): { 2. Ak nevidim loptu : Hladanie : Otocka na mieste 360 deg ked ju stale nevidi pojde na svoju polku kontrolujuc prekazku (ktore obide) natoci sa na supera a bude pozerat po lopte ak vidi loptu : a)je otoceny na svoju polku: - obide ju: skusi ju obist nalavo, ak je tam prekazka tak ju obide napravo pocas obchadzania kontroluje prekazku // a pojde na superovu branku b)je otoceny na supera- utoci: - ak je lopta daleko (t.j. prekazkovy senzor dava hodnotu > 5 cm): nastavi motory tak, aby sa robot tocil na loptu - ak je lopta blizko, plnou rychlostou vpred na kratku vzdialenost, a potom zastavit na chvilku } 3.spracovanie prekazky : ak je predo mnou prekazka a nie je to lopta treba sa jej vyhnut: zastat, vratit sa o kusok spat otocit sa smerom k superovej strane (vlavo alebo vpravo o 60 stupnov)
Tu je program, ktorý otočí robotom na mieste o 360 stupňov, pričom počas otáčania beží cyklus while a tak robot môže priebežne reagovať na vnemy zo snímačov: otocka.nxc
(+) | (+) | (+) | (+) | (+) |
Stretnutie 13.10.2008
Marek: Navrh robota pre RoboCup 2009
Miso, Miro, Lubo: Balancujuci robot
Súťaž 14.11.2008
FLL - FIRST LEGO League
V tento piatkový deň sme na zúčastnili turnaja FLL. V UPC vládla súťaživá atmosféra a boli sme vystavený vysokej konkurencii. Vyhodnotenie bolo pre nás priaznivé: 3. miesto v kategórii Robot-Game. Zo súťaže sme odchádzali s novými skúsenosťami.
(+) | (+) | (+) | (+) |
P.S. Prišli sme s "ničím" a odišli sme s "niečim"
Stretnutie 27.11.2008
Pripravuje sa robot na RoboCup Rescue, pozri osobitnú stránku: Team GJH Rescue 2009 a roboty na RoboCup Soccer, pozri stránku Team GJH Soccer 2009.
- M&Ms začali robit na projekte kontroly kvality výrobkov pomocou ultrazvukového senzora - zobrazili sme si pekne nameraný profil v grafe.
Naprogramovali sme prvú verziu merania profilov pomocou ultrazvukového senzora: kontrola.nxc - Tomáš pripravil ružicu pre Sbota, takže teraz budeme musieť naprogramovať riadenie rýchlosti servomotorov, lebo doteraz vieme len zapnúť/vypnúť a zmeniť smer. Toto treba naštudovať v manuáli o ATmega128 a upraviť firmware...
- Preskúmali sme novú hračku - robota iSobot, ktorý ako sa ukázalo nechcel ísť, lebo je vyberavý - potebuje veľmi silné batérie - ani alkalické mu nestačia!! (ale už funguje, takže ho nabudúce prinesiem)
- Chalani pracovali na svojom Rescue robotovi.
Stretnutie 2.12.2008
Kolegovia fyzici nás oslovili s požiadavkou zostrojiť experimentálny model na testovanie opotrebovania vozovky pod tlakom pneumatík - t.j. úlohou bolo vymyslieť koleso ;). Presnejšie povedané - koleso, ktoré stále jazdí do kola, je poháňané motorom a dá sa zaťažiť závažím. Jazdniť bude na povrchu nejakého mäkkého materiálu (mokrý piesok, plastelína) a tím bude pozorovať plastickú deformáciu modelovanej vozovky. Využili sme špeciálne sústredné pohonné koleso (turntable) poháňané jedným motorom, ktorý zároveň meria otáčky. Rýchlosť je možné prispôsobiť pomocou tlačidiel na kocke NXT.
Obrázok. Model opotrebovania vozovky.
Program, ktorý riadi rýchlosť kolesa: Media:koleso.nxc.
Stretnutie 5.12.2008
Úloha pre robotnačku: nakresliť snehovú vločku v imagine. Vianoce s robotnackou
12.12.2008:
Zaregistrovali sme ďalšie tri tímy na súťaž RCJ Rakúsko: Team Bratislava Rescue 2009, Team Bratislava Soccer 2009 a Team Bratislava Dance 2009.
11.03.2009
18.03.2009
09.04.2009
We developed a New sensor for RoboBall.
Stretnutie 22.5.2009
Stretnutie 15.6.2009
Radič pre jednosmerné motorčeky k Sbotovej doske