Opis
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
projektem mindstormsapi, którego zakres obejmuje prace nad wyższymi warstwami komunikacji.
Jak chcemy to osiągnąć?
Do komunikacji PC ↔ klocki LEGO poprzez bluetooth użyjemy biblioteki iCommand - jest to biblioteka napisana w Javie, umożliwiająca sterowanie klockami w czasie rzeczywistym, poprzez bluetooth.
iCommand'a będziemy wywoływać z Prologu poprzez JPL jako, że umożliwia komunikację pomiędzy prologiem a kodem w Javie.
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 | |
Co udało się zrobić?
Prolog → JPL → iCommand → LEGO
Napisano zestaw predykatów służących do sterowania robotem:
nxt_iCommand.pl. Predykaty wywołują poprzez JPL metody z klas iCommand'a. Zestaw ww. predykatów, po kosmetycznych poprawkach został użyty w
projekcie mindstormsapi.
Zestaw utworzonych predykatów wraz z krótkim opisem:
:- module(nxt_iCmd,[
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
nxt_iCmd_pressed/2, % Sprawdzenie czy czujnik dotyku jest wciśnięty czy nie
nxt_iCmd_lightPercentage/2, % Odczytanie wartości natężenia światła z czujnika nat. światła
nxt_iCmd_LED/2, % Ustawienie (włączenie lub wyłączenie) diody LED w czujniku natężenia światła
nxt_iCmd_loudness/2, % Odczytanie natężenia dźwięku z czujnika głośności
nxt_iCmd_batteryMilliVolt/1, % Odczytanie stanu baterii (napięcie)
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
nxt_iCmd_playTone/2, % Zagranie dźwięku o określonej częstotliwości i długości trwania
% motors
nxt_iCmd_stopMotor/1, % Zatrzymanie wybranego silnika (z użyciem hamulca)
nxt_iCmd_setMotorSpeed/2, % Ustawienie prędkości wybranego silnika
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ą)
nxt_iCmd_getMotorAngle/2, % Odczyt aktualnego położenia wybranego silnika
nxt_iCmd_resetMotorAngle/1 % Kalibracja położenia silnika - resetowanie.
]).
-
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
wyciągu z API iCommand oraz leJOS.
Jakie napotkano przeszkody?
Materiały utworzone w trakcie prac nad projektem
nxt_iCommand.pl - Ostateczna wersja predykatów służących do sterowania robotem.
Tutorial instalacji i konfiguracji - How to - instalacja i konfiguracja środowiska deweloperskiego - opis ułatwiający powtórzenie wyników prac opisanych w niniejszym sprawozdaniu.
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.
Historia - Zapis historii prac nad niniejszym projektem.