Both sides previous revision
Poprzednia wersja
Nowa wersja
|
Poprzednia wersja
|
pl:plnxt:start [2009/02/18 22:02] holownia |
pl:plnxt:start [2019/06/27 15:50] (aktualna) |
| |
====== PLNXT Wprowadzenie ====== | ====== 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ą lejos/iCommand ([[http://lejos.sourceforge.net]]) i NQC ([[http://bricxcc.sourceforge.net/nqc]]). Wczesne próby rozwiązań opartych o Prolog można znaleźć w projekcie Legolog ([[http://www.cs.toronto.edu/cogrobo/Legolog]]). Niestety nie oferuje on ogólnego API i obsługuje tylko starszą wersję Mindstorms - RCX. | 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 HeKatE ([[http://hekate.ia.agh.edu.pl]]). Ma na celu zapewnienie regułowego rozwiązania programistycznego wysokiego poziomu. | //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: | Na podstawie przeglądu istniejących rozwiązań, wymagania nowego API dla NXT zostały sformułowane następująco: |
* rozwiązanie hybrydowe oparte na socketach z wykorzystaniem biblioteki NXT++, która komunikuje się z robotem, | * 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.\\ | * prosty graficzny symulator NXT, pozwalający w pewnym zakresie testować algorytmy bez użycia zestawu Mindstorms.\\ |
W rzeczywistości wszystkie te rozwiązania oparte są na protokole komunikacji LEGO. | 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.** | 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.** |
| |
===== “Threads” jako dodatkowy komponent ===== | ===== 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ń. | 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. | 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. |
| |
* [[pl:mindstorms:interfejs|Opis najbardziej przydatnych elementów interfejsu jednostki centralnej.]] | * [[pl:mindstorms:interfejs|Opis najbardziej przydatnych elementów interfejsu jednostki centralnej.]] |
| |
Powyższe materiały są częścią serwisu [[pl:mindstorms|Laboratorium AGH - LEGO Mindstorms]]. | Powyższe materiały są częścią serwisu [[pl:mindstorms:start|Laboratorium AGH - LEGO Mindstorms]]. |
| |
====== Dokumentacja ====== | ====== Dokumentacja ====== |
| |
====== Download ====== | ====== Download ====== |
| ===== Release M0 ===== |
| //20.02.2009//: Pobierz {{:plnxt:plnxt-m0.tar.gz|PlNXT-M0}} |
| |
FIXME | ===== Release M3 ===== |
| //09.05.2010//: Pobierz {{:plnxt:plnxt-m3.1.tar.gz|PlNXT-M3.1}} |
| |
====== Konfiguracja ====== | ====== 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 opisu Mindstorms NXT (FIXME link), niezbędnego do używania PLNXT. Zawarta jest tam minimalna, jak tylko się da, wiedza o platformie. | 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 [[student:msc2009_nxtapi:plnxt_pl#download|download]]. | Pobierz i rozpakuj aktualną wersję PLNXT. Do ściągnięcia w dziale [[#download|download]]. |
| |
===== Przygotowanie środowiska ===== | ===== Przygotowanie środowiska ===== |
| |
Różne moduły komunikacyjne wymagają różnego przygotowania środowiska. 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. | 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ł nxt_actions_serial ==== | ==== Moduł serial ==== |
FIXME Pozbierać wszystko, co tu zostało odkryte, do kupy. | [[pl:plnxt:conf_serial|Konfiguracja trybu szeregowego dla GNU/Linux]] |
| |
==== Moduł nxt_actions_icommand ==== | ==== Moduł icommand ==== |
| FIXME |
| |
==== Moduł nxt_actions_sockets ==== | ==== Moduł sockets ==== |
| FIXME |
| |
====== Pierwsze kroki ====== | ====== Pierwsze kroki ====== |
| |
Jeżeli masz już poprawnie przygotowane środowisko (patrz Quick start), możesz przejść do pisania prostych programów. Zachęcam do zapoznania się z "Pierwszymi krokami". | 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'']]. |
| |
[[pierwsze_kroki]] | |
| |
====== Strony pokrewne ====== | ====== Strony pokrewne ====== |
| Patrz [[pl:mindstorms:linki]] (część serwisu [[pl:mindstorms:start|Laboratorium AGH - LEGO Mindstorms]]). |
| |
====== Licencja ====== | ====== Licencja ====== |
| |
Z pewnością wraz z PLNXT otrzymałeś egzemplarz licencji GNU General Public License. Jeśli nie, zobacz [[http://www.gnu.org/licenses/]]. | Z pewnością wraz z PLNXT otrzymałeś egzemplarz licencji GNU General Public License. Jeśli nie, zobacz [[http://www.gnu.org/licenses/]]. |
| |
FIXME LOGO | {{:hekate:gplv3.png|GPLv3}} |
| |
====== Kontakt ====== | ====== Kontakt ====== |
| |
====== Prace rozwojowe ====== | ====== Prace rozwojowe ====== |
[[plnxtdev:start]] | Dla [[mindstorms:plnxt:plnxtdev:start|deweloperów]]. |
| |
====== Aktualności/problemy ====== | ====== Aktualności/problemy ====== |
| |
**14 stycznia 2009**\\ | * **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. |
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. | |