Wstęp

Celem laboratorium było poznanie możliwości interfejsu programistycznego PLNXT poprzez stworzenie prostych algorytmów sterujących zachowaniem robota.

Stanowisko

Na stanowisku czekał na nas złożony robot Henio:

Problemy:

Podczas laboratorium ponownie napotkaliśmy problemy związane z komunikacją Czesława z komputerem. Aby z powrotem odzyskać połączenia po jednokrotnym uruchomieniu algorytmu niezbędny był restart powłoki SWIPL.

Przebieg laboratorium

W pierwszym etapie przetestowaliśmy z powodzeniem programy umieszczone w instrukcji do laboratorium:

  • Robot wykonuje ruch po kwadracie.
  • Jazda po kwadracie jest realizowana w osobnym wątku.

Następnie na podstawie podanego szablonu programu opracowaliśmy wykonaliśmy następujące zadania:

Panikarz

Lekko zmodyfikowany względem instrukcji o dodatkowe paniczne ruchy.

%
% Robot porusza z małą prędkością do przodu. Po zarejestrowaniu klaśnięcia 
% (lub innego odpowiednio głośnego dźwięku) robot w 2 cyklach odtwarza dźwięk, 
% obraca się o losowy kąt i jedzie do przodu z większą losową prędkością. 
% Po tych dwóch cyklach panicznego zachowania powraca ponownie do powolnego 
% poruszania się do przodu.
%
 
% PLNXT - API w języku Prolog dla LEGO Mindstorms NXT
:- consult('plnxt.pl').
 
 
start :-
	nxt_open,
	thread_create(stroll,_,[detached(true)]),
	trigger_create(_,pat,stop).
 
stroll :-
	nxt_go(200),
        sleep(1),
	trigger_create(_,clap,run_away).
 
run_away :-
	Rotate is 270 + random(180),
	Rotate2 is 270 + random(180),
	Speed is 500 + random(200),
	Speed2 is 400 + random(200),
	nxt_stop,
	nxt_play_tone(Speed,5*Speed),
        nxt_rotate(Speed, Rotate),
	nxt_go_cm(Speed,20),
	nxt_play_tone(Speed,5*Speed2),
	nxt_rotate(Speed, Rotate2),
	nxt_go_cm(Speed2,30),
 
	stroll.
 
clap :-
	nxt_sound(Value,force),
	Value > 40.
 
pat :-
	nxt_touch(Value, force),
	Value=:=1.
 
stop :-
	trigger_killall,
	nxt_stop,
	nxt_close.

Omijanie przeszkód

%
% Zadanie 2:
% Robot porusza z małą prędkością do przodu. Po wykryciu przeszkody w podanej 
% odległości omija ją wykonując sekwencję ruchów gwarantującą poruszanie się po 
% trasie zgodnej z przedstawionym poniżej schematem (R-robot, PP-przeszkoda).
%      ______
%      |    |
%    R-| PP |->
%
 
% PLNXT - API w języku Prolog dla LEGO Mindstorms NXT
:- consult('plnxt.pl').
 
 
start :-
	nxt_open,
	thread_create(stroll,_,[detached(true)]).
 
stroll :-
	nxt_go(200),
        sleep(1),
	trigger_create(_,obstacle,roadblock).
 
roadblock :-
        nxt_stop,
	passround,
	stroll.
 
passround :- 
	Length is 20,
	Length2 is Length * 2,
	nxt_rotate(300, -90),
	nxt_go_cm(250,25),
	nxt_rotate(300, 90),
	nxt_go_cm(250,50),
	nxt_rotate(300, 90),
	nxt_go_cm(250,25),
	nxt_rotate(300, -90),
	stroll.
 
 
obstacle :-
	nxt_ultrasonic(Distance,force),
	Distance < 20.
 
stop :-
	trigger_killall,
	nxt_stop,
	nxt_close.

Spostrzeżenia, napotkane problemy, wnioski

  • Budowa i ciężar robota przy mniejszych prędkościach powodowały blokadę kółka tylnego (podpierającego). Podczas większych obrotów blokowało się i zatrzymywało obrót.
  • Często przy sekwencji większej ilości ruchów (np.: przód, obrót, tył, obrót) robot zachowywał się nieprzewidywalne i wykonywał jedynie niektóre ruchy lub z zupełnie innymi parametrami niż podano.
  • Odnośnie poprzedniego punktu przy sekwencyjnym wykonywaniu wielu ruchów parametry (prędkości, kąty obrotu, długość zadanej drogi w cm) podane w kodzie źródłowym nie odpowiadały temu co wykonywał robot.

Załączniki

Zdjęcia

Podczas testowania zaimplementowanych zadań wykonaliśmy następujące zdjęcia Henia.

Programy

Dodatkowo dołączamy spakowane pliki wykonane na laboratorium.

piw20090408-17b.zip

Informacyjnie

Sprawozdanie opracowane przez:

  • Jacka Dymczaka
  • Piotra Kanię
  • Mateusza Urbanika
pl/dydaktyka/piw/2009/sprawozdania/piw20090422-17b.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