*********************************
ZAPIS HISTORII PRAC NAD PROJEKTEM
*********************************
Opis
Spotkania
08.02.26
080311
080318
080401
080415
impl. brakujących? dodatkowych funkcji silnika
specyfikacji funkcji kontroli brick: sound, display, filesystem
-
080429
080520
Projekt
080318
Prolog → JPL → iCommand → LEGO
Podejrzana komunikacja bluetooth - wciąż powtarzają się problemy z nawiązaniem komunikacji
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ą 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…
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:
iCmd.pl
080415
Kolejna wersja zestawu predykatów, uwzględniająca niektóre uwagi:
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:
Wyciąg z API
Tutorial instalacji: Prologa→JPL→iCommand→LEGO:
Tutorial
====== Materiały ======