1) Pliki z kodami programów wykonanych na zajęciach:

Algorytm 1

Robot porusza się dowolnie wewnątrz obszaru na planszy testowej ograniczonego czarną linią. Nie może poza niego wyjechać! Gdy najedzie na czarną linię, powinien zawrócić. Niekoniecznie o 180 stopni. Np. Angle is 120 + random(120) zunifikuje Angle z liczbą z przedziału od 120 do 240. Można jej użyć jako kąt obrotu robota.

Rozwiązanie

:- consult('plnxt.pl').
 
start :-
       nxt_open,
       nxt_light_LED(activate),
       trigger_create(_,check_color,odwroc),
       nxt_go(300).
 
check_color :-
       nxt_light(Value, force),
       Value < 55,
       write(Value).
 
 
 
odwroc :-
       nxt_rotate(320, 120 + random(120), force),
       start.
 
 
:- start.

Algorytm 2

Robot przemieszcza się po pomieszczeniu i zmienia kierunek poruszania się, gdy przed sobą napotka przeszkodę.

:- consult('plnxt.pl').
 
start :-
       nxt_open,
       trigger_create(_,check_distance,odwroc),
       nxt_go(300).
 
check_distance :-
       nxt_ultrasonic(Distance,force),
       Distance < 5.
 
 
 
odwroc :-
       nxt_rotate(320, 120 + random(120), force),
       start.
 
 
:- start.

2) Spostrzeżenia, napotkane problemy, wnioski, uwagi na temat PLNXT:

  • sensor światła wyłącza się automatycznie po jakimś czasie, co powodowało błędne działanie robota (trigger nie był nigdy wyzwalany)
  • w PLNXT nie ma możliwości ustawienia częstotliwości próbkowania odczyt z sensora światła
  • po pewnym (dłuższym) czasie robot nie reagował na komendę nxt_stop, jedną z możliwości odzyskania kontroli nad robotem było jego wyłączenie i próba ponownego połączenia
  • czasami komendy wydawane z powłoki SWIPL nie powodują żadnej reakcji u robota, albo robot reaguje dopiero po dłuższym czasie
  • w przykładzie:
:- consult('sciezka_do_plnxt.pl').
 
start :-
	nxt_open,
	trigger_create(_,check_distance,[nxt_stop,nxt_close]),
	nxt_go(300).
 
check_distance :-
	nxt_ultrasonic(Distance,force),
	Distance < 15.

SWIPL wyświetla komunikat, że nie może odnaleźć predykatu nxt_close, nie wiemy dlaczego tak się dzieje, ponieważ samo wywołanie tego predykatu działa poprawnie

pl/dydaktyka/piw/2009/sprawozdania/piw20090408-15d.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