Pojazd reagujący na przeszkody

Wykorzystajmy czujnik odległości do sterowania robotem i nauczmy go omijać przeszkody pojawiające się na jego drodze

Czujnik odległości to jeden z najbardziej popularnych elektronicznych komponentów wykorzystywanych w robotyce. Jest niezwykle użyteczny, a do tego jego działanie zawiera w sobie element “elektronicznej magii”, bo na pierwszy rzut oka nie wiadomo, w jaki sposób jest w stanie widzieć znajdujące się przed nim obiekty.

Czujnik odległości, który wykorzystujemy w naszych robotach to najpopularniejszy w świecie Arduino model HC-SR04, działa on na zasadzie ultradźwięków i echolokacji. W skład czujnika wchodzą dwie sondy (przy okazji dzięki temu świetnie udaje on oczy robota) – jedna jest głośnikiem, który emituje serię krótkich “piknięć”, druga sonda to mikrofon, który nasłuchuje echa “piknięć”, które odbijają się od obiektów znajdujących się naprzeciwko czujnika.

czujnik_odleglosci

Te “piknięcia” to krótkie sygnały dźwiękowe, których nie słyszymy, bo ich częstotliwość jest wyższa niż możliwości naszego słuchu ( wynosi 40 kHz, podczas gdy zdrowe ludzkie ucho słyszy maksymalnie dźwięki do 20 kHz).

Ponieważ prędkość dźwięku jest stała i wynosi 1225 kilometrów na godzinę, mierząc czas od wysłania “piknięcia” do momentu, aż sonda-mikrofon usłyszy jego echo możemy wyznaczyć, jaka jest odległość pomiędzy czujnikiem a obiektem, od którego odbija się “piknięcie”.

Podobny mechanizm w naturze wykorzystują min. nietoperze, delfiny i inne walenie. W świecie technologii podobnie działają np. sonary na statkach.

Czujnik odległości, pozwala więc naszemu robotowi “widzieć”, co się dzieje przed nim. Wykorzystajmy go więc, aby zaprogramować kilka różnych algorytmów ruchu naszego robota w reakcji na sygnały z czujnika odległości.

Przygotowanie

1. Zmontuj pojazd z czujnikiem odległości
2. Połącz pojazd z aplikacją LOFI Blocks

Programowanie

Aby odczytać odległość zmierzoną przez czujnik odległości w aplikacji LOFI Blocks, wykorzystywać będziemy bloczek CZUJNIK ODLEGŁOŚCI z działu ROBOT.

Blok zwraca odległość zmierzoną w centymetrach, a jeśli czujnik nie wykrywa żadnej przeszkody, wówczas blok zwraca wartość 100. Przed rozpoczęciem programowania sprawdź, jak zachowują się odczyty z czujnika odległości w monitorze czujników. W tym celu zbliż dłoń do czujnika odległości i sprawdź, czy wartość ODLEGŁOŚĆ reaguje na ruchy twojej dłoni. Jeśli monitor odczytuje zmiany na suwaczku, to znaczy że czujnik jest prawidłowo podłączony.

monitor czujnikow

Ćwiczenie 1 – Jedź, gdy coś zobaczysz

W pierwszej kolejności zaprogramujmy naszego robota tak, aby jechał do przodu, gdy zobaczy jakąś przeszkodę, a w momencie kiedy nic nie widzi niech stoi w miejscu. Najważniejsze na początku jest przetłumaczenie naszego zwrotu “kiedy robot coś widzi” na instrukcję wyrażoną w formie zrozumiałej dla robota. Przyjmijmy, że robot “coś widzi”, kiedy pojawiła się przed nim przeszkoda w odległości 20 cm lub bliżej, czyli odczyt z czujnika odległości jest mniejszy od 20.

Zależnie od wskazań tego bloku porównującego będzie wykonywał jedno z dwóch zachowań – jechał do przodu, albo stał w miejscu. Zaprogramujemy to przy pomocy instrukcji warunkowej

