Spis treści

Sprawozdanie -proste algorytmy w PLNXT

Informacje

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

Budowa robota

Na początku zajęć stworzyliśmy robota, który zawierał 3 sensory: dotyku, odległości oraz dźwięku.
Umożliwiło nam to zaimplementówanie i sprawdzenie dwóch algorytmów: omijanie przeszkód oraz panikarz.
Pod koniec zajęć, ponieważ zostało nam jeszcze trochę czasu stworzyliśmy robota, którego celem było wykonywanie zadań dla algorytmu „piłkarz”.
Poniżej zamieszczamy zdjęcie naszego robota, który służył do rozwiązania algorytmu 1 i 2.
asia1.jpg

Konfiguracja stanowiska

W przeciwieństwie do poprzednich zajęć konfiguracja stanowiska przebiegła bardzo szybko i bez większych komplikacji.

Przetestowaliśmy funkcjonalność robota za pomocą poleceń dostępnych w dokumentacji do laboratorium, a następnie szybko zabraliśmy się za tworzenie własnych algorytmów.

Implementacja algorytmów

Na podstawie dokumentacji opracowaliśmy dwa obowiązkowe algorytmy i częściowo algorytm dodatkowy -piłka.
Poniżej zamieszczamy opis algorytmów z kodami źródłowymi/zdjęciami/wnioskami.

Algorytm 1 - omijacz przeszkód

Jako pierwszy algorytm zrealizowaliśmy „omijacza przeszkód”

Opis ćwiczenia

Celem algorytmu 1 było przemieszcza się robota do przodu,a po napotkaniu przeszkody zatrzymanie się i ominięcie przeszkody. W fazie przemieszczania do przodu (tylko w tej fazie) robot powinien zatrzymuje się i wyłączyć zaraz po klaśnięciu.
Wymagane sensory: odległości oraz dźwięku.

Kod programu

:- consult('plnxt.pl').
 
start:-
      nxt_open,
      go_on_buddy,
      trigger_create(_,check_distance,[nxt_stop]).
 
go_on_buddy :-
      nxt_go(200),
      sleep(1),
      trigger_create(_,clap,wait_a_second_buddy).
 
wait_a_second_buddy :-
      nxt_stop,
      nxt_rotate(750,-360,force),
      sleep(1),
      trigger_create(_,clap,go_on_buddy).
 
 
clap :-
      nxt_sound(Value,force),
      Value > 55.
 
 
check_distance :-
      nxt_ultrasonic(Distance,force),
      Distance < 15.

Zdjęcia + film


Filmik:http://www.youtube.com/watch?v=EiFPbLwppsY

Wnioski i uwagi

Algorytm 2- panikarz

Po zaimplementowaniu algorytmu „omijacz przeszkód” postanowiliśmy zaimplementować podobny algorytm: panikarz.

Opis ćwiczenia

Celem algorytmu 2 jest powolne przemieszczanie się robota, który po klaśnięciu zmienia kierunek i przez krótki czas ucieka. Po wciśnięciu sensora dotyku zatrzymuje się i zamyka połączenie. Robot przemieszcza się powoli. Po klaśnięciu zmienia kierunek i szybko ucieka przez jakiś czas (wtedy nie jest podatny na klaśnięcie), po czym uspokaja się i znowu jedzie powoli. Zatrzymuje się i zamyka połączenie po wciśnięciu sensora dotyku.
wymagane sensory: dźwięku, dotyku.

Kod programu

:- consult('plnxt.pl').
start:-
      nxt_open,
      go_on_buddy,
      trigger_create(_,clap,[nxt_stop,nxt_close]).
go_on_buddy :-
      nxt_go(200),
      sleep(1),
      trigger_create(_,clap,wait_a_second_buddy).
wait_a_second_buddy :-
      nxt_stop,
      nxt_rotate(750,-360,force),
      sleep(1),
      trigger_create(_,clap,go_on_buddy).
clap :-
      nxt_sound(Value,force),
      Value > 55.
pushed :-
      nxt_touch(Value,force),
      Value=1.

Zdjęcia + film

Zdjęcie robota- takie same jak dla poprzedniego algorytmu.
Filmik:http://www.youtube.com/watch?v=PjBwF7pIcB4

Wnioski i uwagi

Algorytm dodatkowy - piłka

Po zaprogramowaniu algorytmu 1 i 2 postanowiliśmy spróbować rozwiązać zadanie dodatkowe-czyli algorytm „piłka”

Opis ćwiczenia

Robot umieszczony na planszy testowej w obszarze start łapie piłkę znajdującą się w czerwonym obszarze przed nim i przemieszcza ją poza obszar zamknięty wewnątrz czarnej linii.
Z użyciem planszy testowej.
Wymagane sensory: dotyku, światła.

Kod programu

:- consult('plnxt.pl').
 
start:-
      nxt_open,
      go_on_buddy,
      trigger_create(_,check_distance,pick_up),
      trigger_create(_,czarne,[nxt_stop,nxt_close]).
 
 
go_on_buddy :-
      nxt_go(200),
      trigger_create(_,check_distance,pick_up).
 
 
pick_up:
       nxt_go(600),
      trigger_create(_,check_distance,[nxt_stop, nxt_close]).
 
 
 
 
check_distance :-
      nxt_ultrasonic(Distance,force),
      Distance < 1.
 
czarne :-
      nxt_light(Value,force),
      Value <50.

Zdjęcia + film


Filmik: http://www.youtube.com/watch?v=iBx3MGI8OK4

Wnioski i uwagi

Wnioski i napotkane problemy

Uwagi dotyczące PLNXT

Podczas tworzenia dodatkowej aplikacji bardzo przydatna byłaby funkcja 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.