Kurs budowy robotów – #5 – omijanie przeszkód

Kurs budowy robotów – #5 –  omijanie przeszkód

Jeśli wszystko poszło zgodnie z planem, to w tej chwili każdy powinien mieć przed sobą złożonego robota, który potrafi już jeździć. Pora, aby nasz pojazd zaczął widzieć otoczenie!

Podczas tej części kursu wykorzystamy proste czujniki przeszkód. Dzięki nim robot będzie mógł poruszać się po nieznanym terenie!

Do tej pory nie powinniśmy nazywać naszego pojazdu robotem. Nie miał on żadnych czujników, więc nie mógł reagować na swoje otoczenie. Roboty charakteryzują się tym, że dzięki sensorom są autonomiczne (samodzielnie "podejmują" decyzje).

W konstrukcjach mobilnych najczęściej pojawiają się czujniki odległości/przeszkód. Sensory te pozwalają zachowywać bezpieczny odstęp od innych uczestników ruchu i zabezpieczają robota przed zderzeniem się z przeszkodami (np. ścianami).

Trzeba pamiętać, że czasami czujniki takie są wykorzystywane również do całkowicie odwrotnych zadań. Idealnym przykładem będą roboty startujące w zawodach Sumo (przykłady na forum), które wykorzystują sensory do zlokalizowania przeciwnika i wypchnięcia go poza planszę.

Zestaw elementów do kursu

 999+ pozytywnych opinii  Gwarancja pomocy  Wysyłka w 24h

Części pozwalające wykonać ćwiczenia z kursu budowy robotów dostępne są w formie gotowych zestawów! W komplecie znajdują się elementy mechaniczne (w tym koła i silniki), baterie oraz shield!

Zamów w Botland.com.pl »

Wybór czujnika przeszkód

Wykrywanie przeszkód można zrealizować na wiele sposobów. Przykładem może być optyczny czujnik, który budowaliśmy podczas kursu podstaw elektroniki (poziom II). Za pomocą generatora zbudowanego z NE555 sterowaliśmy diodą IR. Światło, które odbijało się od przeszkód trafiało do naszego odbiornika i było interpretowanego jako przeszkoda.

Dla przypomnienia:

Niewątpliwą zaletą powyższego rozwiązania jest to, że wykrywa ono przeszkodę bez fizycznego kontaktu. Jednak z drugiej strony czujnik ten ma stosunkowo wąski kąt widzenia. 

W naszym robocie lepiej sprawdzi się prosty czujnik mechaniczny, który będzie mógł monitorować zarówno przód, jak i bok pojazdu. Jak działają sensory tego typu przeczytać można w osobnym artykule: microswitche jako proste czujniki przeszkód. To co najważniejsze, dla pewności, opisałem raz jeszcze w dalszej części tego tekstu.

Mechaniczny czujnik przeszkód - zasada działania

W zestawach elementów do tego kursu znajdują się 2 przełączniki krańcowe z przylutowanymi przewodami. To właśnie one pozwolą nam wykrywać przeszkody:

Dwa czujniki krańcowe (krańcówki).

Dwa czujniki krańcowe (krańcówki).

Od strony elektronicznej zasada działania tych krańcówek nie różni od zwykłych przycisków. Po wciśnięciu dźwigni (blaszki) następuje zwarcie sygnału wewnątrz przełącznika.

Nasze krańcówki mają 3 wyprowadzenia (styki) opisane na obudowie w następujący sposób:

  • NO (ang. normally open) - styk normalnie otwarty
  • NC (ang. normally closed) -  styk normalnie zamknięty
  • C (ang. common) - styk wspólny

Przewody dolutowane są do wyprowadzenia C oraz NO. Oznacza to, że jeśli przycisk nie jest wciśnięty, to między naszymi wyprowadzeniami nie ma połączenia. Sygnał będzie mógł popłynąć od C do NO dopiero po wciśnięciu dźwigni przycisku.

Gdybyśmy wykorzystali parę C oraz NC, to przycisk działałby odwrotnie. Sygnał mógłby płynąć od jednego wyprowadzenia, do drugiego tylko, gdy dźwignia nie byłaby wciśnięta. Dotknięcie przycisku powodowałoby rozwarcie wyprowadzeń.

Podłączenie i montaż czujników przeszkód

