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

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.

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

pl/mindstorms/studenci/przedmioty/jsi/jsi2008/jsi20090114-08b.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