[[
✎ pl:miw:miw08_mindstormsapi
]]
aiWiki
Pokaż stronę
Ostatnie zmiany
Indeks
Zaloguj
Ta strona jest tylko do odczytu. Możesz wyświetlić źródła tej strony ale nie możesz ich zmienić.
====== 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. 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 być 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.
pl/miw/miw08_mindstormsapi.1213228411.txt.gz
· ostatnio zmienione: 2019/06/27 15:58 (edycja zewnętrzna)
Pokaż stronę
Poprzednie wersje
Menadżer multimediów
Do góry