Opis

Projekt zakończony

Łukasz Dziedzia , dziedzia@student.agh.edu.pl

Research available programming environments supporting mindstorms.

  • input

http://www.microsoft.com/robotics
http://msdn2.microsoft.com/en-us/robotics/default.aspx
http://msdn2.microsoft.com/en-us/library/bb483088.aspx
http://www.nxtclub.com/
http://scratch.mit.edu/

  • output

Environment comparison: pros/cons.

Spotkania

Sprawozdanie

Dostepne srodowiska

Kilka najciekawszych środowisk do programowania/sterowania MindStorms:

  • LegoMindstorms NXT - środowisko zaprojektowane przez firmę Lego do tworzenia aplikacji przy użyciu dchematów blokowych.
  • MicrosoftRobotics Studio - Microsoft Robotics Studio to środowisko dla hobbystów, studentów oraz profesjonalnych użytkowników wspierające tworzenie programów dla różnych typów urządzeń.
    • Next Byte Codes (NBC) jest to prosty język niskiego poziomu służący do programowania zestawu Lego Mindstorms NXT.
    • Not eXactly C (NXC) jest językiem wysokiego poziomu(podobieństwo z językiem C) współpracujący z kompilatorem NBC. Może być oczywiście wykorzystany do programowania Lego Mindstorms NXT.
  • LabView - Toolkit popularnego środowiska firmy NationalInstruments
  • Lego.NET - Lego.NET to projekt, którego celem jest umożliwienie uruchamia .NET run-time na NXT. Ponieważ oryginaly firmware nie udostępnia takich możliwości w ramach projektu tworzony jest także system operacyjny dla Lego o nazwie brickOS.
  • ROBOTC - ROBOTC to podobny do C język programowania dla Lego Mindstorms NXT. Jego zaletą jest wbudowany debugger czasu rzeczywistego.
  • http://www.mindstorms.rwth-aachen.de/RWTH - Toolbox pozwalający sterować robotami Lego poprzez BlueTooth.
  • leJOS - Zestaw narzędzi do tworzenia oprogramowania dla Lego Mindstorms NXT przy użyciu języka Java (więcej informacji w projekcie: miw08_mindstormscontrolj)

Dodatkowo na stronach Wikipedii można znaleźć odnośniki do kilku innych środowisk: MindStorms on wiki

Propozycja use case'u

Aby porównanie środowisk było sensowne wymagane jest, aby każde z nich testowane było w identyczny sposób. Istotne jest również, aby podczas testowania możliwości jakie oferują poszczególne środowiska wykorzystać jak największą część z funkcjonalności jaką oferuje zestaw LEGO Mindstorms. Biorąc pod uwagę powyższe założenia projekt został zrealizowany zgodnie z następującymi założeniami:

  1. Stworzyć robota, na którym odbędą się testy. Uważam, że warto posłużyć się w tym celu jednym z robotów proponowanych w instrukcjach dołączonych do zestawu(okazałoby się to korzystne w przypadku próby uruchomienia algorytmu). Po zapoznaniu się z możliwościami robotów opisanych w instrukcjach LEGO zdecydowałem się na TriBot'a (w wersji rozszerzonej). Początkowo ciekawszym wydawał się humanoidalny Alpha Rex, jednak oprócz interesującego układu ruchu nie udostępnia on ciekawych możliwości, tzn. ciekawego wykorzystania sensorów.
  2. Dla danego robota zdefiniować algorytm programu. Algorytm powinien wykorzystywać wszystkie sensory dostępne w zestawie (przynajmniej w stopniu pozwalającym na ocenę możliwości sterowaniem nimi, tzn. w przypadku, gdy nie istnieje racjonalne uzasadnienie na wykorzystanie któregoś z sensorów, algorytm powinien zawierać logikę, która wykorzysta możliwości sensora, do wykonania pewnych zadań podrzędnych).
  3. Implementacja algorytmu przy użyciu wybranych środowisk (proponowane środowiska przedstawiam poniżej).
  4. Oprócz charakterystyki porównawczej, opisującej podstawowe wady/zalety każdego ze sprawdzanych środowisk, w podsumowaniu przeprowadzonego eksperymentu powinna znaleźć się punktowa(uproszczona) ocena uwzględniająca następujące kryteria:
  • ogólna ocena możliwości środowiska
  • „user friendly”
  • komunikacja z urządzeniem(NXTBrick)
  • szybkość i intuicyjność implementowania alg.

