środa, 30 marca 2011

Robotyka: Linefollower - Listwa czujników linii


Autor: Dondu

Artykuł jest częścią cyklu: Robotyka - Teoria oraz kurs budowy robotów.

Listwa czujników linefollowera to temat, który jest baaaardzo indywidualny i zależy tylko i wyłącznie od celów jakie stawiamy przed robotem i ... w które miejsce na zawodach celujemy :-)

Ścierają się tutaj różne sprzeczne potrzeby i zjawiska, a każde ma zalety i niestety także wady.



Oto kilka przykładów:

Prosty czujnik linii o 3 polach - Pololu.
Prosty czujnik linii o 3 polach - Pololu.


Prosty czujnik linii o 8 polach - Pololu.
Prosty czujnik linii o 8 polach - Pololu.

Kształt listwy z czujnikami nie musi być prostokątny i to konstruktor decyduje, jaki uzna za najlepszy dla swojego robota. Dlatego też znajdziesz wiele projektów robotów, które wykorzystują listwy wygięte do przodu:


Linefollower: Czujnik linii o 13 polach - kształt szerokiej litery U.


lub do tyłu:


Linefollower: Czujnik linii o 13 polach - kształt szerokiej litery n.


lub dokładnie po promieniu od środka pomiędzy kołami robota:


Linefollower: Czujnik linii o 13 polach - kształt wycinka okręgu od osi obrotu robota.


albo nawet takie:


Linefollower: Czujnik linii o 15 polach - rozmieszczenie czujników na wycinka okręgu od osi obrotu robota z dodatkowymi dwoma czujnikami skrajnymi z przodu.


Można także zagęszczać czujniki w środkowej części listwy np. tak:


Linefollower: Czujnik linii o 13 polach zagęszczonych w środkowej części - kształt wycinka okręgu od osi obrotu robota.


Każdy z przedstawionych wyżej oraz innych ma swoje zalety i wady, które zależą od wielu parametrów robota i kształtu trasy, po której podąża. Dlatego też:

Nie ma jednoznacznej odpowiedzi, który typ jest najlepszy do wszystkich linefollowerów, tak jak nie ma odpowiedzi, które przedni spojler jest najlepszy dla wszystkich samochodów formuły F1 :-)

Testy, testy, testy ... i jeszcze raz testy!

Ale jest jedna:

Najważniejsza zasada:
Odstęp między czujnikami nie może być większy niż szerokość linii. Dlatego warto jest przyjąć, że odstęp ten powinien stanowić około 75% szerokości linii lub mniej.


Wyjątkiem od powyższej zasady, mogą być dodatkowe czujniki dedykowane do wykrywania np. zbliżania się do ostrego zakrętu, które są wystawione znacznie przed listwę z czujnikami. Jednakże w dobie bardzo szybkich robotów, takie czujniki nie zawsze dają spodziewane rezultaty, ale to temat na osobny artykuł.


Na etapie testowym, warto rozważyć przygotowanie listwy opartej o zasadę działania grabi do liści o zmiennym rozstawie:

Linefollower: Przykład testowej wersji czujników w celu łatwego testowania różnych rozstawów.

Nie jest to łatwe do realizacji, ale daje kolosalne możliwości testowania różnych rozkładów czujników.


Odległość transoptorów od powierzchni

To bardzo newralgiczny punkt ze względu na zasięg transoptorów. Z reguły zasięg ten, to zaledwie 0,5-2mm. Szerzej pisałem o tym w artykułach:

Dlatego niezwykle istotne jest, by listwa z czujnikami była umocowana tak, by niezależnie od tego co się dzieje z robotem, czujniki nie odrywały się od podłoża na więcej niż w/w odległość.


Konstrukcje jednoosiowe

Wśród konstrukcji linefollowerów zdecydowanie przodują konstrukcje jednoosiowe. W ich przypadku listwa czujników stanowi naturalną podporę robota:


Linefollower jednoosiowy. Listwa z czujnikami i dystansami.
Linefollower jednoosiowy.


Na niniejszych rysunkach  żółtym kolorem  zaznaczyłem dystanse w postaci połowy sfery kuli, które odpowiadają za utrzymanie nie mniejszej niż wymagana odległości transoptorów od powierzchni. 

Dystanse muszą stawiać jak najmniejszy opór niezależnie od kierunku poruszania się robota. Dlatego sfera jest najlepszym kształtem, a teflon najlepszym materiałem, choć możesz mieć problem z ich zdobyciem i/lub przymocowaniem do listwy (klejenie teflonu nie jest proste). Niezłe są także kulki ceramiczne, które w szczególności w sztucznej biżuterii są stosowane i łatwiej je przykleić.

