Sprawozdanie 3
Robot: Franek
Data wykonania: 19.05.2010 godz. 17:00
Autorzy: Agata Krysian, Łukasz Mendakiewicz, Tomasz Skrzypczak
Ciąg dalszy
Tego dnia do współpracy przyznany został nam robot Franek. Był przygotowany do działania, miał zamontowane potrzebne sensory, co pozwoliło przystąpić do ćwiczeń. Prace rozpoczęliśmy od wykonywania algorytmów z poprzedniego tygodnia…
Rozgrzewka
Powodami nie wykonania zadań z poprzednich zajęć były problemy z połączeniem się z robotem. Tym razem robot był dla nas bardziej łaskawy, więc bez problemów zaimplementowaliśmy algorytm 1:
:- consult('plnxt.pl').
start :-
write('-- start 0.3 --'),
nxt_light_LED(activate),
gogo.
gogo :-
nxt_go(250),
trigger_create(_, check_light, escape).
check_light :-
nxt_light(V, force),
V < 45.
escape :-
Angle is 150 + random(60),
nxt_rotate(100, Angle, force),
gogo.
% :- start.
Próg wartości oświetlenia dobraliśmy empirycznie.
Efekt był taki jakiego oczekiwaliśmy, co przetestowaliśmy kilkakrotnie, na załączonej macie.
Algorytm 2 był nieco bardziej rozbudowany, jednak nie oznaczało to dla nas, że był trudniejszy:
:- consult('plnxt.pl').
start :-
write('-- start 0.6 --'),
nxt_light_LED(activate),
gogo.
gogo :-
nxt_go(100),
trigger_create(_, check_light, align),
trigger_create(_, nxt_touch(1, force), wait_free_path).
check_light :-
nxt_light(V, force),
V > 46.
align :-
trigger_killall,
nxt_rotate(100, 3, force),
gogo.
wait_free_path :-
trigger_killall,
nxt_stop,
nxt_play_tone(500,500),
trigger_create(_, nxt_touch(0, force), gogo).
stop :-
trigger_killall,
nxt_stop.
% :- start.
Franek poruszał się po czarnej linii, a gdy napotkał przeszkodę, wydał dźwięk zatrzymując się. Po zwolnieniu blokady robot grzecznie ruszył do przodu tak jak poprzednio.
Klask klask
Spośród algorytmów jako pierwszy wybraliśmy „Panikarza”. Potrzebne sensory Franek już posiadał, więc przystąpiliśmy do napisania algorytmu. Prace robiliśmy etapami, dodając każdorazowo kolejną akcje robota.
:- consult('plnxt.pl').
start :-
write('-- start 0.0 --'),
nxt_goal(franek, my_actions).
my_actions :-
nxt_go(100),
trigger_create(_, clap, panic).
clap :-
nxt_sound(Value,force),
Value > 30,
write('clap!').
panic :-
Angle is 160 + random(40),
nxt_rotate(900, Angle, force),
nxt_go(400).
%dokonczyc...
stop :-
trigger_killall,
nxt_stop.
Franek poruszał się powoli i po każdym klaśnięciu odwracał się, następnie zwiększyliśmy jego prędkość „uciekania”. Wyniki uznaliśmy za zadowalające, jednak czas nie pozwolił nam dokończyć całkowicie danego algorytmu.
Spostrzeżenia i wnioski
Zdarzało się, że środowisko się zawieszało przy użyciu prostych komend. Na szczęście wystarczało wówczas „zabić” proces konsoli Prologa i uruchomić ją ponownie. Wydaje nam się, że wywołanie tylko raz predykatu nxt_open, a nie za każdym uruchomieniem pary nxt_open / nxt_close rozwiązuje problem.