1. Wstęp

Celem tego ćwiczenia jest sprawdzenie możliwości interfejsu programistycznego PLNXT przy prostych algorytmach. Do dyspozycji mieliśmy komputer, moduł komunikacji Bluetooth oraz już złożonego robota „Agatkę”. Niestety, muszę w tym miejscu nadmienić, iż ćwiczenie nie zostało wykonane w normalny, podany w instrukcji sposób, z uwagi na patologiczne zachowanie robota, które zostanie omówione w szczegółach w dalszej części tego sprawozdania.

2. Opis problemów z połączeniem

Pierwszym problemem napotkanym podczas wykonywania ćwiczenia było nawiązanie poprawnej łączności z robotem. Co ciekawe, na początku nie mieliśmy do dyspozycji modułu BT na USB, zwanego potocznie „dzyndzlem”, co rodzi wątpliwości, czy ktoś na wcześniejszych zajęciach w ogóle bawił się tym robotem. Po otrzymaniu modułu i podłączeniu go do komputera, robot jest teoretycznie wykrywany, jednak nie reaguje na polecenia z konsoli Prologa, tak samo nie pojawiają się odpowiedzi typu „Yes”/„No”. Wielokrotne próby parowania robota oraz wykonanie plnxt_stty daje taki sam rezultat, ewentualnie próba wydania jakiegokolwiek polecenia daje komunikat o braku połączenia. Nie pomagało też usuwanie kontaktów z bricka ani jego restartowanie. Dopiero reset całego systemu operacyjnego na komputerze przyniósł oczekiwany efekt. Na tym jednak problemy się nie skończyły.

3. Problemy po uzyskaniu połączenia

Tak naprawdę ciekawe rzeczy zaczęły się dziać po nawiązaniu połączenia. Przekonaliśmy się o tym, gdy chcieliśmy przetestować jeden z podanych na wiki przykładów:

:- consult('plnxt.pl').
 
start :-
	nxt_open,
	rectangle_loop.
 
rectangle_loop :-
	nxt_go_cm(350,40),
	nxt_rotate(350,90),
	rectangle_loop.

Przykład ten, jak widać, realizuje ruch po kwadracie o boku 40cm, z szybkościami ruchu i obrotu równymi 350 cm/s i stopni/s, czyli dość szybki. Po skompilowaniu i wywołaniu polecenia start robot zareagował. Reakcja jednak należała do niespodziewanych, albowiem robot zaczął poruszać się do przodu i nie zatrzymywał, dopóki silniki nie zostaną zatrzymane przez jeden z poniższych warunków/stanów:

  • Wydanie polecenia nxt_stop,
  • Wyłączenie bricka,
  • Rozładowanie akumulatorów robota.

Zadziwieni rezultatem postanowiliśmy przetestować przykład z wykorzystaniem wątków:

:- consult('plnxt.pl').
 
start :-
	nxt_open,
	thread_create(rectangle_loop,_,[detached(true)]).
 
rectangle_loop :-
	nxt_go_cm(350,40),
	nxt_rotate(350,90),
	rectangle_loop.
 
stop :-
	trigger_killall,
	nxt_stop,
	nxt_close.

Działanie tego algorytmu okazało się jeszcze bardziej zastanawiające. Mianowicie po wpisaniu start, robot, podobnie, jak wcześniej, poruszał się na nieokreślony dystans do przodu. Co jednak ciekawe, wpisanie teraz nxt_stop nie zatrzymało robota, ale spowodowało przejście do następnej akcji w rectangle_loop! Czyli robot, jeżeli przed wpisaniem poruszał się do przodu, po wpisaniu zaczął się obracać wkoło bez końca i vice versa. Zabicie wątków poleceniem stop natomiast działało normalnie.

Zdziwieni takim stanem rzeczy i nakłonieni przez prowadzącego, postanowiliśmy przeanalizować odpowiedzi robota na podstawowe polecenia. Zauważyliśmy, iż część z nich wykonuje się z dość dużym opóźnieniem, od 5 do 10 sekund. Ogółem jednak polecenia związane z odczytem wartości czujników działały poprawnie, tak, jak np. włączenie podświetlenia sensoru światła. Do problematycznych należały nxt_go_cm oraz nxt_rotate. Jak napisano wcześniej, ich wykonanie kończyło się niekończącym się ruchem bądź obrotem robota. Zachowanie nie zależało od parametru określającego odległość czy kąt - przetestowano zarówno bardzo małe, jak i większe wartości i za każdym razem ruch robota musiał być sztucznie przerywany. Reakcja na parametr określający szybkość ruchu była poprawna - przy mniejszych wartościach robot istotnie jechał i obracał się wyraźnie wolniej, jednak tak czy inaczej w sposób nieprzerwany.

W ten sposób wykonanie zadań stało się efektywnie znacznie utrudnione - było w zasadzie konieczne ręczne sterowanie. Postanowiliśmy też sprawdzić wyposażenie robota. Wykorzystaliśmy więc programy Try Me zawarte w Bricku. Tu w zasadzie nie napotkaliśmy się na większe problemy z jednym wyjątkiem. Czujnik dźwięku zdawał się być źle wykalibrowany i reagował wyraźnym ruchem już na ciche rozmowy kolegów siedzących ok. 3 metry obok. Przy skierowaniu polecenia wprost do robota następował gwałtowny zryw kończący się na przebyciu przez robota ok. 0,5 metra. Dość zastanawiające zachowanie zostało uwiecznione na filmiku nagranym przez jednego z członków grupy.

4. Wnioski

Jak wspomniano wcześniej, laboratorium nie mogło zostać ukończone w normalny sposób. Jest to tym bardziej zastanawiające, że inne grupy pracujące z tym robotem wykonały zadania w sposób normalny. Ciężko wskazać potencjalne przyczyny takiego zachowania robota, jakie zauważyliśmy. Wygląda na to jednak, że później wszystko wróciło do normy.

5. Materiały

pl/dydaktyka/piw/2009/sprawozdania/piw20090422-12a.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