====== 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. {{:pl:mindstorms:studenci:przedmioty:jsi:jsi2008:jasio_sr_1100.jpg|}} ===== 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 - {{:pl:mindstorms:studenci:przedmioty:jsi:jsi2008: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.