[[
✎ pl:dydaktyka:piw:2009:sprawozdania:piw20090429-15a
]]
aiWiki
Pokaż stronę
Ostatnie zmiany
Indeks
Zaloguj
Ta strona jest tylko do odczytu. Możesz wyświetlić źródła tej strony ale nie możesz ich zmienić.
====== Laboratorium - PLNXT zaawansowane ====== Data: 29 kwietnia 2009\\ Godzina: 15.30\\ Grupa: Artur Kosztyła, Marcin Krzych\\ Robot: Henio\\ ===== Wstęp ===== Celem laboratorium było testowanie możliwości PLNXT przy algorytmach o większej złożoności niż dotychczas.\\ Korzystaliśmy ze standardowego zestawu PLNXT.\\ ===== Zadania ===== ==== Sprzątacz ==== Zdecydowaliśmy się zaimplementować algorytm "Sprzątacz", gdyż przy małych modyfikacjach można go później przekształcić w "Co przybyło?". Nasza implementacja algorytmu znajduje się poniżej. <code prolog> :- consult('./plnxt.pl'). start :- nxt_open, thread_create(lets_begin_the_party,_,[detached(true)]). lets_begin_the_party :- trigger_create(_,detect_obstacle,trash_it), go_on_buddy. go_on_buddy :- write('Buddy going'), nl, nxt_rotate(200, 360). detect_obstacle :- nxt_ultrasonic(X), write('distance '), write(X), nl, X < 20. trash_it :- write('buddy trashing...'), nl, nxt_go_cm(300, 20), nxt_go_cm(-300, 20), write('buddy trashing finished...'), nl, trigger_create(_,detect_obstacle,trash_it). stop :- trigger_killall, nxt_stop, nxt_close. </code> Niestety powyższy algorytm nie wykonywał się poprawnie. Robot wykonywał obrót po czym dopiero zaczynał wykonywać triggery. Efekt jego działania znajduje się na poniższym zrzucie ekranu:\\ {{:pl:dydaktyka:piw2009:sprawozdania:cleaner4_console.png|}} Sprawdzaliśmy również inne kombinacje, jednak one również nie działały poprawnie. Oto przykład: <code prolog> :- consult('./plnxt.pl'). start :- nxt_open, thread_create(go_on_buddy(0),_,[detached(true)]). go_on_buddy(Deg) :- write('Buddy going'), write(Deg), nl, nxt_rotate(200, 10), sleep(1), trigger_killall, trigger_create(_,detect_obstacle,trash_it), Deg < 360, NewDeg is Deg+10, go_on_buddy(NewDeg). detect_obstacle :- nxt_ultrasonic(X), write('distance '), write(X), nl, X < 20. trash_it :- write('buddy trashing...'), nl, nxt_go_cm(300, 20), nxt_go_cm(-300, 20), write('buddy trashing finished...'), nl, trigger_create(_,detect_obstacle,trash_it). stop :- trigger_killall, nxt_stop, nxt_close. </code> oraz zrzut konsoli: {{:pl:dydaktyka:piw2009:sprawozdania:cleaner2_console.png|}} ==== Problemy ==== Problemem były, podobnie, jak w czasie poprzednich laboratoriów, wątki, które nie chciały się zakończyć. Działo się tak mimo, iż tworzyliśmy w programie tylko jeden wątek, oraz trigger, a przy kończeniu programu wywoływaliśmy predykat ''trigger_killall''.\\ Widać to na powyższych zrzutach ekranów. ===== Podsumowanie ===== W trakcie laboratoriów niestety nie udało nam się w pełni zrealizować algorytmu Sprzątacza ze względu na napotykane przez nas problemy implementacyjne (nie wiemy, czy spowodowane naszą chwilową nieintegralnością z PLNXT, czy z wątkami :-) ).
pl/dydaktyka/piw/2009/sprawozdania/piw20090429-15a.txt
· ostatnio zmienione: 2019/06/27 15:50 (edycja zewnętrzna)
Pokaż stronę
Poprzednie wersje
Menadżer multimediów
Do góry