Both sides previous revision
Poprzednia wersja
Nowa wersja
|
Poprzednia wersja
|
pl:dydaktyka:piw:2010:sprawozdania:piw20100519-17b [2010/05/25 19:28] piw10 |
pl:dydaktyka:piw:2010:sprawozdania:piw20100519-17b [2019/06/27 15:50] (aktualna) |
| |
===== Ciąg dalszy ===== | ===== Ciąg dalszy ===== |
Tego dnia do współpracy przyznany został nam robot Franek. Był przygotowany do działania, miał zamontowane potrzebne sensory, co pozwoliło przystąpić do ćwiczeń. | Tego dnia do współpracy przyznany został nam robot Franek. Był przygotowany do działania, miał zamontowane potrzebne sensory, co pozwoliło przystąpić do ćwiczeń. Prace rozpoczęliśmy od wykonywania algorytmów z poprzedniego tygodnia... |
| |
| ===== Rozgrzewka ===== |
| Powodami nie wykonania zadań z poprzednich zajęć były problemy z połączeniem się z robotem. Tym razem robot był dla nas bardziej łaskawy, więc bez problemów zaimplementowaliśmy algorytm 1: |
| |
| <code prolog> |
| :- consult('plnxt.pl'). |
| |
| start :- |
| write('-- start 0.3 --'), |
| nxt_light_LED(activate), |
| gogo. |
| |
| gogo :- |
| nxt_go(250), |
| trigger_create(_, check_light, escape). |
| |
| check_light :- |
| nxt_light(V, force), |
| V < 45. |
| |
| escape :- |
| Angle is 150 + random(60), |
| nxt_rotate(100, Angle, force), |
| gogo. |
| |
| % :- start. |
| </code> |
| |
| Próg wartości oświetlenia dobraliśmy empirycznie. |
| Efekt był taki jakiego oczekiwaliśmy, co przetestowaliśmy kilkakrotnie, na załączonej macie. |
| |
| {{:pl:dydaktyka:piw:2010:sprawozdania:20100519_003b.jpg|}} |
| |
| Algorytm 2 był nieco bardziej rozbudowany, jednak nie oznaczało to dla nas, że był trudniejszy: |
| |
| <code prolog> |
| :- consult('plnxt.pl'). |
| |
| start :- |
| write('-- start 0.6 --'), |
| nxt_light_LED(activate), |
| gogo. |
| |
| gogo :- |
| nxt_go(100), |
| trigger_create(_, check_light, align), |
| trigger_create(_, nxt_touch(1, force), wait_free_path). |
| |
| check_light :- |
| nxt_light(V, force), |
| V > 46. |
| |
| align :- |
| trigger_killall, |
| nxt_rotate(100, 3, force), |
| gogo. |
| |
| wait_free_path :- |
| trigger_killall, |
| nxt_stop, |
| nxt_play_tone(500,500), |
| trigger_create(_, nxt_touch(0, force), gogo). |
| |
| stop :- |
| trigger_killall, |
| nxt_stop. |
| |
| % :- start. |
| </code> |
| |
| Franek poruszał się po czarnej linii, a gdy napotkał przeszkodę, wydał dźwięk zatrzymując się. Po zwolnieniu blokady robot grzecznie ruszył do przodu tak jak poprzednio. |
| |
| ===== Klask klask ===== |
| |
| Spośród algorytmów jako pierwszy wybraliśmy "Panikarza". Potrzebne sensory Franek już posiadał, więc przystąpiliśmy do napisania algorytmu. Prace robiliśmy etapami, dodając każdorazowo kolejną akcje robota. |
| |
| <code prolog> |
| :- consult('plnxt.pl'). |
| |
| start :- |
| write('-- start 0.0 --'), |
| nxt_goal(franek, my_actions). |
| |
| my_actions :- |
| nxt_go(100), |
| trigger_create(_, clap, panic). |
| |
| clap :- |
| nxt_sound(Value,force), |
| Value > 30, |
| write('clap!'). |
| |
| panic :- |
| Angle is 160 + random(40), |
| nxt_rotate(900, Angle, force), |
| nxt_go(400). |
| %dokonczyc... |
| |
| stop :- |
| trigger_killall, |
| nxt_stop. |
| </code> |
| |
| Franek poruszał się powoli i po każdym klaśnięciu odwracał się, następnie zwiększyliśmy jego prędkość "uciekania". Wyniki uznaliśmy za zadowalające, jednak czas nie pozwolił nam dokończyć całkowicie danego algorytmu. |
| |
| ===== Spostrzeżenia i wnioski ===== |
| |
| * Pomimo poprawnego łączenia się z robotem poprzez bluetooth teoretycznie nie nawiązaliśmy połączenia (kolejne komunikaty konsoli o zajętości zasobu)jednak praktyka okazała się inna - komunikacja działała poprawnie, czym byliśmy miło zaskoczeni :) |
| |
| * Zdarzało się, że środowisko się zawieszało przy użyciu prostych komend. Na szczęście wystarczało wówczas "zabić" proces konsoli Prologa i uruchomić ją ponownie. Wydaje nam się, że wywołanie tylko raz predykatu nxt_open, a nie za każdym uruchomieniem pary nxt_open / nxt_close rozwiązuje problem. |
| |
| * Predykat write wywołany w wątku działania robota niestety nie wypisuje od razu na ekran (zapewne buforuje gdzieś wewnętrznie), a szkoda, gdyż na pewno byłoby łatwiej z tym śledzić przebieg programu. |