Sprawozdanie z laboratorium nr 5


Data wykonania: 21.01.2009, godz. 9.30

Autorzy: Damian Dudziński, Maciej Fabia, Szymon Frenkel


Realizacja

Zastaliśmy już złożonego robota,

korzystał on z dwóch sensorów:

  • czujnika sonarowego,
  • czujnika dotyku;

zatem mogliśmy od razu przystąpić do realizacji algorytmu.

Zaimplementowaliśmy algorytm „sprzątacza”, w którym robot miał za zadanie usunąć wszystkie przeszkody znajdujące się w odległości nie większej niż określona. Aby to zrealizować obracał się on wokół własnej osi, a po wykryciu przeszkody przez czujnik sonarowy wstrzymywał ruch obrotowy, wykonywał ruch w kierunku przeszkody wypychając ją poza obszar do wysprzątania, a potem wracał na wcześniejszą pozycję i kontynuował ruch obrotowy, aż do sprawdzenia całego obszaru wokół siebie. Czujnik dotyku służył za awaryjny wyłącznik robota, który uaktywniał się także, gdy przesuwana przeszkoda była zbyt ciężka dla robota.

:- consult('plnxt.pl').
 
start:-
	nxt_open,
	krecenie,
	trigger_create(_,pushed,[nxt_stop,nxt_close]).
 
krecenie :-
	nxt_rotate(150,360),
        sleep(1), % Chwila przerwy
	trigger_create(_,przeszkoda,wypychanie).
 
wypychanie :-
	nxt_stop,
	nxt_go_cm(300,40),
	sleep(10),
	nxt_go_cm(-300,40),
        sleep(10).
	trigger_create(_,_,krecenie).
 
% Sprawdzenie, czy znaleziono przeszkodę
przeszkoda :-
	nxt_ultrasonic(Value,force),
	Value < 20.
 
% Sprawdzenie, czy sensor dotyku jest wciśnięty.
pushed :-
	nxt_touch(Value,force),
	Value=1.
 
:- start.

sprzatacz.pl

Problemy

Niestety, szczególnie na początku zajęć, kilkukrotnie nieoczekiwanie robot przestawał wykonywać wysyłane mu polecenia i konieczne było jego wyłączenie i nawiązywanie komunikacji od nowa. W czasie testowania algorytmu okazywało się również, że jednak polecenia biblioteki NXT nie zawsze działają według naszych oczekiwań:

  • funkcja odczytująca stan czujnika dotyku „nxt_touch(Value,force)” przez pewien czas zwracała wartości „181” i „1023” zamiast binarnych,
  • przy użyciu funkcji obracającej robota „nxt_rotate(150,360)” realny kąt obrotu nie zgadzał się z żądanym,
  • funkcja nxt_go_cm nie działała, gdy otrzymywała ujemny argument „Speed” - robot nie poruszał się do tyłu. Natomiast funkcja nxt_go reagowała prawidłowo.

Wnioski

Ułatwieniem w konstruowaniu algorytmu byłaby bardziej rozbudowana dokumentacja biblioteki NXT.

pl/mindstorms/studenci/przedmioty/jsi/jsi2008/jsi20090121-09a.txt · ostatnio zmienione: 2017/07/17 08:08 (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