Założenia robota line follower i architektura systemu
Co to jest line follower i jakie są realne cele projektu
Robot line follower to niewielka, autonomiczna platforma mobilna, której zadaniem jest podążanie po wyznaczonej linii, zwykle czarnej na białym tle lub białej na ciemnym podłożu. Dla wielu osób to pierwszy poważniejszy projekt z robotyki łączący elektronikę, mechanikę i programowanie. Dobrze zaprojektowany line follower wymaga przemyślanego doboru czujników, stabilnego algorytmu sterowania – najczęściej PID – oraz starannego strojenia robota na rzeczywistej trasie.
Cel takiego robota może być różny. Dla jednych to konstrukcja do zawodów szybkościowych, gdzie liczy się dynamika i precyzja jazdy przy dużej prędkości. Dla innych – platforma edukacyjna, która ma nauczyć podstaw automatyki, filtracji pomiarów, sterowania silnikami czy komunikacji z mikrokontrolerem. Od tych celów zależy dobór podzespołów, budżet oraz stopień skomplikowania algorytmu sterowania.
Istotne jest, aby na starcie określić, czy robot ma:
- jeździć po prostej, niezbyt szybkiej trasie bez ostrych zakrętów,
- radzić sobie z rozgałęzieniami, skrzyżowaniami i pętlami,
- utrzymywać bardzo wysoką prędkość, nawet kosztem złożoności oprogramowania,
- być prosty w budowie, z minimalną liczbą czujników i elementów regulacyjnych.
Nawet jeśli celem są przyszłe zawody, rozsądnym krokiem jest zbudowanie najpierw robota o umiarkowanych parametrach, który dobrze trzyma się linii i reaguje przewidywalnie. Dopiero na takiej bazie ma sens podnoszenie prędkości, dodawanie czujników i zaawansowanych algorytmów.
Główne bloki funkcjonalne line followera
Każdy robot line follower, niezależnie od budżetu i zastosowanej elektroniki, składa się z kilku typowych bloków funkcjonalnych. Świadome zaprojektowanie tej architektury ułatwia później strojenie PID i rozwiązywanie problemów na trasie.
Podstawowe bloki to:
- Moduł detekcji linii – zestaw czujników (najczęściej optycznych), które wykrywają położenie linii pod robotem.
- Mikrokontroler i logika sterująca – serce układu, które przetwarza dane z czujników, oblicza błąd względem środka linii i generuje sygnał sterujący do napędu.
- Moduł napędowy – silniki (zwykle prądu stałego lub bezszczotkowe w bardzo szybkich konstrukcjach) z mostkiem H lub sterownikami, które realizują komendy prędkości i skrętu.
- Zasilanie – akumulator z odpowiednim zapasem prądu i napięcia, układy stabilizacji, często oddzielne linie zasilania dla logiki i napędu.
- Konstrukcja mechaniczna – podwozie, rozmieszczenie czujników, rozstaw kół, środek ciężkości, kółko podporowe lub ślizg.
Do tego można dodać elementy opcjonalne: czujniki inercyjne (IMU), enkodery na kołach do pomiaru prędkości, moduły komunikacji (Bluetooth, Wi-Fi) czy dodatkowe przyciski i wyświetlacze do kalibracji na trasie. Im prostszy robot, tym mniej problemów na początek, ale zbyt duże uproszczenia potrafią wrócić jak bumerang podczas prób zwiększania prędkości.
Minimalne i rozszerzone wymagania sprzętowe
Minimalna konfiguracja typowego amatorskiego line followera to:
- mikrokontroler klasy Arduino (np. ATmega328, STM32 w podstawowej wersji, ESP32),
- 2 silniki DC z przekładnią, mostek H (np. L298N, lepiej wydajniejszy DRV8833/DRV8871),
- 5–8 czujników odbiciowych IR lub gotowa linijka (np. TCRT5000x, QTR-8A/QTR-8RC),
- akumulator LiPo 2S lub 3S z odpowiednią wydajnością prądową,
- proste podwozie z tworzywa, sklejki lub druku 3D.
Bardziej zaawansowane projekty rozbudowują listę o:
- enkodery na silnikach – do kontroli prędkości i długości przejazdu,
- czujnik IMU (akcelerometr + żyroskop) – do dodatkowej stabilizacji i wykrywania gwałtownych manewrów,
- programowalne sterowniki silników z wejściem PWM i pomiarem prądu,
- moduł komunikacji bezprzewodowej (do logowania błędu PID i szybkości),
- regulowane uchwyty czujników – ułatwiające ich pochylenie i wysokość nad torem.
Nie wszystkie te elementy są potrzebne, aby robot dobrze jeździł po linii. Natomiast w praktyce strojenie PID i testy na trasie są znacznie wygodniejsze, gdy da się np. nagrywać przebieg błędu w czasie rzeczywistym lub szybko zmieniać parametry z poziomu telefonu.
Dobór czujników do robota line follower
Rodzaje czujników do detekcji linii
Najważniejszym elementem line followera są czujniki wykrywające kontrast między linią a podłożem. W 99% projektów używa się czujników optycznych, jednak ich konstrukcja i parametry mogą być bardzo różne. Dobrze dobrany zestaw czujników ułatwia algorytm sterowania, źle dobrany – generuje szumy, niestabilne odczyty i wymusza skomplikowaną filtrację.
W praktyce stosuje się głównie trzy grupy czujników:
- Czujniki odbiciowe IR (refleksyjne) – nadajnik IR (dioda) świeci w dół, odbite światło jest mierzone przez fototranzystor lub fotodiodę. Ciemna linia odbija mniej światła, jasne tło więcej.
- Czujniki koloru/RGB – mierzą intensywność światła w poszczególnych kolorach, pozwalają rozróżniać nie tylko czernie/biele, ale konkretny kolor linii i tła.
- Czujniki kamery (wizyjne) – niewielkie kamery z dedykowanym procesowaniem obrazu, używane w bardzo zaawansowanych konstrukcjach.
W robotach amatorskich i na zawodach w kategoriach standardowych królują czujniki odbiciowe IR. Są tanie, szybkie i proste w integracji z mikrokontrolerem. Moduły z wbudowaną regulacją progu komparatora można potraktować jako proste detektory „linia / brak linii”, ale znacznie wygodniejsze jest korzystanie z wersji analogowej lub z możliwością odczytu wartości „szarości” (np. rodzina QTR z PWM/RC).
Parametry czujników istotne dla line followera
Przy wyborze modułów czujników do robota line follower, warto przyjrzeć się kilku konkretnym parametrom katalogowym, a nie tylko cenie i liczbie elementów na linijce. Kluczowe cechy to:
- Czułość i zakres pomiaru odbicia – zbyt mały zakres powoduje, że jasne tło i ciemna linia dają podobne odczyty; zbyt duża czułość może objawiać się dużym wpływem zakłóceń oświetlenia zewnętrznego.
- Szybkość odpowiedzi – ważna, gdy robot jeździ szybko. Czujnik o dużej stałej czasowej będzie „rozmazany” w czasie i zmniejszy dokładność wykrywania zakrętów.
- Geometria plamki pomiarowej – kąt świecenia diody IR oraz kąt widzenia fototranzystora determinują szerokość obszaru, z którego zbierany jest sygnał. Zbyt szeroki kąt utrudnia precyzyjne wykrycie krawędzi linii.
- Zakres odległości roboczej – czujnik powinien działać w odległości kilku milimetrów od podłoża. Jeśli charakterystyka ma wyraźne maksimum w innym punkcie, konieczne może być mechaniczne dostosowanie położenia.
- Odporność na oświetlenie zewnętrzne – modulacja diody IR i odpowiednia filtracja po stronie odbiornika mogą poprawić stabilność w jasnych pomieszczeniach.
Standardowe czujniki typu TCRT5000 czy QTR działają dobrze w typowych warunkach halowych. Jeżeli jednak tor ma lśniącą powierzchnię, jest nierówny lub pojawiają się refleksy od lamp, trzeba położyć większy nacisk na kalibrację oraz filtrację sygnałów w programie.
Liczba i rozmieszczenie czujników w robocie
Minimalnie robot line follower może mieć trzy czujniki: lewy, środkowy i prawy. W takiej konfiguracji da się zbudować prosty regulator, ale precyzja pozycjonowania względem linii i zdolność pokonywania ostrych łuków będzie ograniczona. Dlatego większość konstrukcji korzysta z 5–8 czujników ułożonych w linię poprzeczną do kierunku ruchu.
Typowy układ to:
- 5 czujników – tani i wystarczający dla średnio szybkich robotów,
- 7–8 czujników – popularny w szybszych konstrukcjach z PID,
- więcej niż 8 – stosowane w rozwiązaniach, które dodatkowo analizują geometrię zakrętów lub wykrywają rozgałęzienia.
Rozstaw czujników powinien być dopasowany do szerokości linii i oczekiwanej geometrii trasy. Zbyt gęsty rozstaw na wąskiej linii nie wnosi dodatkowej informacji, a jedynie zwiększa liczbę próbek do przetworzenia. Zbyt duży rozstaw może powodować „gubienie” linii przy ostrzejszych łukach, gdy linia znajduje się pomiędzy skrajnymi czujnikami.
Czujniki należy ustawić możliwie blisko przedniej krawędzi robota, aby błąd położenia był wykrywany z wyprzedzeniem. Im dalej czujniki są od osi obrotu (środka osi kół napędowych), tym mniejszy błąd kątowy na jednostkę odchylenia linii. W praktyce stosuje się odległość kilku centymetrów od osi kół; dokładna wartość zależy od promienia skrętu i prędkości docelowej.
Wysokość i pochylenie czujników nad podłożem
Wydaje się, że wystarczy przylutować linijkę czujników równolegle do podłoża i po sprawie. W praktyce wysokość oraz kąt nachylenia czujników względem podłogi istotnie wpływają na kontrast odczytów pomiędzy linią a tłem. Bez regulacji w tym obszarze trudno uzyskać stabilny i powtarzalny sygnał wejściowy do algorytmu PID.
Najczęściej ustawiana jest odległość w zakresie 2–8 mm od powierzchni toru. Zbyt mała odległość może spowodować, że niewielkie nierówności lub pył na torze zakłócą odczyt. Zbyt duża – obniża intensywność odbitego światła i redukuje różnice między czernią i bielą. Optymalny punkt można znaleźć doświadczalnie, wykonując krótkie skany liniowe i obserwując wartości sygnału analogowego dla linii i tła.
Delikatne pochylenie modułu (np. 5–15° w kierunku jazdy) czasem pomaga ograniczyć odbicia światła od błyszczącej powierzchni. Takie pochylanie powinno być jednak świadome – warto zmierzyć odczyty dla różnych ustawień i wybrać konfigurację, która daje największy odstęp między wartościami dla czarnej linii i białego tła, a jednocześnie stabilne zachowanie przy lekkich nierównościach.