Wyselekcjonowane środowiska

Wykonanie eksperymentu proponuję przeprowadzić dla 3 środowisk. Wstępna analiza (polegająca na ocenie możliwości oraz popularności) wyłoniła następujące środowiska:

  • LegoMindstorms NXT - implementacja algorytmów w natywnym środowisku Lego powinna zostać potraktowana jako punkt referencyjny przy opisywaniu innych środowisk.
  • BrixCC(NXC) - jest to chyba najpopularniejsze środowisko do tworzenia oprogramowania na LEGO Mindstorms(nie licząc orignalnego środowiska Lego). Język NXC (Not eXactly C) powstał w oparciu o język C, więc jest on bardzo intuicyjny dla wielu programistów. Dodatkowo dobre doświadczenia z poprzednią wersją tego języka (NQC) wskazują na słuszność tego wyboru.
  • MicrosoftRobotics Studio - zapowiadające się dobrze środowisko do tworzenia oprogramowania (oraz symulacji) dla wielu platform hardware'owych.

Propozycje algorytmów

Biorąc pod uwagę wcześniejsze założenia oraz możliwości/ograniczenia robota TriBot, proponuje następujące algorytmy:

  • Saper - Celem robota będzie wywiezienie z obszaru wyznaczonego przez czarną linię (plansza dostarczona z zestawem Mindstorms) obiektu. Robot startuje z dowolnego miejsca na podłodze, jego zadaniem jest znaleźć obszar wyznaczony przez czarną linię(sensor natężenia światła). Po przekroczeniu obszaru robot powinien wyszukać miejsce, w którym znajduje sie piłeczka(sonar), a następnie dotrzeć do niej, uchwycic ją(czujnik dotyku) i wywieźć poza obszar wyznaczony przez czarna linię. Aktywacja robota odbędzie się za pomocą sygnału dźwiękowego (jest to najbardziej sensowne zastosowanie sensora natężenia dźwięku, jakie udało mi się zdefiniować dla tego zadania).Algorytm Saper.
  • Patrol - Celem robota będzie poruszanie się po zadanej trajektorii(plansza dostarczone wraz z zestawem Mindstorms), w przypadku wykrycia na patrolowanej drodze przeszkody(sonar) robot powinien zwolnić, aby nie zderzyć się z nią, a następnie przechwycić przeszkodę i usunąć ją z trasy. Podobnie jak w poprzednim przykładzie czujnik natężenia dźwięku może służyć do aktywacji/deaktywacji robota. Algorytm Patrol.

Regułowy zapis algorytmów

Algorytmy zapisane regułami (IF THEN) dostępne są:

Implementacja

Uwagi ogólne

  • Implementując powyższe algorytmy w środowisku LEGO okazało się, że szczególnie istotna jest możliwość kalibracji sensorów. Porównując środowiska należy zwrócić na to szczególną uwagę.
  • Wadliwa konstrukcja robota uniemożliwiała korzystanie z sensora natężenia światła(sugerowana modyfikacja konstrukcji robota).
  • Przeszkodą nie może być piłeczka na platformie, sonar jest umieszczony zbyt wysoko, aby ją wykryć.

Środowisko Lego Mindstorms


Implementacja ww. algorytmów w natywnym środowisku LEGO (przy użyciu schematów blokowych).

