[[
✎ pl:dydaktyka:piw:2009:sprawozdania:piw20090422-14c
]]
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ć.
====== Kod programów ====== Po przetestowaniu działania przykładów zamieszczonych na stronie laboratorium, udało nam się zaimplementować na zajęciach trzy algorytmy: ===== Piłka ===== //Z użyciem planszy testowej. Robot umieszczony na planszy testowej w obszarze start łapie piłkę znajdującą się w czerwonym obszarze przed nim i przemieszcza ją poza obszar zamknięty wewnątrz czarnej linii.// Kod ''pilka.pl'': <code prolog> :- consult('plnxt.pl'). start :- nxt_open, thread_create(stroll,_,[detached(true)]). stroll :- nxt_go(200), % trigger_create(_,find_ball,go_with_ball). trigger_create(_,border,stop). go_with_ball :- Value is 90 + random(180), nxt_stop, nxt_rotate(300, Value), nxt_go(300), trigger_create(_,border,stop). border :- nxt_light(Value,force), Value < 15. find_ball :- nxt_light(Value,force), Value < 23. stop :- trigger_killall, nxt_stop, nxt_close. </code> ===== Omijanie przeszkód ===== //Robot przemieszcza się do przodu. Po napotkaniu przeszkody zatrzymuje się i próbuje ją ominąć. W fazie przemieszczania do przodu (tylko w tej fazie) robot zatrzymuje się i zamyka połączenie po klaśnięciu. // Kod ''omijanie.pl'': <code prolog> :- consult('plnxt.pl'). start :- nxt_open, thread_create(stroll,_,[detached(true)]). stroll :- nxt_go(200), sleep(1), trigger_create(_,obstacle,go_round). trigger_create(_,clap,stop). go_round :- Length is 20, Length2 is Length * 2, nxt_stop, nxt_rotate(300, -90), nxt_go_cm(250,Length), nxt_rotate(300, 90), nxt_go_cm(250,Length2), nxt_rotate(300, 90), nxt_go_cm(250,Length), nxt_rotate(300, -90), stroll. obstacle :- nxt_ultrasonic(Distance,force), Distance < 20. clap :- nxt_sound(Value,force), Value > 40. stop :- trigger_killall, nxt_stop, nxt_close. </code> ===== Panikarz ===== //Robot przemieszcza się powoli. Po klaśnięciu zmienia kierunek i szybko ucieka przez jakiś czas (wtedy nie jest podatny na klaśnięcie), po czym uspokaja się i znowu jedzie powoli. Zatrzymuje się i zamyka połączenie po wciśnięciu sensora dotyku. // Kod ''panikarz.pl'': <code prolog> :- consult(plnxt.pl). start :- nxt_open, thread_create(stroll,_,[detached(true)]), trigger_create(_,pat,stop). stroll :- nxt_go(200), sleep(1), trigger_create(_,clap,run_away). run_away :- Value is 90 + random(180), nxt_stop, nxt_rotate(400, Value), nxt_go_cm(500,20), stroll. clap :- nxt_sound(Value,force), Value > 40. pat :- nxt_touch(Value, force), Value=:=1. stop :- trigger_killall, nxt_stop, nxt_close. </code> ====== Pliki ====== ===== Zdjęcia ===== Henio w stanie początkowym, wykonujący algorytm //panikarz//: {{:pl:dydaktyka:piw2009:sprawozdania:piw20090422-14c-henio3.jpg|}} Henio po "tuningu" - dodany przedni zderzak i "zęby" - przygotowujący się do ominięcia przeszkody: {{:pl:dydaktyka:piw2009:sprawozdania:piw20090422-14c-henio2.jpg|}} Henio z dodanymi szczypcami, przechwytujący piłkę podczas wykonywania algorytmu //piłka//. {{:pl:dydaktyka:piw2009:sprawozdania:piw20090422-14c-henio1.jpg|}} ===== Spakowane pliki '*.pl' ===== {{:pl:dydaktyka:piw2009:sprawozdania:piw20090422-14c-pliki.rar|}} ===== Filmiki ===== Filmiki w formacie .mp4 ukazujące Henia wykonującego kolejne algorytmy: [[http://ds5.agh.edu.pl/~moly42/pliki/MOV00331.MP4|pilka]] [[http://ds5.agh.edu.pl/~moly42/pliki/MOV00329.MP4|omijanie przeszkod]] [[http://ds5.agh.edu.pl/~moly42/pliki/MOV00322.MP4|panikarz]] ====== Napotkane problemy ====== * Na samym początku mieliśmy problem z uruchomieniem Henia. Po skonfigurowaniu połączenia między robotem a komputerem udało nam się sprawić, aby komputer otwierał połączenie i sprawdzał baterię w robocie, ale niestety Henio nie chciał reagować na żadne polecenia ruchu (np ''nxt_go'', ''nxt_rotate'' etc.). Problem ten zniknął po restarcie robota. * Problem z doborem progu dźwięku. Empirycznie ustaliliśmy ten próg na wartość >40. Przy zbyt niskiej wartości robot reaguje na "szum", czyli hałas w sali. Zbyt wysoka wartość powoduje, że robot nie reaguje na nic. * Problem z doborem progu natężenia światła. W wyniku doświadczeń, polegających na stawianiu robota w różnych miejscach na planszy i wpisywaniu w konsoli celu ''nxt_light(Value).'' udało nam się ustalić, że na białym polu wartość natężenia światła wynosiła 24, na czerwonym 22, a na czarnym 10. Niestety, robot nie zawsze "zauważał", że znalazł się już na polu czerwonym (czyli w praktyce przechwycił już piłkę). * Problem z doborem kąta obrotu. Podczas realizowania algorytmu //omijanie przeszkody// zauważyliśmy, że pomimo wpisania "na sztywno" wartości obrotu o 90 stopni, w praktyce robot ślizgał się po stole, co skutkowało nieprawidłowym torem jazdy i wjeżdżaniem w przeszkodę. Po niewielkim zmniejszeniu prędkości obrotu problem ten zniknął i robot zaczął poruszać się dokładnie po wyznaczonym mu torze. * Podobnie jak poprzednio, zaistniał problem wyrzucania wyjątków podczas kończenia wątków. W praktyce skutkowało to koniecznością restartu ''xpce'' po każdym wykonaniu programu. ====== Wnioski i spostrzeżenia ====== Pomimo pewnych problemów, programowanie w środowisku plnxt jest łatwe i dość przyjemne. Pozwala na komunikację użytkownika z robotem jak i również projektowanie nieco bardziej skomplikowanych zachowań robota przy użyciu prostych poleceń. Algorytm //omijanie przeszkód// mógłby być bardzo efektywny, gdyby robot posiadał dwa sensory odległości: jeden z przodu i jeden z boku. Wtedy przy zastosowaniu pewnej synchronizacji danych wejściowych możnaby zmusić robota, aby omijał przeszkody, poruszając się wzdłuż ich krawędzi. Efekt ten można osiągnąć również przy użyciu jednego sensora odległości, zmuszałoby to jednak robota do ciągłego obracania się i sprawdzania, czy przeszkoda nadal znajduje się przed nim.
pl/dydaktyka/piw/2009/sprawozdania/piw20090422-14c.txt
· ostatnio zmienione: 2019/06/27 15:50 (edycja zewnętrzna)
Pokaż stronę
Poprzednie wersje
Menadżer multimediów
Do góry