PLNXT - Paweł Grzesiak, Rafał Dyrda - 14.01.09.
1. Cel ćwiczenia
Celem ćwiczenia było skonstruowanie robota oraz uruchomienie prostych algorytmów stworzonych przy pomocy interfejsu PLNXT działającego w powłoce SWIPL.
2. Realizacja ćwiczenia
2.1. Budowa robota
2.2. Pisanie algorytmu
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.
2.2.1. Magazynier
Zadaniem robota bylo:
podjazd do rampy, na której znajdowała się kulka,
po wyczuciu oporu powinien się zatrzymać,
chwycić kulkę przy pomocy szczypiec,
wycofać,
obrócić się o 180 stopni,
pojechać 10cm do przodu,
zatrzymać się i wypuścić piłkę.
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ę;)
3. Wnioski
Łączność z Heniem była dość problematyczną kwestią - często po wykonaniu jakiejś komendy silniki pozostawały w trybie pracy, były naprężone i nie było możliwości zakończenia aktualnego zadania przez nxt_stop, lub nxt_close, pomagało jedynie wyłączenie bricka i zrestartowanie powłoki SWIPL,
Tworzenie algorytmów z wykorzystaniem NXTPL jest bardzo proste dzięki dokładnym opisom funkcji w
nxt_movement.pdf, niestety nie mieliśmy zbyt wiele czasu, aby sprawdzić wszystkie możliwości tego interfejsu i porównać jego funkcjonalność z dołączoną aplikacją LEGO.
Załączniki:
nxt_magazynier.pl