Sanjaju li roboti električne ovce?

Osnovne informacije:

Trajanje: 5+2 dana

Broj djece: 3 (ali planirano za 5-6)

Prikladno za dobnu skupinu: radili smo s djecom od 12-14 godina, ali može i starije (originalno je bilo zamišljeno za srednju školu)

Održano (kada i gdje): Tehnička, industrijska i obrtnička škola Čakovec, 26.7.-1.8.2010.

Cilj radionice:

Cilj radionice je naučiti programirati kroz izgradnju robota. Namjera je sa sudionicima napraviti nekoliko jednostavnih robota iz Lego MINDSTORMS setova pomoću kojih će se upoznati sa osnovama programiranja.

Mentori:

Ivan Novosel

Sunčan Stilinović

Kratki opis radionice:

Što je robot? Kako radi? Kako roboti razaznaju svijet oko nas? Kako sastaviti robota za određenu namjenu? Kako naučiti robota da radi točno ono što mi želimo? U sklopu ove radionice želimo vam odogovoriti na sva ova pitanja, ali i proći kroz ista na praktični način. Probat ćemo sastaviti robote za razne namjene, a onda ih naučiti da sami izvršavaju zadatke.

Sudionici radionice:

Domagoj Petek

Katarina Lehman-Pavasović

Krunoslav Lehman-Pavasović

Izvori informacija:

Projects fo NXT 2.0 - stranica sa nekoliko planovima za nekoliko jednostavnih robota, kao i programima za njihovo testiranje. Ovi roboti su praktičniji od onih opisanih u standardnom setu, s obzirom da se lakše grade (a pritom su zabavni), a naglasak ove radionice je bio na programiranju.

NXT tutorial - stranice sa sažetim uputama za korištenje NXT-G programerskog okruženja, uključujući i sve programerske blokove.

Programiranje Mindstorms robota - kraće upute na hrvatskom sa stranica Željezničke tehničke škole Zagreb - praktično ako vam treba nešto na hrvatskome, ali više detalja ćete naći na ostalim izvorima.

Brošura koja dolazi u samom setu i sustav pomoći koji unutar NXT-G sučelja su također korisni izvori informacija.

Okvirni plan rada:

Prije svega napomena, obojica smo prije same radionice imali veoma malo direktnog iskustva u radu sa NXT robotima (iako obojica programiramo već godinama), s obzirom da smo ih za učenje mogli posuditi na kraće vrijeme. Ovo je imalo i neke pozitivne i negativne posljedice na samu radionicu - mislimo da je za djecu bilo vrlo poučno vidjeti kako se pokušava riješiti problem na koji nitko pa ni učitelj ne zna rješenje, a s druge strane nažalost isti problem nismo još riješili (ali za to krivimo manjkavu dokumentaciju :-)

1. dan

11 – 13h Tko smo mi i što su roboti?

Početak radionice smo posvetili upoznavanju i to smo uklopili u jednostavniju aktivnost koja nema veze sa samim programiranjem. Cijelo dopodne smo posvetili raspravi o tome što je robot, gdje se sve pojavljuju (SF roboti, industrija, zabava, kućanstvo). Također malo smo ispitali i što oni do sada znaju o robotima i kakva im je percepcija robota.

14 – 16h upoznavanje sa NXT robotima

Nakon toga smo krenuli na upoznavanje sa NXT 2.0 setom. Inače roboti se mogu graditi i programirati na različite načine, ali Lego NXT su pogodni iz više razloga:

  1. jednostavna izgradnja - puno jednostavnih elemenata od kojih možete izgraditi stvarno svašta + što su mnogi već radili nešto sa Lego kockama
  2. jednostavno programiranje - set dolazi sa NXT-G sučeljem za grafičko programiranje. To vam omogućava da se ne petljate u sintaksu uobičajenih programskih jezika što oduzima puno vremena te se brže možete orijentirati na osmišljavanje programskih rješenja umjesto da učite sintaksu.

