Laboratorium - zaawansowane algorytmy z PLNXT

Wstęp

Spośród zaproponowanych proponowanych algorytmów wybraliśmy algorytm sprzątacz.

Algorytm ten działa następująco:

  • Robot obraca się dookoła własnej osi wyszukując w tym czasie sensorem przeszkody w odległości 40cm
  • Gdy znajduje przeszkodę zaczyna jechać do przodu 40 cm tak aby wypchnąć ją poza zadany obszar
  • Obraca się o 180st
  • Jedzie do przodu 40cm tak aby wrócić na początkową pozycję
  • Po powrocie algorytm zaczyna wykonywać się od nowa
  • Wykonywanie algorytmu możemy przerwać w każdym momencie naciskając sensor dotyku robota

Konstrukcja robota

Robot wykonany został na standardowej bazie robota jeżdżącego z dopiętym sensorem odległości z przodu oraz niewielkim zderzakiem do wypychania obiektów. Konstrukcje robota widać na krótkim filmiku który zamieszczamy wraz z sprawozdaniem.

Kod programu

:- consult('../plnxt/plnxt.pl').
 
start :-
    nxt_open,
    trigger_create(_, check_stop, [nxt_stop, nxt_close]),
    patrol.
 
check_distance :-
    nxt_ultrasonic(Distance,force),
    Distance < 40.
 
patrol :-
    trigger_create(_, check_distance, [nxt_stop, push_out, patrol]),
    nxt_rotate(250, 360).
 
push_out :-
    nxt_go_cm(450, 40),
    nxt_rotate(350,180),
    nxt_go_cm(450,40).
 
check_stop :-
    nxt_touch(Stop,force),
    Stop = 1.

Opis działania i konstrukcji programuu

Główną pętla programu to patrol, w niej znajduje się najważniejszy trigger szukający przeszkody w promieniu 40cm. Oprócz tego na początku wyzwalamy trigger odpowiadający za anulowanie programu w momencie naciśnięcia czujnika dotyku.

Jak widać na zamieszczonym krótkim filmiku algorytm działa zgodnie z założeniami:

http://pl.youtube.com/watch?v=wWld1NfofBk

Uwagi i Wnioski

Mimo, że program działa poprawnie to wyraźnie widać, że sensor nie wykrywa przedmiotu w porę i przez to nie porusza się dokładnie w kierunku przeszkody. Błąd tego kąta jest jednak na tyle niewielki, że biorąc pod uwagę małą odległość od przedmiotu (40cm), robot tak czy inaczej wypcha przedmiot poza zadany obszar. Montując odpowiednio szeroki zderzak można więc ominąć ten problem :)

Niemałe problemy stwarzało natomiast zacinanie się środowiska w czasie komunikacji z robotem. Problem ten miał miejsce przy próbie zamknięcia połączenia. Wiązało się to z koniecznością zamknięcia i ponownego otwarcia powłoki prologa.

Sugestie modyfikacji

Niewielki czas jaki przeznaczony jest na przeprowadzenie laboratorium sprawia, że nie ma możliwości stworzenia ciekawszych algorytmów. Gdyby w instrukcji ćwiczeń zostały umieszczone fragmenty kodów realizujących przykładowe proste zadania można by zająć się od razu pisaniem złożonych algorytmów rozbudowując te podane.

pl/mindstorms/studenci/przedmioty/jsi/jsi2008/jsi20090121-11a.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