Both sides previous revision
Poprzednia wersja
|
|
pl:miw:miw08_mindstormscontrolj [2008/05/20 05:01] miw |
pl:miw:miw08_mindstormscontrolj [2008/06/01 16:32] gjn |
====== Opis ====== | |
Paweł Gutowski | |
<pawel.gutowski@gmail.com> | |
| |
Communication stack: | |
* Prolog -- control logic in [[http://www.swi-prolog.org|Prolog]] program | |
* Prolog <-> Java -- interface, use JPL and/or Logtalk | |
* [[http://lejos.sourceforge.net/|LeJOS]] [[http://lejos.sourceforge.net/p_technologies/nxt/icommand/icommand.php|iCommand]] -- communication w/ NXT in Java | |
* Bluetooth -- controlled from iCommand | |
* Mindstorms NXT. | |
Idea: | |
* wrap the [[http://lejos.sourceforge.net/p_technologies/nxt/icommand/api/index.html|iCommand API]] with Prolog predicates. | |
* investigate event-related issues | |
* build some simple control logic in Prolog | |
| |
| |
====== Sprawozdanie ====== | |
===== Co chcemy osiągnąć? ===== | |
* Chcemy skonfigurować środowisko deweloperskiego w Windows XP w taki sposób aby umożliwić sterowanie klockami LEGO z poziomu Prologu. Sterowanie w założeniu ma odbywać się poprzez Bluetooth, w czasie rzeczywistym. "Program" Prologu będzie wykonywany na maszynie PC, zaś odczyty z czujników oraz rozkazy dla silników będą wysyłane w czasie rzeczywistym via bluetooth. | |
* Chcemy napisać zestaw predykatów realizujących funkcjonalność podstawowych elementów robotów (rozkazy dla silnika, odczyt z każdego z czujników itp.) | |
* Chcemy uzgodnić interfejs (sposób wywołań predykatów) z kolegą pracującym nad [[miw08_mindstormsapi|projektem mindstormsapi]], którego zakres obejmuje prace nad wyższymi warstwami komunikacji. | |
| |
===== Jak chcemy to osiągnąć? ===== | |
* Do komunikacji PC <-> klocki LEGO poprzez bluetooth użyjemy biblioteki **iCommand** - jest to biblioteka napisana w Javie, umożliwiająca sterowanie klockami w czasie rzeczywistym, poprzez bluetooth. | |
* iCommand'a będziemy wywoływać z Prologu poprzez **JPL** jako, że umożliwia komunikację pomiędzy prologiem a kodem w Javie. | |
| |
Ostatecznie utworzone przez nas warstwy komunikacji przyjmą następującą postać: | |
^ Prolog | <- Wraz z zestawem napisanych przez nas predykatów | | |
^ JPL | | | |
^ iCommand | | | |
^ Sterowniki bluetooth | <- bluetooth stack + imprementacja dostarczona wraz z iCommand | | |
^ Klocki LEGO NXT | | | |
| |
===== Co udało się zrobić? ===== | |
* Przede wszystkim udało się, zgodnie z założeniami, zestawić i uruchomić wszystkie warstwy komunikacji: | |
Prolog -> JPL -> iCommand -> LEGO | |
* Napisano zestaw predykatów służących do sterowania robotem: [[:pl:miw:miw08_mindstormscontrolj:nxt_iCommand.pl|nxt_iCommand.pl]]. Predykaty wywołują poprzez JPL metody z klas iCommand'a. Zestaw ww. predykatów, po kosmetycznych poprawkach został użyty w [[miw08_mindstormsapi|projekcie mindstormsapi]]. | |
Zestaw utworzonych predykatów wraz z krótkim opisem: | |
<code prolog> | |
:- module(nxt_iCmd,[ | |
nxt_iCmd_open/0, % Rozpoczęcie komunikacji/pracy z klockami | |
nxt_iCmd_close/0, % Zakończenie komunikacji/pracy z klockami | |
nxt_iCmd_distance/2, % Odczytanie odległości z ultradźwiękowego czujnika dystansu | |
nxt_iCmd_pressed/2, % Sprawdzenie czy czujnik dotyku jest wciśnięty czy nie | |
nxt_iCmd_lightPercentage/2, % Odczytanie wartości natężenia światła z czujnika nat. światła | |
nxt_iCmd_LED/2, % Ustawienie (włączenie lub wyłączenie) diody LED w czujniku natężenia światła | |
nxt_iCmd_loudness/2, % Odczytanie natężenia dźwięku z czujnika głośności | |
nxt_iCmd_batteryMilliVolt/1, % Odczytanie stanu baterii (napięcie) | |
nxt_iCmd_playSoundFile/2, % Odegranie pliku dźwiękowego zapisanego wewnątrz klocków | |
nxt_iCmd_stopPlayingSound/0, % Zatrzymanie odgrywania wszystkich dźwięków | |
nxt_iCmd_playTone/2, % Zagranie dźwięku o określonej częstotliwości i długości trwania | |
% motors | |
nxt_iCmd_stopMotor/1, % Zatrzymanie wybranego silnika (z użyciem hamulca) | |
nxt_iCmd_setMotorSpeed/2, % Ustawienie prędkości wybranego silnika | |
nxt_iCmd_getMotorSpeed/2, % Odczyt prędkości wybranego silnika | |
nxt_iCmd_rotateMotorToAngle/3, % Nakazanie wybranemu silnikowi ustawienie się w zadanej pozycji (dążenie z zadaną prędkością) | |
nxt_iCmd_getMotorAngle/2, % Odczyt aktualnego położenia wybranego silnika | |
nxt_iCmd_resetMotorAngle/1 % Kalibracja położenia silnika - resetowanie. | |
]). | |
</code> | |
* Napisano [[pl:miw:miw08_mindstormscontrolj:developertutorial|tutorial instalacji i konfiguracji]] środowiska deweloperskiego, ułatwiający powtórzenie wyników prac udokumentowanych w niniejszym sprawozdaniu | |
* Wykonano przegląd bibliotek iCommand oraz LeJOS w poszukiwaniu funkcjonalności mogących przydać się w dalszych pracach. Ciekawsze klasy/metody wraz z opisem zaprezentowano w [[pl:miw:miw08_mindstormscontrolj:apibrief|wyciągu z API iCommand oraz leJOS]]. | |
| |
===== Jakie napotkano przeszkody? ===== | |
* Problemy przy instalacji iCommand. Problemy wynikały z drobnych (aczkolwiek dotkliwych) błędów w dokumentacji. Szerszy opis, oraz sposoby ominięcia można znaleźć w [[pl:miw:miw08_mindstormscontrolj:developertutorial|tutorialu]]. | |
* Problemy z bluetoothem. Niestety firma LEGO nie zapewnia kompatybilności ze wszystkimi dostawcami sprzętu i oprogramowania dla bluetooth. Niektóre laptopy Toshiba oraz Dell mogą mieć problemy - więcej w [[pl:miw:miw08_mindstormscontrolj:developertutorial|tutorialu]]. | |
* Napotkano problem przy odczycie kierunku obrotu silniczka. Nie ma problemu z odczytem prędkości z jaką w danej chwili obraca się silnik, jednak nie udało się odczytać jego kierunku. | |
| |
===== Materiały utworzone w trakcie prac nad projektem ===== | |
* {{:pl:miw:miw08_mindstormscontrolj:nxt_iCommand.pl|nxt_iCommand.pl}} - Ostateczna wersja predykatów służących do sterowania robotem. | |
* [[pl:miw:miw08_mindstormscontrolj:developertutorial|Tutorial instalacji i konfiguracji]] - How to - instalacja i konfiguracja środowiska deweloperskiego - opis ułatwiający powtórzenie wyników prac opisanych w niniejszym sprawozdaniu. | |
* [[pl:miw:miw08_mindstormscontrolj:apibrief|Wyciąg z API iCommand oraz leJOS]] - Interesujące funkcjonalności iCommand oraz LeJOS, które mogą zostać w przyszłości wykorzystane podczas rozwijania niniejszego projektu. | |
* [[pl:miw:miw08_mindstormscontrolj:history|Historia]] - Zapis historii prac nad niniejszym projektem. | |