Originalno smo planirali upoznavanje sa elementima, te sa NXT-G sučeljem, no na kraju smo već prvi dan smo krenuli u izgradnju robota. Inače praktički cijelo vrijeme smo gradili robote po već postojećim planovima, te ih ponekad adaptirali. S obzirom da je ova radionica primarno posvećena programiranju izgradnja novih robota od nule bi oduzimala previše vremena, iako bi i radionica usmjerena na mehaniku bila interesantna ;-)

Nakon što smo pregledali čega sve ima u setu, pogledali smo koji sve interesantni planovi za izgradnju postoje. Ekipa je odabrala ČekićBot, najviše zato jer izgleda zabavno (i bio je), no kroz dane smo na ovom robotu naučili najviše toga. Tog popodneva smo ga samo stigli izgraditi i učitati već gotovi program da vidimo kako inače radi. Sutradan se kreće sa programiranjem...

2. dan

Od drugog dana su se otprilike raspali svi planovi koje smo ranije imali :-) Naime nakon što smo ekipi prvi dan pokazali stranicu sa projektima teško je bilo zaustaviti ih od "ali mi bi to radili!" ponašanja (a iskreno i mi smo htjeli vidjeti neke stvari ;-) , što nas je puno ranije odvelo u neke vode koje smo planirali za kasnije dane, a i u neke koje nismo planirali.

U originalu smo za 2. dan planirali baviti se sa kretanjem robota, s obzirom da se tu lako možemo baviti jednostavnim slijednim programima i upoznati se sa osnovnim blokovima naredbi. Uz to kretanje NXT robota je često drugačije od onoga što mu naredite - za početak je uopće potrebno prepoznati kako će se određene naredbe ponašati, tj. kakvo gibanje će se desiti, a onda možete gledati razne anomalije (npr. zaključiti zašto se robot koji bi se trebao kretati ravno ipak zakreće nakon nekog vremena).

Prijepodne smo najviše radili na osnovnim programskim blokovima i učili o tome kako radi NXT-G sučelje. Programiranje se u NXT-G-u radi pomoću grafičkih blokova, koji predstavljaju pojedine naredbe, i koje dovlačite na radnu površinu i povezujete. Polako smo krenuli sa izgradnjom programa za ČekićBota, najprije smo ugradili samo rudimentarne naredbe za kretanje, s tim da smo tog dobili i funkcionalno upravljanje (kretanje naprijed, nazad, skretanje, udarac) za što je trebalo naučiti grananje, rad senzora za pritisak, te logičke operacije - ovo nam je došlo kao iznenađenje, ali upravljač ne bi radio bez jednog XOR-a pa smo odmah prošli osnove boolove algebre.

Poslijepodne smo se previše ukopali u debugiranje pa je odlučeno za ćemo ga ostaviti za sutra i izgraditi novog robota, onog za praćenje linije. Inače napravili smo i mali test brzinskog građenja, s obzirom da je baza robota za praćenje linije takozvani petominutni robot koji je toliko jednostavan da bi se trebao moći sastaviti u 5 minuta. Bilo je bliže 20 minuta :)

3. dan

U planu za treći dan je bilo proučavanje raznih senzora. Htjeli smo vidjeti kako raspoznati svijet oko sebe pomoću implementacija senzora na naše robote. Taj plan je dakako bio ponešto izmijenjen s obzirom da smo još jučer prošli neke od tih stvari, današnji dan je bio više povratak na osnove kako bi vidjeli koliko su toga pohvatali i koliko su spremni sami napraviti vlastiti program.

S obzirom da smo jučer sastavili robota za praćenje linije danas je na redu bilo programiranje. Ovaj robot bi trebao moći pratiti crnu liniju na svijetloj podlozi, testi poligon za praćenje linije dolazi u paketu (veliki poster sa elipsoidnom trakom). Za ovo su se trebali upoznati sa radom svjetlosnog senzora, te primijeniti ideje koje su vidjeli jučer. Naš pristup je bio "imate robota, natjerajte ga da radi" :) Počeli smo sa duljom raspravom gdje smo vidjeli da su naši sudionici primjenjivali vrlo različite metode za dizajn algoritma - od toga da se promisli većina koraka unaprijed (na što smo ih poticali), pa do toga što bi moj profesor iz srednje nazvao "metodom uzaludnih promašaja" (također zvana "ako prođe prođe" - A.P.P. ili "baci bombu") koja se sastoji u tome da puknete neku vrlo rudimentarnu ideju i isprobate da li radi. Ako ne radi, prilagodi ideju i probaj ponovno. Ponovi. Grozan pristup ako vam početna ideja nije bila dobra ili ako imate složeniji problem :)