Aby ułatwić montaż i pozycjonowanie krańcówek będziemy je mocować z wykorzystaniem małych elementów ze sklejki. Nie będziemy przekładać śrubek przez otwory znajdujące się w obudowie przełączników! Do zamontowania pierwszego czujnika potrzebne są następujące elementy:

  • krańcówka,
  • element ze sklejki,
  • 2 śrubki M3 o długości 20 mm,
  • 4 podkładki.
Elementy konieczne do montażu czujnika.

Elementy konieczne do montażu czujnika.

Oczywiście nie ma jednego, słusznego miejsca do zamontowania czujników. Jest kilka wariantów, każdy ma swoje wady i zalety. Poniżej przedstawiam kilka możliwości wraz z ich krótkim opisem.

Podczas dalszych części kursu będziemy korzystać z jednego wariantu (nr 3), zachęcam jednak do testów we własnym zakresie! Dajcie znać w komentarzach jak sprawdzają się czujniki, gdy zamontujecie je w innych miejscach!

Wariant 1 - "z przodu" na zewnątrz

Pierwsza możliwość zamocowania czujników to ustawienie ich z przodu i skierowanych dźwigniami krańcówek na zewnątrz. Chodzi o takie ułożenie:

Pierwsza możliwość ułożenia czujników przeszkód.

Pierwsza możliwość ułożenia czujników przeszkód.

Aby zamontować tak czujniki najwygodniej zacząć od przyłożenia elementów ze sklejki i wstępnego przykręcenia nakrętek. Podkładki należy dodać przy łbie śruby oraz przy nakrętce. Dopiero po takim wstępnym przymocowaniu przekładamy pod spodem czujnik:

Oczywiście analogicznie postępujemy z drugim czujnikiem. Przewody, dla większego porządku, warto przeciągnąć przez wcięcia znajdujące się w okolicy kół:

Sposób zamocowania przewodu.

Sposób zamocowania przewodu.

Na koniec trzeba podłączyć przewody od krańcówek. W tym celu korzystamy z dwóch złącz, które zostały umieszczone na płytce z myślą o czujnikach. Dokładne informacje na ten temat znajdują się w drugiej części kursu budowy robotów.

Jedno z wyprowadzeń krańcówki podłączamy do pinu opisanego jako GND, a drugie do A0/A1. Kolejność przewodów nie ma żadnego znaczenia! Poprawne podłączenie:

Podłączenie przewodów od czujników.

Podłączenie przewodów od czujników.

Dla przypomnienia, ten wariant zakłada następujące ułożenie czujników:

Ustawienie czujników zgodnie z wariantem nr 1.

Ustawienie czujników zgodnie z wariantem nr 1.

Jak widać takie rozstawienie czujników sprawia, że dźwignie krańcówek dobrze reagowałyby na przeszkody znajdujące się po lewej i prawej stronie robota. Niestety stosunkowo wąska noga od stołu, w którą robot wjechałby prosto, od przodu nie zostałaby wychwycona (żadna z dźwigni nie byłaby wtedy wciśnięta).

Wariant 2 - "z przodu" do środka

Sposób montażu krańcówek za pomocą sklejki, jak i prowadzenie przewodów jest identyczne, jak w pierwszym sposobie. Jednak tym razem nasze dźwignie kierujemy do środka:

Ustawienie czujników zgodnie z wariantem nr 2.

Ustawienie czujników zgodnie z wariantem nr 2.

Tym razem środek jest pilnowany zdecydowanie lepiej. Tracimy jednak kontrolę nad bokami robota. W takiej konfiguracji możemy zahaczyć kołami o przeszkody, które nie będą wychwytywane przez czujniki. Pora więc na 3 wariant...

Wariant 3 - skrzyżowanie czujników

Wcześniejsze metody mocowania czujników mają wadę - za każdym razem należy wybierać, czy bardziej zależy nam na obserwacji boków robota, czy jego przodu. Oczywiście najlepiej byłoby, aby nasze czujniki miały jeszcze dłuższe ramiona. Ciężko jednak znaleźć w sprzedaży krańcówki z jeszcze dłuższymi dźwigniami.

Pierwszy krok to odcięcie zbędnego fragmentu opaski zaciskowej. W części zestawów zostało to już zrobione, więc krok ten oczywiście dotyczy tylko osób, które otrzymały całe opaski. Plastik jest na tyle miękki, że opaskę można przeciąć nawet nożyczkami.

