Sprawozdanie 4

  • Robot: Franek
  • Data wykonania: 26.05.2010 godz. 17:00
  • Autorzy: Agata Krysian, Łukasz Mendakiewicz, Tomasz Skrzypczak

Zaczynamy

Zajęcia rozpoczęliśmy przeglądnięcia dokumentacji. Następnie przeczytaliśmy algorytmy do wykonania i przystąpiliśmy do działania. Zaczęliśmy od niewielkiej modyfikacji naszego robota, który posiadał niepotrzebne elementy. Jednak nie usuwaliśmy ich, aby nie tracić czasu, lecz dołożyliśmy to co było niezbędne. Od tej pory Franek wyglądał bardziej agresywnie, nie tracąc swojego uroku.


Uwięziony

Jak zawsze algorytm był pisany etapami i testowany w każdym kroku, co zdecydowanie ułatwia nam pracę. Największy problem był z odczytaniem wartości za pomocą nxt_light. Wartość zwracana przez robota dla danego koloru była różna w zależności czy Franek był odwrócony w stronę okna czy też w stronę sali. Niestety te wartości przy różnych kolorach i różnym ustawieniu względem okna nachodziły się na siebie, co uniemożliwiło nam dobranie odpowiednich współczynników. Pomysł był więc następujący, przenieść planszę na bardziej neutralne miejsce - podłoga. Jednak i to nie pomogło, błędy były mniejsze, ale zakresy wartości dla poszczególnych kolorów nachodziły na siebie. Podjęliśmy mimo wszystko próby wyznaczenia widełek dla danych kolorów, ale nasze testy zakończyły się nie pomyślnie. Algorytm został napisany w większej części. Niestety brak możliwości dobrania odpowiednich liczb przekreślił nasze perspektywy zakończenia zadania powodzeniem. Poniżej dotychczasowy efekt naszej pracy:

% :- consult('plnxt.pl').
 
start :-
	write('-- start 0.1 --'),
	nxt_goal(franek, my_actions).
 
my_actions :-
	nxt_light_LED(activate),
	gogo.
 
gogo :-
	stop,
	nxt_go(250),
	trigger_create(_, check_1, check_more).
 
check_1 :-
	nxt_light(V, force),
	V > 60,
	V < 65.
 
check_more :-
	stop,
	nxt_go_cm(50,2),
	nxt_light(V, force),
	decide(V).
 
decide(V) :-
	V < 60,
	write('czarny'),
	escape.
 
decide(V) :-
	V >= 60,
	write('czerwony').
 
escape :-
	Angle is 150 + random(60), 
	nxt_rotate(100, Angle, force),
	gogo.
 
stop :-
	trigger_killall,
	nxt_stop.

Porządki

Algorytm został napisany w całości, jednak wystąpił pewien problem. Mianowicie w czasie gdy Franek się obracał i napotkał przeszkodę. W momencie napotkania przeszkody robot jechał do przodu, ale tylko jednym kołem! Następnie już wracał używając obu. Efekt: obrót, obrót, jazda do tyłu. Mimo dobrze napisanego kodu błędu nie byliśmy w stanie wykryć (czyżby bug?) Koniec zajęć dobiegł końca, więc na tym zakończyliśmy naszą pracę danego laboratorium. A to wynik naszego sprząta Franka:

% :- consult('plnxt.pl').
 
start :-
	write('-- start 0.0 --'),
	nxt_goal(franek, sprzatacz).
 
sprzatacz :-
	nxt_rotate(50, 360),
	trigger_create(_, przeszkoda_w_zasiegu, sprzataj).
 
przeszkoda_w_zasiegu :-
	nxt_ultrasonic(V, force),
	V < 20.
 
sprzataj :-
	stop,
	nxt_go_cm(400, 80),
	nxt_go_cm(-400, 80).
 
stop :-
	trigger_killall,
	nxt_stop.

Wnioski i spostrzeżenia

Dwukrotnie na komendę nxt_open otrzymaliśmy:

ERROR: I/O error in write on stream $stream(388428( (Transport endpoint is not connected)
   Exception: (13) nxt actions serial:nxt_actions input setmode('S1', switch, buolean) ?

W takim wypadku pomagało jedynie ponowne uruchomienie komputera. Niestety nie znamy przyczyny powstawania tego błędu.

  • duże zaskoczenie podczas wykrycia buga (algorytm sprzątacza) Robot zamiast jechać do przodu obracał się. Przypuszczamy, że było to spowodowane poprzednią rotacją robota.

pl/dydaktyka/piw/2010/sprawozdania/piw20100526-17b.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