Dopustili smo obje kako bi se pokazale razlike u pristupu, Domagoj je APP metodom pokušao doći do rješenja dok su ostali mozgali o algoritmu. Iako se u jednom trenutku činilo kao da APP metoda uspijeva dok se još mozgalo, malo pozornije testiranje pokazalo je da program radi samo na mahove dok u međuvremenu zbunjeno vrluda uokolo. Ovo je također bila i prilika na osvrt o metodama testiranja i debugiranja, kako uopće vidjeti da li naš program radi ono što je zamišljeno. Nešto kasnije je osmišljen i drugi algoritam te se uz malo dorade (iz drugog pokušaja) dobilo praćenje linije (ne osobito efikasno, ali pouzdano). Ovo sve je bilo vezano uz prijepodne, poslijepodne su počele male radionice pa je glavna radionica bila na pauzi.

Kasnije smo se vratili ČekićBotu, koji je sada radio kako je i zamišljeno - dakako prije toga smo imali jedan vrlo simpatičan bug koji nam se kasnije ponovno dešavao, gdje uslijed lošeg postavljanja uvjeta za petlju robot "poludi" i u beskonačnoj petlji počne lupati čekićem i pritom se zlokobno smije. Bwahahaha. Dobio je nadimak Skynet. Također odlučeno je da smo nezadovoljni sa trenutnim kontrolama s obzirom da stalno moramo čućiti za ČekićBotom, što je vrlo nepraktično kad se borite protiv miševa. Ušli smo u projekt izrade bežičkog upravljača, koji se protegao sve do zadnjeg dana, a onda dalje u vječnu misteriju s obzirom da nikad nije radio zadovoljavajuće.

4. dan

U originalu smo za 4. dan rezervirali bavljenjem varijablama, tj. spremanjem podataka, te općenito nekim naprednijim funkcijama za rukovanje podatcima. Za razliku od ne-grafičkih jezika u NXT-G-u se varijable zapravo prirodno uvode dosta kasnije s obzirom da za većinu jednostavnijih programa nije potrebno izričito spremati podatke, već se to kroz druge naredbe odvija automatski. Tek za zadatke vremenski izmaknutog uspoređivanja (dva vremenski odvojena događaja) će vam nužno trebati spremanje podataka.

No zbog već ranije spomenutog izmješanog rasporeda varijabli smo se u nekoliko navrata dotakli zbog potrebe, pa smo se rađe usredotočili na nešto kompliciraniji zadatak za programiranje koji se nadovezuje na jučerašnji dan - sastavili smo i programirali tzv. istraživača, robota koji se kreće po prostoriji i izbjegava prepreke, po mogućnosti prije nego što u njih udari. Za taj zadatak smo se prvo morali upoznati sa ultrazvučnim senzorom, nekon čega je pristup bio sličan onome u 3. danu - "napravili ste robota, natjerajte ga da radi", s time da je zbog kompliciranijeg zadatka danas bilo dosta važnije promisliti prije nego što se upustite u samo kodiranje.

S obzirom da mentori imaju vremena uslijed takvog načina rada Sunčan se čisto iz zabave upustio u izradu lego gitare, koja je kasnije uveseljavala mnoge :) Istraživač je uspješno upogonjen, s time da smo se danas dosta više osvrnuli na testiranje s obzirom da smo provjeravali više vanjskih uvjeta i uspoređivali ih. Poslijepodne su ponovno bile male radionice.

5. dan

Peti dan, tj. zadnji dan kada bi se trebale raditi neke nove stvari (treba ostaviti vremena za pripremu izlaganja i sl. stvari) smo planirali raditi bežičnu komunikaciju dvije lego "cigle". Svaka cigla dolazi sa ugrađenim bluetooth primo-predajnikom što vam omogućava da radite robote koji komuniciraju i surađuju. Planirali smo to proučiti na bazi auta na daljinski, no kako smo u međuvremenu već krenuli u adaptaciju ČakićBota odlučeno je da ćemo to pokazati na njemu.

