Skocz do zawartości
Treker

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

Pomocna odpowiedź

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?

Prędkość ma ogromne znaczenie, ale łatwiej nauczysz się ustalać współczynniki na mniejszej prędkości. Ja zawsze zaczynam od około 60cm/s jak przy tej prędkości znajdę właściwe to później może nie jest z górki, ale jest łatwiej. Niestety przynajmniej dla mnie schody zaczynają się przy trochę ponad 1m/s. Przy takiej prędkości właściwe ustalenie współczynników jest bardzo trudne. Czasami korekta któregoś nawet o 1 zmieniała zachowanie robota ogromnie. No i podstawą jest stabilizowane źródło napięcia dla silników przy prędkościach powyżej 1m/s bo tylko wtedy nie trzeba co chwilę robić korekt do spadającego napięcia zasilania.

Udostępnij ten post


Link to post
Share on other sites

noVak, no ale chyba na podstawie tego opisu nie stworzyłbyś programu, albo algorytmu działania.

lukpep, racja już poprawiłem.

Dziękuję za krytykę 😉

Artykuł ten kierowałem tak jak mówiłem, raczej osób, które nie miały kompletnie nic wspólnego z PID i czytając na przykład to: https://www.forbot.pl/forum/topics20/praktyczne-zastosowanie-regulatora-pid-w-robotyce-vt3655.htm Nie potrafiły przełożyć tego "do robota". Jednak z tego co widzę, sposób w jaki to próbowałem przekazać był nie odpowiedni. Dlatego na razie powstrzymam się chyba od kontynuacji.

Może z powodu zapotrzebowania ktoś skusi się na opisanie tego zagadnienia dokładniej.

Udostępnij ten post


Link to post
Share on other sites

Treker, nie powstrzymuj sie - po prostu czasem cos dorzuce bo tak jakos wyszlo ze prace dyplomowa pisalem o regulatorach PID 😉

A takie praktycznie podejscie sporo pewnie rozjasni ludziom.

Człon P (ang. proportional). Człon ten odpowiedzialny jest za obliczenie aktualnego błędu położenia

nadal imho niepoprawnie sformulowane - czlon p jezeli juz cos oblicza to sygnal sterujacy do silnika. Obliczenie to przeprowadza na podstawie aktualnego bledu polozenia liczonego zupelnie gdzie indziej.

Gdybym mial to ubrac w jakis schemat blokowy to w taki sposob:

fig2335.gif

na wejsciu input zadajemy pewna wartosc ktora chcemy osiagnac - np. polozenie robota wzgledem linii. Sensor mierzy aktualne polozenie robota wzgledem tej lini. Roznica tych polozen zwana jest uchybem (bledem) i ten wlasnie uchyb trafia na czlony regulatora. Kazdych z nich wypracowuje sygnal sterujacy dla obiektu niezaleznie (na podstawie aktualnego uchybu). Nastepnie te wypracowane sygnaly sa sumowane i podawane na obiekt.

Zeby dotyczylo to reg. proporcjonalego tylko to odpinamy pozostale dwa tory.

Podsumowujac - jest zapotrzebowanie na taki art - pisz go, a ja czasem uzupelnie paroma zdaniami.

__________

Komentarz dodany przez: Treker

Udostępnij ten post


Link to post
Share on other sites

Ja uważam, że nawet jeżeli poradnik nie jest jakimś superpoprawnym teoretycznym wywodem to jest bardzo przydatny, pomaga zrozumieć to zagadnienie zupełnie początkującym.

Wg. mnie powinieneś kontynuować cykl.

Udostępnij ten post


Link to post
Share on other sites

Zobaczymy, jeśli mam dalej pisać cokolwiek to jednak sam muszę się najpierw doszkolić trochę 😉 Nie chce wprowadzać ludzi na w błąd.

Udostępnij ten post


Link to post
Share on other sites

Treker, nie miałem tego nawet na myśli - może inaczej - po przeczytaniu Twojego tematu, jedyne co mogłem zrobić, to skopiować gotowy kod - bo nie rozumiałem sensu tego - co chcę osiągnąć, zacząłem czytać komentarze, doszedłem do tego co napisał Sabre, następnie przeczytałem ponownie Twój artykuł i dostałem olśnienia - po prostu - zacząłem patrzeć na to z zupełnie innej perspektywy - moja uwaga miała na celu, tylko i wyłącznie zmianę sposobu przekazywania wiedzy - a bardziej dokładnie - sposób ubierania słów 😉 Nie chciałem Cię urazić - lub cokolwiek innego - tylko i wyłącznie zwrócić uwagę 😉.