1. Jeżeli odczyt z czujnika odległości jest mniejszy od 20 – JEDŹ DO PRZODU.
2. Jeżeli odczyt z czujnika odległości jest większy od 20 – STÓJ W MIEJSCU.

W formie bloków powyższy algorytm wygląda następująco:

Jeśli uruchomimy nasz program, robot pojazd powinien jechać do przodu, kiedy zbliżymy do niego rękę na min. 20 cm, a jeśli ją zabierzemy i nie ma przed nim żadnej przeszkody, robot się zatrzyma.

Ćwiczenie 2 – Jedź, gdy coś widzisz. Cofnij się, gdy jesteś zbyt blisko.

W tym momencie nasz robot trochę bezmyślnie jedzie w stronę każdego obiektu, jaki się przed nim pojawi i będzie tak jechał, aż w niego uderzy. Udoskonalmy nasz program, tak aby robot potrafił się zbliżyć do przeszkody, ale też wiedział, kiedy się zatrzymać, a nawet cofnął się kiedy przeszkoda jest zbyt blisko.

Niech zachowanie naszego robota wygląda teraz następująco:
1. Kiedy nic nie widzisz, stój w miejscu.
2. Kiedy widzisz coś w odległości 30 cm – JEDŹ DO PRZODU.
3. Kiedy zbliżysz się na odległość poniżej 20 cm – ZATRZYMAJ SIĘ.
4. Kiedy przeszkoda jest bliżej niż 10 cm – JEDŹ DO TYŁU.

Zwróć uwagę, że w powyższym algorytmie jest jeden problem – kiedy przeszkoda będzie bliżej niż 10 cm, będzie również bliżej niż 30 cm i bliżej niż 20 cm – czyli jednocześnie spełnione będą wszystkie trzy warunki z pkt. 2, 3 i 4. Musimy więc poprawić kryteria warunków tak, aby się nie pokrywały.

1. Kiedy nic nie widzisz, stój w miejscu.
2. Kiedy widzisz coś w odległości mniejszej niż 30 cm i większej niż 20 cm – JEDŹ DO PRZODU.
3. Kiedy zbliżysz się na odległość poniżej 20 cm i większej niż 10 cm – ZATRZYMAJ SIĘ.
4. Kiedy przeszkoda jest bliżej niż 10 cm – JEDŹ DO TYŁU.

Tego typu podwójne warunki jesteśmy w stanie skonstruować przy pomocy bloku porównań logicznych z działu LOGIKA.

Blok ten zwróci na wartość PRAWDA tylko w momencie, gdy obydwa jego parametry będą miały wartość PRAWDA.

Poprawmy kod z pierwszego ćwiczenia wstawiając jako kryterium warunku podwójny warunek (mniejszy od 30 i większy od 20).

W tym momencie nasz robot jedzie, gdy zobaczy przeszkodę i zatrzymuje się, gdy jest bliżej niż 20 cm.
Aby dodać do programu funkcję cofania się, gdy przeszkoda jest zbyt blisko, musimy zmienić jeden warunek podwójny (JEŻELI…W PRZECIWNYM RAZIE…) na cztery warunki pojedyncze (JEŻELI…).

W praktyce jego działanie wygląda tak:


UWAGA – jeśli Twój robot nie reaguje, sprawdź czy ustawiona moc silników nie jest zbyt mała – przy mocy 55 może mieć on problem z ruszeniem z miejsca na miękkim podłożu

.

Jak widzisz, z wykorzystaniem czujnika odległości możemy w całkiem prosty sposób tworzyć algorytmy, dzięki którym nasz robot zaczyna się zachowywać trochę jak żywe stworzenie – wykrywa, co się przed nim dzieje i reaguje na to ruchem. W kolejnej lekcji zaprogramujemy go tak, aby poruszał się w pełni autonomicznie.