Skocz do zawartości

[Algorytmy] PID w robotyce amatorskiej - linefollower, cz.1 Człon P


Treker

Pomocna odpowiedź

MirekCz, dzięki za uwagę co do kodu. Nie ukrywam, że byłem trochę leniwy tzn. nie pisałem tego kodu pod artykuł tylko na szybko wyciąłem teraz z całego kodu samo P, więc tam jest więcej "przekombinowanych" rozwiązań, ale tak jak pisałem nie uznaję się za eksperta, ani w PID, ani w programowaniu 😉 Do samych silników w oryginale dodane jest jeszcze hamowanie etc. 😉

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Error = 0 -2,5 = -2,5

Czy nie lepiej zamiast robić dodatkowe obliczenia i wprowadzać liczby zmiennoprzecinkowe spróbować jednak przewidzieć większość sytuacji? Dla 7 sensorów to 128 kombinacji z czego większość niemożliwych do uzyskania na normalnej i w miarę czystej trasie 🙂

Czekam na komentarze czy warto pisać dalej,

Czekam już z niecierpliwością na podsumowanie, z tymi "trickami", nieliniową wagą czujników(jestem ciekawy opinii innych-u mnie spisuje się bardzo dobrze) i ogólnymi poradami nt. doboru nastaw w praktyce.

Link do komentarza
Share on other sites

Czy nie lepiej zamiast robić dodatkowe obliczenia i wprowadzać liczby zmiennoprzecinkowe spróbować jednak przewidzieć większość sytuacji? Dla 7 sensorów to 128 kombinacji z czego większość niemożliwych do uzyskania na normalnej i w miarę czystej trasie 🙂

Można, tylko wtedy nieco mija się z celem stosowanie mikroprocesora, bo możesz to zrealizować albo na pamięci EPROM, albo układzie PLD/CPLD.

Choć ciekawy byłby LF zrealizowany całkowicie na CPLD np. XC9472, z jakim 6 bitowym PWM, dla silników.

Link do komentarza
Share on other sites

Co prawda przeczytałem kilka podobnych po angielsku.

Ja swoją "wiedzę" opieram głównie na tym: http://www.inpharmix.com/jps/PID_Controller_For_Lego_Mindstorms_Robots.html

Czy nie lepiej zamiast robić dodatkowe obliczenia i wprowadzać liczby zmiennoprzecinkowe spróbować jednak przewidzieć większość sytuacji? Dla 7 sensorów to 128 kombinacji z czego większość niemożliwych do uzyskania na normalnej i w miarę czystej trasie

A przy 20 czujnikach? )Oczywiście robiłem na początku, tak że zależnie od stanu czujników w case'ach rozpisywałem wartość aktualnego błędu - jednak teraz mogę to uznać zdecydowanie za błąd. Nawet przy 8 czujnikach (w Feniksie2) zdarzały się często takie stany czujników, na które raczej bym nie wpadł. Szczególnie cuda dzieją się na kątach prostych oraz, gdy czujniki nie są ułożone w linie prostej.

nieliniową wagą czujników(jestem ciekawy opinii innych-u mnie spisuje się bardzo dobrze)

Ja również używam wartości nie liniowych i jestem z tego zadowolony.

Link do komentarza
Share on other sites

Co prawda przeczytałem kilka podobnych po angielsku.

Ja swoją "wiedzę" opieram głównie na tym: http://www.inpharmix.com/jps/PID_Controller_For_Lego_Mindstorms_Robots.html

polecam też:

http://www.chibots.org/index.php?q=node/339

Choć w przykładzie odczyt zrobiony na zagmatwanym select...case

Gdzieś też czytałem fajne objaśnienie, ale nie mogę znaleźć stronki. W każdym razie była opisana zasada działania:

Człon proporcjonalny odpowiada za korektę błędu aktualnego. Całkujący za korektę tego co było, a Różniczkujący za niwelowanie błędu który pojawi się za chwilę.

Link do komentarza
Share on other sites

Wreszcie przeczytałem ten artykuł i powiem, że nie zawiera on tak naprawdę wytłumaczenia co jak działa i może a nawet na pewno wydaje się niezrozumiały dla większości osób, które jeszcze nigdy nie używały PIDa. Powiem na swoim przykładzie, pierwszego PIDa użyłem w Psotku2, ale wtedy tak naprawdę nie rozumiałem jak działa, była to dla mnie czysta teoria z odrobiną matematyki. Po jakimś czasie okazało się, że miałem przekręcone któreś równania i gdy je poprawiłem i wszystko zaczęło naprawdę działać tak jak powinno to zaczęło do mnie docierać co robi każdy z członów regulatora.

Człon P jest odpowiedzialny za szybkie reakcje robota względem linii, to on ma największy wpływ na to jak jedzie robot, dobrze zestrojony powinien wystarczyć do jazdy po torze bez kątów prostych. Powoduje on, że robot cały czas porusza się po linii prostej jakby jechał po sinusoidzie, czyli przód robota drży. W zależności od szybkości obliczeń, a raczej od częstotliwości sprawdzania czujników, te drgania są wolniejsze lub szybsze. Dobrze wyregulowany powoduje, że drgania te są na tyle szybkie, że prawie niezauważalne, przeregulowany, powoduje, że robot jedzie jakby miał 2 czujniki skrajne tylko, robot wtedy porusza się po sinusoidzie.