Udostępnij ten post


Link to post
Share on other sites

noVak, rozumiem, ale jest to dla mnie znak, że jeśli pisać to inaczej 😉 Tak, aby nie trzeba było czytać tego n razy 😉

Pozdrawiam,
Damian

Udostępnij ten post


Link to post
Share on other sites

Moim zdaniem rozważania teoretyczne nie mają sensu w artykule o PIDzie dla line followera. Tym bardziej, że trzeba się trochę nagimnastykować, żeby zaadaptować problem LFa na potrzeby PIDa. Poza tym działania takie jak identyfikacja układu, zbieranie charakterystyk i odpowiedzi na pobudzenia są wręcz niemożliwe. Dlatego moim zdaniem artykuł o PID i Line Followerach powinien się skupiać głównie na kwestiach praktycznych. Jak wygląda prosty kod z algorytmem PID i za co odpowiadają poszczególne linijki, jak rozpoznać kiedy które nastawy są źle dobrane i to wszystko.

Nie ma sensu zastanawiać się nad teorią sterowania w przypadku linefollowerów bo ludzie którzy potrzebują tego artykułu i tak pewnie nie mają odpowiedniego aparatu matematycznego i umiejętności obsługi narzędzi symulacyjnych ułatwiających naukę. Za to warto podkreślać na każdym kroku, że głównym zastosowaniem algorytmu PID nie są linefollowery 😋

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Rozważania teoretyczne mają pewien sens: mianowicie częstotliwość. Jeśli się przyjrzycie przekształceniom dyskretnym (np. Tustin) to widać, ze do wzorów wchodzi okres próbkowania. Dlatego tak istotne jest uważanie aby nie zmieniać jej po nastrojeniu regulatora.

PS: sumy ważone to już logika rozmyta. Taka ciekawostka.

Udostępnij ten post


Link to post
Share on other sites

podejscie praktyczne powinno jak najbardziej zostac - po prostu jezeli juz sie kusimy o jakies deklaracje ze dany regulator robi "to i to" to niech nie beda to glupoty 😉

Udostępnij ten post


Link to post
Share on other sites
Moim zdaniem rozważania teoretyczne nie mają sensu w artykule o PIDzie dla line followera. Tym bardziej, że trzeba się trochę nagimnastykować, żeby zaadaptować problem LFa na potrzeby PIDa.

Nie mają sensu? Udowodnij.

lukpep ładnie opisałeś sterowanie PID w układzie sterowania, z tym, że nie myl uchybu sterowania z sygnałem, który wchodzi na wejście PID. Uchyb to wymierna różnica między wielkością zadaną a wielkością sterowaną, i jest to szczególny przypadek sygnału wejściowego PID (tzn. gdy będziemy mieć jednostkową pętlę sprzężenia zwrotnego).

Poniżej zamieściłem schemat układu sterowania z regulatorem PID w LF (podobieństwo do tego co zamieścił lukpep).

e - czyli błąd sterowania jest wartością wyliczaną na podstawie wartości zadanej i wartości zmierzonej czujnikami (wartość ta obliczana jest w wyniku pewnego wyrażenia matematycznego związanego z wagami poszczególnych czujników).

Czyli mamy zamieniony stan czujników na konkretną wartość w odniesieniu do wartości zadanej.

Dalej tą wartość błędu "widzi" regulator PID (czyli widzi przebieg błędu, na którym operuje).

Ten przebieg widzą poszczególne jego człony (których "działanie" jest na końcu sumowane)"

P - człon proporcjonalny (zwykłe skalowanie przebiegu błędu wartością kp)

I - człon integracyjny (całkowanie przebiegu błędu, czyli jak napisał Sabre rodzaj pamięci, bo pamiętamy ile błędu w sumie było wcześniej do obecnej chwili) umożliwia on zejście wartości do zera kosztem szybkości sterowania.

D - człon różniczkujący (czyli sięgamy do przyszłości, pytanie jak? Otóż poprzez znajomość nachylenia przebiegu czyli wyniku różniczki mamy info o tym czy przebieg będzie rósł, czy będzie spadał i z jaką szybkością w kolejnej chwili czasu) i jest on odwrotnością członu I, a nie P jak napisał Sabre

