Pojazd reagujący na przeszkody

Jak robot wykrywa przeszkody? Jak możemy wykorzystać to do sterowania nim?

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ę krotkich „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 40kHz, podczas gdy zdrowe ludzkie ucho słyszy maksymalnie dźwięki do 20kHz).

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 20cm 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, gdy zbliżymy do niego rękę na min. 20cm, a jeśli ją zabierzemy i nie ma przed nim żadnej przeszkody, robot się zatrzyma.

Ćwiczenie 2 – Jedź kiedy coś widzisz. Cofnij się kiedy 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 masz 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 30cm – JEDŹ DO PRZODU
3. Kiedy zbliżysz się na odległość poniżej 20cm – ZATRZYMAJ SIĘ
4. Kiedy przeszkoda jest bliżej niż 10cm – 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ż 30cm i bliżej niż 20cm – czyli jednocześnie spełnione będą wszystkie trzy warunki z ptk. 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ż 30cm i większej niż 20cm – JEDŹ DO PRZODU
3. Kiedy zbliżysz się na odległość poniżej 20cm i większej niż 10cm – ZATRZYMAJ SIĘ
4. Kiedy przeszkoda jest bliżej niż 10cm – 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ż 20cm.
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.

O autorze scenariusza:

Maciej Wojnicki

Maciej Wojnicki

Projektant, konstruktor, programista, twórca LOFI Robota - edukacyjnego systemu do nauki robotyki i programowania dla dzieci w każdym wieku. Pomysłodawca i współzałożyciel pierwszego w Polsce Fab Labu (Trójmiasto) - otwartej pracowni szybkiego prototypowania i cyfrowej fabrykacji, zrzeszonej w międzynarodowej sieci podobnych instytucji.