Sprawozdanie z laboratorium nr 5
Data wykonania: 21.01.2009, godz. 9.30
Autorzy: Damian Dudziński, Maciej Fabia, Szymon Frenkel
Realizacja
Zastaliśmy już złożonego robota,
korzystał on z dwóch sensorów:
czujnika sonarowego,
czujnika dotyku;
zatem mogliśmy od razu przystąpić do realizacji algorytmu.
Zaimplementowaliśmy algorytm „sprzątacza”, w którym robot miał za zadanie usunąć wszystkie przeszkody znajdujące się w odległości nie większej niż określona. Aby to zrealizować obracał się on wokół własnej osi, a po wykryciu przeszkody przez czujnik sonarowy wstrzymywał ruch obrotowy, wykonywał ruch w kierunku przeszkody wypychając ją poza obszar do wysprzątania, a potem wracał na wcześniejszą pozycję i kontynuował ruch obrotowy, aż do sprawdzenia całego obszaru wokół siebie. Czujnik dotyku służył za awaryjny wyłącznik robota, który uaktywniał się także, gdy przesuwana przeszkoda była zbyt ciężka dla robota.
:- consult('plnxt.pl').
start:-
nxt_open,
krecenie,
trigger_create(_,pushed,[nxt_stop,nxt_close]).
krecenie :-
nxt_rotate(150,360),
sleep(1), % Chwila przerwy
trigger_create(_,przeszkoda,wypychanie).
wypychanie :-
nxt_stop,
nxt_go_cm(300,40),
sleep(10),
nxt_go_cm(-300,40),
sleep(10).
trigger_create(_,_,krecenie).
% Sprawdzenie, czy znaleziono przeszkodę
przeszkoda :-
nxt_ultrasonic(Value,force),
Value < 20.
% Sprawdzenie, czy sensor dotyku jest wciśnięty.
pushed :-
nxt_touch(Value,force),
Value=1.
:- start.
sprzatacz.pl
Problemy
Niestety, szczególnie na początku zajęć, kilkukrotnie nieoczekiwanie robot przestawał wykonywać wysyłane mu polecenia i konieczne było jego wyłączenie i nawiązywanie komunikacji od nowa. W czasie testowania algorytmu okazywało się również, że jednak polecenia biblioteki NXT nie zawsze działają według naszych oczekiwań:
funkcja odczytująca stan czujnika dotyku „nxt_touch(Value,force)” przez pewien czas zwracała wartości „181” i „1023” zamiast binarnych,
przy użyciu funkcji obracającej robota „nxt_rotate(150,360)” realny kąt obrotu nie zgadzał się z żądanym,
funkcja nxt_go_cm nie działała, gdy otrzymywała ujemny argument „Speed” - robot nie poruszał się do tyłu. Natomiast funkcja nxt_go reagowała prawidłowo.
Wnioski
Ułatwieniem w konstruowaniu algorytmu byłaby bardziej rozbudowana dokumentacja biblioteki NXT.