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:

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.

pl/dydaktyka/piw/2010/sprawozdania/piw20100602-15d.txt · ostatnio zmienione: 2019/06/27 15:50 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0