Jeżeli listwa jest wystarczająco sztywna, to wystarczą dwa dystanse po jednym na obu końcach listwy (patrz uwaga na końcu tego punktu). Jeżeli natomiast listwa nie jest wystarczająco sztywna można zastosować dodatkowy dystans w środkowej jej części.

Robot jednoosiowy, w zależności od długości ramienia i średnicy kół zmienia kąt obserwacji podłoża przez transoptory. Jeżeli kąt ten jest spory może t o negatywnie wpłynąć na odczyty linii. Dlatego też warto skorygować ten kąt w taki sposób, aby czoło czujników było równoległe do powierzchni. Można to zrobić wyginając delikatnie nóżki czujnika:

Linefollower  jednoosiowy - Korekta ustawienia transoptorów w listwie.
Linefollower jednoosiowy - Korekta ustawienia transoptorów w listwie.


W ten sposób uzyskamy najlepsze możliwe parametry pracy transoptorów, co zrewanżuje się nam niezawodnym ich działaniem.


Konstrukcje dwuosiowe

Inną wersją linefolowerów są konstrukcje dwuosiowe (taki będzie RoDonM8 w moim wykonaniu). W tym wypadku należy zamocować ramię listwy w taki sposób, by mogła swobodnie własnym ciężarem dociskać czujniki do podłoża. Możesz więc zastosować na przykład zawias:


Linefollower dwuosiowy. Listwa z czujnikami i dystansami.
Linefollower dwuosiowy.


Na koniec tego punktu, bardzo istotna uwaga praktyczna:

Uwaga dot. zawodów!

W trakcie zawodów możesz się spotkać z sytuacją, że tor jest ułożony z kilku płyt, w przypadku których łączenia nie są idealnie płaskie!!!

Z reguły na łączeniach robot jedzie pod kątem prostym do krawędzi płyty. Dlatego jest bardzo istotne w przypadku listwy w kształcie fragmentu łuku wygiętego do przodu, by w środkowej części także umieścić dystans.

W ten sposób nie narazisz się na utratę czujników :-)






Ilość czujników

Ile czujników powinno być na listwie?

Jeden czujnik

Przy niezbyt dużej prędkości robota wystarczy jeden, który będzie jechał po wybranej krawędzi linii:

Robot z jednym czujnikiem śledzący krawędź linii.
Robot z jednym czujnikiem śledzący krawędź linii.


W takim przypadku należy jednak napisać program tak, by wiedział w którą stronę ma skręcić, gdy czujnik widzi jasną powierzchnię, a w którą gdy widzi ciemną:


Algorytm robota z jednym czujnikiem  śledzącego krawędź linii.
Algorytm robota z jednym czujnikiem
śledzącego krawędź linii.


Niestety robot będzie miał tendencję do sporych oscylacji w poszukiwaniu krawędzi, co jak zapewne się domyślasz nie pozwoli na osiągnięcie zbyt dużej prędkości jazdy. Jeżeli ją zaryzykujesz, to taki robot szybko zgubi linię przy pierwszym ostrzejszym zakręcie, gdy przejedzie na jej drugą krawędź:


Robota z jednym czujnikiem śledzącego krawędź linii - błędna decyzja po przekroczeniu drugiej krawędzi linii.
Robot z jednym czujnikiem śledzącego krawędź linii.
Błędna decyzja po przekroczeniu drugiej krawędzi linii.

i podejmie złą decyzją :-)

Dla zakrętu w prawo sytuacja będzie odwrotna, ale konsekwencje takie same, czyli wypadnięcie z trasy.


Dwa czujniki

No to może zastosujmy dwa czujniki?

Pamiętając o zasadzie, że odstęp pomiędzy czujnikami powinien być mniejszy niż szerokość linii będziemy mieli następującą sytuację:


Linefollower - Robota z dwoma czujnikami.
Robota z dwoma czujnikami.


Dołożenie drugiego czujnika znacznie ułatwi robotowi orientację w położeniu względem linii i pozwoli na znacznie mniejsze oscylacje (w zależności od szerokości linii i rozstawu czujników), przez co także na znacznie większą prędkość jazdy .


100 czujników

Skoro im więcej tym lepiej, to może zróbmy 100 czujników?

Ba! Z punktu widzenia człowieka, im więcej czujników (większa rozdzielczość) tym lepiej i tym łatwiej i szybciej można zauważyć, w którą stronę linia ucieka. Jest to możliwe, ponieważ mamy bardzo sprawne CPU w postaci naszego mózgu :-)

