Burza mózgów w stercie LEGO

Laptopy, tablety, smartfony, konsole, GPSy – wszelka elektronika, no i oczywiście samochody – to niewątpliwie zabawki dla prawdziwych facetów. Wiadomo, przecież nie klocki… Ale, ale, czy na pewno? Może dobre klocki nie są złe. Oj nie są złe, gwarantuję, są fantastyczne! Mogą rozłożyć na łopatki najnowsze konsole i inne cuda elektroniki użytkowo-rozrywkowej. O jakie klocki więc chodzi? Jak klocki, wiadomo, LEGO. Zaraz, zaraz, niemal każdy bawił się LEGO i zwykle w wieku najdalej kilkunastu lat tracił zainteresowania budowaniem kolejnych statków kosmicznych, koparek czy domków z różowymi dachami - o co więc chodzi? Chodzi o Mindstorms – prawdziwą burzę mózgów, rozrywkę dla inteligentnych ludzi z wyobraźnią, rozrywkę dla programujących bądź chcących programować, rozrywkę dla nastolatków, kilkudziesięciolatków i światłych stulatków, rozrywkę dla mężczyzn i kobiet. Mindstorms to połączenie LEGO Technic i komputera wyposażonego w 32 bitowy procesor. Te klocki to nie tylko zabawka – to potężne narzędzie w rękach inteligentnego konstruktora.

Burza mózgów w stercie LEGO
Redakcja

Obraz

Marzenia o skonstruowaniu w domu własnego robota i zaprogramowaniu go wg własnego pomysłu, jeszcze kilkanaście lat temu były tak samo realne jak podróż poza układ słoneczny, obecnie może je wcielić w życie każdy posiadacz LEGO Mindstorms. Zacznijmy więc od tego czym są klocki o tak niebywałych możliwościach. LEGO Mindstorms to zestaw zawierający programowalną kostkę LEGO, serwomotory, sensory dotyku, kolorów, dalmierz ultradźwiękowy oraz zestaw klocków Technic. Zacznijmy więc od kostki – serca potencjalnego robota.

NXT 2.0 - mózg

Najnowsza wersja Mindostorms (8547), która trafiła w nasze ręce zawiera kostkę oznaczoną symbolem NXT 2.0 (wcześniej dostępne były RCX i NXT). NXT 2.0 wyposażona została w 32 bitowy procesor ARM7, 256 KB pamięci FLASH i 64 KB RAM. NXT 2.0 pochwalić się może czterema portami wejściowymi (czujniki) i trzema portami wyjściowymi (serwomotory) - faktyczną liczbę silników podłączanych do jednej kostki można zwiększyć. Ponadto NXT 2.0 wyposażona jest w wyświetlacz LCD o rozdzielczości 100x64 piksele oraz głośniczek. Komunikacja z komputerem bądź innym „robotem” może odbywać się za pomocą wbudowanego interfejsu Bluetooth 2.0 lub USB 1.0

  • Slider item
  • Slider item
[1/2]

Sensory i serwomotory - zmysły i mięśnie

Czujnik koloru – nowość w Mindstorms, rozpoznaje 6 kolorów, umożliwia badanie natężenia światła, a ponadto może funkcjonować jako kolorowe źródło światła. Czujniki dotyku zwracają trzy stany (wciśnięcie, puszczenie oraz uderzenie). Czujnik (dalmierz) ultradźwiękowy umożliwia określenie odległości od przeszkody – jest skuteczny w zakresie od 0 do 255 cm, a jego dokładność to +/- 3 cm. Działa na zasadzie emisji ultradźwięków i mierzenia czasu powrotu po odbiciu od przeszkody, wynik przeliczany jest na odległość i zwracany do NXT. Za napęd konstrukcji LEGO odpowiadają 3 precyzyjne silniki (serwomotory) – obudowa LEGO zawiera oprócz silnika 9V także czujnik obrotów i hamulec dzięki czemu konstruktor otrzymuje bardzo precyzyjne urządzenie pozwalające na określenie obrotu każdego z silników z dokładnością do 1 stopnia (w obu kierunkach) oraz natychmiastowe jego zatrzymanie bądź zatrzymanie swobodne. Co ważne można również odczytać aktualne położenie (obrót) względem stanu początkowego silniczka.

Warto w tym miejscu zaznaczyć, że na tym nie kończą się możliwości, jest to jedynie zestaw startowy, a zarówno LEGO jak i szereg innych producentów dba o miłośników Mindstorms oferując dodatkowe akcesoria, jak choćby kamery, akcelerometry, czytniki kodów kreskowych, czujniki dźwięku itp.

  • Slider item
  • Slider item
