Celem ćwiczenia było skonstruowanie robota oraz uruchomienie prostych algorytmów stworzonych przy pomocy interfejsu PLNXT działającego w powłoce SWIPL.
Zbudowany przez nas robot oparty jest o model zawarty w instrukcji Quickstart dołączonej do zestawu, ponadto został rozbudowany do TriBot'a przy pomocy instrukcji zawartej w User Guide, wyposażony został w czujnik dotyku, działający jako czujnik krańcowy [Rysunek2].
Wygląd robota został przedstawiony na rysunkach poniżej.
Rysunek 1: Henio-TriBot
Rysunek 2: Konstrukcja czujnika krańcowego z wykorzystaniem czujnika dotyku.
Rysunek 3: Rampa nowej generacji.
Rysunek 4: Henio Magazynier skradający się po piłkę.
Rysunek 5: Henio Magazynier po załadowaniu towaru.
Przy pomocy funkcji z interfejsu NXTPL opisanych w nxt_movement.pdf można w prosty sposób pisać algorytmy na zasadzie predykatów języka Prolog. Ze względu na ograniczoną ilość czasu stworzyliśmy jeden algorytm.
Zadaniem robota bylo:
Kod algorytmu (również jako załącznik poniżej):
:- consult('plnxt.pl'). start:- nxt_open, go_on_buddy, trigger_create(_,pushed,grab_ball). go_on_buddy :- nxt_go(300). grab_ball :- nxt_stop, sleep(1), nxt_pincer(close), sleep(1), nxt_go_cm(-300,10), nxt_rotate(300,180), nxt_go_cm(300,30), nxt_pincer(open), nxt_go_cm(-300,10), nxt_stop, nxt_close. pushed :- nxt_touch(Value,force), Value=1.
Uwagi: Predykat nxt_go_cm/2 nie działał, gdy jako +Speed wpisywało się wartość ujemną, co zgodnie z instrukcją powinno spowodować jazdę do tyłu.
Uwaga! Wtrącenie prowadzącego!
Dla dobra szeroko rozumianej nauki muszę się wtrącić w sprawozdanie. ;)
Panowie próbowali wpisywać Distance ujemny i wtedy nie działało, bo Distance powinien być dodatni (wg instrukcji). Zwrot wyznacza znak Speed (można się zastanowić, czy to jest słuszne i intuicyjne) i tak powinno działać (tak macie Panowie w Waszym algorytmie). Czy tutaj faktycznie był problem? — Piotr Hołownia 2009/01/14 21:32
Uwaga! Odpowiedź studentów;)
Faktem jest, że początkowo wpisywaliśmy wartość ujemną w Distance, lecz po zwróceniu uwagi spróbowaliśmy również z wartością ujemną w polu Speed (jak w kodzie powyżej) i sytuacja była taka sama. Oczywiście za tydzień przetestujemy jeszcze raz tą funkcję i dopiszemy kolejną Uwagę;)
Załączniki:
nxt_magazynier.pl