====== Cel ====== Celem była konstrukcja robota wg instrukcji oraz zapoznanie się z możliwościami sterowania robotem za pomocą Prologu z użyciem PLNXT. ===== Konstrukcja ===== Postanowiliśmy zbudować robota TriBot zamiast modelu z instrukcji QuickStart, aby nadać robotowi większą funkcjonalność. {{:pl:mindstorms:studenci:przedmioty:jsi:jsi2008:dsc00149n.jpg|}} ---- Jednakże kosztowało nas to zdecydowanie za dużo czasu. W związku z tym nie mieliśmy okazji by wypróbować pełne możliwości konstrukcji. Wydaje się, iż ze względu na rozbudowę chwytaka oraz użycie sprytnej dźwigni zwiększającej czułość sensora dotyku(widać ją powyżej na zdjęciu), znacząco poprawiają się możliwości motoryczne robota. Wskazanym jest działanie przynajmniej na tej formie maszyny. Forma poprzednia pod względem funkcjonalności prezentuje się zdecydowanie bardziej ubogo... pomijając już walory estetyczne co widać poniżej na zdjęciu. {{:pl:mindstorms:studenci:przedmioty:jsi:jsi2008:dsc00148.jpg|}} ===== Algorytm ===== Algorytm ze względu na ilość czasu poświęconą na konstrukcję ograniczył się jedynie do podstawowego zadania magazyniera: * Jedź prosto na kulkę * Dotknąwszy kulkę zatrzymaj się * Zewrzyj szczęki * Cofnij * Zawróć * Jedź na zadaną odległość * Połóż kulkę ====== Wykonanie ====== ===== Budowa robota ===== Nasz Jasio został wyposażony w mikrofon, czujnik dotyku oraz szczęki do chwytania kuli. Nie umieściliśmy pozostałych czujników z powodu braku czasu na testowanie. Kula została osadzona na przygotowanej platformie. {{:pl:mindstorms:studenci:przedmioty:jsi:jsi2008:dsc00150.jpg|}} {{:pl:mindstorms:studenci:przedmioty:jsi:jsi2008:dsc00151.jpg|}} Robot w takiej formie został przekazany następnej grupie laboratoryjnej. ===== Program w Prologu ===== Nasza realizacja algorytmu magazyniera: :- consult('../plnxt'). check_ball :- nxt_touch(Value,force), Value = 1. check_sound :- nxt_sound(Value,force), Value > 50. ball :- nxt_stop, % Stajemy przy kulce nxt_pincer(close), % Lapiemy kulke nxt_go_cm(-200, 15), % Cofamy sie nxt_rotate(400,180), % Odwracamy sie nxt_go_cm(400, 30), % Odjezdzamy 30cm nxt_pincer(open). % Puszczamy przedmiot start :- nxt_open, check_sound, % Wolamy Jasia nxt_pincer(open), % Rozwieramy kleszcze nxt_go(400), % Jedziemy, az napotkamy kulke trigger_create(_,check_ball,ball). Plik programu: {{:pl:mindstorms:studenci:przedmioty:jsi:jsi2008:gb-magazynier2.pl|}} ===== Problemy ===== Czasami Jasio robił się niegrzeczny: * Wykonywał przypadkowe ruchy * Nie wykonywał wgranego programu * Nie dał się sterować z konsoli Nie do końca było dla nas jasne czy jest to wina interface'u komunikacyjnego czy może raczej samego programu swipl. Powodem mogło być niezakończenie poprzedniego programu. Ponowne uruchomienie powłoki swipl rozwiązało problem. Problem ten (miejscami wybitnie irytujący, zwłaszcza gdy dobry program nie raczył poprawnie funkcjonować) kosztował nas również sporo czasu. ===== Podsumowanie ===== Prolog pozwala na programowanie robota w sposób bardziej efektywny. Najważniejszą zaletą jest modelowanie zachowania robota z użyciem reguł. Ponadto Prolog daje możliwość pełniejszej kontroli dzięki lepszemu wykorzystaniu czujników. Dzięki formie programowej konstrukcji algorytmów sterowania robotem, możliwe jest rozwiązywanie dużo bardziej złożonych problemów. Dodatkowo prolog jako język programowania wprowadza zdecydowanie krótszą, a zarazem bardziej logiczną składnię co w konsekwencji obfituje w znaczący wzrost efektywności robota. ====== Propozycje ====== Dobrym pomysłem byłoby organizowanie zawodów dla zainteresowanych studentów, polegających nie na budowie robotów, lecz pisaniu programów w prologu działających na konkretnym/tak samo zbudowanym robocie i spełniających zadane cele. Udział w zawodach byłby udokumentowany w życiorysie robota na aiWiki. Programy wzbogaciłyby kolekcję algorytmów dostępnych na stronie.