Usunięcie zbędnego fragmentu opaski zaciskowej.

Usunięcie zbędnego fragmentu opaski zaciskowej.

Podczas kolejnego kroku potrzebna będzie rurka termokurczliwa, która po podgrzaniu zmniejsza swoją średnicę (kurczy się). Za pomocą nożyczek odcinamy 2 cm rurki, a następnie nakładamy ją na dźwignię czujnika. Oczywiście wkładamy tam również odciętą wcześniej opaskę zaciskową.

Teraz należy ogrzać rurkę (aby się zacisnęła), najlepiej zrobić to nad zapalniczką, świeczką lub korzystając z lutownicy typu hotair (dmuchającej gorącym powietrzem). Oczywiście konieczna jest ostrożność, aby nie stopić opaski i nie zrobić sobie krzywdy - uwaga na oparzenia!

Tak przedłużonych czujników nie możemy zamocować w sposób opisany w 1 wariancie, ponieważ będą one na siebie nachodzić. Jednak korzystając z tego, że dźwignie krańcówek są teraz bardzo długie możemy je skrzyżować. Dzięki temu możliwe będzie wykrywanie przeszkód po bokach robota, a jednocześnie nie stracimy możliwości obserwacji przodu - sytuacja idealna!

Skrzyżowanie dźwigni od czujników.

Skrzyżowanie dźwigni od czujników.

Oczywiście w związku z wydłużonymi dźwigniami nie możemy zamontować krańcówek tak, jak robiliśmy to poprzednio, ponieważ będą się dotykać opaskami. Rozwiązanie jest bardzo proste. Wystarczy jeden czujnik przykręcić od góry, a drugi od dołu:

Podczas dalszych testów proponuję zacząć właśnie od takiego ułożenia czujników. Jednak, tak jak wspomniałem wcześniej - zachęcam później do testowania innych sposobów mocowania!

Test czujników w praktyce

Pora sprawdzić, jak nasze czujniki działają w praktyce. Na początku prosty program, który przez UART wyświetli informację na temat stanu sensorów. Szkic jest bardzo prosty i chyba nie wymaga tłumaczenia. Po prostu sprawdzamy stan wejść i na tej podstawie wyświetlamy komunikaty.

Zadaniem dodanego opóźnienia jest ograniczenia ilości komunikatów trafiających do komputera w momencie, gdy trzymamy wciśnięty przycisk. W praktyce działanie układu wygląda następująco:

Wykorzystanie czujników w robocie

Sposobów na omijanie przeszkód jest wiele i na pewno każdy z Was wypracuje swoje rozwiązanie. Poniżej przedstawiam moje propozycje takiego programu. Na początku zaczynam od szkicu, który powstał w poprzednim odcinku kursu. Dodałem jedynie do niego informację na temat czujników oraz buzzera, który będzie pomocny podczas testów.

Nowe linie zostały podświetlone w poniższym kodzie:

Powyższy program po uruchomieniu robota sprawi, że będzie on jechał cały czas do przodu. W pętli głównej trzeba teraz dodać warunek korzystający z czujników. Na początku proponuję wykonywać identyczną reakcję dla każdego z nich:

Po wykryciu przeszkody robot delikatnie się cofnie, następnie obróci i pojedzie dalej. Oczywiście polecenie jazdy prosto mogłoby znajdować się w drugiej części warunku (po dodanym else). Nie jest to jednak konieczne, ponieważ komenda jazdy prosto wydawana jest w każdym obiegu pętli bez żadnego opóźnienia. Gdy tylko czujniki wykryją przeszkodę robot przechodzi do instrukcji, które są wewnątrz warunku. Po wykonaniu manewru obrotu robot będzie jechał dalej prosto.

Działanie tego prostego mechanizmu w praktyce widoczne jest na poniższym filmie:

Robot nie korzysta jeszcze z informacji o położeniu przeszkody, więc zawsze skręca w tę samą stronę. Regulując czas jazdy w tył oraz czas obrotu można uzyskać inne zachowanie robota. Im obroty będą dłuższe, tym jazda będzie bardziej chaotyczna - zachęcam do testów.

Nie należy jednak przesadzać z jazdą wstecz. Pamiętajmy, że cofanie dobywa się na sztywno, bez żadnych czujników. W ciasnych miejscach może prowadzić to do taranowania przeszkód tyłem!