Ovdje nas je kočilo manjak našeg predznanja - naime prije same radionice nismo imali priliku testirati bežičnu komunikaciju pa smo to pokušali naučiti i testirati za vrijeme radionice. Problem ovdje je što se to pokazalo kao netrivijalan problem zato jer bežični prijenos nije ispao toliko jednostavan i intuitivan kao ostale stvari u NXT setu. Primjeri gotovih robota sa bluetooth komunikacijom su radili, ali naše adaptacije su se ponašale čudno, te se ovdje vidi manjak dokumentacije u vezi naredbi zato jer se nisu ponašale baš kao zamišljeno (nigdje nismo našli objašnjenje zašto konkretno naše ideje ne rade iako nismo radili ništa što već nismo vidjeli u već postojećim programima).

Nakon što smo pokazali kako rade blokovi za komunikaciju bacili smo se na konkretan problem gdje je kontrole za upravljanje ČekićBotom trebalo prebaciti u drugu ciglu. Ovo se pretvorilo u jednu veeeliku lekciju o tome kako pokušati dokučiti kako radi nešto za što nigdje ne možeš dobiti informaciju o tome kako radi. Pokazali smo i klasični pristup:

  1. kako proučavati priručnu dokumentaciju i priručnike koje imaš (u ovom slučaju ugrađena Pomoć i brošura koja dolazi sa setom)
  2. kako "krasti" ideje iz drugih programa koji uspješno rade sličnu stvar
  3. kako na internetu pokušati naći rješenje za svoj problem, situacija u kojoj ste jako često kad učite programirati.

S obzirom da ništa od ovoga nije upalilo na kraju smo najviše vremena proveli u finim testiranjima pokušavajući shvatiti što točno ne radi, ali bezuspješno. Za popodne smo krenuli na produktivnije stvari - izgradnja i adaptacija Multi-bota, gdje smo htjeli vidjeti kako možemo adaptirati fizičku verziju ovog robota u nešto što će se ponašati kao istraživač, ali da pritom ima i opciju napada na prepreke koje se ne žele pomaknuti.

6.dan

Ovo je bio zadnji radni dan radionice, gdje smo htjeli završiti jučer započetog robota i pripremiti poster i izlaganje za zadnji 7. dan kada se izlaže sve što smo radili. Dopodne se robot pretvorio u nešto prilično veliko, te smo uspješno uspjeli uprogramirati željeno ponašanje. Jedino što nismo savršeno izgladili je prepoznavanje zidova, s obzirom da ne želimo da robot beskonačno puca po zidu pošto mu se ovaj ne želi maknuti s puta. Kompromisno rješenje je bilo da prvi put opali, ali ako se prepreka i dalje ne miče proglašavamo ju zidom i krećemo u drugu stranu. Bežično upravljanje i dalje ne radi :(

7. dan

Izlaganje za štandom i puštanje robota uokolo za dobar PR ;-)

Materijali:

  1. Lego Mindstorms NXT 2.0 ( minimum je 1 set na 2-3 sudionika, no dakako što ih više imate to bolje) - nabavljivo u većim dućanima specijaliziranim za djecu i igračke, okvirna cijena u Hrvatskoj je 2500kn, ukoliko ih nabavljate u inozemstvu moguće je proći jeftinije
  2. Računalo sa instaliranim Windowsima (za pokretanje NXT-G programskog sučelja) - potrebno je imati USB priključak, a poželjan je i Bluetooth za bežično povezivanje sa robotom. NXT je moguće programirati i bez NXT-G programa (no jedino ovaj ima grafičko programiranje), u kojem slučaju možete birati niz programskih jezika te niste ovisni o operativnom sustavu.
  3. 6 x punjivih AA baterija po NXT setu (ne dolaze sa baterijama) + barem još jedan set baterija za zamjene (roboti dosta brzo troše energiju) i punjači za baterije (obično u njih stanu 4 baterije, pa vam trebaju barem 2)