Opis

Projekt zakończony

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

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ć?

  • Przede wszystkim udało się, zgodnie z założeniami, zestawić i uruchomić wszystkie warstwy komunikacji:

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.
		   ]).
  • Napisano 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 wyciągu z API iCommand oraz leJOS.

Jakie napotkano przeszkody?

  • Problemy przy instalacji iCommand. Problemy wynikały z drobnych (aczkolwiek dotkliwych) błędów w dokumentacji. Szerszy opis, oraz sposoby ominięcia można znaleźć w tutorialu.
  • Problemy z bluetoothem. Niestety firma LEGO nie zapewnia kompatybilności ze wszystkimi dostawcami sprzętu i oprogramowania dla bluetooth. Niektóre laptopy Toshiba oraz Dell mogą mieć problemy - więcej w tutorialu.
  • Napotkano problem przy odczycie kierunku obrotu silniczka. Nie ma problemu z odczytem prędkości z jaką w danej chwili obraca się silnik, jednak nie udało się odczytać jego kierunku.

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.
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