Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
Nowa wersja
Poprzednia wersja
pl:miw:miw08_mindstormsapi [2008/06/12 02:01]
miw
pl:miw:miw08_mindstormsapi [2019/06/27 15:50] (aktualna)
Linia 1: Linia 1:
 ====== PlNXT ====== ====== PlNXT ======
 +__**Projekt zakończony**__
 +
 +Piotr Hołownia, <​holownia@student.agh.edu.pl>​
  
 PlNXT to API w Prologu do obsługi [[http://​mindstorms.lego.com/​eng/​Overview/​default.aspx|LEGO Mindstorms NXT]] PlNXT to API w Prologu do obsługi [[http://​mindstorms.lego.com/​eng/​Overview/​default.aspx|LEGO Mindstorms NXT]]
Linia 6: Linia 9:
  
 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. 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.
 +
 +Dokumentacja:​ {{:​pl:​miw:​miw08_mindstormsapi:​plnxtdocs.zip|plnxtdocs.zip}}
  
 ====== Opis warstw ====== ====== Opis warstw ======
Linia 28: Linia 33:
  
 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. 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]] Dokumentacja:​ [[http://​student.agh.edu.pl/​~holownia/​plnxt/​nxt_sensomoto.html|nxt_sensomoto]]
  
Linia 33: Linia 39:
  
 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. 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]] Dokumentacja:​ [[http://​student.agh.edu.pl/​~holownia/​plnxt/​nxt_movement.html|nxt_movement]]
  
Linia 44: Linia 51:
  
 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. 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]] Dokumentacja:​ [[http://​student.agh.edu.pl/​~holownia/​plnxt/​threads.html|threads]]
  
  
 ====== Przygotowanie środowiska ====== ====== Przygotowanie środowiska ======
 +
  
 ===== Z użyciem iCommand ===== ===== Z użyciem iCommand =====
Linia 53: Linia 62:
 Krótka instrukcja konfiguracji połączenia BT z wykorzystaniem iCommand dla użytkowników systemu Windows: Krótka instrukcja konfiguracji połączenia BT z wykorzystaniem iCommand dla użytkowników systemu Windows:
  
-(niebawem będzie).+  - Ściągnij i rozpakuj ​(np. do katalogu C:\nxt\) następujące pliki zip: 
 +    * iCommand (http://​lejos.sourceforge.net/​p_technologies/​nxt/​icommand/​downloads.php)
 +    * rxtx (http://​www.rxtx.org),​ 
 +    * bluesock (http://​bluesock.dev.java.net). 
 +  - Dopisz do zmiennej środowiskowej Classpath ścieżki do następujących plików jar: icommand.jar,​ bluesock.jar,​ RXTXcomm.jar. Np.: <​code>​ C:​\nxt\icommand-0.7\dist\icommand.jar;​C:​\nxt\bluesockbeta1.0\bluesock.jar;​C:​\nxt\rxtx-2.1-7-bins-r2\RXTXcomm.jar </​code>​ 
 +  - Dopisz do zmiennej środowiskowej Path ścieżki do katalogów z bibliotekami dll pochodzącymi z RXTX i bluesock. Np.: <​code>​ C:​\nxt\rxtx-2.1-7-bins-r2\Windows\i368-mingw32\;​C:​\nxt\bluesockbeta1.0\ </​code>​ 
 +  - Sparuj komputer z NXT. Dla tego urządzenia musi być dostępna usługa portu szeregowego "Dev B". Sprawdź jaki port COM został przypisany do tej usługi dla NXT. 
 +  - Umieść w katalogu domowym plik icommand.properities (przy próbie skorzystania z iCommand zostanie utworzony automatycznie). Edytuj go, wpisując dwie następujące linie: 
 +<​code>​ 
 +nxtcomm=COM6 
 +nxtcomm.type=bluesock  
 +</​code>​ 
 + 
 +Zamiast COM6 wpisz port, który jest przypisany do Twojego NXT.
  
 Chcąc używać API, należy do katalogu projektu skopiować następujące pliki: Chcąc używać API, należy do katalogu projektu skopiować następujące pliki:
Linia 74: Linia 96:
  
 [[pl:​mindstorms:​lab:​lab5|Laboratorium]] przewidziane na 1,5 godziny składa się z obserwowania testowego programu oraz implementacji wybranego algorytmu. [[pl:​mindstorms:​lab:​lab5|Laboratorium]] przewidziane na 1,5 godziny składa się z obserwowania testowego programu oraz implementacji wybranego algorytmu.
 +
 +
  
  
Linia 80: Linia 104:
 ====== Co należy poprawić? ====== ====== 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. +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.+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
 +---- 
 +W iCommand metoda Motor.A.rotate(long count,​boolean returnNow) obraca silnik o zadany kąt i zwraca sterowanie, jeśli returnNow==true. Nie zwraca go jednak wystarczająco szybko (wywoływana przez jpl), aby uruchomienie dwóch silników bezpośrednio po sobie odbyło się bez opóźnienia. 
 + 
 +Stąd błędy w poruszaniu się robota przy użyciu tej metody. Np. predykat nxt_go(200,​1000) sprawia, że robot nieznacznie skręca przed wykonaniem ruchu prostoliniowego i na koniec także.
  
 +Praca silników jest lekko przesunięta w czasie. Przy większych prędkościach obrotowych (np. 700 stopni na sekundę) ta różnica staje się niedopuszczalnie duża. Przy mniejszych (np. 150 stopni na sekundę) wydaje się nie przeszkadzać. Może dla wyeliminowania tego błędu należałoby zastosować wielowątkowość w Javie.
 +----
  
 ====== Historia prac nad projektem ====== ====== Historia prac nad projektem ======
  
 [[pl:​miw:​miw08_mindstormsapi:​historia|Historia]] - spotkania, kolejne wersje projektu, sprawozdania cząstkowe. [[pl:​miw:​miw08_mindstormsapi:​historia|Historia]] - spotkania, kolejne wersje projektu, sprawozdania cząstkowe.
pl/miw/miw08_mindstormsapi.1213228886.txt.gz · ostatnio zmienione: 2019/06/27 15:58 (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