Rozróżnianie informacji od czujników

Dla lepszego efektu wykorzystajmy teraz informacje na temat poszczególnych czujników. Jeśli przeszkoda będzie po lewej, to będziemy skręcać w prawo (aby ominąć blokadę). Analogicznie w przypadku wykrycia czegoś po prawej stronie będziemy skręcać lewo.

Najgorszy możliwy wariant w takiej sytuacji, to zaklinowanie się robota w narożniku. Będzie wtedy odbijał raz w lewo, raz w prawo i tak w koło. Można starać się tak dobrać czas jazdy wstecz/obrotu, aby zniwelować takie prawdopodobieństwo, ale jeszcze lepiej będzie dodać element losowy!

Losowy obrót robota

Najprościej zacząć od losowego czasu obrotu, czyli w praktyce losowy będzie kąt, o który obróci się robot po "odbiciu" od przeszkody. Dla widocznych zmian warto zacząć od dodatkowego opóźnienia np. 50-200 ms.

Pierwsza myśl, to zastosowanie funkcji random w następujący sposób:

Otrzymamy wtedy losowe wartości z założonego zakresu, jednak w większości przypadków nie będą one miały znacznego wpływu na zachowanie robota. Obrót przez 100 lub 102 ms nie będzie się od siebie w praktyce niczym różnił (różnica w czasie będzie za mała).

Lepiej będzie losować wartości o większym zróżnicowaniu (np. minimum co 10 ms). W tym celu wystarczy losować wartości z zakresu 5 - 20, a następnie wynik ten mnożyć przez 10. W praktyce wylosowanie 5 da nam 5 * 10 = 50 ms, a wylosowanie 6, da 6 * 10 = 60 ms.

Tak obliczoną wartość dodajemy do czasu obrotu. Oczywiście należy też pamiętać o inicjalizacji generatora liczb pseudolosowych! Więcej informacji o funkcji random podałem w kursie Arduino.

Przykład kilku przejazdów mojego robota z wykorzystaniem powyższego kodu:

Zachęcam do eksperymentów z czasami cofania i obrotów. Warto również wykorzystać inne ruchy robota np.: jazda po łuku. Pochwalcie się filmami w komentarzach, jak Wasze konstrukcje radzą sobie z omijaniem przeszkód, które stawiacie na ich drodze!


W powyższych programach nie sprawdzaliśmy nigdy, czy oba czujniki wykryły jednocześnie coś na drodze naszego robota. Oczywiście można połączyć dwa warunki (za pomocą &&) i czekać na sytuację, w której robot wjedzie idealnie prosto w przeszkodę. Arduino sprawdza stany wejść dość często (miliony razy na sekundę), wciśnięcie obu czujników jednocześnie będzie zdarzało się więc bardzo, bardzo rzadko.

Poprawki mechaniczne

Oprócz zmiany programu warto też obserwować zachowanie czujników. Jeśli nasze przedłużone dźwignie krańcówki będą za długie lub zbyt krótkie, to również będzie to negatywnie wpływało na działanie robota.

Oprócz długości dźwigni warto sprawdzić kąty pod jakimi ustawione są czujnikami, czasami drobna zmiana w mocowaniu może wpłynąć na działanie całej konstrukcji. Oczywiście sensory nie muszą być ustawione symetrycznie - można również sprawdzić jak robot będzie radził sobie z omijaniem przeszkód, gdy każdy z czujników będzie ustawiony inaczej.

Podsumowanie

Tak jak wspomniałem w poprzedniej części kursu - nie trzeba martwić się tym, że robot "nie potrafi" jechać idealnie do przodu. Po dodaniu czujników może on reagować na otoczenie i wprowadzać poprawki do swojej trasy w zależności od napotkanych przeszkód.

W kolejnym odcinku kursu budowy robotów zajmiemy się wykorzystaniem czujników optycznych. Zbudujemy światłoluba, czyli robota, który jedzie w stronę najsilniejszego źródła światła. W praktyce oznacza to możliwość sterowania robota za pomocą latarki!

Czy artykuł był pomocny? Oceń go:

Średnia ocena / 5. Głosów łącznie:

Nawigacja kursu

Autor kursu: Damian (Treker) Szymański

arduino, kurs, kursBudowyRobotow, programowanie, robot

Trwa ładowanie komentarzy...