Kao roditelju bilo mi je neobično drago kada je moja ćerkica poželela da joj kupimo Lego Mindstorms robota (još kad sam ga našao na sniženju...), ali sam pretpostavio da je to Lego igračka-komplet koji je malo napredniji od dotadašnjih modela. No, očekivanja su bila preskromna – ovo je mnogo više od pametne igračke!
Kako to obično biva, saznanje je došlo sa Mreže, kada sam već kupio robota i tragao za uputstvima na engleskom jeziku, pošto je kupljen na francuskom govornom području. Na mindstorms.lego.com, nxt-mindstorms.com/wiki/, mindstormsnxt.blogspot.com, nxtpp.sourceforge.net i drugim sajtovima pojavilo se mnogo linkova a na YouTube i primeri "hvalisanja" stvarima koje su ljudi napravili od tog kompletića. Sledeća grupa se odnosi na linkove ka alternativnim razvojnim alatima i ne potiče samo od zaludnih entuzijasta, već su potpisani i neki od najjačih svetskih univerziteta (npr. MIT Media Lab). To me je opravdalo što se sa ćerkicom otimam oko igračke. A sad da vidimo šta je to.
U kutiji
Slično kao i svaki Lego komplet i ovde je bilo nekoliko kesica, uputstva-slikovnice, test podloga od čvrstog papira i CD sa softverom (ovo se baš ne dobija često uz igračke). Lego pruža potpunu slobodu mašti prilikom kreiranja, ali uvek daje i određene smernice, da ne kažem konkretno uputstvo kako napraviti ono što je već smišljeno. Igra, dakle, kreće od neke osnovne zamisli proizvođača, a tek kasnije se ulazi u modifikacije. Tako je i ovde slučaj. Najpre smo sastavili jednog od predloženih robota, ali se ovde priča ne završava sa kompletiranjem poslednje kockice. Dobili smo jedan od izgleda robota koji može mnogo toga da uradi, ali tak kada ga naučimo. To jest programiramo.
Drugi korak je instalacija softvera i upoznavanje programiranja robota. Shodno Lego filozofiji, i ovde se slažu neki programski blokovi (kockice) i tako pravi program, ako koristite NXT-G programsko okruženje koje stiže u kompletu. Pre nego što vidimo kako se programira, moramo upoznati hardver robota.
Pamet je uvek najvažnija, pa tako i robot počinje od "pametne" kocke (NXT brick). Na nju se mogu spajati ostali Lego gradivni elementi, ali pažnju privlači pre svega solidan broj konektora na dve strane – ukupno osam – te nekoliko tastera i displej. Ono što se ne vidi jeste i mogućnost Bluetooth komunikacije, tako da dobijamo i mogućnost bežičnog izdavanja komandi, ali i bežični prenos programa, što je korisno kada radite na doterivanju programa. Određivanje praga reagovanja određenog senzora se uglavnom radi empirijski, a dosadno je svaki čas priključivati USB kabl za vezu sa PC-jem.
Senzori i motori se povezuju sa "glavom" korišćenjem RJ12 konektora koji podsećaju na telefonski, ali su nešto drugačiji. U prvi mah se čini da je nešto specifično i da treba dobro paziti na kablove, ali mali upit na Mreži reći će vam gde i kako kupiti konektore, kablove i klešta za krimpovanje. Treba pomenuti još i baterije, jer uređaj koji ima motore mora da ih troši nemilice, što i jeste slučaj. Potrebnu energiju obezbeđuje šest AA baterija od 1,5 volti, ali je moguće i dokupiti litijumjonske baterije sa odgovarajućim punjačem, što je preporuka za svakoga ko želi da se češće bavi ovom igračkom.
Motori i senzori
Pored "pameti", robotu su potrebni mišići i čula, pardon motori i senzori. U kompletu se dobijaju tri step motora koji su snažni i kontrolabilni. Mogu se podešavati akcije motora kao što je okretanje za određeni broj rotacija i okret za neki broj stepeni u željenom smeru. Može se regulisati snaga okretanja, tj. brzina, što može uticati na preciznost nekih pokreta, kao i izbor akcije po prestanku rada, da li da se prepusti inerciji ili da naglo stane.
U kompletu se dobijaju senzori za dodir, svetlo, daljinu i zvuk. Najjednostavniji je senzor za dodir koji je običan taster i vraća "pritisnuto" ili "nije pritisnuto", ali je kod programiranja moguće definisati akcije po pritisku, po otpuštanju ili na "pritisni i otpusti". Mikrofon meri intenzitet zvuka a na osnovu toga se u programu mogu preduzeti razne stvari. Mnogo interesantniji su senzori za daljinu i svetlo. Senzor za svetlo ima interni izvor svetlosti (LED) kojim može osvetliti podlogu i na taj način detektovati nijansu boje podloge čak i u mraku. Senzor za daljinu je ultrazvučni, nalik senzoru za parkiranje kola, i podsećaju na oči, tako da ih na prvi pogoled možete zameniti sa nekom drugom funkcijom. Dovoljno su pametni da daju informaciju koliko je prepreka udaljena od senzora/robota. Ovom spisku obavezno treba dodati i motore koji imaju dvostruku ulogu: daju pokretačku snagu, ali ih možemo ih koristiti i ulaz, tj. očitavati njihove pomeraju i na osnovu toga preduzimati određene akcije. Postoje i programske kockice koje mogu pamtiti određenu akciju i kasnije je ponoviti.
Što se standardnih izlaza tiče, na raspolaganju su displej i zvučnik. Možemo ispisati neku poruku na displeju i na taj način ostvarivati komunikaciju, ali će zvuk biti korisniji. Ovde možemo birati između sviranja određenog tona i reprodukcije fajla sa zvučnim zapisom.
Ispod haube
Specifikacije pametne kocke nećete dobiti u kompletu, verovatno zato što nije posebno bitna za većinu korisnika, ali podaci nisu skriveni, baš kao ni kompletna šema uređaja; možete čak i graditi sopstvene senzore. Drugim rečima, dete je uz igračku dobilo sve što je potrebno, ali se iz hardvera može izvući mnogo više, za šta postoji odgovarajuća podrška. Tako saznajemo da je srce NXT kocke 32-bitni Atmel procesor na 48 MHz sa 256 KB flash memorije i 64 KB RAM-a. Sve ovo može delovati skromno u doba gigahercnih PC procesora i gigabajta memorije, ali je sasvim dovoljno za mnoge primene, pod uslovom da je optimizacija u kompajleru dobro urađena. Drugim rečima, dobro napisani programi mogu mnogo toga da urade.
Uz glavni procesor, obezbeđen je i koprocesor koji brine o komunikaciji sa svetom (pre svega sa senzorima) i koji je takođe potpisala firma Atmeli – koprocesor radi na 8 MHz i ima 4 KB flash memorije i 512 bajta RAM-a (da, samo pola kilobajta). Tu je i hardver za Bluetooth te interfejsi za komunikaciju sa drugim komponentama, tj. četiri ulazna porta koji podržavaju i digitalni i analogni ulaz i tri izlazna, koja su namenjena motorima ali primaju informacije sa enkodera.
Na kockici je i displej veličine 100×64 pixela, koji deluje skromno spram modernih mobilnih (a sve češće i fiksnih) telefona, ali je za ovu namenu odličan. Isto se može reći i za zvučnik koji nije baš stereo surround, ali se dobro čuje.
Prvi programerski koraci (okretaji)
Kao i sve što je kompjuterski kontrolisano, robot ne zna ništa dok ga ne naučimo. Već smo istakli da je programiranje, barem ono podrazumevano, nalik na slaganje Lego kocki. Na ekranu slažemo programske kockice koje se zatim kompajliraju i pošalju "pametnoj kocki" na izvršavanje. Taj osnovni softvar potpisao je LabView, firma čuvena po proizvodima namenjenim kontroli ozbiljnih industrijakih sistema i uređaja za akviziciju podataka. Jako ime garantuje i dobar proizvod, ali i nagoveštava da Lego robot nije (samo) igračka.
Način i logiku programiranja izložićemo na dva primera koja možete videti u filmu na pratećem DVD-ju. Oba primera su vezana za isti "izgled" robota koji se zove "tribot", ide na tri točka i spreda ima klešta-hvataljku. Pokreću ga motori na velikim bočnim točkovima, dok se skretanje obavlja kao kod guseničara (da ne kažem tenka), tako što se jedna strana/točak blokira i pokreće samo druga. Treći motor se koristi za kontrolu hvataljke. Na čelu hvataljke nalazi se senzor za dodir, tako da može da detektuje kada je stigao do nekog predmeta koji može poneti. Senzor za svetlo gleda nadole tj. uperen je u podlogu, što se koristi za detektovanje linija koje mogu predstavljati graničnike. Unapred je okrenut senzor udaljenosti, a blizu je i senzor za zvuk. Prilično funkcionalno osmišljen oblik, doduše ne humanoidan.
Prvi zadatak je jednostavno opisati: robot ide pravo dok ne naiđe na loptu. Zatim čeka zvučni signal da bi je uzeo, okrenuo se i vratio na početni položaj, gde ostavlja loptu. Ovaj zadatak, urađen korak po korak, možete realizovati sami bez mnogo razmišljanja. Usput sagledavate i osnove programiranja NXT-a.
Na početak programa stavili smo pauzu od 5 sekundi, da bismo dobili vreme da izađemo iz kadra. Sledi akcija koja nalaže motorima na portovima B i C da se okreću u istom pravcu tako da robot ide ka napred sa 75% snage, i to neograničeno. Sledećim korakom postavljamo akciju koja će zaustaviti robota, za šta je izabran senzor dodira i to reakcija na pritisak. Drugim rečima, ako je robot bio dobro usmeren ka lopti, kad stigne do nje, polugica će pritisnuti taster i to proslediti NXT kockici. Sledeća akcija je zaustavljanje robota, tj. stopiranje motora na B i C portovima.
Sledeći niz akcija treba da inicira senzor za zvuk. Kada, recimo, pljesnemo rukama, pokreće se motor na A portu koji skuplja klešta i tako uzima loptu. Treba primetiti da smo u vrednostima programske kockice rekli da je snaga motora na 100% i da rotacija traje pola sekunde. Sledi okretanje robota koje se izvodi u tri koraka. Prvo se malo pomeri unazad, oba (B i C) motora pola rotacije, pa za 370 stepeni C motor u jednom i 370 stepeni B motor ali u drugom smeru. Tako se robot okrenuo i sada može krenuti ka polaznoj tački, tako što će i B i C motor raditi u istom smeru neograničeno.
Da robot ne bi pao sa stola, postavili smo čekanje na senzor za svetlo – on pali diodu i čeka da osvetljaj padne ispod neke vrednosti, što označava da je naišao na crnu liniju. Ostalo je da zaustavimo motore B i C i pokrenemo motor A, kako bismo otvorili klešta i ispustili loptu.
Drugi primer deluje komplikovanije, ali je program ispao kraći: praćenje linije. Osnovna logika koja čini ovaj program jednostaven zasniva se na činjenici da će ići po zatvorenoj liniji koja ima samo krivine nalevo te ne mora da zaključuje na koju stranu treba vršiti korekciju. Posle početne zadrške da bismo se sklonili iz kadra, robot kreće unapred malom snagom (B i C motori) – mala snaga daje preciznije pokrete. Robot ide unapred sve dok senzor za svetlo ne oseti da je podloga mnogo svetla, što znači da je skrenuo sa crne linije.
Sledi zaustavljanje motora i korekcija u vidu pokretanja samo desnog motora tako da se on lagano okreće ulevo dok ne nađe liniju, što se detektuje preko senzora za svetlo. Zatim se okrene još malo, kako bi se približio sredini crne linije, koja je na test podlozi dovoljne debljine za ovakve "sigurnosne" postupke. Sada se program vraća na početak petlji i tako nastavlja unedogled, dok ga ne zaustavimo.
Šta dalje?
Razvojno okruženje nije ograničeno na osnovne stvari koje smo ovde prikazali: tu su promenljive, granjanja, petlje... spremni smo za složenije zadatke. Ograničenje može biti veličina raspoložive memorije (kao i uvek), samo što se u ovom slučaju nije predviđeno da je sami proširite na jednostavan način. Ipak, raspoređivanje blokova nije baš komforno za razvoj složenijih programa, pa su na raspolaganju i drugi metodi.
Memorijsko ograničenje, kao i ograničenje u procesorskoj snazi, možemo prevazići tako što NXT kocka neće biti glavna pamet, već aplikaciju možemo izvršavati na PC-ju, koristeći "kocku" samo za kontrolu motora, očitavanja senzora i komunikaciju. Veza može biti žičana, preko USB-a, ili ćemo se osloniti na Bluetooth interfejs. Treba pomenuti da se ovakva kontrola može realizovati i preko "robotske" komponente paketa Microsoft Visual Studio. Postoji brojna zajednica ljudi koji se bave programiranjem ovog robotića i koji su razvili čitav niz nezavisnih programskih alata, tako da možete pisati u C-u ili drugom omiljenom programskom jeziku. Sve su to lepe prednosti Interneta.
Ni hardverska priča se ne završava na osnovnom kompletu. Možete dokupiti još senzora i motora, čak i drugu NXT kocku, pa onda udružiti više "pameti" na istom zadatku. Meni su interesantniji dodatni senzori, koji se mogu kupiti od nezavisnih proizvođača (opet blagodeti Inetrneta) – senzor pokreta, kompas, detekcija boja... A ako imate i neku specifičnu potrebu i vični ste lemilici, možete napraviti svoj dodatak, jer je Lego svu dokumentaciju o hardveru i komunikacionim protokolima stavio na uvid javnosti, tj. postavio na Internet. Otvoreni sistemi uvek imaju više poklonika, što rezultuje većom prodajom i to ne samo robota, već i drugih kompleta i gradivnih blokova za neke nove kreativne konstrukcije.
Za kraj
Umesto klasičnog zaključka pomenuo bih jedan pravac u edukaciji, tj. teoriju učenja zasnovanu na idejama koje je formulisao Jean Piaget: eksperimentalno učenje. Kao značajno ime u ovoj teoriji pominje se i Seymour Papert, koji je u MIT laboratoriji kreirao Logo programski jezik kao pomoć u učenju deci. Umesto da se znanje prenosi, ono će se rekonstruisati, a pravljenje smislenog objekta ili eksperimenta je efikasnije od suvog prenošenja apstrakcija. Lego se lepo uklopio u ovaj pokret, što se vidi iz same ideje igračaka, preko ovog robota pa sve do projekta Serious Play koji je namenjen poslovnim ljudima da kroz plastične kockice izražavaju korporativne probleme i dileme (opet konstruktivizam na delu).Ako kupite ovu igračku samo sebi, ne slušajte eventualne zamerke: koncept je zamišljen na najjačim univerzitetima sveta, od vrlo cenjenih eksperata i ima niz primena, od edukativnih do pomoću u modelovanju poslovnog procesa. A ako ste to kupili detetu, alibi vam ne treba već uživajte zajedno – vreme utrošeno na kreativnu igru uvek daje snažne efekte!
Na DVD-ju koji prati PC #142 naći ćete film snimljen u našoj Redakciji tokom testiranja Lego Mindstorms robota
|