Człon D jest przeciwstawny członowi P, wygładza tą sinusoidę po której porusza się robot, zmniejsza jej amplitudę, a gdy jest dobrze zestrojony to eliminuje całkowicie drgania robota. Dodatkowo człon D poprawia reakcję na nagłe zmiany na torze, czyli umożliwia jazdę po torze z kątami prostymi. Przeregulowany człon D zmniejsza w dużym stopniu reakcję robota na nagłe zmiany w torze, wyregulowany dobrze zmniejsza drgania spowodowane przez człon P.

Człon I jest czymś w stylu pamięci, przechowuje on informację o ostatnich zmianach położenia robota. Powoduje on całkowite zmniejszenie szybkich drgań robota z członu P i wolnych przeciwstawnych drgań z członu D. Człon I wypłaszcza całkowicie tą sinusoidę, ale spowalnia reakcje robota na nagłe zmiany na torze, dlatego większość osób korzysta z członów PD.

Link do komentarza
Share on other sites

Można, tylko wtedy nieco mija się z celem stosowanie mikroprocesora, bo możesz to zrealizować albo na pamięci EPROM, albo układzie PLD/CPLD.

Dla samego P tak, ale dla PI, PD, albo PID jednak procek(lub parę op-ampów) jest niezbędny.

Dobrze wyregulowany powoduje, że drgania te są na tyle szybkie, że prawie niezauważalne,

Napewno chodzi o częstotliwość a nie amplitudę? Kiedy miałem jeszcze sam regulator P zauważyłem, że w miarę zmniejszania wzmocnienia amplituda oscylacji się zmniejsza, ale częstotliwość pozostaje stała, albo zmienia się w niezauważalnym zakresie.

Link do komentarza
Share on other sites

Jeśli mam być szczery co do artykułu - hm - te kilkanaście linijek - które napisał Sabre pod Twoim artykułem - dały mi więcej do zrozumienia dla całego PID'a niż Twój artykuł samego członu P.

Rzecz jasna, to co napisał Sabre - to tylko teoria - myślę, że więcej na temat samego artykułu będę mógł się wypowiedzieć, jak skończę składać mojego Line Follower'a. Na chwilę obecną - nie jest dla mnie zbyt bardzo zrozumiały.

PS. Z chęcią ujrzę artykuł choć by dot. członu D.

Link do komentarza
Share on other sites

Sabre napisał/a:

Dobrze wyregulowany powoduje, że drgania te są na tyle szybkie, że prawie niezauważalne,

Napewno chodzi o częstotliwość a nie amplitudę? Kiedy miałem jeszcze sam regulator P zauważyłem, że w miarę zmniejszania wzmocnienia amplituda oscylacji się zmniejsza, ale częstotliwość pozostaje stała, albo zmienia się w niezauważalnym zakresie.

Napisałem, że wszystko zależy od częstotliwości sprawdzania czujników a co się z tym wiąże do częstości aktualizacji pozycji robota. I masz rację, że zmniejsza się amplituda, napisałem o tym w opisie członu D. Na samym P, robot przy dużej liczbie aktualizacji na sekundę, będzie zawsze oscylował (bo takie zmiany daje sam człon P - wprowadza oscylacje) z bardzo dużą częstotliwością, która będzie dawała złudzenie, że robot prawie nie drga, amplituda tych drgań będzie mała, ale częstotliwość duża.

Link do komentarza
Share on other sites

pod wzgledem merytorycznym tak... srednio raczej. Z powodzeniem stosujesz regulatory w swoich projektach ale teoria, ktora do tego dorabiasz nie do konca jest poprawna. Pisales, ze art z perspektywy praktyka - mogles wiec podarowac sobie teorie (no offence rzecz jasna).

Człon P (ang. proportional) pozwala nam na zmierzenie jak daleko znajdujemy się od naszego punktu docelowego tzn. takiego, w którym linia znajduje się dokładnie pod środkowym czujnikiem.

nie bardzo... czlony regulatorow nic nie mierza. Regulatory wypracowuja sygnal sterujacy obiektem na podstawie informacji o jego aktualnym stanie (sprzezenie zwrotne). "odleglosc" mierzysz czujnikami linii - na podstawie ich odczytow masz info (zgrubne) o odleglosci od linii. Ta zgrubna odleglosc to jest uchyb (blad) na podstawie ktorego regulator wypracowywuje sygnal sterujacy do silnikow. Czlon proporcjonalny po prostu mnozy sygnal uchybu (bledu) i podaje do silnikow - innymi slowy im dalej jestes od linii tym mocniej zareaguja silniki. Zalozmy ze wzmocnienie czlonu P mamy 5. Zamierzona odleglosc od lini to 0, a ta zmierzona to powiedzmy 1.2. W zwiazku z tym mamy blad -1.2 - mnozony on jest przez 5 i podawany na sterowanie silnikami.

Wady? Zalety?

Czlon proporcjonalny zwieksza dynamike obiektu i jest najprostszy do uzycia. Wady: nigdy nie osiagniemy zerowego uchybu oraz latwo o przeregulowania wprowadzajace oscylacje - robot bedzie z jednej strony lini, poda za mocny sygnal korygujacy i znajdzie sie z drugiej, znowu skoryguje pozycje za mocno itp... bedzie oscylowal miedzy liniami.

Link do komentarza
Share on other sites

Mam czysto praktyczne pytanie, przy ustalaniu współczynników robot ma jeździć na małym PWM, by łatwiej zauważyć np. oscylację, czy raczej na prędkości docelowej, i czy ma to jakieś znacznie?

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.