*********************************

ZAPIS HISTORII PRAC NAD PROJEKTEM

*********************************

Opis

Paweł Gutowski pawel.gutowski@gmail.com

Communication stack:

  • Prolog – control logic in Prolog program
  • Prolog ↔ Java – interface, use JPL and/or Logtalk
  • LeJOS iCommand – communication w/ NXT in Java
  • Bluetooth – controlled from iCommand
  • Mindstorms NXT.

Idea:

  • wrap the 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ą, 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: 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 ======
pl/miw/miw08_mindstormscontrolj/history.txt · ostatnio zmienione: 2017/07/17 08:08 (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