środa, 30 marca 2011

Robotyka: Linefollower - Podążanie za linią


Autor: Dondu

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

Roboty jeżdżące po wyznaczonej trasie narysowanej na podłożu lub z nim zintegrowanej, nie są bynajmniej nowością. Są one powszechnie wykorzystywane od wielu lat w zautomatyzowanych fabrykach, w czym przodowali oczywiście Japończycy w latach 70-tych i 80-tych XX wieku.

Techniki wyznaczenia drogi były różne od narysowanych linii w fabrykach, w których czystość była możliwa do zachowania idealnej czystości, do elektromagnetycznych tam gdzie takiego warunku nie można było spełnić.

Jedna cecha była wspólna - czujniki wykrywały drogę ciągle ją obserwując:



Magazyn SONDA - rok 1983
Andrzej Kurek, Zdzisław Kamiński i Tomasz Pyć
... którzy rozbudzali moją ciekawość fizyki, elektroniki i informatyki.
Dziękuję Wam i szkoda, że nie ma już Was wśród nas ...



Aktualnie odbywa się to tak (np. Amazon w 2013r.):



W przypadku naszego robota niezbędne będą:
  • podłoże z linią w kolorze kontrastowym do podłoża,
  • robot z czujnikiem optycznym,
  • algorytm podążania za linią.

W niniejszym artykule zajmiemy się częścią elektroniczną czujników linii. Jako czujniki linii można wykorzystać:
  • kamerę wideo,
  • inne elementy światłoczułe,
a w obu przypadkach, do rozpoznania linii niezbędne jest źródło światła. W przypadku tego artykułu interesuje nas ta druga grupa, czyli czujniki światła odbitego.

Jako czujniki światła odbitego, wykorzystywane w procesie śledzenia linii przez małe roboty (linefollowery) , wykorzystywane są z reguły scalone transoptory odbiciowe.

Zawierają one w sobie zarówno, źródło światła (emiter) jak i element światłoczuły (detektor):

Transoptor odbiciowy CNY70.
Transoptor odbiciowy CNY70.

Transoptor odbiciowy KTIR0711S.
Transoptor odbiciowy KTIR0711S.


Symbolem prostego transoptora odbiciowego jest podstawowy symbol transoptora:

Symbol transoptora odbiciowego.
Symbol transoptora odbiciowego.


Noty katalogowe (datasheet) powyższych transoptorów:

Aby łatwiej zrozumieć zagadnienia poruszane w niniejszym artykule, powinieneś znać dokładnie najistotniejsze parametry transoptorów odbiciowych, które opisałem w cyklu: Transoptory odbiciowe






Sygnał cyfrowy, czy analogowy?

Na początek postawmy pytanie: Jaki rodzaj sygnału dostarcza transoptor odbiciowy?

Dla nas najlepiej byłoby, gdyby transoptor dostarczał od razu sygnał cyfrowy w postaci np.:
  • gdy czujnik jest nad linią, to otrzymujemy jedynkę,
  • gdy czujnik jest poza linią, otrzymujemy zero.

Linefollower - Czujniki nad linią i poza nią.

Czy to jest możliwe?
Niezupełnie ponieważ może wystąpić kilka zjawisk przez nas niepożądanych, o których piszę poniżej.


Czujnik częściowo nad linią, a częściowo poza linią

Co się stanie, gdy czujnik będzie częściowo nad linią, a częściowo poza nią?


Linefollower - Transoptor częściowo nad linią, częściowo poza nią.

Tutaj najszybciej ujawnia się analogowa charakterystyka czujnika. Elementem czułym na odbite światło jest fototranzystor, a jak zapewne wiesz nie jest on elementem zero-jedynkowym, tylko ma swoją charakterystykę, a ta  nie jest zero-jedynkowa.

Zobaczmy jak wygląda to na przykładzie CNY70. Zerkamy do datasheet i znajdujemy wykres:

Transoptor odbiciowy - Zależność odpowiedzi od odległości od powierzchni oraz przesuwającej się powierzchni.

Wykresy te pokazują:
  • jaki poziom sygnału otrzymamy, zależnie od odległości (d) czujnika od powierzchni,
  • jak na poziom sygnału wpływa przemieszczenie (s) czujnika względem krawędzi linii.
Powyższy wykres szczegółowo opisałem w artykule: Transoptor odbiciowy: Wpływ ruchu powierzchni na odpowiedź transoptora


Odległość transoptora od powierzchni nie jest stała

W czasie jazdy robota, w zależności od jego konstrukcji i/lub powierzchni po której jedzie, odległość transoptora odbiciowego od powierzchni może się zmieniać. Ma to bezpośredni wpływ na wartość sygnału jakim odpowiada transoptor.

