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

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: 20080114irek.pl

pl/mindstorms/studenci/przedmioty/jsi/jsi2008/jsi20090114-09c.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