|
|
pl:miw:miw08_mindstormsapi [2008/06/12 02:02] miw |
pl:miw:miw08_mindstormsapi [2019/06/27 15:50] |
====== PlNXT ====== | |
| |
PlNXT to API w Prologu do obsługi [[http://mindstorms.lego.com/eng/Overview/default.aspx|LEGO Mindstorms NXT]] | |
| |
Celem projektu było zaimplementowanie funkcji niskiego poziomu (np. obracanie silnikiem, odczyt sensorów) oraz wyższego (np. jazda do przodu przez zadany czas, wykonanie skrętu w lewo o zadany kąt z zadanym promieniem). | |
| |
Udało się założone cele zrealizować w zadowalającym stopniu. Są rzeczy, które warto poprawić. Zachęcam do zapoznania się z opisem. | |
| |
====== Opis warstw ====== | |
| |
Projekt jest podzielony na następujące wartswy: | |
* najniższa warstwa (nxt_actions), | |
* średnia warstwa (nxt_sensomoto), | |
* najwyższa warstwa (nxt_movement). | |
| |
| |
===== Warstwa nxt_actions ===== | |
| |
Warstwa odpowiada za komunikację z NXT. Mamy do dyspozycji predykaty poruszające silnikami, odczytującymi dane z sensorów, itp. W tej warstwie można zastosować różne systemy komunikacji. Do tej pory zaimplementowane zostały dwa: | |
* {{:pl:miw:miw08_mindstormsapi:080612:nxt_actions_icommand.pl|nxt_actions_icommand}} - komunikacja z użyciem [[http://lejos.sourceforge.net/p_technologies/nxt/icommand/icommand.php|iCommand]], | |
* {{:pl:miw:miw08_mindstormsapi:080612:nxt_actions_sockets.pl|nxt_actions_sockets}} - komunikacja z użyciem socketów (dziełko kolegi [[pl:miw:miw08_mindstormscontrolc|Ziółkowskiego]]). | |
| |
Dowolną inna implementację komunikacji można stworzyć bazując na pliku {{:pl:miw:miw08_mindstormsapi:080612:nxt_actions_dummy.pl|nxt_actions_dummy.pl}}. | |
| |
Ograniczeniem jest to, że nazwy predykatów eksportowanych muszą pozostać takie same. Nie ma także możliwości wprowadzenia niczego nowego bez uwzględnienia tego w warstwie wyższej. Dlaczego? Jest to jedna z warstw projektu, ale wydzielona tylko, aby umożliwić wstawienie w jej miejsce różnych alternatywnych wersji. **Warstwa nxt_actions nie stanowi części API. Nie powinna być używana w projektach bazujących na PlNXT. Nie ma takiej potrzeby.** | |
| |
===== Warstwa nxt_sensomoto ===== | |
| |
Warstwa bazuje na nxt_actions. To, co zostało zaimplementowane w niższej warstwie, w tej jest obudowane w logikę. Zatem mamy tutaj: poruszanie silnikami, odczyt sensorów, odczyt napięcia baterii, odtworzenie pliku dźwiękowego zapisanego w pamięci NXT, odtworzenie dźwięku o podanej częstotliwości. | |
| |
Dokumentacja: [[http://student.agh.edu.pl/~holownia/plnxt/nxt_sensomoto.html|nxt_sensomoto]] | |
| |
===== Warstwa nxt_movement ===== | |
| |
Warstwa dostarcza predykaty realizujące złożoną pracę silników: ruch pojazdu do przodu, do tyłu, skręcanie, obracanie, ruch do napotkania przeszkody. | |
| |
Dokumentacja: [[http://student.agh.edu.pl/~holownia/plnxt/nxt_movement.html|nxt_movement]] | |
| |
| |
====== Dodatkowe komponenty ====== | |
| |
| |
===== Threads ===== | |
| |
Do implementacji złożonych algorytmów sterowania NXT niezbędne jest wprowadzenie mechanizmów opóźniania akcji w czasie oraz uwarunkowanie akcji od pewnych zdarzeń. Np. chcemy, żeby po 10 sekundach od wciśnięcia sensora dotyku urządzenie odtworzyło plik dźwiękowy. | |
| |
W pliku {{:pl:miw:miw08_mindstormsapi:080612:threads.pl|threads.pl}} znajdują się predykaty umożliwiające tworzenie triggerów i timerów z wykorzystaniem wątków w SWIProlog. Trigger uruchamia akcję pod warunkiem zajścia zdarzenia. Timer uruchamia akcję po wyznaczonym czasie. | |
| |
Dokumentacja: [[http://student.agh.edu.pl/~holownia/plnxt/threads.html|threads]] | |
| |
| |
====== Przygotowanie środowiska ====== | |
| |
===== Z użyciem iCommand ===== | |
| |
Krótka instrukcja konfiguracji połączenia BT z wykorzystaniem iCommand dla użytkowników systemu Windows: | |
| |
(niebawem będzie). | |
| |
Chcąc używać API, należy do katalogu projektu skopiować następujące pliki: | |
* {{:pl:miw:miw08_mindstormsapi:080612:nxt_actions_icommand.pl|nxt_actions_icommand.pl}}, | |
* {{:pl:miw:miw08_mindstormsapi:080612:nxt_sensomoto.pl|nxt_sensomoto.pl}}, | |
* {{:pl:miw:miw08_mindstormsapi:080612:nxt_movement.pl|nxt_movement.pl}}, | |
* {{:pl:miw:miw08_mindstormsapi:080612:threads.pl|threads.pl}}. | |
| |
W programie należy załadować moduły, których chcemy używać. Np. | |
<code prolog> | |
:- use_module(nxt_movement). | |
:- use_module(nxt_sensomoto). | |
:- use_module(nxt_thread). | |
</code> | |
| |
Aby sprawdzić poprawność przygotowania środowiska, zachęcam do uruchomienia pliku testowego {{:pl:miw:miw08_mindstormsapi:test.pl|test.pl}}. Jest on przygotowany dla robota [[http://mindstorms.lego.com/Overview/MTR_Tribot.aspx|TriBot]]. Można dzięki niemu szybko sprawdzić poprawność odczytów czujników oraz działanie silnika. Dla [[http://mindstorms.lego.com/Overview/MTR_Tribot.aspx|TriBot]] także ruch złożony (jazda do przodu, do tyłu, skręcanie, obracanie). | |
| |
| |
====== Laboratorium przygotowane w ramach projektu ====== | |
| |
[[pl:mindstorms:lab:lab5|Laboratorium]] przewidziane na 1,5 godziny składa się z obserwowania testowego programu oraz implementacji wybranego algorytmu. | |
| |
| |
| |
| |
====== Co należy poprawić? ====== | |
| |
* Moduł komunikacyjny nxt_actions_icommand nie daje możliwości odczytu kierunku obrotu silnika. Nie jest to zaimplementowane w samym iCommand. | |
* Odczytu sensorów dokonuje się podając numer portu. Powinna być też możliwość łatwiejszego odczytu bez podawania portu. Port byłby wtedy pobierany z konfiguracji robota. | |
* Musi istnieć możliwość usuwania wcześniej utworzonych timerów i triggerów. | |
| |
| |
====== Historia prac nad projektem ====== | |
| |
[[pl:miw:miw08_mindstormsapi:historia|Historia]] - spotkania, kolejne wersje projektu, sprawozdania cząstkowe. | |