====== PLNXT Wprowadzenie ====== LEGO Mindstorms NXT jest uniwersalną platformą, która oferuje konstruowanie robotów, jak również rozwiązania programistycznie. Jeśli chodzi o programowanie Mindstorms NXT, LEGO dostarcza środowisko, które pozwala tworzyć algorytmy przy użyciu prostego wizualnego języka diagramów przepływu sterowania. Dzięki otwartości platformy pojawiło się wiele programistycznych rozwiązań dla języków takich, jak C/C + +, Java, etc. Przykłady obejmują [[http://lejos.sourceforge.net|lejos/iCommand]] i [[http://bricxcc.sourceforge.net/nqc|NQC]]. Wczesne próby rozwiązań opartych o Prolog można znaleźć w projekcie [[http://www.cs.toronto.edu/cogrobo/Legolog|Legolog]]. Niestety nie oferuje on ogólnego API i obsługuje tylko starszą wersję Mindstorms - RCX. //PLNXT// to API w języku Prolog dla platformy Mindstorms NXT. Jest rozwijane w ramach projektu [[http://hekate.ia.agh.edu.pl|HeKatE]]. Ma na celu zapewnienie regułowego rozwiązania programistycznego wysokiego poziomu. Na podstawie przeglądu istniejących rozwiązań, wymagania nowego API dla NXT zostały sformułowane następująco: * pokrycie wszystkich funkcji standardowych komponentów NXT, * przenośność, rozwiązanie dla systemu Windows i GNU/Linux, * ponownego wykorzystania niektórych dostępnych rozwiązań. PLNXT ma następujące cechy: * jest uruchamiany na komputerze i kontroluje robota NXT przy użyciu Bluetooth/USB, * na poziomie funkcjonalnym API jest spójne z innymi dostępnymi rozwiązaniami. ===== Architektura API ===== * **Warstwa behawioralna** (nxt_movement) udostępnia programiście funkcje wysokiego poziomu. Zawiera abstrakcyjne metody kontroli robota takie, jak przemieszczanie się, skręcanie. Obecnie działa dla robota [[http://mindstorms.lego.com/Overview/MTR_Tribot.aspx|TriBot]]. Ostatecznie powinna dostarczać pełnego mechanizmu ruchu dla różnych robotów. * **Warstwa sensomotoryczna** (nxt_sensomoto) zapewnia kontrolę komponentów zestawu NXT: silników, sensorów, jak również brick (jednostki centralnej). Ta warstwa może być używana do bezpośredniego odczytu sensorów, jak również programowania silników pojedynczo. Jest to warstwa, która może być używana przez programistę do uwydatnienia funkcjonalności warstwy behawioralnej. * Celem **warstwy komunikacyjnej** (nxt_actions) jest wykonywanie akcji wartswy sensomotorycznej i komunikacja z NXT. Obecnie stworzonych jest kilka alternatywnych modułów tej warstwy, dostarczających różnych środków komunikacji: * moduł komunikacji z bezpośrednim użyciem portu szeregowego i protokołu komunikacji LEGO, * rozwiązanie hybrydowe oparte na javowej bibliotece iCommand, * rozwiązanie hybrydowe oparte na socketach z wykorzystaniem biblioteki NXT++, która komunikuje się z robotem, * prosty graficzny symulator NXT, pozwalający w pewnym zakresie testować algorytmy bez użycia zestawu Mindstorms.\\ W rzeczywistości wszystkie te rozwiązania (poza symulatorem) oparte są na protokole komunikacji LEGO. Dowolną inną implementację warstwy komunikacyjnej można stworzyć bazując na pliku nxt_actions_dummy.pl. Ograniczeniem jest to, że nazwy predykatów eksportowanych muszą pozostać takie same. Nie ma także możliwości wprowadzenia niczego nowego bez uwzględnienia tego w warstwie wyższej. Dlaczego? Jest to jedna z warstw projektu, ale wydzielona tylko, aby umożliwić wstawienie w jej miejsce różnych alternatywnych wersji. **Nie powinna być bezpośrednio używana w projektach bazujących na PLNXT. Nie ma takiej potrzeby.** ===== Obsługa wątków ===== Do implementacji złożonych algorytmów sterowania NXT niezbędne jest wprowadzenie mechanizmów opóźniania akcji w czasie oraz uwarunkowanie akcji od pewnych zdarzeń. W module "threads" znajdują się predykaty umożliwiające tworzenie triggerów i timerów z wykorzystaniem wątków w SWIProlog. Trigger uruchamia akcję pod warunkiem zajścia zdarzenia. Timer uruchamia akcję po wyznaczonym czasie. ====== Platforma LEGO Mindstorms NXT ====== Minimalna wiedza potrzebna do używania PLNXT:\\ * [[pl:mindstorms:opis|Krótki opis.]] * [[pl:mindstorms:zestaw|Zestaw LEGO Mindstorms NXT.]] * [[pl:mindstorms:interfejs|Opis najbardziej przydatnych elementów interfejsu jednostki centralnej.]] Powyższe materiały są częścią serwisu [[pl:mindstorms:start|Laboratorium AGH - LEGO Mindstorms]]. ====== Dokumentacja ====== FIXME serwer dokumentacji online ====== Download ====== ===== Release M0 ===== //20.02.2009//: Pobierz {{:plnxt:plnxt-m0.tar.gz|PlNXT-M0}} ===== Release M3 ===== //09.05.2010//: Pobierz {{:plnxt:plnxt-m3.1.tar.gz|PlNXT-M3.1}} ====== Konfiguracja ====== Jeżeli nie używałeś jeszcze Mindstorms NXT, polecam przejrzeć instrukcję LEGO. Ładna, kolorowa, z obrazkami. :) Na pewno dysponujesz wersją angielską. {{pl:mindstorms:dokumentacja:nxtuserguide_pl_.pdf|Tutaj}} do ściągnięcia wersja polska. Jeśli jesteś do tego zbyt leniwy, zacznij od krótkiego zapoznania z [[#platforma_lego_mindstorms_nxt|platformą LEGO Mindstorms NXT]], niezbędnego do używania PLNXT. Zawarta jest tam minimalna, jak tylko się da, wiedza o platformie. Pobierz i rozpakuj aktualną wersję PLNXT. Do ściągnięcia w dziale [[#download|download]]. ===== Przygotowanie środowiska ===== Różne moduły komunikacyjne wymagają różnego przygotowania środowiska: * ''nxt_actions_serial'' -- praca przez lokalny port szeregowy, * ''nxt_actions_icommand'' -- praca za pośrednictwem [[http://lejos.sourceforge.net/icommand.php|iCommand]] (Java), * ''nxt_actions_sockets'' -- praca za pośrednictwem gniazd TCP. Tymczasowo możliwa jest używanie jedynie modułu ''serial''. Wkrótce będzie to poprawione. Wobec tego dalsze instrukcje są przygotowane jedynie dla tego modułu. ==== Moduł serial ==== [[pl:plnxt:conf_serial|Konfiguracja trybu szeregowego dla GNU/Linux]] ==== Moduł icommand ==== FIXME ==== Moduł sockets ==== FIXME ====== Pierwsze kroki ====== Jeżeli masz już poprawnie przygotowane środowisko (patrz [[#konfiguracja]]), możesz przejść do pisania prostych programów. Zachęcam do zapoznania się z [[pierwsze_kroki|''Pierwszymi krokami'']]. ====== Strony pokrewne ====== Patrz [[pl:mindstorms:linki]] (część serwisu [[pl:mindstorms:start|Laboratorium AGH - LEGO Mindstorms]]). ====== Licencja ====== Copyright (c) 2006-9 by the HeKatE Project PLNXT jest rozwijany przez HeKatE Project (http://hekate.ia.agh.edu.pl). PLNXT jest wolnym oprogramowaniem: możesz go rozprowadzać i/lub modyfikować na warunkach licencji GNU General Public License, wydanej przez Free Software Foundation, według wersji 3 tej licencji lub którejś z późniejszych. PLNXT rozpowszechniany jest z nadzieją, iż będzie on użyteczny - jednak BEZ JAKIEJKOLWIEK GWARANCJI; nawet domyślnej gwarancji PRZYDATNOŚCI HANDLOWEJ albo PRZYDATNOŚCI DO OKREŚLONYCH ZASTOSOWAŃ. W celu uzyskania bliższych informacji, przeczytaj licencję GNU General Public License. Z pewnością wraz z PLNXT otrzymałeś egzemplarz licencji GNU General Public License. Jeśli nie, zobacz [[http://www.gnu.org/licenses/]]. {{:hekate:gplv3.png|GPLv3}} ====== Kontakt ====== Prosimy o kontakt w przypadku, gdy: * zawartość tej strony nie jest wyczerpująca, * chcesz zgłosić błąd programu (bug), * masz dla nas rady, sugestie, komentarze, itp. E-mail: holownia(_at_)agh.edu.pl ew. gjn(_at_)agh.edu.pl ====== Prace rozwojowe ====== Dla [[mindstorms:plnxt:plnxtdev:start|deweloperów]]. ====== Aktualności/problemy ====== * **14 stycznia 2009** -- PLNXT zostało użyte podczas zajęć ze studentami. Liczymy na uzyskanie opinii, które pomogą usunąć błędy. Wcześniej trwały prace nad modułem warstwy komunikacyjnej z wykorzystaniem połączenia szeregowego, opartego bezpośrednio na protokole LEGO. Protokół ten daje większe możliwości, niż używane wcześniej moduły icommand i sockets. Pozwala m.in. synchronizować pracę silników. Wyższa warstwa została przekształcona tak, żeby wykorzystać w pełni to, co daje nam protokół LEGO. Należy ją jeszcze wtórnie przystosować do użycia modułów warstwy komunikacyjnej, niezapewniających synchronizacji, jak również same te moduły. W tym momencie możliwe jest użycie tylko modułu serial jako warstwy komunikacyjnej.