Both sides previous revision
Poprzednia wersja
Nowa wersja
|
Poprzednia wersja
|
pl:dydaktyka:piw:2010:sprawozdania:piw20100526-17b [2010/05/29 14:13] piw10 |
pl:dydaktyka:piw:2010:sprawozdania:piw20100526-17b [2010/05/30 14:37] piw10 |
---- | ---- |
| |
====== Uwięziony ====== | ====== Porządki ====== |
| |
Jak zawsze algorytm był pisany etapami i testowany w każdym kroku, co zdecydowanie ułatwia nam pracę. Największy problem był z odczytaniem wartości za pomocą nxt_light. Wartość zwracana przez robota dla danego koloru była różna w zależności czy Franek był odwrócony w stronę okna czy też w stronę sali. Niestety te wartości przy różnych kolorach i różnym ustawieniu względem okna nachodziły się na siebie, co uniemożliwiło nam dobranie odpowiednich współczynników. Pomysł był więc następujący, przenieść planszę na bardziej neutralne miejsce - podłoga. Jednak i to nie pomogło, błędy były mniejsze, ale zakresy wartości dla poszczególnych kolorów nachodziły na siebie. Podjęliśmy mimo wszystko próby wyznaczenia widełek dla danych kolorów, ale nasze testy zakończyły się nie pomyślnie. Algorytm został napisany w większej części. Niestety brak możliwości dobrania odpowiednich liczb przekreślił nasze perspektywy zakończenia zadania powodzeniem. Poniżej dotychczasowy efekt naszej pracy: | Algorytm został napisany w całości, jednak wystąpił pewien problem. Mianowicie w czasie gdy Franek się obracał i napotkał przeszkodę. W momencie napotkania przeszkody robot jechał do przodu, ale tylko jednym kołem! Następnie już wracał używając obu. Efekt: obrót, obrót, jazda do tyłu. Mimo dobrze napisanego kodu błędu nie byliśmy w stanie wykryć (czyżby bug?) Koniec zajęć dobiegł końca, więc na tym zakończyliśmy naszą pracę danego laboratorium. A to wynik naszego sprząta Franka: |
| |
<code prolog> | <code prolog> |
| |
start :- | start :- |
write('-- start 0.1 --'), | write('-- start 0.0 --'), |
nxt_goal(franek, my_actions). | nxt_goal(franek, sprzatacz). |
| |
my_actions :- | sprzatacz :- |
nxt_light_LED(activate), | nxt_rotate(50, 360), |
gogo. | trigger_create(_, przeszkoda_w_zasiegu, sprzataj). |
| |
gogo :- | przeszkoda_w_zasiegu :- |
stop, | nxt_ultrasonic(V, force), |
nxt_go(250), | V < 20. |
trigger_create(_, check_1, check_more). | |
| |
check_1 :- | sprzataj :- |
nxt_light(V, force), | |
V > 60, | |
V < 65. | |
| |
check_more :- | |
stop, | stop, |
nxt_go_cm(50,2), | nxt_go_cm(400, 80), |
nxt_light(V, force), | nxt_go_cm(-400, 80). |
decide(V). | |
| |
decide(V) :- | |
V < 60, | |
write('czarny'), | |
escape. | |
| |
decide(V) :- | |
V >= 60, | |
write('czerwony'). | |
| |
escape :- | |
Angle is 150 + random(60), | |
nxt_rotate(100, Angle, force), | |
gogo. | |
| |
stop :- | stop :- |
nxt_stop. | nxt_stop. |
</code> | </code> |
| |
| ---- |
| |
| ====== Wnioski i spostrzeżenia ====== |
| |
| Dwukrotnie na komendę nxt_open otrzymaliśmy: |
| |
| <code> |
| ERROR: I/O error in write on stream $stream(388428( (Transport endpoint is not connected) |
| Exception: (13) nxt actions serial:nxt_actions input setmode('S1', switch, buolean) ? |
| </code> |
| W takim wypadku pomagało jedynie ponowne uruchomienie komputera. Niestety nie znamy przyczyny powstawania tego błędu. |
| |
| * duże zaskoczenie podczas wykrycia buga (algorytm sprzątacza) Robot zamiast jechać do przodu obracał się. Przypuszczamy, że było to spowodowane poprzednią rotacją robota. |
| |
---- | ---- |