====== Sprawozdanie 6====== **Robot:** Ewka\\ **Data wykonania:** 9.06.2010 godz. 9:30\\ **Autorzy:** Martyka Łukasz, Stereńczak Agata, Szczurek Joanna\\ ===== Budowa robota ===== Otrzymaliśmy w pełni zbudowanego robota Ewkę. ===== Algorytm Więzień ===== Pracę na laboratorium rozpoczęliśmy od poprawienia algorytmu Więzień, który implementowaliśmy na jednym z poprzednich laboratoriów. Ponieważ poprzednio stwierdziliśmy, iż ucieczka po zobaczeniu koloru czerwonego jest bardzo trudna do zrealizowania, postanowiliśmy zmodyfikować klucz ucieczki. Robot miał uciec z więzienia jeśli usłyszał klaśnięcie. ===== Sterowanie wieloma robotami ===== Drugim robotem z którym pracowaliśmy na zajęciach był Irek. Zmodyfikowaliśmy odpowiednio plik plnxt. Nawiązaliśmy połączenie Bluetooth z oboma robotami. Niestety próba sparowania robota z komputerem nie przebiegła pomyślnie. Nawiązaliśmy połączenie po raz kolejny i spróbowaliśmy od razu z konsoli wykonać polecenie nxt_goal(irek, nxt_open) ale niestety ta próba też się nie powiodła. Tak samo było dla Ewki. Aby wykonać jakiekolwiek zadanie na laboratorium, postanowiliśmy przejść do kolejnego zadania. ===== Komunikacja między robotami ===== Pracę z tym zagadnieneim rozpoczęliśmy od przetestowania połączenia TCP/IP. Udało nam się nawiązać komunikację klient - serwer, zatem zajęliśmy się zagadnieniem Więźnia. \\ Kod programu: :- consult('plnxt.pl'). :- use_module(library(socket)). create_client :- tcp_socket(Socket), tcp_connect(Socket,'10.6.66.46':33809), tcp_open_socket(Socket,Read,Write), write(Write,'robot(ewka).'),nl(Write), close(Read), close(Write). normal_go :- trigger_create(_,check_light,change_angle), trigger_create(_,check_sound,run), nxt_go(100). start :-nxt_light_LED(activate, force), write('start'), normal_go. stop :- trigger_killall, nxt_stop. change_angle :- Angle is 40 + random(60), nxt_rotate(360, Angle, force), normal_go, write('zmieniam kat'). check_light :- nxt_light(Light,force), Light < 50, write('znalazlem czarny'). check_sound :- nxt_sound(Sound,force), Sound>50, write('znalazlem czerwony'). run :- create_client, nxt_go_cm(800,100), nxt_play_tone(500, 2000), stop. Drugi robot z którym się komunikowaliśmy nasłuchiwał jako serwer wykorzystując poniższy kod: create_server :- tcp_socket(Socket), tcp_bind(Socket,33808), tcp_listen(Socket,5), tcp_open_socket(Socket,_,_), tcp_accept(Socket, Slave, _), % Akceptacja połaczenia ze strony klienta. tcp_open_socket(Slave, In, Out), read(In,Msg), % Odczyt wiadomości. write(Msg), close(In), close(Out). Działanie robotów obrazuje filmik: [[http://www.youtube.com/watch?v=lcL8RHbiOQg|Ewka i Irek w więzieniu]] \\ Jak widać na filmie, oba roboty jeżdżą wewnątrz więzienia, po usłyszeniu klaśnięciu , Ewka (klient) powoli ucieka, a Irek (serwer) ucieka bardzo szybko. ===== Wnioski ===== Nie rozumiemy dlaczego nie udało nam się nawiązać komunikacji między robotami za pomocą połączenia Bluetooth. Komunikacja poprzez TCP/IP jest bardzo przyjazna w realizacji. Jedynym problemem było to, że swipl trzymał cały czas otwarty przez serwer port TCP co powodowało konieczność zmiany portu za każdym nowym uruchomieniem serwera (albo wyjście z konsoli swipl). Problem ten związany z TCP można było rozwiązać poprzez ustawienie flagi REUSE_ADDR(on) jednak nie zdążyliśmy znaleźć w dokumentacji Socketa jak to wykonać przy pomocy prologa. ===== Pliki ===== {{:pl:dydaktyka:piw:2010:sprawozdania:ewka_klient.pl|Klient-Ewka}}