Robot, którego używaliśmy na zajęciach był już przygotowany, był to jeden z przykładów z instrukcji LEGO.
Na zajęciach zdążyliśmy zaimplementować jeden algorytm pt. „Sprzątacz”. Jego zachowanie wyglądało następująco:
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 - irek_21_01_09_1100.zip
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.