Języki sztucznej inteligencji - Laboratorium (zapoznanie z PLNXT)
Maksymilian Piasecki, Jan Pollak, Mariusz Sokołowski
Środa 14.01.09 godz. 11:00
Konstrukcja
Robot, którego używaliśmy na zajęciach był już przygotowany, był to jeden z przykładów z instrukcji LEGO. Oryginalnie ten typ robota prezentował podnoszenie piłeczki. Wyposażony był w czujnik nacisku i odległosci zamontowane z przodu robota oraz czujnik dźwięku.
Algorytmy
Na zajęciach zrealizowaliśmy cztery algorytmy w języku Prolog przy czym trzy z nich były to gotowe programy przygotowane na stronie z instrukcją. Pierwszy z nich realizował zwykłe przemieszczanie się robota. Kolejny zatrzymywał robota w przypadku napotkania przeszkody. Trzeci algorytm był to przykład nr 2 ze strony, którego zadaniem było zatrzymywanie robota i ponowny start po usłyszeniu klaśnięcia.
Następnie przystąpiliśmy do implementacji własnego programu Panikarz. Jego zachowanie wyglądało następująco:
po usłyszeniu klaśnięcia robot się zatrzymuje
wydaje dźwięk
następnie obraca o około 180 stopni
i ucieka na pełnej prędkości przez 50 cm
i przechodzi do zwykłego, powolnego poruszania się
ponadto w przypadku najechania na przeszkodę robot zatrzymuje się a program kończy działanie
Do powyższego celu zmodyfikowaliśmy przykład nr 2:
:- consult('plnxt.pl').
start:-
nxt_open,
go_on_buddy,
trigger_create(_,pushed,[nxt_stop,nxt_close]).
go_on_buddy :-
nxt_go(200),
sleep(1),
trigger_create(_,clap,uciekaj).
uciekaj :-
nxt_stop,
nxt_play_tone(1000,500),
nxt_rotate(600,180,force),
nxt_go_cm(600,50),
start.
clap :-
nxt_sound(Value,force),
Value > 50.
pushed :-
nxt_touch(Value,force),
Value=1.
Pliki z programami - jasio_sr_1100.zip
Problemy, propozycje zmian
Podczas realizacji problemem okazało się dodanie przez nas dźwięku podczas ucieczki. Niestety nie udało się nam to przy pomocy opcji force, gdyż nie pozwala ona na równoległe wykonywanie czynności a jedynie sekwencyjne. Tak więc robot najpierw wydawał dźwięk a dopiero potem brał się za ucieczkę.
Drugim napotkanym problemem było dziwne zachowanie podczas jazdy z dużą prędkością, kiedy to czasem nie zamierzenie zmieniał kierunek.