Skład zespołu:

  • Sławomir Goszcz
  • Tomasz Pięciak
  • Maciej Żywioł

1. Wstęp

  • Celem laboratorium było opracowanie algorytmu poruszania się robota wzdłuż czarnego owalu, zamykającego obszar na planszy.
  • Algorytm miał zostać zaimplementowany w języku prolog.
  • Robot miał za zadanie odnaleźć linię, a następnie poruszać się wzdłuż niej, naciśnięcie sensora dotyku powodowało zakończenie pracy robota.

2. Konstrukcja robota

Rys. 1. Wygląd robota
Rys. 1. Wygląd robota
Rys. 1. Robot w akcji - wypróbowywanie algorytmu
Rys. 1. Robot w akcji - wypróbowywanie algorytmu

3. Opracowanie algorytmów

  • Algorytm Śledzenie linii miał działać następująco: Robot umieszczony na planszy testowej dojeżdża do grubej czarnej linii, następnie obraca się w stronę prawą o 30 stopni po czym jadąc przed siebie, aż do ponownego najechania na grubą czarną linię.
  • Schemat ten jest powtarzany do momentu, aż nie zostanie wciśnięty sensor dotyku.
  • Próg natężenia oświetlenia równy 50 dobraliśmy po serii testów i pomiarów natężenia światła w obszarze czarnym i białym, w świetle oraz cieniu. Ponieważ bez dodatkowego źródła światła pomiary były chaotyczne i nie udało nam się określić konkretnego progu, uruchomiliśmy diodę doświetlającą.

sledzenie.pl



4. Algorytm w akcji

5. Napotkane problemy

  • Podczas naciśnięcia sensora dotyku mimo, iż robot zatrzymywał się w konsoli wyświetlał się następujący komunikat:
Yes
?- Warning: [Thread 5] Thread running "trigger_start(touch, stop, 1)" died due to failure
  • Receptą na to jest ponowne uruchomienie środowiska SWI-Prolog. W systemie nie pozostają żadne działające procesy w tle.
  • Problemem napotkanym w ćwiczeniu było dobranie wysokości na jakiej czujnik światła powinien się znajdować. Początkowo znajdował się on bardzo nisko planszy (< 1 cm), przez co nie było możliwe odróżnienie linii czarnej od białego wnętrza. Ostatecznie czujnik zamontowano na wysokości 2 cm
  • Innym problemem w algorytmie Śledzenie linii było ustalenie wartości progu dla sensora światła. Początkowo nie użyto oświetlenia diodą LED, co sprawiło kłopoty z odróżnieniem linii czarnej od białego wnętrza toru w sytuacji, gdy robot był odwrócony tyłem do zewnętrznego źródła światła (okna) i rzucał swój własny cień na czujnik światła. Rozwiązano to dodając stałe oświetlenie w postaci włączonej diody LED i dobraniem progu dla sensora światła równego 50.
  • W algorytmie dokonano zapisu zmian wartości odczytu sensora przy przekraczaniu podłoża białe→czarne oraz czarne→białe co przedstawia poniższy wykres.
Rys. 2. Przebieg odczytanych wartości sensora
Rys. 2. Przebieg odczytanych wartości sensora
  • Bazując na tym można dobrać wartość sensora światła wyznaczając średnią wartości parzystych (przekroczenie progu czarne→białe), średnią wartości nieparzystych (przekroczenie progu białe→czarne) oraz możliwości odchyłek poprzez wyznaczenie odchylenia standardowego dla obu przypadków.

Przekroczenie progu czarne→białe:

Wartość średnia: 55.44
Odchylenie standardowe: 4.51

Przekroczenie progu czarne→białe:

Wartość średnia: 46.76
Odchylenie standardowe: 1.68
  • Z poniższego rysunku przebiegów przekraczania progu czarne→białe i białe→czarne można stwierdzić, że odchylenie standardowe jest umiarkowane:

| Rys. 3. Przebieg odczytanych wartości sensora przy przekraczaniu progu **czarne->białe** (próbki parzyste) i **białe->czarne** (próbki nieparzyste) |

Rys. 3. Przebieg odczytanych wartości sensora przy przekraczaniu progu czarne→białe (próbki parzyste) i białe→czarne (próbki nieparzyste)
  • Wobec czego najbardziej optymalną wartością progu dla sensora światła jest: round( (55.44 + 46.76) / 2 ) = 51

6. Co rozszerzyć w laboratorium?

  • Mając większą planszę można byłoby zrobić mini zawody żużlowe na owalnym torze, w których roboty mogłyby mieć zaprogramowane algorytmy jechania wewnątrz toru nie wjeżdżając w bandę (zjazd na zewnętrzną), albo na murawę (zjazd na wewnętrzną). Dodatkowo czujniki ultradźwiękowe mogłyby by reagować na odległości między nimi co zapobiegałoby kraksom ;)
  • Możliwość dodania ciągłego w czasie podglądu wartości sensorów poprzez osobny zestaw funkcji.

7. Wnioski

Opracowując algorytm śledzenia linii możemy stwierdzić, że było to zadanie niełatwe ale bardzo przyjemne. Dzięki zastosowaniu języka Prolog byliśmy w stanie w stosunkowo łatwy sposób zaimplementować dość zaawansowany algorytm śledzenia linii. Niestety zadanie laboratoryjne nauczyło nas również, że zastosowane w zestawie LEGO MINDSTORMS sensory nie są doskonałe i np. nieprawidłowe dobranie parametrów progowych czujnika światła może zniweczyć całą pracę algorytmiczną przez co robot przez dość długi czas nie zachowywał się tak jak tego od niego oczekiwaliśmy. Podsumowując zadanie było bardzo ciekawe i pokazało nam potencjał kryjący się w połączeniu LEGO MINDSTORMS i PROLOGA.

8. Pliki

pl/dydaktyka/piw/2009/sprawozdania/piw20090429-08b.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