Laboratorium - zapoznanie z PLNXT

Informacje

08.04.2009, godz. 9.30
grupa w składzie: Joanna Jaworek, Eliasz Kańtoch, Piotr Figiel
Informatyka Stosowana IV rok
Robot: Franek

Konstrukcja

Dobudowaliśmy do robota czujniki światła i odległości. W pełni funkcjonalnego robota możemy obserwować na rysunku poniżej:

Konfiguracja stanowiska do pracy z NXT

Przez kilkanaście minut nie udało nam się połączyć z Robotem. Nie pomogło kolejno: resetowanie powłoki i restart robota. Dopiero restart komputera po uzgodnieniu z prowadzącym ćwiczenia umożliwił prawidłowe podłączenie do robota.

Przetestowaliśmy funkcjonalność robota za pomocą poleceń dostępnych w dokumentacji: np:
[plnxt].
nxt_open.
nxt_rotate(100, 180).
nxt_close.


Implementacja algorytmu

Na podstawie dokumentacji opracowaliśmy rozwiązanie 2 problemów.

Algorytm 1

Do rozwiązania tego problemu napisaliśmy predykat sprawdz_czy_linia umożliwiącego wykrycie czarnej linii przed robotem. Stworzyliśmy także predykat jedz_wprzod, który definiuje trigger który wyzwalał obrot robota o losowy kąt z przedziału 100-180 stopni gdy robot najedzie na ciemne pole (linię).

:- consult('plnxt.pl').
 
start:-
	nxt_open,
	jedz_wprzod.
 
jedz_wprzod :-
	nxt_go(300),
        trigger_create(_,sprawdz_czy_linia,obrot).
 
 
sprawdz_czy_linia :-
	nxt_light(Value,force),
	Value < 20.
 
 
obrot :-
	nxt_stop,
	Angle is 100 + random(80),
	nxt_rotate(350,Angle),
	jedz_wprzod.

Algorytm 2

Do rozwiązania tego problemu skorzystaliśmy z predykatu chceck_distance umożliwiącego wykrycie przeszkody oraz stworzyliśmy predykat jedz_wprzod, który definiuje trigger który wyzwalał obrot robota o losowy kąt z przedziału 100-130 stopni gdy robot w pobliżu wykrył przeszkodę.

:- consult('plnxt.pl').
 
start:-
	nxt_open,
	jedz_wprzod.
 
jedz_wprzod :-
	nxt_go(300),
        trigger_create(_,check_distance,obrot).
 
obrot :-
	nxt_stop,
	Angle is 100 + random(30),
	nxt_rotate(350,Angle),
	jedz_wprzod.
 
 
check_distance :-
	nxt_ultrasonic(Distance,force),
	Distance < 15.

Problemy

Napotkaliśmy trudności podczas testowania kolejnych wersji opracowanych przez nas algorytmów. Nie potrafimy ustalić dlaczego co jakiś czas byliśmy zmuszeni restartować system w celu poprawnego połączenia się z robotem. Stało się to bardzo poważnym utrudnieniem podczas testowania algorytmów.

Wnioski

  • Warstwa nxt_movement okazała się być bardzo pomocnym narzędziem podczas programowania zaawansowanych ruchów robotów typu ruch do przodu, tyłu, skręcanie i obracanie.
  • Dokumentacja okazała się zgodna z przetestowanymi poleceniami.
  • Dzięki nxt_movement można stworzyć poruszającego się robota nie tylko omijającego przeszkody ale także reagującego na bodźce świetlne w kilku linijkach kodu.

Propozycje rozwoju

Naszym zdaniem warstwę nxt_movement można rozszerzyć o akcję jeszcze bardziej wysokopoziomowe np. poruszanie się za intensywnością światła przez robota - nxt_search_light , nxt_search_sound. Interesujące byłoby dodanie ruchu robota po bardziej skomplikowanych trajektoriach typu zygzak nxt_go_ zigzag czy okrąg nxt_go_circle. Robot byłby w stanie wykonywać naprawdę widowiskowe ruchy w kilku linijkach kodu.

pl/dydaktyka/piw/2009/sprawozdania/piw20090408-09d.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