[1/2]

Klocki - ciało

Można konstruować urządzenia programowalne/roboty bez LEGO. Wystarczy trochę elektroniki, trochę blachy, trochę kątowników, trochę śrub, piła tarczowa, spawarka, generalnie dobrze wyposażony warsztat, ewentualnie można bawić się drewnem – piła gwoździe, śruby, trzy sosenki itd. Można, ale po co? Materiałem konstrukcyjnym w Mindstorms są klocki. Zwykłe klocki z serii Technic. Testowany zestaw oznaczonym nr 8547, zresztą jedyny oferowany obecnie (inaczej zapewne wygląda sprawa zestawów oferowanych uczelniom wyższym), zawiera 612 klocków co daje już całkiem sporą podstawę „budulcową”.

Ważne jednak, że w każdej chwili możemy się doposażyć – zarówno w dedykowany zestaw rozszerzający do Mindstorms (np. 9695), jak i dowolny zestaw Technic, a tak naprawdę możemy podkraść dziecku dowolne klocki LEGO, np. Star Wars, w skrajnym przypadku nawet... Duplo. No oczywiście konstruktor może być dzieckiem, wówczas nie musi podkradać. Á propos dziecka. Jaka jest dolna granica wieku? Teoretycznie, wg informacji na pudełku Mindstorms dolna granica wieku to 10 lat. Wszystkim życzę dzieci, które w wieku 10 lat będą radzić sobie z programowaniem i zabawą z NXT. Nie wykluczam jednak tego, niektóre 10 latki już programują i radzą sobie dobrze z najnowszymi technologiami. Jeśli ktoś chce więc zrobić dziecku prezent ważne aby wziął pod uwagę nie tyle wiek co zainteresowania. Z drugiej jednak strony kupienie klocków dziecku to chyba najlepszy pretekst, żeby poszaleć samemu więc co tam, nie ważne czy nasz syn bądź córka sobie z tym poradzą ;)

Zabawę czas zacząć

Z niecierpliwością oczekiwaliśmy paczki z Mindstorms w redakcji, mieliśmy już ogólne pojęcie czego można się spodziewać po najbardziej zaawansowanej serii LEGO. Dziecięce marzenia o konstruowaniu robotów odżyły. W końcu paczka dotarła, dotychczas do naszej redakcji trafiał bardzo różnorodny sprzęt: najnowocześniejsze laptopy, netbooki, monitory itp. Żaden chyba jednak nie wywołał takiego zainteresowania, okazało się, że w dobrychprogramach pracują same dzieci i wszyscy chcą się pobawić…

Jeden z najprzyjemniejszych momentów, rozpakowywanie paczki i w końcu pudła z zasadniczą zawartością. Pudło duże i dużo w środku. Mnóstwo woreczków z klockami, kabelki, instrukcje, mata testowa, czujniki, silniki i oczywiście serce zestawu – NXT 2.0. Rozpoczęliśmy więc organoleptyczną analizę wszelkich elementów i podjęliśmy próby uruchomienia czegokolwiek. Tu pierwsza wpadka – brak baterii. Uff, nic bardziej nie podnosi ciśnienia niż chęć uruchomienia nowego gadżetu zdeptana przez brak baterii. NXT potrzebuje aż 6 baterii LR6/AA, w związku z czym nie będąc przygotowanym można mieć problemy z ich nazbieraniem, na szczęście w końcu dotarł zapas „paliwa”.

  • Slider item
  • Slider item
[1/2]

Po zasileniu w baterię i włączeniu NXT, naszych uszu dochodzi krótka melodyjka startowa, logo LEGO i sekundę później możemy zacząć działać – wyświetla się Menu. Pod wyświetlaczem znajdują się trzy przyciski sterujące więc wędrówkę po Menu można rozpocząć. W menu głównym mamy 7 pozycji: „My Files”, „NXT Program”, „NXT Datalog”, „View”, „Bluetooth”, „Settings” i ostatnia „Try me”. Niestety Menu oraz oprogramowanie na Windows/MacOS nie jest spolszczone, na szczęście dystrybutor dostarcza przetłumaczoną instrukcję. Nie będę się rozpisywał w tym miejscu nad całym Menu i zagnieżdżonymi opcjami, wystarczy chyba wspomnieć, że w „My Files” można przeglądać pliki z programami jakie stworzyliśmy na NXT bądź pobraliśmy z komputera, „NXT Program” – wybierając ją można rozpocząć programowanie kostki bez udziału komputera, ale o tym później.

