Spis treści

Kod programów

Po przetestowaniu działania przykładów zamieszczonych na stronie laboratorium, udało nam się zaimplementować na zajęciach trzy algorytmy:

Piłka

Z użyciem planszy testowej. Robot umieszczony na planszy testowej w obszarze start łapie piłkę znajdującą się w czerwonym obszarze przed nim i przemieszcza ją poza obszar zamknięty wewnątrz czarnej linii.

Kod pilka.pl:

:- consult('plnxt.pl').
 
start :-
	nxt_open,
	thread_create(stroll,_,[detached(true)]).
 
stroll :-
	nxt_go(200),
%	trigger_create(_,find_ball,go_with_ball).
	trigger_create(_,border,stop).
 
go_with_ball :-
	Value is 90 + random(180),
	nxt_stop,
        nxt_rotate(300, Value),
	nxt_go(300),
	trigger_create(_,border,stop).
 
border :- 
	nxt_light(Value,force),
	Value < 15.
 
find_ball :-
	nxt_light(Value,force),
	Value < 23.
 
stop :-
	trigger_killall,
	nxt_stop,
	nxt_close.

Omijanie przeszkód

Robot przemieszcza się do przodu. Po napotkaniu przeszkody zatrzymuje się i próbuje ją ominąć. W fazie przemieszczania do przodu (tylko w tej fazie) robot zatrzymuje się i zamyka połączenie po klaśnięciu.

Kod omijanie.pl:

:- consult('plnxt.pl').
 
start :-
	nxt_open,
	thread_create(stroll,_,[detached(true)]).
 
stroll :-
	nxt_go(200),
        sleep(1),
	trigger_create(_,obstacle,go_round).
	trigger_create(_,clap,stop).
 
go_round :- 
	Length is 20,
	Length2 is Length * 2,
	nxt_stop,
	nxt_rotate(300, -90),
	nxt_go_cm(250,Length),
	nxt_rotate(300, 90),
	nxt_go_cm(250,Length2),
	nxt_rotate(300, 90),
	nxt_go_cm(250,Length),
	nxt_rotate(300, -90),
	stroll.	
 
obstacle :-
	nxt_ultrasonic(Distance,force),
	Distance < 20.
 
clap :-
	nxt_sound(Value,force),
	Value > 40.
 
stop :-
	trigger_killall,
	nxt_stop,
	nxt_close.

Panikarz

Robot przemieszcza się powoli. Po klaśnięciu zmienia kierunek i szybko ucieka przez jakiś czas (wtedy nie jest podatny na klaśnięcie), po czym uspokaja się i znowu jedzie powoli. Zatrzymuje się i zamyka połączenie po wciśnięciu sensora dotyku.

Kod panikarz.pl:

:- consult(plnxt.pl).
 
start :-
	nxt_open,
	thread_create(stroll,_,[detached(true)]),
	trigger_create(_,pat,stop).
 
stroll :-
	nxt_go(200),
        sleep(1),
	trigger_create(_,clap,run_away).
 
run_away :-
	Value is 90 + random(180),
	nxt_stop,
        nxt_rotate(400, Value),
	nxt_go_cm(500,20),
	stroll.
 
clap :-
	nxt_sound(Value,force),
	Value > 40.
 
pat :-
	nxt_touch(Value, force),
	Value=:=1.
 
stop :-
	trigger_killall,
	nxt_stop,
	nxt_close.

Pliki

Zdjęcia

Henio w stanie początkowym, wykonujący algorytm panikarz:

Henio po „tuningu” - dodany przedni zderzak i „zęby” - przygotowujący się do ominięcia przeszkody:

Henio z dodanymi szczypcami, przechwytujący piłkę podczas wykonywania algorytmu piłka.

Spakowane pliki '*.pl'

piw20090422-14c-pliki.rar

Filmiki

Filmiki w formacie .mp4 ukazujące Henia wykonującego kolejne algorytmy:

pilka

omijanie przeszkod

panikarz

Napotkane problemy

Wnioski i spostrzeżenia

Pomimo pewnych problemów, programowanie w środowisku plnxt jest łatwe i dość przyjemne. Pozwala na komunikację użytkownika z robotem jak i również projektowanie nieco bardziej skomplikowanych zachowań robota przy użyciu prostych poleceń.

Algorytm omijanie przeszkód mógłby być bardzo efektywny, gdyby robot posiadał dwa sensory odległości: jeden z przodu i jeden z boku. Wtedy przy zastosowaniu pewnej synchronizacji danych wejściowych możnaby zmusić robota, aby omijał przeszkody, poruszając się wzdłuż ich krawędzi. Efekt ten można osiągnąć również przy użyciu jednego sensora odległości, zmuszałoby to jednak robota do ciągłego obracania się i sprawdzania, czy przeszkoda nadal znajduje się przed nim.