Pomysł budowy robotów z klocków powstał w zespole z Grupy
Epistemologii i Nauczania Laboratorium Mediów MIT w składzie:Fred Martin, Rand Sargent, Brian Silverman,
Seymour Papert i Mitchel Resnick. Pod koniec lat osiemdziesiątych,
kiedy wśród elementów LEGO można już było znaleźć przekładnie,
baterie, silniki oraz osie, zespół ten odczuł potrzebę rozszerzenia
listy dostępnych składników LEGO o klocek-mikrokomputer. Głównym
tego celem było umożliwienie budowy prostych robotów i mechanizmów o
złożonym sterowania. Pierwszy sterownik, Programmable Brick
6502, zaprojektowany został przez Randy Sargenta i potrafił
interpretować instrukcje Logo. Jego ewolucja, odzwierciadlająca
kompromisy pomiędzy możliwościami a ceną, doprowadziła w 1994 do
stworzenia
Mózgiem systemu
MindStorms jest RCX 1.0, uproszczona wersja
Wejścia 1, 2 i 3 RCX mogą pracować w dwóch trybach: biernym i aktywnym. W trybie biernym na wejściu pojawia się napięcie 5V odkładane na rezystorze 10k. Czujnik bierny podłączany jest równolegle do tego rezystora, natomiast RCX mierzy napięcie pojawiające się w takim obwodzie. Takie rozwiązanie techniczne pozwala na dołączenie wielu czujników dotyku do pojedynczego wejścia, co prowadzi do zwiększenia liczby sensorów obsługiwanych przez RCX. Michael Gasperi, autor znakomitej strony o czujnikach RCX zauważa też, że właściwie do wejścia pracującego w trybie biernym można podłączyć dowolny czujnik wymuszający napięcie z zakresu 0-5V i nie obawiać się ryzyka uszkodzenia obwodu.
W trybie aktywnym, RCX podnosi napięcie na wejściu do ok.8V na okres 150 mikrosekund. Pod koniec cyklu, przez 32 mikrosekundy, RCX odłącza 8V i dokonuje pomiaru napięcia tak, jakby podłączony czujnik pracował w trybie biernym. Michael Gasperi przypuszcza, że napięcie 8V dostępne w aktywnym trybie pracy wejścia jest napięciem z baterii pomniejszonym o spadek napięcia na mostku diodowym. W przypadku czujnika światła powoduje to pewne niedogodności. Otóż w miarę wyczerpywania się baterii napięcie zasilające spada, co wprowadza niepomijalne zmiany w wskazania czujnika światła. Zmiany te są tym istotniejsze, im bardziej wyczerpane są baterie i im bardziej obciążone są silniki. Problem ten nie pojawia się przy stosowaniu akumulatorów niklowo-wodorkowych, bowiem z dobrym przybliżeniem są one idealnym źródłem napięciowym.
W skład zestawu
MindStorms wchodzą silniki prądu stałego 5225 o napięciu nominalnym
9V i sprawności 80%. Silniki wyposażone są w wewnętrzną przekładnię zwiększającą moment
napędowy silnika kosztem jego prędkości obrotowej. RCX steruje
silnikami poprzez modulację szerokości wypełnienia fali prostokątnej
(PWM). Nieobciążony silnik obraca się z
prędkością ok.350 obr./min pobierając przy tym prąd 5-10mA, Po
zablokowaniu silnika pobór prądu wzrasta do ok.250-350mA. Silnik
5225 posiada średni moment napędowy i średnią prędkość obrotową. Nie
prowadzi to oczywiście do żadnych poważnych ograniczeń w
konstruowaniu robotów, bowiem zawsze można zastosować przekładnie.
Prawdziwe kłopoty z silnikiem 5225 rozpoczynają się wtedy, gdy konieczne jest sterowanie położeniem wału lub prędkością obrotową. Wraz z silnikiem nie jest bowiem dostarczany żaden enkoder czy prądniczka tachometryczna, zatem nie jest możliwe założenie żadnej pętli regulacyjnej. Trudność tę można obejść stosując czujnik obrotów i programując odpowiednio RCX. Niestety, obecnie czujniki takie nie są dostępne w naszym laboratorium.
W zestawach LEGO dostępne są też inne efektory. Dave Baum, oprócz silnika 5225, opisuje jeszcze dwa inne, wysoko-obrotowe napędy prądu stałego. Z niektórymi kompletami LEGO Technic dostarczane są też akcesoria dla pneumatycznych elementów wykonawczych, jednak ich przydatność do konstrukcji robotów jest dyskusyjna.
Czujnik dotyku jest
jest zwykłym przełącznikiem analogowym wbudowanym w klocek LEGO,
zatem jest to czujnik bierny. Zwarty (wciśnięty) posiada bardzo małą
rezystancję, w stanie rozwarcia jego opór jest nieskończony.
Czujnik światła jest
elementem aktywnym, chociaż można wykorzystać go także jako czujnik
bierny. Z zewnątrz widoczne są dwa elementy elektroniczne: dioda i
fototranzystor. Dioda wykorzystywana jest do oświetlania otoczenia
czujnika. Fototranzystor natomiast rejestruje natężenie docierającego
doń światła. Zastosowany fototranzytor jest przede wszystkim
wrażliwy na podczerwień. Czujnik światła znakomicie się więc
nadaje do poszukiwania źródeł takiego promieniowania np. aktywnych
nadajników IR innych RCX. Schemat i zasady działania czujnika światła
zostały dokładnie opisane przez Michaela Gasperi, natomiast Jonathan
Woodward zbadał wrażliwość czujnika na różne kolory.
Firma LEGO dostarcza w zestawach uzupełniających szereg czujników przystosowanych do współpracy z MindStorms. W pierwszej kolejności należy wymienić czujnik obrotów - prosty enkoder położenia wału silnika o rozdzielczości 1/16 obrotu. Klocek ten pozwala rozwiązać problem sterowania położeniowego i prędkościowego silnika 5225. Z kolei czujnik temperatury oferowany przez LEGO pozwala mierzyć temperaturę od -20 do +70 stopni Celcjusza. Najbardziej złożonych sensorem jest jednak kolorowa kamera podłączona do PC za pomocą USB.
Obok oryginalnych istnieją też czujniki dodatkowe. Przykładowo, partner LEGO, firma Pitsco rozszerza zestaw MindStorms o czujniki wilgotności, ruchu, dźwięku i ciśnienia. Możliwe, a chyba i najbardziej interesujące jest jednak samodzielne zaprojektowanie bądź zbudowanie czujników współpracujących z RCX. Strony Michaela Gasperi zawierają szereg wskazówek, pomysłów a nawet schematy czujników do mierzenia różnych wielkości.
Programy dla RCX przygotowywane są za pomocą PC lub Mac. Wraz z MindStorms dostarczane są dobrze przemyślane i wypieszczone narzędzia programistyczne pracujące pod kontrolą M$ Windows. Niestety, projektowane były one z myślą o dzieciach, zatem nie oferują zbyt zaawansowanych możliwości. Programowanie RCX w rozumieniu firmy LEGO polega bowiem na kombinacyjnym zestawianiu zachowań złożonych z bloczków z zachowaniami prymitywnymi. Do tego celu właściwie wystarczy sprawnie posługiwać się myszką. Programy bloczkowe przekształcane są w ciągi kodów operacyjnych związanych z poszczególnymi funkcjami systemowymi, a następnie przesyłane do RCX. Wykonanie programu sterującego polega na interpretacji kodów operacyjnych przez oprogramowanie firmowe i wywoływaniu odpowiednich funkcji systemowych.