Pierwsza konstrukcja

Na pierwszy ogień zwykle idzie projekt, który można zrealizować krok po kroku wg instrukcji producenta. Tak też zrobiliśmy, trzeba się rozgrzać przed podjęciem bardziej ambitnych wyzwań. Po ok. godzinie zmagań z mnóstwem klocków powstał prosty pojazd gąsienicowy, podstawowe programy dostępne do tego projektu nie powaliły na kolana. Jedzie do przodu, skręca i to w zasadzie na tyle. Ale dobrze, pierwsze koty za płoty. Co z pięknym humanoidem zajmującym centralne miejsce na okładce pudełka. Trzeba go zbudować. Okazało się, że w instrukcji nie ma „krok po kroku” jak go zbudować. Na szczęście kilka projektów do realizacji „krok po kroku” dostępnych jest z poziomu dołączonego oprogramowania LEGO Mindstorms NXT, m. in. oczywiście piękny humanoid – ochrzczony przez LEGO nie byle jak – Alpha Rex.

  • Slider item
  • Slider item
[1/2]

Po obejrzeniu instrukcji budowy Alpha Reksa przestałem się dziwić dlaczego instrukcja jest dostępna tylko z ekranu. Gdyby oferować ją na papierze padłoby naprawdę wiele drzew. Na budowę Reksa trzeba przygotować sobie sporo wolnego czasu ale faktycznie wygląda fajnie. Oczywiście programy dla naszego „króla” są bardzo proste i porwać tłumów raczej nie mogą. Rex podrepcze tu i tam, jak zobaczy ścianę to pójdzie gdzie indziej ale generalnie cudów nie wyczynia. Powiedzmy sobie szczerze, projekty LEGO, a w szczególności programy sterujące dla nich przygotowane, są tylko prostymi przykładami (ok, konstrukcja Reksa prosta nie jest, w ogóle) jak można zacząć zabawę z Mindstorms. Jak się przebrnie przez ten etap zaczyna się prawdziwa zabawa – tworzenie własnych konstrukcji i oczywiście własnych programów.

  • Slider item
  • Slider item
[1/2]

Programowanie

Tworzenie własnych konstrukcji przy pomocy LEGO Mindstorms wymaga wypracowania balansu między pomysłowością, mechaniką i programowaniem. To ostatnie szczególnie zasługuje na szersze omówienie, rzadko bowiem kojarzymy LEGO z czymś więcej niż interesującymi konstrukcjami. A to programowanie stanowi wisienkę na torcie Mindstorms.

LEGO od lat wyznacza najwyższe standardy wykonania elementów wykorzystywanych w swoich zestawach. Powinniśmy zatem oczekiwać od firmy tego samego, wysokiego poziomu w przypadku oprogramowania wykorzystywanego w zabawkach dla „większych dzieci”. Jednak łatwość z jaką buduje się programy z klocków przy użyciu dołączonego do zestawu LEGO Mindstorms NXT graficznego edytora języka NXT-G przebiła nawet nasze i tak wysokie oczekiwania. Można zatem zacząć programować, a łącząc się z NXT na bieżąco testować postępy...

  • Okno startowe NTX-G z pomocą dla Robogatora
  • Program złożony z prostych klocków NXT-G i okno łączności z urządzeniem
[1/2] Okno startowe NTX-G z pomocą dla Robogatora

Edytor ten oferuje estetyczny interfejs, który prowadzi użytkownika krok po kroku przez rozbudowany język NXT-G. Domyślnie widoczne są jedynie najprostsze operacje, jakie można wykorzystać podczas interakcji z robotem: ruch, opóźnienie, wydawanie sygnałów i im podobne, podstawowe akcje. Łączenie poszczególnych akcji odbywa się na ekranie podzielonym siatką, na którym umieszcza się i łączy – niczym fizyczne elementy LEGO – klocki. Ikony, którymi opatrzone są poszczególne bloki składowe są czytelne i, co ciekawe, nie ograniczają się wyłącznie do reprezentowania typu akcji.

