Laboratorium - zapoznanie z PLNXT
08.04.2009, godz. 9.30
grupa w składzie: Joanna Koza, Tomasz Michalski, Kamil Mucha
Informatyka Stosowana IV 2008/2009
KA, WEAIiE, AGH
robot HENIO
Budowa robota
efekt końcowy - załączone sensory odległości i światła (koloru)
Konfiguracja stanowiska do pracy z NXT
Połączenie robota oraz pobranie PLNXT
Ustawienie parametrów portu i sparowanie
./bin/plnxt_stty henio - brak konieczności parowania
Konfiguracja PLNXT
plnxt.pl
% Specify the device files.
nxt_serial_device(write,'/dev/rfcomm8').
nxt_serial_device(read,'/dev/rfcomm8').
Sprawdzenie konfiguracji
Konfiguracja działa poprawnie.
Praca w powłoce SWIPL
> xpce
[plnxt].
nxt_open.
%testowe akcje
nxt_close.
Implementacja algorytmu
Algorytm 1
:-
nxt_open,
nxt_light_LED(activate),
Angle is 120 + random(120),
trigger_create(_,check_color,[nxt_rotate(350,Angle,force)]),
nxt_go(300,force).
check_color :-
nxt_light(Value,force),
Value < 100.
Program niestety nie działał na laboratorium, otrzymywaliśmy przy próbie jego uruchomienia następujące błędy::
błąd zwracany przez niskopoziomowe funkcje nxt_actions wskazujący na problemy komunikacyjne z NXT
błąd konfiguracji PLNXT (mimo iż działała poprawnie), wymuszający konieczność ponownego ustawienia portów i rekonfiguracji
Nawet gdy już udało się uruchomić program i robot rozpoczął ruch, nie zatrzymywał się - być może błędnie dobieraliśmy wartość Value w check_kolor - zmienialiśmy ją od 1, przez 10 do 100 - nie przyniosło to żadnych efektów.
Kolejnym zauważonym problemem była niemożność korzystania z diody wbudowanej w czujnik światła. Umieszczenie komendy nxt_light_LED(activate) w poprawnie działającym kodzie skutkowało zawieszeniem się programu w czasie jej wykonywania.
Algorytm 2
:-
nxt_open,
trigger_create(_,check_distance,[nxt_rotate(350,90,force)]),
nxt_go(300,force).
check_distance :-
nxt_ultrasonic(Distance,force),
Distance < 15.
Chociaż ze względu na brak czasu (konieczność ponownego składania robota - patrz „uwagi”) oraz problemy z PLNXT nie udało się nam uruchomić algorytmu 2 na zajęciach, identyczną funkcjonalność zrealizowaliśmy na pierwszych zajęciach wprowadzających:
pierwszy projekt robota
drugi projekt robota
filmik do pobrania
http://student.agh.edu.pl/~kmucha/piw/akt-lab1.AVI
Uwagi i wnioski
pierwszym napotkanym problemem było rozmontowanie robota przez poprzednią grupę (wbrew zaleceniom w instrukcji) - straciliśmy dużo czasu na ponowne złożenie robota;
kolejny problem dotyczył pozornie poprawnej komunikacji PLNXT i robota - błędy podczas próby uruchomienia programów. Probelmy niskopoziomowe wskazują na niedoskonałość PLNXT.
dokumentacja PLNXT nie zawiera kompletu informacji, np. o odczytach sensorów. Sensor światłą zwraca wartości 0-100, jednak brak wiadomości, która wartość to pełne światło, a która to ciemność (konieczność kodowania metodą prób i błędów). Komunikacja dwustronna i możliwość korzystania z instrukcji write na pewno ułatwiła by testowanie programów.
funkcjonalność PLNXT pozwala (przy założeniu bezawaryjności) na proste i skuteczne programowanie robota - pokryta jest pełnia jego funkcjonalności, dodatkowo można korzystać z zalet pisania w języku PROLOG.