Treker radzę zgłębić wiedzę na temat regulatorów PID przed napisaniem artykułu. Lepiej jest nic nie napisać, niż wprowadzać ludzi w błąd. Może warto poprzedzić publikację rozmową tutaj na forum o regulatorze PID?

WAŻNE!

Jeżeli w Waszych algorytmach brane są wartości zmiennoprzecinkowe, to upewnijcie się, że wykorzystany przez Was mikrokontroler wspiera operacje na takich wartościach.

Udostępnij ten post


Link to post
Share on other sites

niciki, ladnie napisane 😉

Od siebie dodalbym jeszcze tylko moze pare slow zeby pamietac o efekcie windup przy czlonie inercyjnym. Jezeli powiedzmy korzystalibysmy z PIDa rowniez do regulacji predkosci a nie tylko polozenia LF to mogloby dojsc do sytuacji gdy zadana zbyt duza predkosc nie moglaby byc osiagalna przez robota (np z powodu max juz mocy silnikow) i w takim przypadku nawijalby sie blad w czlonie inercyjnym co grozi w sumie dwoma rzeczami:

pogorszenie dynamiki bo gdy w takiej sytuacji wystapilby uchyb o przeciwnym znaku niz do tej pory to przed reakcja czlonu inercyjnego musialby zostac "odwiniety" blad z poprzedniego dzialania tego czlonu. Np robot max moze poruszac sie z predkoscia 1 m/s bo na tyle pozwala naped, my zadajemy predkosc 1.5 m/s... robot do tego sie nie rozpedzi bo nie jest w stanie a blad sumowany (nawijany - windup - stad nazwa) w czlonie inercyjnym bedzie rosl w kazdej dyskretnej chwili. Przy zblizeniu sie do zakretu program zmienia predkosc na 0.5 m/s i.... dupa bo czlon inercyjny zareaguje poprawnie dopiero po dluzszym czasie jak sobie odwinie caly ten nawiniety blad z poprzednich akcji.

Drugie zagrozenie - przekroczenie zakresu zmiennej przechowujacej sume z czlonu inercyjnego - owocujace zawieszeniem programu, przekreceniem licznika itp

Z tym ze nikt na forum raczej nie uzywal pida do regulacji predkosci LF z tego co kojarze. A ciezko mi wymyslic mozliwosc wystapienia podobnej sytuacji przy regulacji polozenia.

Udostępnij ten post


Link to post
Share on other sites
D - człon różniczkujący (czyli sięgamy do przyszłości, pytanie jak? Otóż poprzez znajomość nachylenia przebiegu czyli wyniku różniczki mamy info o tym czy przebieg będzie rósł, czy będzie spadał i z jaką szybkością w kolejnej chwili czasu) i jest on odwrotnością członu I, a nie P jak napisał Sabre

Nie napisałem, że człon D jest odwrotnością członu P, napisałem, że jest mu przeciwstawny, według mnie to jest różnica.

Udostępnij ten post


Link to post
Share on other sites

Hej.

Powoli chcę zacząć bawić się regulatorem PID i mam już na początku małą wątpliwość: dlaczego przyjmuje się jakąś nominalną prędkość silników i obliczona wartość poprawki idzie na oba silniki? Nie lepiej byłoby, by owy błąd był wykorzystywany przez jeden silnik (zwalniający), a drugi jechałby prędkością nominalną? Czy taki sposób ujęcia nie byłby szybszy?

Udostępnij ten post


Link to post
Share on other sites
laczego przyjmuje się jakąś nominalną prędkość silników

To jest prędkość z jaką robot ma jechać, gdy wszystko jest w normie. Jest to wygodny mechanizm do ustalania docelowej prędkości konstrukcji.

Nie lepiej byłoby, by owy błąd był wykorzystywany przez jeden silnik (zwalniający), a drugi jechałby prędkością nominalną? Czy taki sposób ujęcia nie byłby szybszy?

Oczywiście, że można tak zrobić. Można również wprowadzić taką zmianę, że tylko przyspieszasz jednym silnikiem. Gdy osiągnie on swoją maksymalną prędkość i nadal będzie to za mało, aby poprawić tor jazdy robota, dopiero wtedy możesz zacząć zwalniać drugim.

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