Laboratorium (zaawansowane algorytmy w PLNXT)

Informacje

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 :

  • ponowne uruchamianie powłoki
  • restart komputera
  • ponowne zalogowanie

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)

  • Problem sprawiło nam także śledzenie linii, określenie wartości kątu dla którego następuje obrót robota. Problem został ostatecznie rozwiązany.

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

pl/dydaktyka/piw/2009/sprawozdania/piw20090429-09d.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