[[
✎ pl:dydaktyka:piw:2009:sprawozdania:piw20090429-17a
]]
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ć.
===== Alogrytm: Śledzenie lini===== Robot umieszczony na planszy testowej dojeżdża do grubej czarnej linii. Od tego momentu jedzie wzdłuż tej linii. Jeżeli wykryje brak linii, zatrzymuje się i obraca się w losowym kierunku. Tak długo się obraca, aż znajdzie czarną linię. Przerywa wtedy szukanie linii i zaczyna wzdłuż niej jechać. Problem występuje głównie w przypadku szukania linii. Skoro jest to losowe szukanie, może obracać się w złą stronę i w konsekwencji oddalać się od niej. Wtedy, co raz nam się zdarzyło, obrócił się o 180% i zaczął jechać wzdłuż czarnej linii w przeciwnym kierunku. Robot zatrzymuje się po wykryciu sygnału na czujniku dotyku. <code prolog> :- consult('plnxt.pl'). start :- nxt_open, thread_create(first_run,_,[detached(true)]). first_run :- % dodac TID nxt_light_LED(activate), trigger_create(_,white_check,search_for_line), % trigger_create(_,black_check,line_found), trigger_create(_,press,stop), go_on_buddy. go_on_buddy :- nxt_play_tone(1500,500), nxt_go(150), sleep(1). press :- nxt_touch(Value,force), Value > 0. white_check :- nxt_light(Value,force), Value > 45. black_check :- nxt_light(Value,force), Value < 45. search_for_line :- nxt_stop, nxt_play_tone(1000,1000), trigger_create(_,black_check,line_found), nxt_rotate(150,-15), nxt_rotate(150,30). line_found :- % trigger_kill(TID), nxt_stop, nxt_play_tone(1500,1000), % dodac TID trigger_create(_,white_check,search_for_line), go_on_buddy. stop :- trigger_killall, nxt_stop, nxt_close. start. </code> ===== Alogrytm: Sprzątacz ===== Robot ustawiony jest na środku obszaru, który ma posprzątać. Powoli obraca się w jednym kierunku i jednocześnie sprawdza czujnikiem odległości, czy nie ma przeszkód przed nim. Jeżeli taką wykryje zaczyna jechać w jej kierunku 40cm wypychając ją poza ustalony obszar i wraca. Robot zatrzymuje się po wykryciu sygnału na czujniku dotyku. <code prolog> :- consult('plnxt.pl'). start:- nxt_open, go_on_buddy, trigger_create(_,pushed,[nxt_stop,nxt_close]). go_on_buddy :- nxt_turn(200,720), % wpisujac 360 stopni robot obraca sie o 180 sleep(0.1), % Chwila przerwy, żeby jedno klaśnięcie nie zostało rozpoznane jako dwa. trigger_create(Checkdistance,check_distance,[nxt_stop, nxt_go_cm(600,8), nxt_go_cm(-600,8)]). clean_buddy :- trigger_killall, nxt_stop, nxt_go_cm(600,8), sleep(0.1), nxt_play_tone(1500,1000), nxt_go_cm(-600,8), go_on_buddy. % Sprawdzenie, czy sensor dotyku jest wciśnięty. pushed :- nxt_touch(Value,force), Value=1. check_distance :- nxt_ultrasonic(Distance,force), Distance < 40. </code> Używaliśmy dyrektywy nxt_play_tone aby rozpoznać który fragment kodu jest wykonywany.
pl/dydaktyka/piw/2009/sprawozdania/piw20090429-17a.txt
· ostatnio zmienione: 2019/06/27 15:50 (edycja zewnętrzna)
Pokaż stronę
Poprzednie wersje
Menadżer multimediów
Do góry