Skocz do zawarto艣ci

PID do tr贸jko艂owca?


Nemo

Pomocna odpowied藕

Witam 馃檪

W艂a艣nie zbudowa艂em swojego pierwszego linefollowera i mam problem z 'ujarzmieniem' tego tworu..

A mianowicie, czy ma sens zastosowanie sterowania PID lub PD przy tr贸jko艂owcu, gdzie kierunkiem steruje tylko przednie ko艂o skr臋tne?

Je艣li tak, to prosi艂bym o kawa艂ek kodu lub pomoc w ustaleniu warto艣ci wsp贸艂czynnik贸w regulatora.

Programuj臋 w Bascomie i przejrza艂em ju偶 naprawd臋 sporo artyku艂贸w na temat sterowania linefollower贸w regulacj膮 PID lecz robot ci膮gle je藕dzi zygzakiem, co baaaardzo ogranicza jego pr臋dko艣膰..

Schemat robota wygl膮da mniej wi臋cej tak:

Pozdrawiam!

Link do komentarza
Share on other sites

Mo偶e napisz co ju偶 masz, czy masz algorytm PID zaimplementowany? Czy tylko chcesz pomocy przy ustawieniu wzmocnie艅? Ja ustawiaj膮c wzmocnienia w PID do mojego Psotka2 w du偶ej mierze korzysta艂em z tej stronki. Jak zadasz bardziej konkretne pytania to bardziej pomog臋, gotowca ci nie dam bo w swoim kodzie mam bardzo du偶o w艂asnych rozwi膮za艅, kt贸rymi narazie nie b臋d臋 si臋 dzieli艂.

  • Lubi臋! 1
Link do komentarza
Share on other sites

Doskonale Ci臋 rozumiem, wiem ile trzeba si臋 nam臋czy膰 przy napisaniu dobrego algorytmu..

Z samym PIDem walcz臋 2 tygodnie i jak na razie jest ci臋偶ko 馃構

Algorytm wzi膮艂em r贸wnie偶 z tej stronki kt贸r膮 poda艂e艣, i wygl膮da to u mnie tak:

po sczytaniu warto艣ci z czujnik贸w i ustaleniu zmiennej Pozycja (ca艂kowite od -5 do 5):

  Error = 0 - Pozycja
  Prop = Kp * Error                                        'Oblicz Cz艂on P

  Integral = Integral + Error                              'Oblicz Cz艂on I
  Integral = Integral * Ki

  Rate = Error - Difflast                                  'Oblicz Cz艂on D
  Deriv = Rate * Kd

  Difflast = Error

  Control = Prop + Deriv                                   'Nowa warto艣膰 zmiennej Control
  Control = Control + Integral


  If Control > 50 Then Control = 50                        'Ogranicz Control
  If Control < -50 Then Control = -50

  Temp = Kierunek_zero - Control
  Myint = Temp                                             'Konwertuj Single na Integer
  Kierunek = Myint                                         'Ustaw pozycje serwa

  Waitms Opoznienie                                        'Domy艣lnie 5 ms

Chodzi mi g艂贸wnie o to, czy do takiego pojazdu z jednym ko艂em skr臋tnym wystarczy algorytm PID i b臋dzie taki sam jak np. w Twoim Psotku2 ze sterowaniem 2 ko艂ami co daje praktycznie zerowy promie艅 skr臋tu? Bo nie wiem, czy ustawianie wzmocnie艅 'na czuja' ma w og贸le sens, skoro algorytm mo偶e by膰 b艂臋dny i nic nie wnosi膰 do poprawy sterowno艣ci.

Link do komentarza
Share on other sites

PID wnosi bardzo du偶o do p艂ynno艣ci sterowania, nie wiem jak b臋dzie w przypadku twojego serwa, nie napisa艂e艣 czy to serwo przerobione czy nie. Obejrzyj filmiki w temacie o moim Psotku2 a przekonasz si臋 ile daje dobrze wyregulowany PID, cho膰 i tak uwa偶am, 偶e mog艂oby by膰 znacznie lepiej.

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

Serwo nie jest przerobione, przednie ko艂o jest pod艂膮czone na sztywno i promie艅 skr臋tu prawie 180 stopni jest wystarczaj膮cy, wi臋c nie potrzeba przerabia膰, chyba, 偶e w jakim艣 innym celu? jak na razie Kp=8 Ki=0.2 Kd=0.6 i je藕dzi zygzakiem na najmniejszej pr臋dko艣ci..

Link do komentarza
Share on other sites

Og贸艂em uwa偶am, 偶e serwo jest ciut za wolne do tego celu...cho膰 to zale偶y w g艂贸wnej mierze od pr臋dko艣ci rozwijanych przez Twojego robota. Popatrz na konstrukcje przegubowc贸w, tam jest do艣膰 zbli偶one rozwi膮zanie...a PIDa na pewno da si臋 zaimplementowa膰 馃檪 Nie wiem tylko, czy jest to optymalne dla takiej konstrukcji...

