Skocz do zawartości
Treker

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

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. 😉

Udostępnij ten post


Link to post
Share on other sites

Bardzo ciekawy artykuł. Co prawda przeczytałem kilka podobnych po angielsku. Ale nierozumiałem w pewnych aspektach kodu. Teraz mam dobrze skomentowany kawałek kodu.

Udostępnij ten post


Link to post
Share on other sites
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.

Udostępnij ten post


Link to post
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.

Udostępnij ten post


Link to post
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.

Udostępnij ten post


Link to post
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ę.

Udostępnij ten post


Link to post
Share on other sites

Nareszcie artykuł z przykładowym programem 😅 . Teraz tylko ukończyć robocika i wsadzić PD.

Udostępnij ten post


Link to post
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.

Udostępnij ten post


Link to post
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.

Udostępnij ten post


Link to post
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.

Udostępnij ten post


Link to post
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.

Udostępnij ten post


Link to post
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.

Udostępnij ten post


Link to post
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?

Udostępnij ten post


Link to post
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!

Gość
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...