====== Sprawozdanie z laboratorium nr 4 ====== * Robot: **Agatka** * Data wykonania: **02.06.2010 godz. 15:30 (Oficjalnie jesteśmy w grupie o 9:30, ale nie mogliśmy się wtedy zjawić, prowadzący z 15:30 wyraził zgodę, abyśmy zostali na zajęciach.)** * Autorzy: **Renata Niedziela, Michał Urbańczyk, Artur Glier** ---- ===== Początek ===== Bez problemów sparowaliśmy robota z komputerem, przetestowaliśmy połączenie kilkoma prostymi poleceniami np. nxt_play_tone(500,2000). ===== Budowa robota ===== Zdecydowaliśmy się stworzyć program "Co przybyło". Mikrofon był już zamontowany na robocie, naszym zadaniem było zamocowanie z przodu czujnika odległości. Zdziwieni byliśmy dokładnością tego czujnika. Możliwe było całkiem dokładne podawanie odległości od przedmiotu a czujnik wykrywał nawet nieduże obiekty. Nasz robot: {{:pl:dydaktyka:piw:2010:sprawozdania:02062010167a.jpg|}} =====Program===== Chcieliśmy napisać program co przybyło lecz z nieco uproszczonymi zasadami. Wg. opisu program powinien w triggerze sprawdzać odległość obiektu od sensora cały czas podczas płynnego obracania się. Nasze rozwiązanie polegało na sprawdzaniu tylko 4 kierunków - obracaniu się o 90 stopni. start :- skret, nxt_ultrasonic(A1), skret, nxt_ultrasonic(A2), skret, nxt_ultrasonic(A3), skret, nxt_ultrasonic(A4), trigger_create(Trigger1,klask,[nxt_stop,skret2]). klask :- nxt_sound(Sound,force), Sound > 50. skret :- nxt_rotate(100,95). skret2 :- nxt_play_tone(500,2000), skret, nxt_ultrasonic(B1), trigger_create(TriggerA,A1 - B1 > 10,[nxt_go_cm(300,B1+10),end]), skret, nxt_ultrasonic(B2), trigger_create(TriggerB,A2 - B2 > 10,[nxt_go_cm(300,B1+10),end]), skret, nxt_ultrasonic(B3), trigger_create(TriggerC,A3 - B3 > 10,[nxt_go_cm(300,B1+10),end]), skret, nxt_ultrasonic(B4), trigger_create(TriggerD,A4 - B4 > 10,[nxt_go_cm(300,B1+10),end]), end. end :- nxt_play_tone(500,2000), trigger_kilall. Zdajemy sobie sprawę, że to rozwiązanie jest trywialne. Nie mieliśmy pomysłu jak sprawdzać w triggerze zmianę odległości i jak zapisać dane z pierwszego obrotu. Padły pomysły o zapisywaniu odległości próbkując co 1 stopień. Wystarczyłoby do naszego aktualnego programu dopisać tablicę z danymi, oraz obracać robota o 1 stopień, a nie o 90. Pojawił się problem z obrotem o 1 stopień. Okazało się, że obrót 360 razy o 1 stopień to nie obrót o 360 stopni - silniki krokowe w lego nie są tak dokładne jak sądziliśmy. Często robot nawet nie ruszał się. Drugim rozwiązaniem był ciągły obrót i sprawdzanie z pewnym próbkowaniem odległości, ale tego nie umieliśmy zaprogramować. Tutaj trzeba by się zagłębić w programowanie wielowątkowe na co nie było czasu. =====Wnioski i spostrzeżenia===== Często zdarzało się, że po wykonaniu błędnego programu środowisko xpce zawieszało się. Robot przestawał reagować na polecenia, nawet po zabiciu xpce i odpaleniu ponownie. Rozwiązaniem na ten problem okazało się wyłączenie i włączenie robota, ponowne połączenie przez bluetooth oraz wywołanie plnxt_stty. =====Uwagi do laboratorium===== Przydały by się jakieś przykłady nieco bardziej zaawansowanych programów napisanych w prologu pod LEGO MindStorms.