Przykładowo ruch może się odbywać przy użyciu jednego z trzech silników – od A do C – w przód lub tył, przez określony czas lub zadaną liczbę obrotów, itd. Wszystkie te informacje w prosty i bardzo intuicyjny sposób widoczne są na reprezentującej akcję kostce. Zaznaczenie samej akcji pozwala na zmodyfikowanie jej parametrów w panelu opcji widocznym u dołu programu. W przypadku wspomnianego ruchu możemy zmienić silnik, na który oddziałujemy (a jeśli sterujemy dwoma silnikami, możemy prostym suwakiem wymusić skręt w konkretnym kierunku), moc silnika, czas trwania – w kilku wariantach – i temu podobne parametry. Wszystko to dokonywane jest graficznie i nie powinno sprawić problemów nawet użytkownikom, którzy w ogóle nie mieli dotychczas styczności z programowaniem.

  • Schemat złożonej aplikacji w NXT-G
  • Okno informacyjne NXT-G
[1/2] Schemat złożonej aplikacji w NXT-G

Gdy stopniowo użytkownik zacznie się oswajać z podstawowymi, oferowanymi przez program akcjami, może skorzystać z widoku rozbudowanego o większą liczbę narzędzi, w tym operacje logiczne i matematyczne ze wsparciem dla zmiennych oraz szereg metod wejścia/wyjścia, jakie oferuje urządzenie (od czujników po operacje na plikach czy wykorzystanie Bluetooth). Co ważne już w podstawowym zestawie znajduje się sprytnie rozwiązana pętla, której liczbę cykli można regulować np. stanem czujników, w które wyposażymy robota.

Sam program posiada bogatą dokumentację i domyślnie oferuje schematy budowy kilku robotów oraz dedykowane im programy (które, oczywiście, możemy dowolnie modyfikować). Także z poziomu programu można skomunikować się z robotem, zaktualizować jego oprogramowanie przez Bluetooth lub kabel USB i je uruchomić. Wciąż pozostaje możliwość ręcznego wyboru programu z poziomu kontrolera NXT, choć w praktyce uruchomienie programu przy użyciu komputera jest często dużo łatwiejsze, niż wciśnięcie odpowiedniego klawisza na zbudowanym urządzeniu. Szczególnie jeśli misternie zbudowana konstrukcja skutecznie przysłania przyciski kontrolera.

Alternatywy dla miłośników kodu

Mówiąc o programowaniu NXT nie sposób nie wspomnieć, że istnieje szereg interesujących alternatyw dla NXT-G. Dostępna jest spora liczba bibliotek, języków i IDE, które umożliwiają tworzenie aplikacji NXT. Postanowiliśmy wypróbować jedno z dostępnych rozwiązań – Bricx Command Center. Wybór padł na BricxCC, gdyż stanowi bardzo stabilne i szeroko wspierane przez społeczność rozwiązanie oferujące możliwość programowania przy pomocy języka zbliżonego do C - Not eXactly C (NXC).

IDE BricxCC jest bardzo ascetyczne, ale z miejsca powinno wydać się znajome każdemu programiście obytemu z programowaniem w C/C++ czy to dla komputerów osobistych, czy też systemów wbudowanych. Sama składnia powinna wydać się znajoma i nie nastręczyć zbyt wielu problemów. Co ciekawe NXC wspiera domyślnie programowanie wielowątkowe i pozwala na stworzenie stosunkowo skomplikowanych aplikacji.

  • Program plotera w BricxCC
  • Okno pomocy i dwa listingi w BricxCC
[1/2] Program plotera w BricxCC

Niestety nie ma róży bez kolców: elastyczność NXC okupiona jest brakiem dziesiątek operacji, które graficzne NXT-G oferuje od pierwszego uruchomienia. Takie akcje jak „wykonaj ćwierć obrotu silnikiem A” wymagają znacznie więcej pracy, niż analogiczna akcja w aplikacji graficznej. Co ważne w praktyce często okazuje się, że grzebanie bezpośrednio w kodzie jest nieopłacalne czasowo i znacznie wygodniej (oraz przyjemniej) można uzyskać porównywalne lub lepsze rezultaty w aplikacji graficznej.

  • Listing dla wczesnej wersji plotera i okno opcji BricxCC
  • Konfiguracja połączenia BricxCC
[1/2] Listing dla wczesnej wersji plotera i okno opcji BricxCC

Mimo to budując naszą testową maszynę – ploter – zdecydowaliśmy się wykorzystać BricxCC. Zaważył jeden kluczowy aspekt: komendy sterujące ploterem stworzone zostały na podstawie grafiki wektorowej w zewnętrznej aplikacji, wynikiem działania której był… plik z kodem NXC. W ten sposób ominęliśmy potrzebę przetwarzania pliku z danymi wejściowymi w samym urządzeniu i „nakarmiliśmy” je programem zbudowanym z automatycznie wygenerowanego kodu źródłowego.