Jednakże z punktu widzenia robota nie jest to już taka oczywista prawda, ponieważ każdy czujnik wymaga:
  • podłączenia w jakiś sposób do mikrokontrolera,
  • odczytania jego stanu przez program,
  • dokładnej analizy zależności od innych czujników,
  • niemałego prądu zasilania diody oświetlającej podłoże obserwowane przez dany czujnik,
a to wszystko wymaga dodatkowych układów czy większego akumulatora (zwiększona waga) lub wejść mikrokontrolera i dodatkowej mocy obliczeniowej.


Kompromis

Jaki jest więc najlepszy kompromis?

Podobnie jak w przypadku kształtów listwy, także i tutaj musimy kombinować i testować, testować ... i jeszcze raz testować przyjęte rozwiązanie.

Ale żeby wskazać Ci pewną drogę powinieneś przyjąć, że czujników powinno być co najmniej 5, lecz nie więcej niż 20-25. Kilkanaście, to optymalne rozwiązanie.



Parzysta, czy nieparzysta ilość czujników?

W zasadzie nie ma znaczenia jakie rozwiązanie wybierzesz. Wszystko i tak zależy od tego jak napiszesz program. Jednakże nieparzysta ilość czujników z środkowym czujnikiem wiodącym, jest naturalnym i łatwym do oprogramowania rozwiązaniem.

Na pewno stosuj nieparzystą ilość czujników w przypadku, gdy stosujesz ich niewielką ilość.






Waga listwy

W poprzednim artykule wspominałem, jak ważna jest masa całkowita robota i w jaki sposób wpływa na jego osiągi. W przypadku ramienia podtrzymującego listwę czujników oraz samej listwy, ich waga jest szczególnie istotna.

Domyślasz się kiedy?

W trakcie pokonywania zakrętów siła bezwładności listwy czujników i ramienia, przeciwdziała obrotowi robota w zadanym kierunku. Zjawisko, to powoduje:
  • opóźnienie momentu skrętu,
  • nie pozwala na ciasne zakręty,
  • może spowodować zerwanie przyczepności kół i uślizg robota.

Powstający w czasie skrętu moment bezwładności wynosi (dla punktu materialnego):


gdzie:
  • m - masa punktu,
  • r - promień obrotu.
czyli:

Moment bezwładności (punktu materialnego) jest iloczynem jego masy i kwadratu odległości od osi obrotu.

Listwa robota wraz z ramieniem nie są punktem materialnym lecz skomplikowaną bryłą i różnorodnej masie w danym punkcie materialnym. Aby obliczyć dla takiego przedmiotu moment bezwładności występujący podczas skręcania, należałoby rozbić tę bryłę na punkty materialne i zsumować poszczególne momenty bezwładności, czyli wykonać obliczenia jak w przypadku czajnika :-) :


Momenty bezwładności przykładowych brył.
Momenty bezwładności przykładowych brył.
Źródło: Wikipedia


Powyższe zjawisko ma kolosalny wpływ na zachowanie się robota na trasie. Dlatego też:

Niezwykle ważne jest minimalizowanie wagi listwy z czujnikami oraz ramienia w szczególności, gdy listwa jest wysunięta daleko do przodu.

5 komentarzy:

  1. Znalazłem jeden błąd a mianowicie w zdaniu "Na etapie testowy, warto rozważyć przygotowanie listwy opartej o zasadę działania grabi do liści o zmiennym rozstawie:" powinno być raczej "na etapie testowym" a nie "na etapie testowy,".

    OdpowiedzUsuń
    Odpowiedzi
    1. Dziękuję za spostrzegawczość. Poprawię, gdy dodam zapomniane rysunki dot. odległości czujników od podłoża :-)
      Pozdrawiam!

      Usuń
  2. "Moment bezwładności jest iloczynem jego masy i kwadratu odległości od osi obrotu" <- tak, ale tylko dla punktu materialnego

    OdpowiedzUsuń
    Odpowiedzi
    1. Dziękuję za zwrócenia uwagi.

      Zgadza się, definicja dot. punkty materialnego, dlatego też zaraz pod nią zamieściłem animację znalezioną na Wikipedii, by pokazać jak zmieniają się wzory w zależności od kształtu przedmiotu. Do formułki dodam, iż chodzi o punkt materialny.

      Usuń
  3. A jak dobrać odległoość listwy o osi kół?

    OdpowiedzUsuń