====== ********************************* ====== ====== ZAPIS HISTORII PRAC NAD PROJEKTEM ====== ====== ********************************* ====== ====== Opis ====== Paweł Gutowski 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 ====== Spotkania ====== ===== 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. % % 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) 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ć: java -jar icommand.jar 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 ======