Sprawozdanie 5

  • Robot: Ewka
  • Data wykonania: 02.06.2010 godz. 17:00
  • Autorzy: Agata Krysian, Łukasz Mendakiewicz, Tomasz Skrzypczak

Co przybyło

Kontynuowaliśmy naszą pracę z poprzedniego laboratorium. Został nam do zaimplementowania ostatni algorytm. Sensory odległości i dźwięku były zamontowane, zatem rozpoczęliśmy prace. Na początku sprawdziliśmy połączenie z robotem i wykonaliśmy ruch do przodu - wszystko sprawne. Poniżej przedstawiamy efekt naszej pracy:

% :- consult('plnxt.pl').
:- dynamic(odleglosc/2).
 
start :-
	write('-- start 0.0 --'),
	abolish(odleglosc/2),
	nxt_goal(ewka, zapamietuj(0)).
 
clap :-
	nxt_sound(Value,force),
	Value > 30,
	write('clap!\n').
 
zapamietuj(360) :-
	trigger_create(_, clap, sprawdzaj_start),!.
 
zapamietuj(Kat) :-
	stop,
	nxt_rotate(30, 10),
	nxt_ultrasonic(V),
	write('zapamietuj: Kat '),write(Kat),write(' '),write(V),write('\n'),
	assert(odleglosc(Kat,V)),
	Kat2 is Kat + 10,
	zapamietuj(Kat2).
 
sprawdzaj_start :-
	stop,
	sprawdzaj(0, 0, 0).
 
sprawdzaj(360, _, _) :- !.
 
sprawdzaj(_, Zapamietana, Odczytana) :-
	Zapamietana - 5 > Odczytana,!,
	write('NOWOSC!\n'),
	stop,
	nxt_go_cm(200,Odczytana-1).
 
sprawdzaj(Kat, _, _) :-
	stop,
	nxt_rotate(30, 10),
	nxt_ultrasonic(V),
	odleglosc(Kat,Zapamietana),
	write('sprawdzaj: Kat '),write(Kat),write(' zapamietana '),write(Zapamietana),write(' odczytana '),write(V),write('\n'),
	Kat2 is Kat + 10,
	sprawdzaj(Kat2, Zapamietana, V),!.
 
stop :-
	trigger_killall,
	nxt_stop.

Tutaj przedstawiamy krótkie działanie, mianowicie robot obraca się tylko kawałek, a następnie po klaśnięciu sprawdza czy położenie jest takie samo. Oczywiście przy pierwszym odczycie obiektu powinien go wykryć i tak też się dzieje http://www.youtube.com/watch?v=HeH6luFyy6A

A tutaj jest pełny obrót Ewki, niestety 36 obrotów po 10 stopni nie dało pełnego obrotu - błąd dokładności sterowania silnikami http://www.youtube.com/watch?v=zSj07QgmdMA


Spostrzeżenia i wnioski

  • Problem z poprzednich zajęć z predykatem write - nie wyświetlał tekstu podczas działania, lecz dopiero po zakończeniu programu. Tym razem na końcu tego polecenia dodaliśmy '\n' co okazało się skuteczne i podczas działania natychmiastowo był wypisywany odpowiedni tekst.
  • Robot po pełnym obrocie nie był ustawiony dokładnie w tej samej pozycji, więc trzeba było go ustawić ponownie. Nawet niewielkie przesunięcie robota skutkowało niepoprawnym działaniem programu. Aby temu zapobiec wprowadziliśmy dopuszczalny margines błędu przy mierzeniu odległości, a po obrocie Ewki staraliśmy się ją ponownie ustawić w pozycji wyjściowej przed drugą częścią algorytmu.
  • Ustawienie robota w danej pozycji a następnie wykonanie na nim komendy ruchu może być niedokładne. Położenie początkowe tylnego kółka może spowodować niewielki błąd przy ruszaniu robota, co niestety ostatecznie często przekłada się na dużą niedokładność. Być może trzeba je ustawiać zawsze zgodnie z początkowym kierunkiem ruchu robota (oczywiście zwrot również powinien być prawidłowy).
  • Próba ponownego rozwiązania algorytmu „Więzień”. Mierzyliśmy ponownie wartość światła dla kolorów biały, czerwony, czarny z włączoną i wyłączoną diodą. Testowaliśmy również w miejscu jak najbardziej neutralnym (najmniejsza ilość zewnętrznego światła). Dodatkowo czujnik obniżyliśmy jak najniżej, aby odległość od podłoża była jak najmniejsza. Niestety efekt znów był nie zadowalający, zakresy kolorów się nakładały

pl/dydaktyka/piw/2010/sprawozdania/piw20100602-17c.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