Bardziej wyrafinowane żądania stawiane robotom wymagają jednak
bardziej wyrafinowanych narzędzi programistycznych. Dlatego też Kekoa
Proudfoot poświęcił swój czas na rozpracowanie protokołów i
disassemblację ROM RCX. Wyniki jego pracy wykorzystał Dave Baum do
budowy kompilatora o nazwie Not Quite C(
Warto napisać kilka słów o architekturze oprogramowania RCX. Podstawowe funkcje systemowe wbudowane są w 16 KB pamięci ROM, a najważniejszych z nich zajmują się taki zadaniami jak:
W ROM wbudowane jest też 5 programów pozwalających na elementarne testy robotów.
Przed uruchomieniem własnych programów należy do RCX wprowadzić oprogramowanie firmowe w postaci interpretera kodów operacyjnych. Po załadowaniu oprogramowania firmowego, w RAM zostaje zaledwie 6KB pamięci przeznaczonej na programy. Ograniczenia pamięci nie obowiązują w systemie LegOS, który zupełnie inaczej zarządza pamięcią H8/3292.
Niewielki rozmiar programu nie jest jedyną niedogodnością oprogramowania firmowego. Do najważniejszych jego ograniczeń należą też:
Jest jasne, że każdy ambitny programista wpada w popłoch słysząc o takich ograniczeniach. Rzecz w tym, że bloczkowa filozofia sterowania RCX nie pozwoli mu dotrzeć nawet w ich okolice.
NQC jest programem, który udostępnia wszystkie możliwości oprogramowania firmowego. Dave Baum opisuje NQC jako:
Krok pośredni pomiędzy GUI dostarczonym przez LEGO wraz z MindStorms, a pbForthem czy LegOSem. NQC jest o wiele potężniejszy niż GUI LEGO, ale nie udostępnia tego samego poziomu bezpośredniej kontroli RCX, jaki uzyskuje się zastępując oprogramowanie firmowe.
Naturalnie, opisane powyżej ograniczenia oprogramowania firmowego obowiązują również w programach NQC, jednak Dave Baum dołożył wszelkich starań by zminimalizować ich znaczenie. Przykładowo, w NQC wprowadzone zostały funkcje inline- krótkie fragmenty programu rozwijane w miejscu wywołania. Funkcje te posiadają parametry, mogą też zwracać wyniki obliczeń. Sprytne zarządzanie dostępnymi zmiennymi OF pozwolą na wykorzystanie w NQC zmiennych lokalnych. NQC jest zatem wyśmienitym narzędziem wprowadzającym do programowania RCX.
NQC został zainstalowany w naszym laboratorium. Program wywoływany jest za pomocą komendy nqc opisanej w manualu lub w pliku pdf. Składnia i szereg przykładów zawarte są w przewodniku dostępnym również na stronach Dave Bauma.
Czytając ten dokument można odnieść wrażenie, że zestaw MindStorms składa się z elektroniki i oprogramowania. Nic bardziej mylnego! MindStorms to klocki służące do budowy Mechanizmów. A umiejętność konstrukcji dobrych mechanizmów jest sztuką, której nie można nauczyć się inaczej jak poprzez precyzyjne budowanie i rozkładanie, podpatrywanie i ściąganie pomysłów, a przede wszystkim bujanie w obłokach i ćwiczenie wyobraźni. Nie zdobyłem się na odwagę prezentacji nieporadnych konstrukcji, które wyszły (bądź wyjechały) spod moich rąk, bowiem jestem początkującym budowniczym LEGO i przypuszczalnie każde dziecko wyśmiałoby moje roboty.
Cóż zatem mogę doradzić w tej sytuacji? Po pierwsze trzeba przejrzeć Constructopedię i zbudować kilka wzorcowych pojazdów. Constructopedia zawiera bardzo eleganckie, przemyślane rozwiązania; warto je zapamiętać. Obowiązkowo należy zapoznać się z artykułem Freda Martina o własnościach niektórych elementów LEGO i pewnych elementarnych ich kompozycjach. Trzeba też podglądać rozwiązania innych konstruktorów. Przykładowo, Rene Schalburg zbudował pająka, a Jonathan Knudsen zaprojektował robota mobilnego z napędem synchronicznym. Największe wrażenie robi jednak manipulator o pięciu stopniach swobody autorstwa Jody ze strony MindStorms. Więcej wskazań na interesujące konstrukcje LEGO można znaleźć u Russela Nelsona.