W przypadku transopotorów odbiciowych zależność odpowiedzi transoptora od odległości czujnika od powierzchni jest bardzo różna, ale w większości przypadków różnica 2-3mm znacząco wpływa na wartość sygnału na wyjściu transoptora.

Możesz to zaobserwować na wykresie z poprzedniego punktu (powyżej). Zauważ, jak zmienia się wartość sygnału (bardziej płaski) wraz z niewielkim zwiększeniem odległości oznaczonej literką d, np. z 1mm do 4mm.

O problemie dot. odległości czujników od podłoża vs różne konstrukcje linefollowerów pisałem także w artykule: Linefollower - Listwa czujników linii.



Podłoże nigdy nie jest idealnie czarne lub białe

W robotyce należy być realistą i nie można przyjmować, że czarne podłoże jest idealnie czarne i całkowicie pochłania emitowane przez transoptor światło. Zawsze jakaś część światła zostanie odbita w kierunku fototranzystora czujnika.


Transoptor odbiciowy - Światło odbite nigdy nie wraca w 100% do detektora.


Podobnie jest oczywiście w przypadku białego podłoża, czy linii. Może być przecież zabrudzone albo mniej lub bardziej matowe, czy błyszczące.


Inne "niecyfrowe" parametry i zjawiska

Na to że sygnał z transoptora nie jest stricte zero-jedynkowy, mają także wpływ inne parametry i zjawiska:
  • jak każdy element elektroniczny, także i transoptor ma swoje charakterystyki, które nie są zero-jedynkowe,
  • sposób montażu transoptora także może być istotny,
  • zabrudzenia powierzchni obserwującej transoptora także mają wpływ na nierównomierne wskazywanie przez poszczególne transoptory,
  • itd., itp. ...
Większość tych które dotyczą parametrów transoptora omówiłem w cyklu dot. Transoptorów odbiciowych.






Jednak sygnał analogowy! Wyznaczamy "Próg decyzji".

Z powyższych przypadków możemy wyciągnąć ostateczny wniosek, że:

Sygnał dostarczany przez transoptor odbiciowy jest sygnałem analogowym.

Skoro jest analogowy, to musimy go przekształcić na sygnał cyfrowy zgodnie z naszymi potrzebami. Oznacza to, że musimy wyznaczyć jakiś próg wartości sygnału analogowego z transoptora, przy którym nastąpi rozpoznanie w postaci:
  • czujnik jest nad linią (czyli jedynka)
  • czujnik jest poza linią (czyli zero).
który nazwiemy sobie progiem decyzji.

Powinniśmy to zrobić, niezależnie od tego, czy zastosujemy rozwiązanie sprzętowe, czy programowe.


Czy można na sztywno przyjąć, że jest to np. 50%?

Nie można ze względu na te wszystkie przypadki, które opisałem wyżej. W robocie, który ma się poruszać po różnych podłożach (np. na różnych zawodach), aby być pewnym pracy robota należy na każdej trasie (np. przed wyścigiem) dokonać kalibracji czujników linii.

Kalibracja może być dokonana przed rozpoczęciem jazdy lub robiona "w locie"  w czasie jazdy. To drugie daje robotowi szansę dostosowania się do zmieniających się warunków na trasie (jeżeli jest to dla nas istotne), ale komplikuje algorytm i zwiększa obciążenie mikrokontrolera. Coś za coś :-)


Praktyczne rozwiązania

Jak już wspomniałem wyżej moduł czujników może zawierać sprzętowe (dodatkowe zewnętrze elementy) rozwiązanie zmiany sygnału analogowego na cyfrowy lub można to wykonać programowo.


Rozwiązanie sprzętowe 

Rozwiązanie sprzętowe, to transoptory podłączone do zewnętrznych komparatorów (zamieniających sygnał analogowy na cyfrowy), a sygnały wyjściowe podłączone do dowolnych wejść cyfrowych mikrokontrolera:


Linefollower - Czujnik linii z wykorzystaniem transoptora i komparatora ze stałym progiem decyzji.
Czujnik linii z wykorzystaniem transoptora i komparatora ze stałym progiem decyzji.


Jeżeli nie wiesz jak działa komparator możesz przeczytać artykuły:

Wyjaśnienia wymagają rezystory:
  • R1 wraz z R2 tworzą rezystorowy dzielnik napięcia, którym ustawiamy na stałe wartość progu decyzji. Rezystory te mogą być przy każdym komparatorze, ale można także wykorzystać jeden wspólny dzielnik dla wszystkich komparatorów,
  • R3 jest niezbędny ze względu na to, że wyjście komparatora jest typu otwarty kolektor. Rezystor ten można zastąpić wewnętrznymi rezystorami pull-up, które są dostępne w pinach wejść cyfrowych w większości mikrokontrolerów. W takim przypadku wystarczy je włączyć za pomocą programu. Jednakże należy wziąć pod uwagę, że taki rezystor ma z reguły kilkadziesiąt , co może mieć wpływ na szybkość działania tak zbudowanego układu rozpoznawania linii.

