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

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