Jakubowski
Gniadek-Zając
Michałek
1) W momencie rozpoczęcia ćwiczenia okazało się, że robot Agatka nie jest poprawnie złożony. Dlatego pierwsze kilka minut musieliśmy poświęcić na jego przebudowę według Quickstartu.
2) Dalszym krokiem była konfiguracja stanowiska pracy z NXT. Pewne czynności z instrukcji takie jak „Ustawienie parametrów portu i sparowanie” oraz „Konfiguracja PlNXT” zostały wykonane przez wcześniejszą grupę, dlatego nasza grupa dokonała głównie weryfikacji poprawności konfiguracji stanowiska.
3) Kolejnym krokiem było zapozanie się z architekturą API PLNXT na podstawie instrukcji. Następnie dokonalismy próby komunikacji z robotem przez Bluetooth oraz przetestowania podstawowych poleceń API. Podczas testowania wykryliśmy zauważalne gołym okiem niedokładności poleceń sterujących obrotem kół. Wyniki działania kolejnych wywołań takich komend jak nxt_rotate czy nxt_go_cm różniły się od siebie (i od zadanych wartości) o kilka (czasem kilkanaście) stopni.
4) Następnie przystąpiliśmy do do implementacji programów wymaganych w instrukcji do laboratorium. Niestety nie mieliśmy dostępu do planszy potrzebnej do testowania algorytmu 1, dlatego od razu przystąpiliśmy do implementacji algorytmu 2. W wyniku naszej pracy powstał poniższy program w prologu:
:- consult('/home/student/plnxt/plnxt.pl').
start :-
nxt_open,
trigger_create(_,check_distance,[turn]),
nxt_go(300).
check_distance :-
nxt_ultrasonic(Distance,force),
Distance < 15.
turn :-
nxt_stop,
Angle is random(2),
nxt_play_tone(500,1000),
nxt_rotate(360,90-Angle*180),
move.
move :-
trigger_create(_,check_distance,[turn]),
nxt_go(300).
:- start.
Po jego uruchomieniu robot jedzie do przodu, aż do napotkania przeszkody w odległości ok 15 cm. Wykonuje wtedy obrót o 90 stopni w losowym kierunku i kontunuuje jazdę aż to napotkania kolejnej przeszkody, po czym dokonuje kolejnego obrotu i kontunuje jazdę itd.
5) Podczas tworzenia programu napotkaliśmy na uciążliwy problem związany z komunikacją przez Bluetooth - robot często w losowym momencie przestawał reagować na komendy. Dopiero restart robota oraz powłoki Prologu przywracał system do życia. Czasami też następowało zawieszenie powłoki prologa i konieczny był jej restart.