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

Wnioski i uwagi

  • Rozwiązanie tego zadania nie sprawiło nam większych problemów
  • Problem stworzyło nam jedynie ustawienie wartośći natężenia dźwięku dla klaśnięcia…

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

  • 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.

pl/dydaktyka/piw/2009/sprawozdania/piw20090422-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