Zalety:
  • szybki odczyt dużej ilości czujników naraz,
  • odciążenie mikrokontrolera,
  • uproszczenie programu,
  • wykorzystanie dowolnych wejść cyfrowych (pinów) mikrokontrolera.
Wady:
  • próg decyzji ustawiony na stałe bez możliwości regulacji,
  • dodatkowe elementy elektroniczne (większe koszty),
  • dodatkowy ciężar (istotne w dla robotów startujących w zawodach).

Ponieważ warto mieć możliwość regulacji progu decyzji, stąd możemy zastosować dwa rozwiązania:

Rozwiązanie sprzętowe - wersja A

Najprostszym rozwiązaniem ustawienia napięcia progu decyzji jest wykorzystanie potencjometru montażowego. Zamieniamy więc dzielnik rezystorowy na potencjometr montażowy:


Linefollower - Czujnik linii z wykorzystaniem transoptora i komparatora z progiem decyzji regulowanym potencjometrem.
Czujnik linii z wykorzystaniem transoptora i komparatora
z progiem decyzji regulowanym potencjometrem.


Uwagi dot. R3, są takie same jak w poprzednim przypadku.

Podobnie jak w poprzednim przypadku, także i tutaj potencjometr może ustalać napięcie progu decyzji dla wszystkich komparatorów czujnika linii.

Zaletą jest posiadanie możliwości regulacji progu decyzji w zależności od powierzchni podłoża.

Wadą takiego rozwiązania jest fakt, iż potencjometr montażowy nie może być ustawiany przez program, w związku z czym projektant robota sam musi dobrać "ręcznie" odpowiednie ustawienie do danej powierzchni, po której robot będzie się poruszał.


Rozwiązanie sprzętowe - wersja B (polecana)

Innym rozwiązaniem sprzętowym, które polecam jest wykorzystanie sygnału PWM, dzięki któremu możemy programowo zmieniać próg decyzji w zależności od potrzeb:


Linefollower - Czujnik linii z wykorzystaniem transoptora i komparatora z progiem decyzji regulowanym sygnałem PWM.
Czujnik linii z wykorzystaniem transoptora i komparatora
z progiem decyzji regulowanym sygnałem PWM.


Uwagi dot. R3, są takie same jak w poprzednich przypadkach.

Zamiast dzielnika rezystorowego lub potencjometru, stosujemy pin generujący stały sygnał PWM oraz prosty filtr dolnoprzepustowy (RC), złożony z rezystora R6 oraz kondensatorów C1 i C2. Także i w tym przypadku sygnał PWM może ustalać napięcie progu decyzji dla wszystkich komparatorów czujnika linii.

Dlaczego dwa kondensatory? Zależy nam na tym, by wykrywanie linii było jak najdokładniejsze, dlatego powinniśmy zadbać o to, by napięcie na wejściach ujemnych komparatorów, było możliwie najstabilniejsze. Ponieważ sygnał PWM, to przebieg prostokątny, stąd też należy poświęcić uwagę na ten fragment czujnika linii, by nie okazało się, że napięcie nie jest stabilne. Szczegóły dot. doboru filtra RC, znajdziesz w jednym z artykułów dot. RoDonM8.

Zaletą takiego rozwiązania jest możliwość automatycznego dostosowania progu decyzji w zależności od jakości podłoża i linii.

Wadą może być fakt, iż należy poświęcić jeden z timerów generujących sygnał PWM wraz z dodatkowym pinem. W przypadku braku timera z funkcją PWM można pokusić się o generowanie sygnału PWM programowo, ale może to wpłynąć na jakość pracy czujnika linii (programowe PWM może nie być idealne z powodu zależności czasowych w wykonywaniu programu).


Który komparator wybrać?

Najtańszy! :-)

Dobrym i tanim komparatorem jest popularny LM339 z rodziny LM339, LM239, LM2901, LM2901V, NCV2901, MC3302, który zawiera w sobie cztery niezależne komparatory i kosztuje zaledwie 0,36zł brutto (cena dn. 2013.08.16):

Schemat blokowy komparatora z rodziny LM339.
Schemat blokowy komparatora z rodziny LM339.


Innym równie tanim i dobrym do tych celów jest LM393 z rodziny LM193, LM2903, LM293, LM393, który w jednej obudowie zawiera dwa komparatory:


