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).