====== Języki sztucznej inteligencji - Laboratorium (zaawansowane algorytmy z PLNXT) ====== ====== Maksymilian Piasecki, Jan Pollak, Mariusz Sokołowski ====== ====== Środa 21.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. {{:pl:mindstorms:studenci:przedmioty:jsi:jsi2008:irek_21_01_09_1100.jpg|}} ===== Algorytmy ===== Na zajęciach zdążyliśmy zaimplementować jeden algorytm pt. "Sprzątacz". Jego zachowanie wyglądało następująco: * robot obraca się miejscu szukając przeszkód wokół niego w odległości < 30 * gdy "zauważy" coś zatrzymuje się i zaczyna jechać w tym kierunku przez 2 sek * następnie wykonuje obrót o 180 stopni * znów jedzie w przód przez 2 sek, wracając do pkt. wyjścia * ponownie zaczyna szukać obiektów w swoim pobliżu * gdy przez dwa obroty nie znajdzie nic, kończy pracę Napisany przez nas program: :- consult('plnxt.pl'). start:- nxt_open, go_on_buddy. go_on_buddy :- nxt_rotate(200,720), trigger_create(_,obczajka,wypchnij). wypchnij :- nxt_stop, nxt_go(500), sleep(2), nxt_stop, nxt_rotate(200,180), nxt_go(500), sleep(2), nxt_stop, go_on_buddy. obczajka :- nxt_ultrasonic(Value,force), Value < 30. zamknij :- trigger_killall, nxt_close. Plik z programem - {{:pl:mindstorms:studenci:przedmioty:jsi:jsi2008:irek_21_01_09_1100.zip|}} ===== Problemy, propozycje zmian ===== Pierwszym napotkanym przez na problemem było użycie nxt_go_cm. Poprzedni fragment kodu odpowiadający za usuwanie wykrytego obiektu wyglądał następująco: wypchnij :- nxt_stop, nxt_go_cm,(400,30), nxt_rotate(200,180), nxt_go_cm(400,30), go_on_buddy. Jednak jego działanie było dalekie od zaplanowanego. Robot najpierw przejeżdżał kilkanaście cm następnie obracał się zaledwie o kilkadziesiąt stopni i wracał o kilkadziesiąt cm. Nic nie dały zmiany w cm w nxt_go_cm dlatego zdecydowaliśmy się na inne rozwiązanie. Drugim problemem, którego tym razem nie udało nam się rozwiązać było niewłaściwe zamykanie połączenia, mimo użycia triger_killall przy zamykaniu połączenia program wyrzucał wyjątek i konieczne było resetowanie powłoki prologa.