====== Laboratorium ====== === Konstrukcja robota === Na laboratorium korzystaliśmy z robota, który został zbudowany przez poprzednią grupę. Pozostawiony robot zawierał wszystko co potrzebowaliśmy, więc jakakolwiek modyfikacja nie była potrzebna. === Zdjęcie robota === {{:pl:mindstorms:studenci:przedmioty:jsi:jsi2008:20080114irek.jpg?200|}} === Algorytmy === * Zadaniem robota była jazda po kwadracie. Robot jechał przez sekundę prosto, następnie skręcał o 90 stopni. Czynność tę wykonywał dopóki nie wrócił na miejsce z którego ruszył: kwadrat :- nxt_open, nxt_go_sec(400,1), nxt_turn(400,120), nxt_go_sec(400,1), nxt_turn(400,120), nxt_go_sec(400,1), nxt_turn(400,120), nxt_go_sec(400,1), nxt_turn(400,120). * Zadaniem robota było dojechanie do przeszkody, cofnięcie się, wykonanie obrotu o 180 stopni. Początkowo robot po wykonaniu obrotu kontynuował jazdę i zatrzymywał się na klaśnięcie, jednak gdy wszystkie grupy testowały swoje roboty, inne dźwięki zatrzymywały naszego robota. Z tego powodu fragment kodu, który był za to odpowiedzialny został wykomentowany. check_ultrasonic :- nxt_ultrasonic(Value,force), Value < 30. check_sound :- nxt_sound(Value,force), Value > 50. ultrasonic :- nxt_stop, nxt_go_cm(-400,15), nxt_rotate(400,60), %nxt_go(400), %trigger_create(_,check_sound,[nxt_stop,nxt_close]). jazda :- nxt_open, nxt_go(400), trigger_create(_,check_ultrasonic,ultrasonic).'' * Zadaniem robota była jazda do przeszkody, cofnięcie się, wykonanie obrotu o 90 stopni. Zadanie miało być wykonywanie cyklicznie przez określoną ilość razy. Wystąpił jednak problem, który uniemożliwił implementacje tego algorytmu. Jest on opisany poniżej. === Problemy === * Robot pozostawiony przez poprzednią grupę miał odwrotnie podpięte silniki. Zamiast skręcać w prawo, skręcał w lewo. * Silniki robota, nie wyłączały się jednocześnie. Robot zamiast zatrzymywać równocześnie koła, najpierw zatrzymywał jedno, a dopiero po chwili drugie. * Użycie funkcji trigger_create więcej niż jeden raz powodowało zwrócenie błędu. Po jego otrzymaniu dalsza komunikacja z robotem była niemożliwa. Konieczne było zrestartowanie robota oraz ponowne uruchomienie prologa. Wyświetlany był błąd: ERROR: Arithmetic: `force/0' is not a function ^ Exception: (19) _L3673 is force//256 ? === Zmiany === * Wprowadzona zmiana, dotycząca korzystania z robotów zbudowanych przez grupy z poprzednich zajęć okazała się trafna. To dzięki niej od razu przystąpiliśmy do programowania robota. * Można wprowadzić większą ilość przykładowych algorytmów o zróżnicowanym poziomie trudności. === Plik z laboratorium === Plik zawierający opisane wyżej algorytmy: {{:pl:mindstorms:studenci:przedmioty:jsi:jsi2008:20080114irek.pl|}}