+ -
'cieszący oko' interfejs niedopracowany edytor (gubiące się połączenia, nic nie mówiące warningi)
zintegrowany tutorial i pomoc dotycząca używania środowiska praca z edytorem wymaga sporo cierpliwości (wolne przewijanie przy 'dłuższych' algorytmach)
bezproblemowa komunikacja (USB) niektóre błędy kompilacji nie posiadają opisu pozwalającego je zidentyfikować
automatyczny odczyt wartości pomiarów z sensorów
możliwość kalibracji czujników z poziomu środowiska
ułatwione zarządzenie urządzeniem (wgrywanie firmware'u, zarządzanie plikami zapisanymi w pamięci NXTBrick, podgląd poziomu baterii)
możliwość definiowania własnych bloków


UWAGA Dostępna baza wiedzy dotycząca 'programowania' w środowisku LEGO Mindstorms mogłaby zostać uwzględniona w ćwiczeniach laboratoryjnych z JSI (szczególnie takie zagadnienia jak równoległe wykonywanie zadań, zmienne, typy danych oraz ich przekazywanie między blokami) Najprościej do tej pomocy dostać się można poprzez Help→Contents and Index.

BrixCC(NXC)

Jako pomoc w tworzeniu programów w języku NXC użyłem środowiska Bricx Command Center. Z tego powodu w porównaniu zamieszczę raczej ocenę NXC+Bricx Command Center, gdyż tylko razem tworzą w pełni funkcjonalne, wygodne środowisko.
Linki pomocne przy korzystaniu z NXC i Bricx Command Center:


Zaimplementowane algorytmy:


+ -
bliskie podobieństwo z językiem C sprawia, że bardzo szybko można napisać pierwszy program niewygodna forma dokumentacji (PDF).
bricxCC zawiera wiele wbudowanych, przydatnych narzędzi (bezpośrednie sterowanie, podgląd plików znajdujących się w pamięci, narzędzia diagnostyczne). brak popularnych rozwiązań stosowanych w innych edytorach kodu (formatowanie kodu, podpowiadanie nazw działa tylko dla elementów języka)
bezproblemowa komunikacja (USB)
szybsze i bardziej intuicyjne tworzenie kodu niż w przypadku układania bloczków
skompilowany kod zajmuje mniej miejsca w pamięci (ok 4krotnie)

UWAGA Język NXC nie posiada liczbowego typu zmiennoprzecinkowego! (Należy uważać programując operacje matematyczna np.: (1/10)*10 = 0 ! (mozna napisac (1*10)/10 )

Microsoft Robotics Studio

Przydatne linki:

Microsoft Robotics Studio oferuje nieco inne możliwości niż omawiane wcześniej środowiska. Tworzenie logiki sterującej robotem nie jest najlepszym zastosowaniem dla MSRS (brak możliwości wgrania skompilowanego kodu na kostkę NXT, brak interfejsu dającego możliwość programowania logiki). Obszarem zastosowań, w którym można docenić MSRS jest integracja robotów z innymi serwisami (interfejsami urządzeń, aplikacji). Mimo, że aktualna lista dostępnych serwisów nie jest zbyt bogata (wczesne stadium rozwoju tego produktu), to MSRS zasługuję na uwagę chociażby ze względu na podejście do integrowania hardware'u. Oczywiście możliwa jest też implementacja własnych serwisów.

W ramach projektu w środowisku Microsoft Robotics Studio zaimplementowana została aplikacja Messages.zip. Aplikacja składa się z 2 podprogramów, których działanie szczegółowo zostało opisane tutaj.

Dzięki aplikacji Messages przetestowane zostały:

  • możliwości języka VPL
  • serwisy Lego (v2) oraz serwisy: SimpleDialog, TextToSpeech, Log
  • możliwości integracji Lego z ww. serwisami
+ -
oferuje możliwość integracji NXT z innymi urządzeniami (np.: PC, XBox, kamery internetowe, serwisy software'owe etc.) możliwość komunikacji tylko przy użyciu BlueTooth (połączenia są niestabilne)
najwygodniejszy designer mała ilość dokumentacji, tutoriali
integracja z .NET Framework długi czas uruchamiania programu (inicjalizowanie serwisów)

Podsumowanie

W ramach projektu udało się zrealizować porównanie 3 środowisk do tworzenia oprogramowania dla Lego Mindstorms NXT. Każde ze środowisk ma swoje wady i zalety (przedstawione powyżej), na ich podstawie testowane środowiska można zcharakteryzować jako:

  • Lego Mindstorms NXT - podstawowe środowisko dla uzytkowników preferujących graficzny interfejs do tworzenia programów.
  • BrixCC(NXC) - język NXC dzięki swemu podobieństwu do jęzka C może okazać się najlepszym wyborem dla osób posiadających doświadczenie w tym języku. Samo środowisko BrixCC jest proste w użyciu.
  • Microsoft Robotics Studio - środowisko dla ludzi chcących eksperymentować z integracją zestawu Lego z urządzeniami różnego typu. Mała ilość dokumentacji/tutoriali może czynić je zniechęcającym na początku.

Laboratorium

Materiały

pl/miw/miw08_mindstormsenv.txt · ostatnio zmienione: 2019/06/27 15:50 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0