Schemat blokowy komparatora z rodziny LM393.
Schemat blokowy komparatora z rodziny LM393.


Dwie istotne uwagi dot. stosowania komparatorów:

Jeżeli ilość transoptorów nie będzie dokładnie odpowiadała ilości komparatorów w układach, gdy np. masz 10 czujników, to:
  • nie mieszaj różnych komparatorów, ponieważ mają one różne charakterystyki, a robot ma jeden wspólny sygnał progu decyzji, czyli nie stosuj 2xLM339 + 1xLM393, tylko 3xLM339 lub 5xLM393
  • niewykorzystane wejścia komparatorów nie pozostawiaj bez polaryzacji ponieważ powstaną "antenki", a wyjścia będą "wariować" generując zakłócenia. Jeżeli masz taką sytuację podłącz niewykorzystane wejścia do Vcc lub GND. Wyjścia mogą być niepodłączone.

Docelowe rozwiązanie powinno więc wyglądać następująco:


Linefollower - Schemat listwy czujników (transoptorów) robota z wykorzystaniem komparatorów.
Schemat listwy czujników (transoptorów)
z wykorzystaniem komparatorów.

przy czym filtr sygnału PWM możesz opracować we własnym zakresie np. dwustopniowy, a do ich obliczania możesz wykorzystać dostępne kalkulatory.


Uwagi końcowe rozwiązania sprzętowego

Należy tutaj zwrócić uwagę na fakt, że mając wspólną regulację progu decyzji mogą występować minimalne różnice między pracą poszczególnych komparatorów. Jak każdy układ scalony także i one mają swoje charakterystyki, a większość parametrów zawiera się w przedziałach minimum i maksimum.

Na poziomie amatorskim w większości przypadków nie będzie to miało znaczenia, o tyle przy projektach, które liczą na złoty medal na zawodach warto pokusić się, by sprawdzić, czy wszystkie czujniki wraz komparatorami działają jednakowo w zależności od ustawienia progu decyzji. To żmudna praca, ale czego się nie robi dla medali :-)

Innym prostym rozwiązaniem, jest zastosowanie komparatorów pochodzących z tej samej partii (rolki), co zwiększa prawdopodobieństwo użycia komparatorów jednakowych parametrach uzyskanych w procesie produkcji danej partii..



Rozwiązanie programowe

Drugim sposobem, jest wykorzystanie przetwornika analogowo-cyfrowego (ADC) dostępnego w mikrokontrolerze. W takim przypadku, sygnały z czujników podłączamy bezpośrednio do wejść ADC mikrokontrolera i wykorzystując wewnętrzny multiplekser "przemiatamy" nasze czujniki według kolejności, którą sobie ustalimy:


Czujnik linii z wykorzystaniem transoptora i przetwornika ADC mikrokontrolera z progiem decyzji regulowanym programowo.
Czujnik linii z wykorzystaniem transoptora i przetwornika ADC
mikrokontrolera z progiem decyzji regulowanym programowo.


Rezystor R4 spełnia tę samą rolę co R3 w rozwiązaniu sprzętowym omawianym wcześniej i także może być zastąpiony wewnętrznym rezystorem pull-up o ile mikrokontroler może go mieć włączony w momencie gdy wejście wykorzystywane jest jako kanał pomiarowy przetwornika ADC. Także i tutaj wartość rezystora może determinować szybkość działania czujników linii.

Zalety:
  • programowa kalibracja (bardzo użyteczna funkcja),
  • mniej elementów zewnętrznych,
  • mniejszy ciężar robota,
  • z reguły mniejsze koszty.
Wady:
  • wymagana spora ilość wejść przetwornika ADC,
  • dłuższy czas odczytu kompletu czujników,
  • zwiększenie obciążenia mikrokontrolera,
  • zwiększenie stopnia skomplikowania programu.


Podsumowanie

Wykrywanie położenia linii względem robota, nie jest zadaniem specjalnie trudnym, ale nie jest też błahym. Należy wziąć pod uwagę sporo czynników, które decydują o zastosowanym rozwiązaniu. Zlekceważenie niektórych z nich, może zakończyć się podjęciem złej decyzji przez program, co w przypadku np. linefollowera może skończyć się utratą dobrej lokaty na zawodach.

Dlatego we wszystkich projektach polecam w szczególności zwracać uwagę na dopracowanie czujników:

Dbaj o dane wejściowe ponieważ:
  • nawet najlepszy program nie podejmie właściwych decyzji na podstawie złych danych,
  • program łatwo można poprawić, a elektronikę już niekoniecznie.

Brak komentarzy:

Prześlij komentarz