Laboratorium - PLNXT zapoznanie

Data: 8 kwietnia 2009
Godzina: 15.30
Grupa: Artur Kosztyła, Marcin Krzych, Radosław Scheibinger
Robot: Henio

Wstęp

Celem laboratorium było zapoznanie się z interfejsem programistycznym PLNXT oraz stworzenie prostych algorytmów sterującym zachowaniem robota Lego NXT.
W czasie zajęć korzystaliśmy z zestawu Lego NXT łączącego się z komputerem za pomocą interfejsu BT oraz interfejsu programistycznego PLNXT.

Zadania

Przygotowanie do zajęć

Przy stanowisku zastaliśmy robota skonstruowanego zgodnie z instrukcją znajdującą się w QuickStart, wraz z dołączonymi sensorami.

Kod

Na zajęciach zrealizowaliśmy algorytm sterujący robotem poruszającym się po pomieszczeniu i unikającym zderzeń z przeszkodami wykrywając je za pomocą sensora ultradźwiękowego i obracając się by zmienić kierunek jazdy.

%rozpoczęcie wykonywania programu
start :-
	nxt_open,
	trigger_create(_,check_touch,[nxt_stop,nxt_close]),
	trigger_create(_,check_distance,[back_off]),
	go_anywhere.
 
%sprawdzanie odległości od przeszkody
check_distance :-
	nxt_ultrasonic(Distance,force),
	Distance < 20.
 
%cofanie się od przeszkody
back_off :-
	nxt_stop,
	nxt_go_cm(-600,10),
	nxt_rotate(350,105),
	trigger_create(_,check_distance,[back_off]),
	go_anywhere.
 
%przemieszczenie do przodu
go_anywhere :- nxt_go(600).
 
%sprawdzanie żądania zakończenia wykonywania programu poprzez wciśnięcie sensora dotyku
check_touch :-
	nxt_touch(Touch),
	Touch > 0.

Opis

Algorytm wykonywał się poprawnie. Robot rozpoczynał poruszanie się przed siebie po wpisaniu predykatu start. Jeśli wykrył przeszkodę bliżej niż 20 cm zatrzymywał się i wycofywał o 10 cm, co umożliwiało obrót bez zaczepiania kablami o przeszkodę, następnie obracał się o 105 stopni i kontynuował ruch do przodu. Po wciśnięciu sensora dotyku, który zamocowaliśmy z jego boku, skierowany do góry, program kończył działanie, co skutkowało zatrzymaniem robota.

Film pokazujący działanie robota

Napotkane problemy

Etap zapoznawania z interfejsem programistycznym

W czasie zapoznawania z poleceniami PLNXT zauważyliśmy, że nie działa polecenie nxt_sound(Value)., chociaż sam robot potrafił wydawać dźwięki, co sprawdziliśmy na nim manualnie.

Algorytm 2

W czasie testowania kolejnych rozwiązań napotkaliśmy problemy z kończeniem wątków programu. Zawsze przy kończeniu programu pojawiał się błąd wyglądający następująco:

Niestety nie udało nam się rozwiązać tego problemu, lecz mimo to program kończył się poprawnie.
Sądzimy, że problem jest powiązany z predykatami nxt_stop lub nxt_close (podejrzewamy, że wątki nie mają czasu na zakończenie się przed wymuszeniem wykonania zakończenia programu).

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