Sprawozdanie z laboratorium (zaawansowane algorytmy w PLNXT)

  • Robot: Ewka
  • Data wykonania: 2.06.2010 godz. 9:30
  • Autorzy: Gabriela Pasek, Michał Paszko, Leszek Piątek

Początek

Jak zawsze na początku zapoznaliśmy się z tematyką laboratorium. Z racji tego, że na poprzednich zajęciach udało nam się zaimplementować tylko algorytm Więźnia, zaczęliśmy od algorytmu Sprzątacza.

Dostaliśmy zbudowanego już robota, jednakże postanowiliśmy usunąć szczypce i zamienić je na własny spychacz. Zmieniliśmy także umiejscowienie czujników na Ewce.

Zadanie postanowiliśmy realizować w następujący sposób: robot miał obracać się i sprawdzać, czy w promieniu 30-40 cm znajduje się jakiś przedmiot; jeśli tak - podjeżdżał do niego i wypychał go a następnie cofał się na początkową pozycję. Na początku zaimplementowaliśmy algorytm bez stosowania triggerów. Robot zachowywał się poprawnie, jednak nie kończył pracy po wypchnięciu wszystkich przedmiotów. Aby zrealizować tą własność użyliśmy triggerów. Pomimo, że kod programu jest poprawny, otrzymaliśmy błąd arytmetyczny, co nie pozwoliło na pełne przetestowanie nowej wersji.

Kod programów

Sprzątacz ver. 1

:- consult('plnxt.pl').
 
start :-
	nxt_goal(ewka, alg1).
 
alg1 :- 
	nxt_ultrasonic(Value),
	Value < 21,
	nxt_rotate(200, 10),
	alg1.
 
alg1 :-
	nxt_ultrasonic(Value),
	Value > 21,
	nxt_go_cm(200, 30),
	nxt_go_cm(-200, 30),
 	alg1.
 
stop :-
	trigger_killall,
	nxt_stop,
	nxt_close.

Sprzątacz ver. 2

:- consult('plnxt.pl').
 
start :-
	nxt_goal(ewka, alg1).
 
alg1 :- 
	nxt_rotate(200, 360),
 	trigger_create(_,check_distance,[nxt_go_cm(200, 30),nxt_go_cm(-200, 30)]),
	alg1.
 
check_distance :-
	nxt_ultrasonic(Value,force),write(Value),nl,
	Value < 21.
 
stop :-
	trigger_killall,
	nxt_stop,
	nxt_close.

Spakowane pliki źródłowe: lab5_ewka_ppp.rar

Spostrzeżenia, napotkane problemy, wnioski

Napotkane problemy

  • błąd arytmetyczny przy stosowaniu triggerów - w jego wyniku program się zawieszał i należało zrestartować powłokę pl.
  • prawidłowe umieszczenie czujnika odległości - robot na początku miał zamontowane szczypce, przez co nie mogliśmy ustawić czujnika na odpowiedniej wysokości. Usunięcie tego elementu oraz zbudowanie własnego spychacza zajęło nam dużo czasu. Następnie próbowaliśmy umieścić czujnik tak, aby wykrywał wszystkie przedmioty przed sobą (nie mógł być ustawiony równolegle) i jednocześnie nie traktował podłoża jako przeszkody (konieczna była kalibracja).

Spostrzeżenia

  • nieprawidłowości w działaniu jednego kółka - czasami podczas ruchu do przodu blokowało się, przez co robot zaczynał się obracać. Podejrzewamy, że problem może stanowić silnik. Niestety ten wniosek nasunął się już po zakończeniu laboratorium. Warto więc następnym razem spróbować wymienić silnik i przetestować działanie kółka.

Wnioski

  • problemy konstrukcyjne - dawno nie trenowane umiejętności konstrukcyjne w połączeniu z szeregiem nowych części w LEGO Mind Storms dało się we znaki tym, że nasz spychacz, z prawidłowo umieszczonym czujnikiem odległości (wraz z regulacją kąta) budowaliśmy jakieś 40 minut, trzeba ćwiczyć w domu!
  • działanie wątków - teraz już wiemy, że trigger tworzy nowy wątek w którym (jeżeli jest wykorzystany predykat force) cały czas jest sprawdzany trigger

Uwagi dotyczące funkcjonalności PLNXT

  • błąd arytmetyczny - dzielenie przez 0 - z niewiadomych powodów kod programu nr 2, po pierwszych kilku odczytach z sensora odległości zawieszał całą powłokę pl, zwracając błąd dzielenia przez 0. Do końca laboratorium nie udało się nam dojść dlaczego tak się dzieje.
pl/dydaktyka/piw/2010/sprawozdania/piw20100602-09e.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