1. Wstęp

Celem laboratorium było zgłębienie podstaw programowania robotów LEGO Mindstorms przy użyciu języka Prolog, używając intefejsu PLNXT.

Wstępna część laboratorium polegała na konfiguracji środowiska wykonawczego. Do tej części można zaliczyć podłączenie interfejsu Bluetooth, odpowiedne skonfigurowanie powłoki XPCE poprzez załadowanie odpowiedniej biblioteki poprzez polecenie [plnxt].

Część pierwsza polegała na przetestowaniu różnych sensorów robota. W naszym przypadku były to:

  • sensor światłoczuły
  • sensor echolokacyjny

Dodatkowo, testowane były także inne predykaty sterujące robotem podane w instrukcji wprowadzającej do laboratorium.

Interfejs jest bardzo wygodny i nie przysparzał nam problemów podczas użytkownania.

Część właściwa to rozwiązanie odpowiednich zadań. Szczegółowo omówione zostało to w kolejnych punktach sprawozdania.

2. Zadania

2.1 Zadanie pierwsze

2.1.1 Wstęp

Cel zadania polegał na napisaniu programu programującego robota do poruszania się w obrębie zamkniętego okręgu o czarnym kolorze. Zadanie to można było podzielić na dwie, przebiegające równolegle fazy. Pierwsza to implementacja w Prologu, wykorzystująca sensor światłoczuły, a druga to odpowiednie przebudowanie robota tak, by osiągnięte zostały dwa założenia:

  • położenie diody światłoczułej tuż nad powierzchnią ziemi,
  • spora odległość diody od kadłubu robota – tak by umożliwić w miarę wczesne wykrywanie czarnej granicy.

Zaszła tutaj konieczność budowy dodatkowego wysięgnika z sensorem światła.

2.1.2 Kod źródłowy

:- consult('plnxt.pl').
 
start :-
	nxt_open,
	nxt_light_LED(activate),
	trigger_create(_,check_light,[nxt_stop,Angle is 120 + random(90),nxt_rotate(180,Angle),start]),
	nxt_go(300).
 
check_light :-
	nxt_light(Light,force),
	Light < 52.

2.1.3 Opis algorytmu, spostrzeżenia, opis trudności

Sam algorytm to w zasadzie zmodyfikowany przykład ze strony laboratorium Mindstorms. Mamy tu jednak dwie wazne rzeczy, na które trzeba zwrócić uwagę. Pierwszym istotnym elementem jest wartość progu natężenia światła – dobrana po wielu próbach. Dobór zaliczał się do dość problematycznych, ponieważ należało wpierw zapewnić stałe i niskie położenie czujnika. Drugim jest rekurencyjne wywoływanie predykatu start, gwarantujące nieprzerwane i poprawne działanie robota. Jak widać, po wykryciu czarnej linii, robot obraca się o kąt od 120 do 210 stopnii. Podświetlenie czujnika uniezależnia go od warunków świetlnych.

2.2 Zadanie drugie

2.2.1 Wstęp

Celem było zaprogramowanie robota tak, by poruszając się w danym kierunku po linii prostej, po wykryciu przed soba przeszkody zawrócił i poruszał się w inną, wolną od przeszkód stronę.

W naszym rozwiązaniu wykorzystaliśmy sensor echolokacyjny. Rozwiązanie było trochę czasochłonne, gdyż musieliśmy kilkakrotnie poprawiać czułość detektora, lecz ostatecznie nasze wysiłki zaowocowały bardzo dobrym programem w praktyce gwarantującym stuprocentową skuteczność w omijaniu przeszkód:

2.2.2 Kod źródłowy

:- consult('plnxt.pl').
 
start :-
	nxt_open,
	trigger_create(_,check_distance,[nxt_stop,nxt_rotate(180,90),start]),
	nxt_go(300).
 
check_distance :-
	nxt_ultrasonic(Distance,force),
	Distance < 15.

2.2.3 Opis algorytmu, spostrzeżenia, opis trudności

Głównym i najbardziej istotnym elementem jest rekurencyjnie wywoływanie predykatu start – gwarantuje to nieustanne, bezbłędne działanie robota. Istotna jest też wartość progu detekcji, czyli 15, obecna przy predykacie check_distance, została metodą kilkunastu prób i błędów celu osiągnięcia optimum pomiędzy koniecznością wczesnego wykrywania przeszkody, a uniemożliwieniem dokonywania tego zbyt wcześnie i w rezultacie utraty sterowności i udziwnionego ruchu objawiającego się skrętami, gdy przeszkoda zdaje się znajdować dość daleko. Irytującą niedogodnośćią jest mała przestrzeń ruchu robota, która nieraz powodowała wyjeżdżanie poza biurko bądź podjeżdżanie blisko klawiatury bądź podestu na monitor.

3. Wnioski

Laboratorium pozwoliło nam na poznanie bardziej zaawansowanych elementów programowania robotów w języku Prolog. Dzięki temu dane nam było zmienić sposób postrzegania języka Prolog – odkryliśmy, że prócz abstrakcyjnego piękna i elegancji, język ten mimo to, a może właśnie – dzięki temu, jest też bardzo przyjemnym narzędziem do rozwiązywania czysto praktycznych problemów. Jedyną realną niedogodnością w ćwiczeniu było okazjonalne zapętlenie się wątku programu, które wymagało restartu maszyny Prologa bądź samego robota.

Ponadto, poćwiczyliśmy wyobraźnię przestrzenną, a nasze organizmy wchłonęły dośc sporą dawkę endorfin w chwilach radości przy okazji zabawy klockami i poprawnego zaprogramowania robota. Zrobiliśmy też zdjęcia uwieczniające prace nad robotem, ale niestety, z uwagi na awarię sprzętu, nie możemy ich tu wrzucić, pokazać możemy je za to na laboratorium.

Źródła programów

Szkoda ze pliki na zewnetrznym serwerze, a nie upload… :-(Igor Wojnicki 2009/04/28 16:46

pl/dydaktyka/piw/2009/sprawozdania/piw20090408-12a.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