Laboratorium (zaawansowane algorytmy w PLNXT)
29.04.2009, godz. 9.30
grupa w składzie: Joanna Jaworek, Eliasz Kańtoch, Piotr Figiel
Informatyka Stosowana IV rok
Robot: Henio
Budowa robota
Na początku zajęć stworzyliśmy robota, który zawierał 4 sensory: dotyku, odległości, światło oraz dźwięku.
Umożliwiło nam to zaimplementówanie i sprawdzenie algorytmu: śledzenie linii.
Pod koniec zajęć, ponieważ zostało nam jeszcze trochę czasu, stworzyliśmy algorytm „wiezien”.
Algorytm ten jest bardzo podobny do poprzedniego dlatego nic nie musieliśmy zmieniać w budowie robota.
Poniżej zamieszczamy zdjęcie naszego robota, który służył do rozwiązania algorytmu 1 i 2.
Konfiguracja stanowiska
W przeciwieństwie do pierwszych zajęć konfiguracja stanowiska przebiegła bardzo szybko i bez większych komplikacji. Podobnie jak na poprzednich zajęciach często występowały problemy z połączeniem, ale :
rozwiązywały ten problem.
Algorytmy zostały stworzone na bazie wiedzy z poprzednich laboratoriów oraz opisu poleceń w dostęnej dokumentacji.
Algorytm 1- główne zadania
Jako pierwszy algorytm postanowiliśmy stworzyć algorytm-„śledzenie linii”.
Opis ćwiczenia/problemu
Celem algorytmu „śledzenie linii” było znajdowanie czanej linii, a następnie poruszanie się wzdłuż tej linii. Po naciśnięciu sensora dotyku robot powinien kończyć pracę.
Wymagane sensory: światło, dotyk.
W celu sprawdzenia poprawności algorytmu posłużyliśmy się planszą testową.
Kod programu
:- consult('../plnxt.pl').
kolo :-
nxt_go(200),
trigger_create(_,not(check_light),[nxt_stop,nxt_rotate(200,20),kolo]).
trigger_create(_,check_touch,[nxt_stop,nxt_close]),
nxt_close.
check_sound :-
nxt_sound(Value,force),
Value > 50.
check_touch :-
nxt_touch(Value,force),
Value < 50.
check_light :-
nxt_light(Value,force),
Value < 28.
start :-
nxt_open,
nxt_go(400),
trigger_create(_,check_sound,[nxt_stop,nxt_close]),
trigger_create(_,check_light,[nxt_stop,kolo]).
:- start.
Powyższy kod spełnia warunki zadania, a ponadto wyłącza się nie tylko podczas naciśnięcia sensoru dotyku, ale także podczas klaśnięcia.
Zdjęcia+film
Wnioski i napotkane problemy
Napotkane problemy:
* Podczas tworzenia algorytmu największy problem sprawiły nam dwie sytuacje: zmiana natężenia światła na planszy, bardzo duże przedziały dla czarnej linii oraz cienie (projekt był tworzony przy oknie)
Wnioski:
tworzenie i programowanie robotów to ogromna frajda:)
Programowanie w plnxt nie jest intuicyjne, a na pewno nie jest proste:)
Częste problemy z łącznością, które jednak nie powinny występować-wina sprzętu, nie naszego „dream teamu”;)
Algorytm 2 -zadanie dodatkowe
Po zaimplementowaniu i sprawdzeniu algorytmu 1 postanowiliśmy rozwiązać problem algorytmu „więzień”.
Opis ćwiczenia/problemu
Celem zadania „więzień” jest poruszanie się wewnątrz czarnej linii, aż do momentu znalezienia klucza- czerwonego koła. Po znalezieniu klucza robot ucieka z planszy-przekracza czarną linię sygnalizując to odpowienim dźwiękiem.
Wymagane sensory: światło, dźwięk.
W celu przetestowania aplikacji posłużyliśmy się testową planszą, tą samą co w zadaniu poprzednim
.
Kod programu
:-consult('plnxt.pl').
start:-
nxt_open,
ruch.
ruch:-
nxt_go(200),
trigger_create(_,linia,[nxt_stop,wycofaj]),
trigger_create(_,klucz,[nxt_stop,wyjedz]).
wycofaj:-
%nxt_go_cm(-200,20),
nxt_rotate(300,160,force),
ruch.
wyjedz:-
%nxt_go_cm(900, 40),
nxt_play_tone(500,2000),
nxt_go(200).
linia:-
nxt_light(Value,force),
Value<50.
klucz:-
nxt_light(Value,force),
Value>60,
Value<73.
Problemy podczas testowania algorytmu:
różne natężenie światła, co powodowało złe działanie algorytmu, częste błędy.
trudno było znaleźć odpowienie przedziały natęźenia światła dla:linia, czerwone koło, obszar biały. Przedziały zagnieżdżały się. Efekt można zauważyć na załączonym filmie. Robot zawraca także na białym obszarze, gdzie znajduje się cień, który zahacza o przedział wartości dla czarnej linii.
Zdjęcia+film
Wnioski i napotkane problemy
Podobnie jak w poprzednim algorytmie, także i tutaj wystąpiło wiele komplikacji, które opóźniały powstanie poprawnie działającego algorytmu.
Można do nich zaliczyć:
problemy z odczytem kolorów ( sensor światło). Problem został częściowo rozwiązany poprzez wyłączenie „czerwonej lampki”.
projekt był tworzony przy oknie. Na planszy pojawiało się wiele cieni, które powodowały błędne działanie algorytmu. Zawracanie robota na ciemnych obszarach wewnątrz czarnej linii.
niemożliwe było takie ograniczenie wartości kolorów, aby algorytm poprawnie działał we wszystkich miejscach na planszy.
Wnioski:
Algorytmy tworzone dzięki plnxt są krótkie, jednak nie są intuicyjne.
PLNXT można zaliczyć do trudnych języków programowania.
Tworzenie robotów wykorzystujących sensor światła wiąże się z wieloma problemami (odczyt wartości/ zakłamania/błędy, rozwiązanie ich w niektórych momentach jest nierealne.
Podsumowanie, wnioski, napotkane problemy
Największy problem w obu zadaniach sprawiło nam odczytywanie wartości w sensorze light oraz wybranie odpowiednich zakresów w celu rozpoznawania poszczególnych kluczy.
Problemem podobnie jak na poprzednich laboratoriach było ponowne uruchamianie programów. Często pojawiały się błedy, które zmuszały nas do restartowania systemu, bądź wylogowania użytkownika i ponownego zalogowania.
PLNXT pozwala tworzyc nam ciekawe programy w kilku linijkach kodu.
Uwagi dotyczące PLNXT
PLNXT jest nieintuicyjny i nawet po stworzeniu kilku dobrze działających projektów nigdy nie jesteśmy pewni czy kod który obecnie piszemy poprawnie zadziała.
proponujemy stworzyć jeszcze kilka dokumentów w których opisany byłby sposób kompilowania i dokładny opis działania triggerów.
Kody źródłowe