Kalibracja czujników i przetwarzanie sygnału
Procedury kalibracji poziomu czerni i bieli
Nawet najlepsze czujniki odbiciowe nie dadzą spójnych wyników bez kalibracji. Każdy tor jest trochę inny: różny materiał, odcień bieli, różna farba linii. Dodatkowo każdy czujnik w linijce ma własną charakterystykę. Z tego powodu przy starcie robota warto przeprowadzić krótką procedurę kalibracji, która określi minimalną i maksymalną wartość odczytu dla każdego czujnika.
Przykładowa procedura może wyglądać tak:
- Ustawić robota na torze tak, aby podczas ruchu kalibracyjnego wszystkie czujniki „zobaczyły” zarówno tło, jak i linię.
- Na kilka sekund włączyć tryb kalibracji, w którym robot powoli kołysze się lewo–prawo lub wykonuje niewielkie ruchy do przodu i do tyłu.
- Dla każdego czujnika zapisywać minimalną i maksymalną zaobserwowaną wartość sygnału.
- Na koniec przeliczać odczyty na wartość znormalizowaną w zakresie 0–1000 (lub 0–1), stosując wzór:
norm = (raw – min) / (max – min).
Taka kalibracja pozwala kompensować różnice pomiędzy czujnikami oraz odmienną jasność torów na różnych zawodach. W mikrokontrolerach o ograniczonej pamięci można przechowywać tylko dane dla aktualnej sesji lub zachowywać je w pamięci nieulotnej, jeśli tor jest stały.
Filtrowanie i redukcja szumów w odczytach
Rzeczywiste sygnały z czujników line followera są zaszumione. Wynika to z nierówności toru, zanieczyszczeń, różnic w farbie, a także z zakłóceń elektrycznych od silników. Brak filtracji skutkuje nerwową, „szarpiącą” jazdą robota i niestabilnym błędem wejściowym do algorytmu PID.
Stosuje się kilka prostych, ale skutecznych metod filtracji:
Proste metody programowego filtrowania
Najłatwiej zacząć od filtrów, które wymagają minimalnych zasobów obliczeniowych i pamięci. Działają one wystarczająco dobrze w większości amatorskich konstrukcji, szczególnie przy typowych mikrokontrolerach 8‑ i 32‑bitowych.
- Uśrednianie ruchome (moving average) – dla każdego czujnika przechowywana jest ostatnia seria odczytów (np. 4–8 próbek), a do obliczeń używa się średniej. Taki filtr skutecznie redukuje losowe skoki, ale wprowadza niewielkie opóźnienie sygnału.
- Filtr eksponencjalny (IIR, low-pass) – nowy odczyt powstaje ze wzoru:
yfilt = α · ynowy + (1 − α) · ystary,
gdzie α (0–1) określa „szybkość” reakcji. Dla α ≈ 0,2–0,4 uzyskuje się przyjemne wygładzenie, bez dużej zwłoki. - Odrzucanie wartości odstających (outlier rejection) – jeżeli nowy odczyt różni się od filtrowanego o więcej niż ustalony próg, można potraktować go jako zakłócenie i ograniczyć skok do maksymalnej dozwolonej zmiany na próbkę.
W praktyce często łączy się prosty filtr eksponencjalny z limitem szybkości zmian. Pozwala to utrzymać względnie „twardy” sygnał (robot nie reaguje zbyt ospale), a jednocześnie gasi pojedyncze, ostre piki.
Sprzętowe techniki redukcji zakłóceń
Programowa filtracja daje dobre rezultaty, ale nie rozwiąże problemów spowodowanych złym prowadzeniem przewodów czy brakiem filtrów RC. Zakłócenia od mostków H i silników potrafią „wpompuwać” szum w linie zasilania i masę, przez co czujniki zaczynają zachowywać się losowo przy gwałtownych przyspieszeniach.
Kilka prostych modyfikacji na etapie projektu płytki znacznie poprawia sytuację:
- oddzielne prowadzenie masy sygnałowej i mocy oraz łączenie ich w jednym punkcie (gwiazda),
- dodatkowe kondensatory filtrujące (100 nF + 1–10 µF) blisko modułu czujników,
- rezystory szeregowe (np. 100 Ω) z liniami sygnałowymi do ADC, redukujące szpilki prądowe,
- fizyczne odsunięcie przewodów od silników i mostków H,
- oddzielne zasilanie logiki i mocy (np. osobne stabilizatory lub przetwornice).
Niewielka zmiana, jak dołożenie kondensatorów odsprzęgających tuż przy linijce czujników, często robi większą różnicę niż skomplikowany filtr cyfrowy w kodzie.
Wyznaczanie „pozycji linii” z zestawu czujników
Sam odczyt pojedynczych czujników to za mało, by sensownie sterować robotem. Trzeba zamienić zbiór wartości z linijki na jedną wielkość – pozycję linii względem środka robota. To właśnie ta wartość trafia potem do algorytmu PID jako sygnał wejściowy.
Najpopularniejsze podejście to ważony środek masy (weighted average). Każdemu czujnikowi przypisuje się „współrzędną” (np. −3, −2, −1, 0, 1, 2, 3 dla 7 czujników). Następnie oblicza się:
pos = (Σ (wartośći · pozycjai)) / (Σ wartośći)
Dzięki temu linia przechodząca dokładnie pod środkiem da pozycję ≈ 0, przesunięcie w lewo – wartość ujemną, w prawo – dodatnią. Jeśli rozstaw czujników jest równy, można przyjąć jednostkę „krok czujnika” i bezpośrednio używać jej w regulatorze.
Czasem stosuje się także proste podejście progowe: czujniki powyżej określonej jasności traktuje się jako „na linii”, poniżej – jako tło. Daje to sygnał typu binaryzowanego, z którego można odczytać np. numer skrajnie aktywnego czujnika. Takie rozwiązanie wystarcza w wolniejszych robotach, ale utrudnia płynne sterowanie przy wyższych prędkościach.
Obsługa sytuacji granicznych: brak linii i skrzyżowania
Na torach pojawiają się rozgałęzienia, progi startowe, przerwy w linii oraz ostre zakręty. Algorytm wyznaczania pozycji nie może załamać się przy każdej z takich sytuacji, bo spowoduje to gwałtowne, często błędne reakcje sterowania.
Dobrze jest dodać proste reguły:
- jeśli suma odczytów ze wszystkich czujników jest bardzo mała – przyjąć, że linia zniknęła, i chwilowo kontynuować jazdę w ostatnim kierunku,
- jeśli aktywne są głównie skrajne czujniki – robot jest mocno poza środkiem linii, a regulator może czasowo zwiększyć wpływ części D lub ograniczyć prędkość,
- jeśli wszystkie czujniki pokazują „linię” – może to być skrzyżowanie lub szeroki próg; sposób reakcji zależy już od przyjętej logiki (np. jazda prosto lub wykonywanie ustalonego manewru).
W prostym robocie można założyć, że tor nie ma skomplikowanych skrzyżowań i jedynie łagodzić reakcję przy chwilowym zaniku sygnału. W bardziej rozbudowanych konstrukcjach pojawia się często dodatkowa warstwa logiki nad PID‑em: automaty stanów, obsługa mapy trasy lub przynajmniej wykrywanie typowych markerów (np. podwójne linie).
Algorytm PID w sterowaniu line followerem
Definicja błędu i sygnału sterującego
Algorytm PID potrzebuje dwóch rzeczy: błędu i możliwości sterowania. W line followerze błąd najczęściej definiuje się jako odchylenie pozycji linii od środka robota. Jeżeli pozycja linii (z sekcji wyżej) ma wartość 0 w środku, to:
error = pos – poszadana,
gdzie zazwyczaj poszadana = 0. Dodatni błąd oznacza uciekanie linii w jedną stronę, ujemny w drugą. PID generuje następnie sygnał korygujący, który przekłada się na różnicę prędkości kół:
- leftSpeed = baseSpeed − output,
- rightSpeed = baseSpeed + output.
„baseSpeed” to bazowa prędkość robota na prostym odcinku, a „output” – wynik obliczeń PID, dodatni lub ujemny. Takie sterowanie nazywa się często dual motor differential steering i jest standardem w small line followerach.
Składowe P, I i D w kontekście jazdy po linii
W typowym podręczniku PID opisuje się ogólnie; w robocie każda część ma bardzo konkretny efekt na zachowanie na torze.
- Część proporcjonalna (P) – reaguje wprost na aktualny błąd. Im większe odchylenie od linii, tym mocniejsza korekcja. Zbyt małe wzmocnienie P powoduje, że robot „leni się” w zakrętach i zaczyna ścinać łuki lub wypadać z toru. Zbyt duże – daje efekt ostrego zygzakowania i przesterowanych skrętów.
- Część całkująca (I) – akumuluje drobny, długotrwały błąd. W robocie kompensuje np. różnicę w przyspieszeniu lewego i prawego silnika, niewielkie krzywizny mechaniczne czy lekko przesuniętą linijkę czujników. Nadmiar I objawia się powolnym narastaniem skrętu, a potem gwałtownym „odbiciem”, gdy warunki się zmieniają (tzw. przeregulowanie).
- Część różniczkująca (D) – reaguje na szybkość zmian błędu. Gdy robot gwałtownie „wpada” w zakręt i błąd rośnie, D zaczyna hamować korekcję, wygładzając ruch. Zbyt silna część D zwiększa czułość na szumy; przy kiepskiej filtracji może wręcz destabilizować jazdę.
W wielu prostych line followerach część I jest bardzo mała lub całkowicie wyłączona, a główną robotę robi zestaw PD. Dopiero w szybszych i bardziej wymagających projektach dobrze zestrojone I daje dodatkową poprawę stabilności i powtarzalności toru jazdy.
Dyskretna implementacja PID na mikrokontrolerze
W praktyce PID nie jest liczone w sposób ciągły, lecz w pętli wykonywanej co Δt (np. co 1–5 ms). W każdej iteracji odczytuje się pozycję linii, wyznacza błąd i oblicza nową wartość sterowania. Uproszczony wariant w dyskretnym czasie wygląda tak:
- P = Kp · error,
- integral += error · Δt,
- D = (error − prevError) / Δt,
- output = P + Ki · integral + Kd · D.
Istotne jest ograniczanie integral do ustalonego przedziału (np. przycięcie do wartości maksymalnych), by uniknąć tzw. wind‑up – nadmiernego narastania całki przy dużych i długotrwałych błędach (np. podczas startu robota poza linią).
W systemach o bardzo ograniczonej mocy obliczeniowej zamiast dzielenia przez Δt można zakładać stały okres pętli i „wchłonąć” ten czynnik w wartości Kp, Ki, Kd. Kluczowe jest, by pętla regulacji wykonywała się możliwie regularnie – jitter czasowy przekłada się na niestabilne sterowanie.
Ograniczenia wyjścia PID i prędkości kół
Motor driver i same silniki mają swoje granice – nie są w stanie przyjąć nieograniczenie dużych wartości sygnału sterującego. Z tego powodu warto:
- ograniczyć output do przedziału, w którym robot porusza się jeszcze stabilnie,
- zadbać, aby sumaryczna prędkość kół nie spadała poniżej minimalnego poziomu, przy którym robot rusza z miejsca (martwa strefa PWM),
- zastosować łagodne rampy przy zmianach prędkości bazowej, zamiast natychmiastowych skoków.
Jeżeli w ostrych zakrętach jeden z silników ma być cofany (ujemne PWM), dobrze sprawdzić, czy mostek H i mechanika robota to wytrzymają. Czasem bezpieczniej ograniczyć się do „zerowania” jednego koła, zamiast natychmiastowego obrotu wstecz.
Strojenie PID na realnej trasie
Przygotowanie robota do strojenia
Zanim zacznie się kręcić gałkami Kp, Ki, Kd na żywym organizmie, dobrze jest przygotować kilka elementów:
- stałą, powtarzalną trasę testową z przynajmniej jednym ostrzejszym łukiem i jednym długim prostym odcinkiem,
- podstawową telemetrię – choćby przez UART lub diody LED sygnalizujące różne tryby i poziomy błędu,
- prosty interfejs zmiany parametrów bez przepisywania programu (np. komendy przez port szeregowy lub odczyt z potencjometrów, przycisków DIP).
Bez możliwości szybkiej modyfikacji nastaw strojenie zamienia się w żmudne przeprogramowywanie po każdej drobnej zmianie, co łatwo zniechęca i sprzyja przypadkowemu „trafieniu” bądź całkowitemu poddaniu się.
Metoda krok po kroku: od P do pełnego PID
Najbardziej przewidywalne efekty daje strojenie etapami. Zaczyna się zwykle od wyłącznie części proporcjonalnej.
- Ustaw tylko P – Ki = 0, Kd = 0. Z niewielkim Kp puszczamy robota na tor. Jeśli praktycznie nie reaguje na zakręty, stopniowo zwiększamy Kp.
- Szukanie granicy stabilności – zwiększamy Kp do momentu, gdy robot zaczyna wyraźnie oscylować wokół linii, ale nadal jej nie gubi. To daje górne oszacowanie przydatnego zakresu Kp.
- Dobór D – przy ustalonym Kp uruchamiamy część różniczkującą. Zaczynamy od niewielkiego Kd i stopniowo je podnosimy, obserwując, jak robot „uspokaja” oscylacje w łukach. Za duże Kd da efekt drgań, szczególnie jeśli sygnał nie jest dobrze przefiltrowany.
- Włączenie I – na końcu dodajemy małe Ki, aby kompensować drobne stałe błędy. Jeżeli robot zaczyna po pewnym czasie „płynąć” w jedną stronę lub robić dziwne korekty na prostych, Ki jest za duże.
Dobrym testem jest puszczenie robota na prostym odcinku z lekkim odchyleniem od linii na starcie. Odpowiednio zestrojony regulator powinien szybko i bez nadmiernego „wężykowania” wrócić do środka.
Praca z prędkością: strojenie dla różnych „biegów”
Nastawy PID, które sprawdzają się przy wolnej jeździe, zazwyczaj nie wystarczą przy dużych prędkościach. Dla szybszej jazdy potrzebne jest wyższe Kp, nierzadko inne Kd, a także lepiej przemyślane ograniczenia wyjścia. Z tego powodu stosuje się kilka profili prędkości:
Profile prędkości i adaptacyjne nastawy PID
Przy jednym zestawie nastaw robot zawsze będzie i tak dostrojony „pod coś”: albo pod wolne, precyzyjne pełzanie, albo pod agresywny przejazd zawodniczy. W praktyce wygodniej zdefiniować kilka trybów pracy:
- tryb wolny (treningowy) – niższa baseSpeed, mniejsze Kp i Kd, większy margines bezpieczeństwa przy wyjściach poza linię,
- tryb średni – kompromis dla typowego toru, wykorzystywany w większości przejazdów,
- tryb szybki – wyższa baseSpeed, podbite Kp, często nieco większy udział D i mocniejsze ograniczenia wyjścia PID, aby nie wprowadzić robota w niestabilne oscylacje.
Przełączanie między profilami może odbywać się ręcznie (przycisk, zworka) albo automatycznie – np. po rozpoznaniu odcinka trasy. Prosty mechanizm to podbicie prędkości na długich prostych (mała zmienność sygnału z czujników, niewielki błąd) i ograniczenie jej w ostrych łukach (duży, szybkozmienny błąd).
W wersji bardziej zaawansowanej da się zorganizować adaptacyjne PID: regulator obserwuje dynamikę błędu i w locie modyfikuje Kp/Kd. Przykładowo – na prostych używa łagodniejszych nastaw, w zakrętach włącza „ostrzejszy” profil, co zmniejsza ryzyko wypadnięcia z trasy przy wysokiej prędkości.
Wpływ mechaniki i zasilania na strojenie
Regulator PID często próbuje leczyć problemy wynikające z zupełnie innych obszarów projektu. Jeżeli robot jest mechanicznie „miękki”, a zasilanie zapada się przy każdym ruszeniu, nawet najlepiej policzone Kp, Ki i Kd niewiele pomogą.
Kilka kwestii mechanicznych i energetycznych szczególnie mocno odbija się na jeździe po linii:
- sztywność podwozia – giętka płytka i luźne mocowanie czujników powodują, że ich wysokość i kąt względem podłoża zmieniają się przy przyspieszeniach. Efekt to pozorny „szum” w odczytach, którego nie da się wyfiltrować programowo,
- łożyskowanie i opory kół – jeśli jedno koło stawia większy opór, regulator I będzie stale próbował to kompensować, wykrzywiając tor jazdy,
- jakość opon – zbyt twarda lub śliska guma zwiększa poślizg przy mocniejszych korektach, co zmienia „odpowiedź” robota w sposób trudny do przewidzenia,
- spadki napięcia – przy słabych akumulatorach lub niewydajnej przetwornicy zmienia się odpowiedź silników na PWM; robot przy tych samych nastawach PID prowadzi się inaczej na świeżo naładowanych i prawie rozładowanych ogniwach.
Przed długą walką z parametrami regulacji lepiej przejechać kilka okrążeń z prostym algorytmem (np. tylko P lub nawet prawo/lewo od progu) i sprawdzić, czy zachowanie jest przewidywalne. Jeśli przy powtarzalnych warunkach pętla daje różne rezultaty, problem często leży w mechanice lub zasilaniu.

