Sprawozdanie -proste algorytmy w PLNXT
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.
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
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
Wnioski i uwagi
program nie stworzył nam większych problemów
Ciekawym pomysłem byłoby połączenie powyższych algorytmów w zadaniu3. Czyli:omijamy przeszkody, klaśnięcie powoduje obrót/zmian kierunku, a sensor dotyku wyłączenie robota.
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
Wnioski i uwagi
Rozwiązanie ostatniego zadania sprawiło nam największy problem
Po pierwsze, nie do końca wiedzieliśmy jak zidentyfikować położenie piłki przy jednym sensorze światła(położenie musi być pionowe, aby rozpoznać linię końca…a jednocześnie trudno zidentyfikować kolor czerwony). Dlatego stworzyliśmy algorytm który reaguje na odległość, jeżeli zbliży się do piłki wtedy przyspiesza i zmierza do czarnej linii na której się zatrzymuje.
Problem stworzyło nam także rozpoznanie czarnej linii, ale dzięki automatycznemu rozpoznawaniu natężenia światła uporaliśmy się także z tym probleme
Wniosek: programowanie robotów to świetna zabawa:)
Wnioski i napotkane problemy
Największy problem sprawiło nam zadanie dodatkowe. Nie byliśmy do końca pewni w jaki sposób skonstruować robota oraz w jaki sposób rozpoznawać położenie piłki.
Problemem podobnie jak na poprzednich laboratoriach było ponowne uruchamianie programów. Często pojawiały się błedy, które zmuszały nas do restartowania systemu, bądź wylogowania użytkownika i ponownego zalogowania.
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.
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.