08.04.2009, godz. 9.30
grupa w składzie: Joanna Jaworek, Eliasz Kańtoch, Piotr Figiel
Informatyka Stosowana IV rok
Robot: Franek
Dobudowaliśmy do robota czujniki światła i odległości. W pełni funkcjonalnego robota możemy obserwować na rysunku poniżej:
Przez kilkanaście minut nie udało nam się połączyć z Robotem. Nie pomogło kolejno: resetowanie powłoki i restart robota. Dopiero restart komputera po uzgodnieniu z prowadzącym ćwiczenia umożliwił prawidłowe podłączenie do robota.
Przetestowaliśmy funkcjonalność robota za pomocą poleceń dostępnych w dokumentacji:
np:
[plnxt].
nxt_open.
nxt_rotate(100, 180).
nxt_close.
Na podstawie dokumentacji opracowaliśmy rozwiązanie 2 problemów.
Do rozwiązania tego problemu napisaliśmy predykat sprawdz_czy_linia umożliwiącego wykrycie czarnej linii przed robotem. Stworzyliśmy także predykat jedz_wprzod, który definiuje trigger który wyzwalał obrot robota o losowy kąt z przedziału 100-180 stopni gdy robot najedzie na ciemne pole (linię).
:- consult('plnxt.pl'). start:- nxt_open, jedz_wprzod. jedz_wprzod :- nxt_go(300), trigger_create(_,sprawdz_czy_linia,obrot). sprawdz_czy_linia :- nxt_light(Value,force), Value < 20. obrot :- nxt_stop, Angle is 100 + random(80), nxt_rotate(350,Angle), jedz_wprzod.
Do rozwiązania tego problemu skorzystaliśmy z predykatu chceck_distance umożliwiącego wykrycie przeszkody oraz stworzyliśmy predykat jedz_wprzod, który definiuje trigger który wyzwalał obrot robota o losowy kąt z przedziału 100-130 stopni gdy robot w pobliżu wykrył przeszkodę.
:- consult('plnxt.pl'). start:- nxt_open, jedz_wprzod. jedz_wprzod :- nxt_go(300), trigger_create(_,check_distance,obrot). obrot :- nxt_stop, Angle is 100 + random(30), nxt_rotate(350,Angle), jedz_wprzod. check_distance :- nxt_ultrasonic(Distance,force), Distance < 15.
Napotkaliśmy trudności podczas testowania kolejnych wersji opracowanych przez nas algorytmów. Nie potrafimy ustalić dlaczego co jakiś czas byliśmy zmuszeni restartować system w celu poprawnego połączenia się z robotem. Stało się to bardzo poważnym utrudnieniem podczas testowania algorytmów.
Naszym zdaniem warstwę nxt_movement można rozszerzyć o akcję jeszcze bardziej wysokopoziomowe 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.