Czy Twoja przeglądarka nie obsługuje skryptów? //Nasze urządzenie, jak widać na powyższym filmie, jest dalekie od doskonałości. Przyczyny tego stanu są dwie. Po pierwsze zgodnie z tym, o czym pisaliśmy wcześniej, możliwość precyzyjnej kontroli silników z poziomu kodu wymaga większego nakładu pracy, niż w przypadku aplikacji graficznej. Po drugie zaś, okazaliśmy się marnymi mechanikami. Zaprezentowany na filmie ploter był naszym czwartym lub piątym podejściem do tematu. Okazuje się, że tarcie, bezwładność, naprężenia i pasowanie elementów mają kluczowe znaczenie dla wyniku końcowego. Kto by pomyślał?

Poza samym BricxCC postanowiliśmy także sprawdzić RobotC rozwijane przez Carnegie Mellon Robotic's Academy. Środowisko to łączy zalety obu opisanych wcześniej środowisk: pozwala na budowanie kodu z prefabrykantów (snippetów) dostarczonych razem z programem. Tym samym nie ogranicza aspirujących robotyków, ale też nie zmusza do żmudnego pisania fragmentów kodu sterującego manipulatorami i czujnikami NXT. Jeśli to mało, do dyspozycji są jeszcze rozwiązania bazujące na toolchainie GCC (NXTGCC), wpierające programowanie w Java (leJOS NXJ), Lua (pbLua), Ruby (ruby-nxt), Pythonie (PyNXC) i wiele innych. Część darmowa, część — jak kosztujący $50 RobotC — płatna. Jest w czym wybierać.

Warto?

Klocki za 1200 zł? Można się złapać za głowę. Czy ktoś normalny może kupić dziecku taką zabawkę? W pierwszej chwili wydaje się, że nie sposób na to pytanie odpowiedzieć twierdząco. Moim zdaniem jednak odpowiedź nie jest tak prosta. Oczywiście nie każdego stać na takie ekstrawagancje ale czyż nie kupujemy dzieciom konsol PlayStation, XBox czy Wii w podobnych cenach? Czy konsola jest lepsza? Na pewno jest inna ale nie lepsza. Konsola to fajna zabawa, choć zwykle nieco "odmóżdżająca" - Mindstorms to niewątpliwie zabawka rozwijająca. Oczywiście nie ma sensu kupować jej na siłę, "żeby dziecko zmądrzało" - bo szybko polegnie pod warstwą kurzu. Jeśli jednak nastolatka interesują zagadnienia techniczne, lubi LEGO Technic, próbuje programować to powinien być zachwycony. Jednak tak jak pisałem wcześniej, Mindstorms to nie tylko zabawka dla dzieci, to bardzo poważne narzędzie gdy trafi w ręce inteligentnego konstruktora.

Czy Twoja przeglądarka nie obsługuje skryptów? //Niewiele jest przedmiotów, które mogą naprawdę zachwycić dorosłego, a jednocześnie tak łatwo ich zakup uzasadnić dobrem dziecka. Kiedyś tatusiowie byli szczęśliwi kupując dziecku kolejkę Piko lub samochód zdalnie sterowany, Mindstorms to kolejna zabawka dla dorosłych dzieci - tylko bardziej wymagająca. Wspomniałem o Piko, można znaleźć jeszcze jedną analogię między tymi produktami. Zarówno Piko jak Mindstorms mogą wciągnąć i stać się wieloletnim i kosztownym hobby, miłośnicy Piko wydają mnóstwo pieniędzy na kolejne składy, stacje, wiadukty i inne elementy rozwijające domowe linie kolejowe. Podobnie może być z Mindstorms, kolejne zestawy klocków, kolejne sensory, silniki - cóż hobby tak samo dobrze wciąga jak i wyciąga... pieniądze. Trzeba jednak przyznać, że "zestaw startowy" 8547 jest bardzo rozbudowany i daje naprawdę dużo możliwości sam w sobie.

Mam dwie córki i to bardzo młode, starsza, 4 letnia, wprawdzie uwielbia LEGO lecz nie przekonam nikogo, że powinienem kupić jej Mindstorms - w związku z tym pozbieram na kolejny zestaw z ładnym domkiem i obejdę się smakiem, a chętnie bym się jeszcze pobawił 8547...

Programy

Zobacz więcej
Źródło artykułu:www.dobreprogramy.pl
Wybrane dla Ciebie
Komentarze (52)