Rozszerzone techniki sterowania i przetwarzania sygnału
Filtracja odczytów z czujników linii
Im szybciej porusza się robot, tym ważniejsza jest jakość danych wejściowych. Szum na czujnikach prowadzi do nerwowych korekt i wymusza nienaturalnie małe Kd. Dlatego stosuje się proste filtry numeryczne, które wygładzają pozycję linii bez zauważalnego opóźnienia.
Najczęściej spotykane są:
- filtr średniej kroczącej – przechowywanych jest kilka ostatnich odczytów pozycji linii, a do obliczeń używana jest ich średnia. Dla krótkich okien (3–5 próbek) uzyskuje się niezłe wygładzenie przy akceptowalnym opóźnieniu,
- filtr wykładniczy (IIR) – bieżący wynik to kombinacja poprzedniego wyniku i nowej próbki, np.: posFilt = α · posFilt + (1 − α) · posRaw. Mała wartość (1 − α) daje mocne wygładzenie, duża – szybką reakcję.
Wybór parametrów filtrów należy powiązać z czasem pętli regulacji i prędkością robota. Zbyt mocne wygładzenie spowolni reakcję w ostrych łukach; przy zbyt słabym filtrze D w PID będzie głównie reagowało na szum.
Anty-windup i warunkowe liczenie całki
Całkowanie błędu przy każdym kroku ma sens tylko wtedy, gdy robot ma szansę go zredukować. Jeśli przez kilka sekund jedzie po białym tle, bo stracił linię, część I będzie rosła i po ponownym znalezieniu ścieżki wywoła gwałtowny, nielogiczny skręt.
Dlatego oprócz prostego ograniczenia wartości integral stosuje się warunkowe liczenie całki, na przykład:
- aktualizacja integral tylko wtedy, gdy błąd jest w rozsądnym zakresie (np. linia wciąż znajduje się w polu widzenia czujników),
- wstrzymanie lub resetowanie integral podczas faz szczególnych – start, restart po zgubieniu linii, mocne hamowanie przed zakrętem,
- wstrzymanie całkowania, gdy wyjście PID osiągnie limit (silniki są „wysycone”).
Prosty warunek „nie liczę I, gdy wszystkie czujniki widzą białe” potrafi usunąć większość irytujących zachowań po powrocie robota na trasę.
Ograniczenie zmian wyjścia (slew rate limiting)
Nawet jeśli silniki i mostek H tolerują gwałtowne zmiany PWM, opony i przyczepność toru już niekoniecznie. Duże skoki sygnału z PID przekładają się na poślizg, który z punktu widzenia regulatora wygląda jak nieprzewidywalny błąd.
Rozwiązaniem jest ograniczenie maksymalnej zmiany wyjścia na jeden krok pętli, przykładowo:
- wyliczyć outputPID z PID,
- porównać go z poprzednim outputApplied,
- jeśli różnica przekracza ustalony próg, przyciąć ją do tego progu i dopiero taką wartość wysłać do silników.
Regulator wciąż działa „ostro”, ale fizycznie robot dochodzi do zadanej korekty w kilku krokach. Zmniejsza to ryzyko uślizgu i poprawia powtarzalność przejazdów przy wysokiej prędkości.
Strategie jazdy i obsługa niestandardowych elementów toru
Detekcja skrzyżowań, rozwidleń i końca trasy
Na prostych, sportowych torach linia bywa ciągła i jednorodna. Na bardziej rozbudowanych pojawiają się skrzyżowania, odnogi, a nawet „martwe” zakończenia. Nawet prosty robot może rozpoznać kilka typowych sytuacji bazując na wzorcach z czujników.
Przykładowe reguły:
- skrzyżowanie typu „T” lub „+” – przez krótką chwilę większość lub wszystkie czujniki widzą ciemny kolor, przy jednoczesnym niewielkim błędzie pozycji; w takiej sytuacji robot wykonuje wcześniej zdefiniowany manewr (np. zawsze w lewo),
- odnoga w bok – nagłe pojawienie się „linii” na jednym z krańcowych czujników przy zachowaniu głównej linii pod środkiem; można wtedy zignorować odnogę lub wręcz przeciwnie – skręcić w jej kierunku, jeśli taki jest scenariusz trasy,
- koniec trasy – brak linii przez określony dystans (szacowany z czasu jazdy lub liczby obrotów kół) po wykryciu specjalnego markera końcowego, np. szerokiego, czarnego progu.
Najprościej zakodować takie zachowania jako automat stanów. W podstawowym stanie robot używa PID; po wykryciu wzorca przechodzi do stanu „skrzyżowanie”, wykonuje manewr na bazie odliczonego czasu lub enkodera, a potem powraca do stanu podstawowego.
Zmienne szerokości linii i różne kolory podłoża
Tor wykonany markerem na białej planszy rzadko jest idealnie powtarzalny. Szerokość linii bywa różna, a sama powierzchnia może mieć jaśniejsze i ciemniejsze fragmenty. Do tego dochodzą refleksy od oświetlenia.
Kilka prostych trików poprawia odporność robota na takie warunki:
- adaptacyjne progi – zamiast stałego progu jasności dla „linii” i „tła” można wyznaczać go dynamicznie, np. jako średnią z minimalnych i maksymalnych odczytów w ostatnich kilku sekundach jazdy,
- pozycja linii z wagami – zamiast prostego „środka masy” bazującego na surowych wartościach, można wprowadzić nieliniowe wagi, które łagodniej reagują na zmianę grubości kreski,
- dodatkowy tryb kalibracji w trakcie startu – przed ruszeniem robot wykonuje kilka krótkich ruchów nad linią i obok niej, aby zaktualizować minimum i maksimum dla każdego czujnika.
W jednym z prostych projektów wystarczyło dodać krótką samokalibrację po włączeniu zasilania, aby ten sam robot, bez zmiany kodu PID, pojechał poprawnie zarówno po jasnej płycie, jak i po lekko matowej, szarej powierzchni hali sportowej.
Łączenie informacji z enkoderów i czujników linii
Czujniki linii mówią, gdzie jest ścieżka, ale nie dają informacji o przebytej drodze ani faktycznej prędkości. Dodanie enkoderów na kołach otwiera kilka nowych możliwości:
- dokładniejsze zatrzymanie na końcu trasy lub w wybranych punktach (zliczanie kroków od wybranego markera),
- kontrola i stabilizacja prędkości – PID pozycji linii steruje różnicą prędkości kół, a osobny regulator prędkości utrzymuje zadany „bieg” mimo zmian obciążenia,
- bardziej powtarzalne manewry na skrzyżowaniach – zamiast skręcać „na czas”, robot wykonuje skręt do określonej liczby impulsów enkodera, a potem szuka linii.
Rozdzielenie problemu na sterowanie kierunkiem (na podstawie linii) i sterowanie prędkością (na podstawie enkoderów) upraszcza strojenie PID. Każda z pętli odpowiada za inną część zachowania i można je stroić osobno.
Praktyczne wskazówki testowe i diagnostyczne
Rejestrowanie danych z przejazdów
Subiektywne „wydaje mi się, że lepiej jedzie” to słaba baza do strojenia. Dużo łatwiej podejmować decyzje, gdy widać realne przebiegi błędu, wyjścia PID i prędkości kół.
Nawet na prostym mikrokontrolerze da się to zorganizować:
- cykliczne wysyłanie przez UART kilku liczb: error, output, prędkości silników, stanu czujników,
- logowanie ich na komputerze (np. prostym skryptem w Pythonie) i rysowanie wykresów,
- opcjonalnie zapis do pamięci wewnętrznej mikrokontrolera, a potem zrzut po zakończeniu przejazdu.
Pojedynczy wykres, na którym widać, jak rośnie błąd w zakręcie i jak reaguje na niego regulator, potrafi od razu ujawnić, czy Kp jest za duże, czy raczej Kd zbyt małe, albo czy to całka „dobija” układ.
Procedury testowe dla różnych elementów toru
Zamiast kręcić losowe okrążenia, lepiej opracować kilka konkretnych testów. Każdy z nich weryfikuje inny aspekt jazdy:
- prosta z lekkim przesunięciem startowym – sprawdza, czy regulator szybko ściąga robota do linii bez przesadnego „wężykowania”,
- seria ciasnych łuków – pokazuje reakcję przy dużych błędach i szybkozmiennym sygnale; tu najłatwiej wychodzą błędy w Kd i zbyt agresywne Kp,
- przejście przez kontrastowe oświetlenie – wjazd spod lampy w ciemniejszy fragment hali lub odwrotnie, aby sprawdzić skuteczność kalibracji i filtracji czujników,
- skrzyżowanie / poszerzenie linii – test logiki ponad PID‑em, wykrywania wzorców i powrotu do zwykłej jazdy po manewrze.
Po każdej serii dobrze notować nie tylko „jedzie / nie jedzie”, ale też typowe objawy: powolne pływanie, gwałtowne odbicia, gubienie linii przy wyjściu z zakrętu. Z czasem takie obserwacje zaczynają bezpośrednio kojarzyć się z konkretnymi korektami w nastawach lub kodzie.
Modyfikowanie toru pod kątem strojenia
Jeśli jest możliwość wpływu na kształt trasy, warto wykorzystać ją do uporządkowanego strojenia. Zamiast od razu mierzyć się ze skomplikowanym torem zawodniczym, łatwiej zacząć od kilku prostych modułów:
- duży okrąg lub elipsa do testu stabilności na stałym promieniu,
- sekwencja naprzemiennych, symetrycznych łuków (slalom),
- prosta z krótkim, ostrym esowatym załamaniem,
- prosta z jednym skrzyżowaniem lub odnogą.
Najczęściej zadawane pytania (FAQ)
Jakie czujniki najlepiej nadają się do robota line follower?
W zdecydowanej większości amatorskich line followerów najlepiej sprawdzają się czujniki odbiciowe IR (refleksyjne), np. pojedyncze TCRT5000 lub gotowe linijki typu QTR. Łączą niską cenę, prostą integrację z mikrokontrolerem i wystarczająco szybką odpowiedź do jazdy z dużą prędkością.
Czujniki koloru/RGB oraz kamery stosuje się głównie w bardzo zaawansowanych konstrukcjach lub tam, gdzie trzeba rozróżniać kolory linii. Do typowego toru z czarną linią na białym tle najpraktyczniejszy będzie właśnie analogowy lub „szary” czujnik odbiciowy IR.
Ile czujników linii potrzebuje prosty robot line follower?
Absolutne minimum to 3 czujniki (lewy, środkowy, prawy) – pozwala to wykryć, czy linia jest po lewej, po prawej czy pod środkiem robota. Taki układ wystarczy do prostych, niezbyt szybkich tras bez ostrych zakrętów.
Dla większości hobbystycznych konstrukcji lepszym wyborem jest 5–8 czujników ułożonych w linię poprzeczną do kierunku jazdy. Większa liczba czujników daje precyzyjniejszą informację o położeniu linii, ułatwia strojenie PID i pozwala na szybszą jazdę na zakrętach.
Jaki mikrokontroler wybrać do budowy line followera?
Do klasycznego line followera w zupełności wystarczy mikrokontroler klasy Arduino, np. ATmega328, prosty STM32 lub ESP32. Kluczowe jest, aby miał:
- wystarczającą liczbę wejść analogowych/cyfrowych do obsługi czujników,
- wyjścia PWM do sterowania silnikami,
- wystarczającą moc obliczeniową do przeliczeń PID w czasie rzeczywistym.
Bardziej zaawansowane MCU (szybsze STM32, ESP32) są przydatne, jeśli planujesz rozbudowaną telemetrię, logowanie błędu PID, komunikację bezprzewodową czy przetwarzanie obrazu, ale do pierwszego robota nie są konieczne.
Jak dobrać i zasilić silniki w robocie line follower?
Najczęściej stosuje się dwa silniki DC z przekładnią, sterowane przez mostek H (np. DRV8833, DRV8871; starsze L298N działają, ale są mniej wydajne). Silniki powinny zapewniać odpowiedni kompromis między prędkością a momentem, tak aby robot ruszał pewnie, ale dało się go jeszcze stabilnie kontrolować.
Jako źródło zasilania przyjmuje się najczęściej pakiet LiPo 2S–3S o odpowiedniej wydajności prądowej. Warto rozdzielić zasilanie logiki (mikrokontroler, czujniki) i napędu (silniki), żeby zakłócenia od silników nie destabilizowały odczytów z czujników i pracy PID.
Na czym polega algorytm PID w line followerze i czy jest konieczny?
PID to regulator, który na podstawie błędu położenia względem linii wylicza korektę sterowania silnikami. Składa się z trzech części:
- P (proporcjonalna) – reaguje na bieżący błąd,
- I (całkująca) – koryguje stałe odchylenia (np. gdy robot „ściąga”),
- D (różniczkująca) – tłumi szybkie zmiany, stabilizuje na zakrętach.
Dla bardzo prostych, wolnych robotów można zastosować tylko regulator P lub proste reguły „jeśli lewo/prawo, to zwolnij/przyspiesz”. Jednak przy wyższych prędkościach i ostrzejszych zakrętach pełny PID znacząco poprawia stabilność i prędkość przejazdu, dlatego jest standardem w konstrukcjach startujących w zawodach.
Jak rozmieścić czujniki linii pod robotem, żeby dobrze trzymał tor?
Czujniki powinny tworzyć linię poprzeczną do kierunku jazdy, możliwie blisko przedniej osi kół, ale bez ryzyka zahaczania o nierówności toru. Typowo montuje się je kilka milimetrów nad powierzchnią podłoża, równolegle do niego.
Rozstaw między czujnikami dobiera się tak, aby:
- co najmniej 2–3 czujniki widziały linię na typowym zakręcie,
- plamki pomiarowe nie nachodziły na siebie zbyt mocno (utrata precyzji), ale też nie tworzyły zbyt dużych „dziur” między czujnikami.
Regulowane uchwyty czujników (możliwość zmiany wysokości i kąta) bardzo ułatwiają późniejszą kalibrację na realnym torze.
Jak zacząć strojenie PID w line followerze na trasie?
Praktyczna metoda to:
- zacząć od samego członu P, stopniowo zwiększając jego wzmocnienie aż robot zacznie szybko reagować, ale bez nadmiernych oscylacji,
- dodać niewielki człon D, żeby ograniczyć „rozhuśtanie” na zakrętach i poprawić stabilność,
- na końcu delikatnie wprowadzić I, jeśli robot ma stałą tendencję do zbaczania z linii lub nie wraca idealnie do środka.
Strojenie wykonuje się bezpośrednio na trasie, najlepiej przy stałej prędkości bazowej. Bardzo pomaga logowanie błędu i sygnału sterującego (np. przez Bluetooth/Wi‑Fi) lub możliwość szybkiej zmiany parametrów z poziomu komputera czy telefonu, zamiast każdorazowego przeprogramowywania mikrokontrolera.
Najbardziej praktyczne wnioski
- Na początku projektu trzeba jasno określić cel robota (zawody szybkościowe vs. platforma edukacyjna), bo od tego zależały będą dobór podzespołów, budżet oraz złożoność algorytmu sterowania.
- Rozsądna ścieżka rozwoju to najpierw zbudowanie prostego, przewidywalnego robota dobrze trzymającego linię, a dopiero później stopniowe zwiększanie prędkości i dodawanie zaawansowanych funkcji.
- Każdy line follower powinien być zaprojektowany w oparciu o kilka kluczowych bloków: moduł detekcji linii, mikrokontroler z logiką sterującą, napęd, zasilanie oraz dopracowaną konstrukcję mechaniczną.
- Opcjonalne elementy, takie jak enkodery, IMU, komunikacja bezprzewodowa czy regulowane uchwyty czujników, nie są konieczne do działania, ale znacząco ułatwiają strojenie PID i testy na trasie.
- Minimalna, amatorska konfiguracja sprzętowa (prosty mikrokontroler, dwa silniki DC z mostkiem H, 5–8 czujników IR, akumulator LiPo i podstawowe podwozie) jest wystarczająca do zbudowania działającego robota.
- Dobór czujników detekcji linii jest krytyczny: właściwe czujniki ułatwiają sterowanie, natomiast źle dobrane wprowadzają szumy i niestabilne odczyty, co komplikuje algorytmy filtracji i regulacji.
- W praktyce zdecydowanie najczęściej stosuje się czujniki odbiciowe IR, ponieważ łączą niski koszt, prostotę integracji i wystarczająco szybkie działanie dla typowych zastosowań line followerów.






Artykuł o budowie robota line follower jest bardzo obszerny i zawiera wiele wartościowych informacji na temat dobrania odpowiednich czujników, zastosowania algorytmu PID oraz strojenia na trasie. Bardzo podoba mi się, że autor szczegółowo opisał każdy krok budowy robota, co na pewno ułatwia pracę osobom, które dopiero zaczynają swoją przygodę z robotyką. Natomiast jedną rzeczą, której mi brakuje w artykule, jest bardziej praktyczne podejście do problemów, na jakie można napotkać podczas budowy oraz działania robota. Byłoby fajnie, gdyby autor poruszył także kwestie ewentualnych komplikacji i sposobów ich rozwiązania. W sumie jednak, artykuł jest bardzo pomocny i wartościowy dla wszystkich pasjonatów robotyki.
Komentowanie jest ograniczone do zalogowanych użytkowników.