Link do komentarza
Share on other sites

No w艂a艣nie zastanawia艂em sie nad win膮 zbyt wolnego serwa.. 呕eby je przyspieszy膰 podaje ju偶 napi臋cie 6,5V, ale i tak chyba niewiele to daje. Pozostaje mi rozwi膮zanie tego problemu kwesti膮 dobrego algorytmu. A co do pr臋dko艣ci, to maksymalnie wynosi prawie 30 km/h, bo lf nap臋dzany jest silnikiem z autka rc, tak偶e potencja艂 ma ogromny. Macie mo偶e jakie艣 w艂asne metody wyznaczenia wzmocnie艅 dla PIDu, albo mo偶e jakie艣 dodatkowe patenty, kt贸re mo偶na wykorzysta膰 w algorytmie? No i czy w og贸le ten kawa艂ek alg PID, kt贸ry napisa艂em jest poprawny?馃檪

Pozdrawiam!

Link do komentarza
Share on other sites

Algorytm jest ok, ale wed艂ug mnie wina nie le偶y w z艂ych nastawach wzmocnie艅 tylko w niedoskona艂o艣ci sposobu okre艣lenia pozycji lfr'a wzgl臋dem linii za pomoc膮 zmiennej Pozycja, kt贸ra przybiera wzgl臋dnie ma艂o warto艣ci co niejako wymusza skoki, gdyby Pozycja mia艂a warto艣ci z zakresu powiedzmy -2000 +2000 wtedy przej艣cie by艂oby p艂ynniejsze. Nie wiem jak ty okre艣lasz zmienn膮 Pozycja, tzn jak przypisujesz jej warto艣ci z zakresu -5 +5 na podstawie wskaza艅 czujnik贸w. Ja u siebie w Psotku2 wrzucam do PIDa warto艣ci ADC na czujnikach ale jako sum臋, powiedzmy prawa strona od linii idzie z plusem, lewa z minusem (nie pami臋tam czy tak jest ale to jest ma艂o wa偶ne). Wi臋c u mnie zakres, nawet nie wymuszony przy 10-cio bitowym ADC, jest od -1023 do +1023. Wymuszony przez soft jest od -2000 do +2000 (po 1000 na ka偶dy czujnik). 艢rodkowy czujnik w zasadzie nie jest uwzgl臋dniany do algorytmu PID. Mo偶na robi膰 sztuczk臋 na zmiennej Pozycja, tzn. docelowo aby b艂膮d by艂 r贸wny 0, Pozycja musi by膰 r贸wna 0, ale jak robot zjedzie pod zewn臋trzny czujnik to mo偶na docelow膮 Pozycj臋 przypisa膰 nie 0 tylko powiedzmy 2, wtedy robot nie ma skoku, gdy zjedzie ju偶 w stron臋 linii i za艂api臋 lini臋 czujnik bli偶ej 艣rodka, wtedy mo偶na docelow膮 pozycj臋 przyj膮膰 jako 0.

Mam nadziej臋, 偶e nie namota艂em. Mia艂em pisa膰 arta o PIDzie w Bascomie dla lfr'a, ale z powodu braku czasu i pewnych autorskich rozwi膮za艅 zastosowanych w moim kodzie chwilowo odszed艂em od tego pomys艂u. Jak przetestuj臋 nowe rozwi膮zanie to z ch臋ci膮 opisz臋 i podziel臋 si臋 starym, czyli aktualnie u偶ywanym w Psotku2, Strider b臋dzie zawiera艂 ju偶 nowe rozwi膮zanie obs艂ugi czujnik贸w w PID 馃檪.

Link do komentarza
Share on other sites

Zmienn膮 pozycja okre艣lam na podstawie bitowego obrazu stanu czujnik贸w, np.

10000 - Pozycja=-4

00100 - Pozycja= 0

00001 - Pozycja= 4

I to rzeczywi艣cie powoduje niez艂e skoki.

Dzi臋ki za pomys艂 z bezpo艣rednim u偶yciem odczyt贸w z ADC, zaraz co艣 pokombinuj臋, ale musz臋 jeszcze zrobi膰 autokalibracj臋, bo czujniki niestety nie daj膮 identycznych warto艣ci dla tych samych kolor贸w.

A artyku艂 rzeczywi艣cie by si臋 przyda艂, bo pocz膮tkuj膮cy konstruktorzy linefollower贸w nie tyle maj膮 problem z napisaniem samego programu, ale z wymy艣leniem na czym to sterowanie ma polega膰 i ewentualnie jakie patenty mo偶na zastosowa膰 chocia偶 w teorii, opr贸cz zwyk艂ego sterowania liniowego "zigzag" i PIDu:)

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.