Laboratorium (zapoznanie z PLNXT)
Na początku zajęć usiedliśmy przy stanowisku, i ku naszemu zaskoczeniu, z naszego stanowiska zniknął Gienek, i zastaliśmy tam Franka, z braku możliwości odbicia naszego wcześniejszego robota, zostaliśmy przy Franku i efektem naszej pracy na laboratorium były dwa oto jakże nieskomplikowane skrypty.
Algorytm 1
Robot porusza się dowolnie wewnątrz obszaru na planszy testowej ograniczonego czarną linią. Nie może poza niego wyjechać! Gdy najedzie na czarną linię, powinien zawrócić. Niekoniecznie o 180 stopni. Np. Angle is 120 + random(120) zunifikuje Angle z liczbą z przedziału od 120 do 240. Można jej użyć jako kąt obrotu robota.
:- consult('/home/student/plnxt/plnxt.pl').
start :-
nxt_open,
trigger_killall,
trigger_create(_,check_line,[nxt_stop,nxt_rotate(350,120),start]),
nxt_go(300).
check_line :-
nxt_light(Light,force),
Light < 50.
:- start.
alg1.pl
Algorytm 2
Robot przemieszcza się po pomieszczeniu i zmienia kierunek poruszania się, gdy przed sobą napotka przeszkodę.
:- consult('/home/student/plnxt/plnxt.pl').
start :-
nxt_open,
trigger_create(_,check_distance,[nxt_stop,nxt_rotate(350,120),start]),
nxt_go(300).
check_distance :-
nxt_ultrasonic(Distance,force),
Distance < 15.
:- start.
alg2.pl
Spostrzeżenia, napotkane problemy, wnioski.
Pierwsze co rzuciło Nam się w oczy to fakt, iż często połączenie Bluetooth sprawia przeróżne problemy. Nie wykazuje chęci współpracy i połączenia się z Brix'em, a czasami wręcz odwrotnie, aż nadto łączy się choć wyraźnie nie chcieliśmy tego. Pomocne tutaj były restarty zarówno samego Brix'a jak i SwiPL.
W pierwszym algorytmie wydało Nam się dużo fajniejsze, gdy wartość obrotu nie jest losowo wybierana.
Zauważyliśmy za to iż z niewiadomych względów w poleceniu nxt_rotate nie można podać wartości większej niż 800 ( w naszym wypadku tak było, wartość 900 już powodowała błąd ). Ponadto występowały spore rozbieżności w wartościach zwracanych przez sensor, gdzie przy statycznych testach wartość oscylowała w granicach ~35, natomiast w „ruchu” aby robot faktycznie zachowywał się w miarę zgodnie z oczekiwaniami, wymagana była wartość ~50. Problemem tutaj było zapewne nierówne oświetlenie sali.
W drugim skrypcie, bliźniaczo podobnym do pierwszego, musieliśmy użyć sensora ultradźwiękowego(?), gdyż sensor dotyku odmawiał współpracy. Wartości, które były już zadowalające jeśli chodzi o odległość to 15-30.
Zauważyliśmy także pewien problem z wątkami, które niejednokrotnie zapętlały się gdzieś w Brix'ie i mimo wydania polecenia nxt_stop w dużej ilości, i ogólnego zakończenia skryptu, sprawiały że robot „sam” jeździł.
Modyfikacja sprawozdania po terminie. — Igor Wojnicki 2009/04/28 17:14