Po przeczytaniu opisu konfiguracji robota przy połączeniu przez bluetooth, wzięliśmy się do pracy. I tutaj pojawiły się największe problemy. Początkowo klucz Bluetooth był niewidoczny, użyliśmy innego i po restarcie komputera pojawił się w systemie i dało się go wykryć innym urządzeniem bluetooth (w tym przypadku telefonem komórkowym - nie mieliśmy zaufania do bricka NXT). Połączyliśmy robota z komputerem, oznaczyliśmy połączenie jako zaufane, podaliśmy PIN, sparowaliśmy urządzenia poprzez plnxt_stty. Kolejne problemy pojawiły się po dodaniu linii w pliku plnxt.pl. Po próbie wykonania go spod powłoki SWIPL, wyskakiwał błąd związany z brakiem pliku rfcomm11. Prowadzący kilkukrotnie próbował pomóc nam rozwiązać ten problem, ale nie dopatrzał się błędu i wymienił nam robota na Irka. Irek 9 okazał się bardziej skory do współpracy i już po 5 minutach mieliśmy sparowanego, przygotowanego robota wraz z otwartą powłoką SWIPL.
Początkowo testowaliśmy robota podłączając kolejną różne sensory i wywołując polecenia z instrukcji:
nxt_go(300). % Jazda do przodu z prędkością 300 stopni/sekundę. nxt_stop. nxt_go_cm(400,80). % Jazda do przodu z prędkościa 400 stopni/sekundę. Zatrzymanie po 80 cm. nxt_touch(Value). % Odczyt sensora dotyku. nxt_sound(Value). % Odczyt sensora dźwięku. nxt_light(Value). % Odczyt sensora światła. nxt_light_LED(activate). % Włączenie diody sensora światła. nxt_light(Value). nxt_light_LED(passivate). nxt_ultrasonic(Value). nxt_rotate(350,360). % Obrót w prawo o 360 stopni z prędkością 350 stopni/sekundę. nxt_play_tone(500,2000). % Wydanie dźwięku o częstotliwości 500 Hz i czasie trwania 2000 ms. nxt_voltage_millivolt(Voltage). % Odczyt napięcia baterii.
Nie wymaga to chyba komentarza, wszystko działało tak jak zakładaliśmy.
Chcieliśmy napisać poniższy program (swoją drogą to identyczny do tego, który robiliśmy na wcześniejszych zajęciach, tylko w innym środowisku):
Idź tak długo na przód, aż napotkasz przeszkodę. Po napotkaniu przeszkody zatrzymaj się i cofnij o pewną niewielką odległość(aby móc sprawnie zawrócić nie zahaczając o przeszkodę). Obróć się o kąt prosty w lewo. Powrót do początku programu.
consult('/plnxt/'). start :- nxt_open, trigger_create(_,check_distance,[nxt_stop,skret]), nxt_go(300). check_distance :- nxt_ultrasonic(Distance,force), Distance < 15. skret :- nxt_go_cm(400,10), nxt_rotate(350,-90), nxt_close, start.
I tu zdarzyła się dziwna sprawa, za pierwszym razem program zadziałał i robot „odbijał” się od przeszkód. Przy drugim odpaleniu robot się obraził i nie chciał się ruszyć już do końca zajęć. Pojawiły się problemy z najprostszymi poleceniami i nawet połączenie bluetooth zaczęło szwankować. Nie znaleźliśmy przyczyny tych problemów, ale wiemy, że nie jesteśmy jedyną grupą, której się to przytrafiło.
Możliwe, że przy tak dużej ilości połączeń bluetooth zachodziły pewne interferencje, które przeszkadzały przy komunikacji z robotem.