Zapoznanie z PLNXT

Celem ćwiczenia było zapoznanie się z interfejsem programistycznym w prologu do Lego Mindstorms.

Przebieg Ćwiczenia

  • Sama konstrukcja robota wykożystywana w tym ćwiczeniu wydaje się nie być szczególnie istotna, warto nadmienić, że robot był samojezdy oraz posiadał nst. czujniki:
    • dźwiękowy
    • ultrasoniczny (odległości)
    • dotyku
  • Komunikacja pomiędzy robotem a PC odbywała się za pomocą Bluetooth.
  • Po wstępnym zapoznaniu się z instrukcją API przystąpiliśmy do jego testowania. W pierwszej fazie udało się nam przetestować działanie podstawowych funkcji API m. in.:
    • nxt_open, nxt_close - otwarcie/zamknięcie połączenia
    • nxt_voltage_millivolt(Voltage) - odczyt napięcia na bateriach
    • nxt_rotate(350,360) - obrót w prawo
    • nxt_go(300) - jazda do przodu z prędkością 300 stopni/sekundę
  • Następnie kiedy udało się nam wstępnie zaznajomić z dostępnymi predykatami przeszliśmy do testowania działania przykładowych trzech programów zamieszczonych w instrukcji do ćwiczenia. Pozwoliły nam one na przyjrzenie się konstrukcji programu w prologu sterującego robotem oraz na sposób tworzenia zdarzeń oraz akcji w programie za pomocą predykatu trigger_create/3 z modułu threads.

Implementacja Algorytmu

  • Ostatecznie stworzyliśmy własny program pozwalający na omijanie przeszkód przez naszego robota:
:- consult('../plnxt/plnxt.pl').
 
start :-
	nxt_open,
	trigger_create(_,check_distance,[nxt_stop, rotate90]),
	trigger_create(_, check_stop, [nxt_stop, nxt_close]),
	nxt_go(500).
 
 
check_distance :-
	nxt_ultrasonic(Distance,force),
	Distance < 15.
 
 
rotate90 :-
	go_rotate,
	trigger_create(_,check_distance,[nxt_stop, rotate90]),
	nxt_go(500).
 
go_rotate :-
	nxt_rotate(350, 90), sleep(1),
	nxt_go_cm(500,30),
	nxt_rotate(350,-90),sleep(1),
	nxt_go_cm(500,30),
	nxt_rotate(350,-90),sleep(1),
	nxt_go_cm(500,30),
	nxt_rotate(350,90),sleep(1).
 
check_stop :-
	nxt_touch(Stop,force),
	Stop = 1.
  • Robot porusza się do przodu z zadaną prędkością, gdy zbliży się do przeszkody wykonuje serię manewrów umożliwiających jej ominięcie i jedzie dalej aż do napotkania kolejnej przeszkody, poczym znów ją omija, wyłaczenie programu następuje poprzez wciśnięcie czujnika dotyku. Zrezygnowaliśmy tutaj ze sterowania robotem poprzez klaśnięcia ponieważ system ten źle sprawdza się w warunkach laboratorium i jest bardzo ciężki w testowaniu.

omijanie.pl

Wnioski

API prologu jest zdecydowanie wygodniejszą formą tworzenia oprogramowania dla Mindstorms niż kożystanie z dostarczanego programu firmy LEGO, z którego kożystaliśmy na wcześniejszych zajęciach. Warto było by się zastanowić nad innym sposobem rozkazywania robotowi w trakcie jego działania niż klaskanie (co niestety często się zdarza w instrukcjach), z bardzo prozaicznego powodu ponieważ system klaskań nie sprawdza się w warunkach laboratorium.

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