Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
Nowa wersja
Poprzednia wersja
Nowa wersja Both sides next revision
pl:miw:miw08_mindstormscontrolj [2008/04/28 18:46]
miw
pl:miw:miw08_mindstormscontrolj [2008/05/20 05:01]
miw
Linia 14: Linia 14:
   * build some simple control logic in Prolog   * build some simple control logic in Prolog
  
-====== Spotkania ====== 
-===== 08.02.26 ===== 
-  * testowanie komunikacji iCommand 
  
 +====== 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.
  
-===== 080311 ​===== +===== Jak chcemy to osiągnąć? ​===== 
-  * próba spięcia Prologu z Javą, [[http://​www.swi-prolog.org/​packages/​jpl/​|JPL]] +  * Do komunikacji PC <-> klocki LEGO poprzez bluetooth użyjemy biblioteki **iCommand** - jest to biblioteka napisana w Javie, umożliwiająca sterowanie klockami w czasie rzeczywistympoprzez bluetooth
-  * przegląd działania/​sensowności klas icommand +  * iCommand'​a będziemy wywoływać z Prologu poprzez ​**JPL** jako, że umożliwia komunikację pomiędzy prologiem a kodem w Javie.
-  ​nieob+
  
 +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      |                      |
  
-===== 080318 ===== +===== Co udało się zrobić? ===== 
-  * j.w. +  * Przede wszystkim udało się, zgodnie z założeniami, zestawić i uruchomić wszystkie warstwy ​komunikacji:
- +
- +
- +
-===== 080401 ===== +
-  * ciała predykatów z JPL +
- +
- +
-===== 080415 ===== +
-  * impl. brakującychdodatkowych 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) +
- +
-====== Projekt ====== +
- +
- +
- +
- +
-===== 080318 ===== +
- +
-  * Udało się przekopaćpołączyć i odpalić naraz wszystkie warstwy:+
 Prolog -> JPL -> iCommand -> LEGO 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ówpo kosmetycznych poprawkach został użyty ​[[miw08_mindstormsapi|projekcie mindstormsapi]]. 
-  ​Niestety wciąż występują dziwne problemy - testowe programy lubią się wieszać w dziwnych okolicznościach (ten sam kod raz działa raz nie). +Zestaw utworzonych predykatów wraz z krótkim opisem:
-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ę'​ prologua nie bawić się gettery/​settery i przechowywanie kilkunastu obiektów.+
 <code prolog> <code prolog>
-% +:- module(nxt_iCmd,​[ 
-   ​Proponowany zestaw predykatów:​ + 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 
-%Konfiguracja:​ + nxt_iCmd_pressed/​2, ​           ​Sprawdzenie czy czujnik ​dotyku ​jest wciśnięty czy nie 
-open(H) + nxt_iCmd_lightPercentage/​2   % Odczytanie wartości natężenia światła z czujnika nat. światła 
-close(H) + nxt_iCmd_LED/​2, ​               % Ustawienie (włączenie lub wyłączeniediody LED w czujniku natężenia światła 
- + nxt_iCmd_loudness/​2, ​          Odczytanie natężenia dźwięku z czujnika ​głośności 
-%Czujnik ​dotyku: + nxt_iCmd_batteryMilliVolt/​1  % Odczytanie stanu baterii (napięcie
-touchPressed(H,Pressed+ 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 
-%Czujnik ​głośności: + nxt_iCmd_playTone/​2, ​          % Zagranie dźwięku ​określonej częstotliwości i długości trwania 
-loudness(H,Loudness+ % motors 
- + nxt_iCmd_stopMotor/​1         % Zatrzymanie wybranego silnika (z użyciem hamulca
-%Ultradźwiękowy czujnik odległości: + nxt_iCmd_setMotorSpeed/​2, ​     ​Ustawienie prędkości wybranego silnika 
-distance(H,Distance+ 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ą
-%Czujnik ​światła: + nxt_iCmd_getMotorAngle/​2     % Odczyt aktualnego położenia wybranego silnika 
-lightPercentage(H,Light) + nxt_iCmd_resetMotorAngle/​1 ​    % Kalibracja położenia silnika - resetowanie. 
-led(HON) +    ]).
- +
-%Silniki: +
-motorSpeed(Port, H, Motor, Speed+
-motorPos(PortH, Motor, Pos, ReturnAfter)+
 </​code>​ </​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]].
  
-Obsługa czujników może okazać się niepraktyczna (brak callbacków).  +===== Jakie napotkano przeszkody? ​===== 
-Wyjdzie w praktyce... +  * Problemy przy instalacji iCommand. Problemy wynikały z drobnych ​(aczkolwiek dotkliwychbłędów dokumentacji. Szerszy opis, oraz sposoby ominięcia można znaleźć w [[pl:​miw:​miw08_mindstormscontrolj:​developertutorial|tutorialu]]
- +  * Problemy z bluetoothemNiestety firma LEGO nie zapewnia kompatybilności ze wszystkimi dostawcami sprzętu ​oprogramowania dla bluetoothNiektóre laptopy Toshiba oraz Dell mogą mieć problemy ​więcej [[pl:miw:miw08_mindstormscontrolj:​developertutorial|tutorialu]]
-FIXME +  * Napotkano problem przy odczycie kierunku obrotu silniczkaNie ma problemu ​odczytem ​prędkości z jaką w danej chwili obraca ​się silnikjednak ​nie udało się odczytać jego kierunku.
-  * 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ę 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 ​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 bateriiJest 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 trwaniaJest zaimplementowane. Owinąłem JPL'em i przetestowałem ​Działa. +
-  * operacje na plikach wewnątrz NXT, transfer itp. - jest dostępnych kilka funkcji ​iCommand. Większość opatrzona komentarzemUNFINISHED 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 ​zadaną ​prędkością (forward, backward) proponuję zrobić jeden (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 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 silnikaobsł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żytkownikaW 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 ======+
  
 +===== 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.
pl/miw/miw08_mindstormscontrolj.txt · ostatnio zmienione: 2019/06/27 15:50 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0