Both sides previous revision
Poprzednia wersja
Nowa wersja
|
Poprzednia wersja
|
pl:miw:miw08_mindstormscontrolj [2008/05/20 03:23] 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 ====== | |
| |
===== 08.02.26 ===== | |
* testowanie komunikacji iCommand | |
| |
| |
===== 080311 ===== | |
* próba spięcia Prologu z Javą, [[http://www.swi-prolog.org/packages/jpl/|JPL]] | |
* przegląd działania/sensowności klas icommand | |
* nieob | |
| |
| |
===== 080318 ===== | |
* j.w. | |
| |
| |
| |
===== 080401 ===== | |
* ciała predykatów z JPL | |
| |
| |
===== 080415 ===== | |
* impl. brakujących? dodatkowych funkcji silnika | |
* specyfikacji funkcji kontroli brick: sound, display, filesystem | |
* przemyslenie integracji [[miw08_mindstormsapi]] | |
| |
| |
| |
===== 080429 ===== | |
* tutorial instalacji | |
* przeglad funkcj lejos/icommand -> z moglibysmy dodać w warstei movement/behavioral (subsumption) | |
| |
===== 080520 ===== | |
* beta sprawozd? | |
| |
====== Projekt ====== | |
| |
| |
| |
| |
===== 080318 ===== | |
| |
* Udało się przekopać, połączyć i odpalić naraz wszystkie warstwy: | |
Prolog -> JPL -> iCommand -> LEGO | |
| |
* Niestety wciąż występują dziwne problemy - testowe programy lubią się wieszać w dziwnych okolicznościach (ten sam kod raz działa raz nie). | |
Podejrzana komunikacja bluetooth - wciąż powtarzają się problemy z nawiązaniem komunikacji | |
| |
* Zakres prac: | |
Owinięcie funkcjonalności potrzebnej do obsługi 4 podstawowych czujników + 3 silników? Niby iCommand dostarcza możliwość kontrolowania innych czujników, ale brak możliwości przetestowania (brak innych czujników - np czujnik koloru). | |
| |
* Sugeruję założyć, że silniki i czujniki są zawsze podpięte do tych samych - standardowych portów ustalonych przez LEGO - brak dodatkowych i zupełnie niepotrzebnych nakładów na konfigurację. | |
| |
* Z jaką dokładnością owijamy iCommand? 1:1 czy trochę mądrzej? | |
Sugerują tę drugą opcję - żeby zachować 'filozofię' prologu, a nie bawić się w gettery/settery i przechowywanie kilkunastu obiektów. | |
<code prolog> | |
% | |
% Proponowany zestaw predykatów: | |
% | |
| |
%Konfiguracja: | |
open(H) | |
close(H) | |
| |
%Czujnik dotyku: | |
touchPressed(H,Pressed) | |
| |
%Czujnik głośności: | |
loudness(H,Loudness) | |
| |
%Ultradźwiękowy czujnik odległości: | |
distance(H,Distance) | |
| |
%Czujnik światła: | |
lightPercentage(H,Light) | |
led(H, ON) | |
| |
%Silniki: | |
motorSpeed(Port, H, Motor, Speed) | |
motorPos(Port, H, Motor, Pos, ReturnAfter) | |
</code> | |
| |
Obsługa czujników może okazać się niepraktyczna (brak callbacków). | |
Wyjdzie w praktyce... | |
| |
FIXME | |
* prefix namespace icmdMotorSpeed, icmdTouch | |
* rozpisanie predykatów... | |
* połącznie JPL j.w. | |
| |
| |
| |
| |
===== 080401 ===== | |
Zaimplementowano i przetestowano predykaty realizujące następujące funkcje: | |
* Odczyt czujnika nacisku | |
* Odczyt czujnika siły dźwięku | |
* Odczyt czujnika odległości | |
* Odczyt czujnika natężenia światła | |
* Ustawianie ON/OFF diody LED w czujniku światła | |
* Ustawianie prędkości silników dla pracy w nieskończoność (w obydwu kierunkach) | |
* Odczyt prędkości silników (tylko prędkości, __nie kierunku__) - najprawdopodobniej istnieje możliwość odczytania również kierunku. Wymaga to zagłębienia się w klasy iCommand realizujące niższą warstwę komunikacji. | |
| |
Istnieje możliwość zaimplementowania pracy silników tak aby wykonywały zadaną ilość obrotów lub obrót do zadanej pozycji. | |
Implementacja jest możliwa zarówno z uwolnieniem sterowania w chiwli wywołania funkcji, jak i ze zwolnieniem w chwili dotarcia do zadanej pozycji. | |
__Wg dokumentacji iCommand, taki tryb pracy może nie działać prawidłowo z firmware'm firmy LEGO.__ | |
| |
Predykaty wraz zaimplementowanymi ciałami: | |
{{:pl:miw:miw08_mindstormscontrolj:iCmd.pl|iCmd.pl}} | |
| |
| |
| |
| |
| |
| |
| |
===== 080415 ===== | |
Kolejna wersja zestawu predykatów, uwzględniająca niektóre uwagi: | |
{{:pl:miw:miw08_mindstormscontrolj:nxt_iCommand.pl|nxt_iCommand.pl}} | |
| |
Dodatkowe funkcjonalności iCommand: | |
* pobranie informacji o stanie baterii. Jest zaimplementowane. Owinąłem JPL'em i przetestowałem - Działa. | |
* keepAlive - powstrzymanie robota od wyłączenia się w przypadku dłuższego nieużywania. Opatrzone komentarzem "UNTESTED" - odrzuciłem. | |
* playSoundFile, playTone, stopPlaying - odgrywanie melodyjki z pliku zapisanego w bricku, lub tonu o zadanej częstotliwości i czasie trwania. Jest zaimplementowane. Owinąłem JPL'em i przetestowałem - Działa. | |
* operacje na plikach wewnątrz NXT, transfer itp. - jest dostępnych kilka funkcji w iCommand. Większość opatrzona komentarzem: UNFINISHED lub UNTESTED. Komentarze w kodzie źródłowym również nie są zbyt obiecujące: "// !! * Could crash due to receiving..." - odrzuciłem. | |
| |
Połączenie z projektem mindstormscontrolapi (min. różnice): | |
* Problem wspomniany w projekcie mindstormscontrolapi - pobieranie prędkości zerowej "0" - rozwiązałem już w poprzedniej wersji iCmd.pl | |
* Dla silnika, zamiast dwóch różnych predykatów uruchamiania silnika z zadaną prędkością (forward, backward) proponuję zrobić jeden (z prędkością podawaną ze ze znakiem "-") - wydaje się być bardziej intuicyjne. | |
* Zaproponowałem swoje nazewnictwo z dwóch powodów: Krótsze nazwy to lepsze nazwy, poza tym wersja nazw w nxt_iCmd wydaje mi się być bardziej intuicyjna (kwestia gustu - można zmienić). | |
* Dodałem kilka nowych funkcjonalności (pobieranie kąta położenia silnika, obsługa dźwięków itp.) | |
* Zasadniczo reszta cech jest kompatybilna z projektem mindstormsapi | |
| |
====== Sprawozdanie ====== | |
| |
===== 080226 - 080318 ===== | |
Problemy z komunikacją BT pod Windows. | |
W ogóle nie udało się dogadać przez BT z poziomu firmowej aplikacji LEGO [sic!] | |
Zanim udało się porozmawiać przez iCommand należało: | |
- zrobić upgrade sterowników BT | |
- zrobić upgrade stack'a BT | |
- skopiować plik konfiguracyjny do katalogu użytkownika. W moim przypadku: C:\Documents and Settings\gutek\icommand.properties **(Okazuje się, że wbrew dokumentacji, iCommand szuka pliku konfigracyjnego __tylko__ w tym katalogu)** | |
- nie przejmować się tym, że komenda sprawdzająca poprawność instalacji nie działa. Nie ma prawa działać: | |
<code java> | |
java -jar icommand.jar | |
</code> | |
| |
Wciąż występują problemy z komunikacją BT: | |
* czasami problem z nawiązaniem komunikacji (jak już raz zaskoczy to później idzie) | |
* czasami wieszanie się programów (zarówno z prologu jak i bezpośrednio z Eclipsa) (być może nie jest to wina BT?) | |
| |
Okazuje się, że LEGO nie lubią się dogadywać z BT w niektórych laptopach Toshiby i Della (używam Toshiby). | |
Używam BT Toshiba Stack (lego nie gwarantuje kompatybilności Toshiba stack'a z klockami) - być może trzeba będzie się przerzucić na coś innego. | |
| |
| |
| |
===== 080429 ===== | |
Wyciąg z API iCommand oraz leJOS - Funkcjonalność, której użycie może okazać się przydatne w przyszłości: | |
| |
{{:pl:miw:miw08_mindstormscontrolj:funkcjonalnosc_icommand_oraz_lejos.txt|Wyciąg z API}} | |
| |
Tutorial instalacji: Prologa->JPL->iCommand->LEGO: | |
| |
{{:pl:miw:miw08_mindstormscontrolj:instalacja_tutorial_win.txt|Tutorial}} | |
| |
| |
====== Materiały ====== | |
| |