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

  • Pomimo poprawnego łączenia się z robotem poprzez bluetooth teoretycznie nie nawiązaliśmy połączenia (kolejne komunikaty konsoli o zajętości zasobu)jednak praktyka okazała się inna - komunikacja działała poprawnie, czym byliśmy miło zaskoczeni :)
  • 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.
  • Predykat write wywołany w wątku działania robota niestety nie wypisuje od razu na ekran (zapewne buforuje gdzieś wewnętrznie), a szkoda, gdyż na pewno byłoby łatwiej z tym śledzić przebieg programu.
pl/dydaktyka/piw/2010/sprawozdania/piw20100519-17b.txt · ostatnio zmienione: 2019/06/27 15:50 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0