====== 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)\\
{{:pl:dydaktyka:piw2009:sprawozdania:akt-henio4.jpg|}}
===== Konfiguracja stanowiska do pracy z NXT =====
==== Połączenie robota oraz pobranie PLNXT ====
Bez problemów.
==== 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::\\
{{:pl:dydaktyka:piw2009:sprawozdania:err1.jpg|}}\\
błąd zwracany przez niskopoziomowe funkcje nxt_actions wskazujący na problemy komunikacyjne z NXT\\
{{:pl:dydaktyka:piw2009:sprawozdania:err2.jpg|}}\\
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.
{{:pl:dydaktyka:piw2009:sprawozdania:akt-henio2.jpg|}}
==== 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\\
{{:pl:dydaktyka:piw2009:sprawozdania:akt-lab1-1.jpg|}}
\\
drugi projekt robota\\
{{:pl:dydaktyka:piw2009:sprawozdania:akt-lab1-2.jpg|}}
\\
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.