Skocz do zawartości

lubniewicz

Użytkownicy
  • Zawartość

    56
  • Rejestracja

  • Ostatnio

  • Wygrane dni

    2

lubniewicz zajął 1. miejsce w rankingu.
Data osiągnięcia: 19 sierpnia 2019.

Treści użytkownika lubniewicz zdobyły tego dnia najwięcej polubień!

Informacje

  • Płeć
    Mężczyzna

Ostatnio na profilu byli

Blok z ostatnio odwiedzającymi jest wyłączony i nie jest wyświetlany innym użytkownikom.

Osiągnięcia użytkownika lubniewicz

Entuzjasta

Entuzjasta (7/19)

  • Za 5 postów
  • Za 25 postów
  • Młodszy Juror
  • Wschodząca gwiazda
  • Lokalna gwiazda

Odznaki

33

Reputacja

  1. Kolega jest bardzo kumaty i ma ogromną wiedzę. Wystarczyło tylko delikatnie go ukierunkować. 😀
  2. Kolega olimek opowie 😄 i wrzuci filmik z finalną wersją z pełnym regulatorem P I D. Tematów było sporo i pewnie ladnie wszystko wypunktuje, a jak o czyms zapomnij to ja dopiszę. Powiem tylko że współpraca była bardzo owocna, dwa dni walczyliśmy.
  3. Nie ma problemu, cała przyjemność po mojej stronie. Polecam się na przyszłość. Ważne że udało się robota przywrócić do żywych. Z enkoderami byloby jeszcze lepiej ☺️.
  4. Zbielu ładnie ale mi cos dalej nie pasuje. Zobaczyłem te logi, jak Ty obliczyłeś pwm? To powinna byc suma członów pid. Ps. W kolumnie I jest suma uchybow?
  5. Wrzuć logi do analizy. Rozumiem ze te dane masz przez uart? Dane wyrzycasz co 10 ms?
  6. Tak bo masz regulator hmm.... "przeregulowany". Ta wiedza jest cenna 😁 ale podzielę się nią 😂. Słuchaj regulator musi dążyć do tego aby obiekt regulowany miał jak najmniejszy uchyb. Uchyb to różnica pomiędzy wartością zadaną a rzeczywistą, tak w mega skrócie. Załóżmy, że robot ma mieć kąt 90 stopni, a obecny kąt wynosi 88 stopni, więc uchyb to -2 stopnie (co do znaku to kwestia umowna). Jeżeli przeregulujesz nastaw na P to robot będzie tak jakby przeskakiwał np zamiast 90 stopni będzie regulowany na 88 -->> 93 -->> 88 -->> 93 wpada w oscylacje mniejsze i większe. Wysoka wartość współczynnika przy członie proporcjonalnym nie pozwoli osiągnąć zadanego kąta w tym przypadku 90 stopni. Założenie jest takie, że człon "P" robi około 70-80% całej regulacji (różnie zależy od regulowanego obiektu) a resztę roboty 30-20% już robi dużo dokładniejszy człon całkujący "I". I tutaj jest Twoje pytanie a jaki ba być Windup no własnie taki aby człon całkujący ograniczyć do tych powiedzmy 40% (czyli tak aby zapewnił 100% plus mały zapas). Czyli już w mega skrócie Człon "P" zgrubnie ustawia obiekt prawie do wartości zadanej, człon "I" uzupełnia braki do wartości zadanej bo jak wiesz mamy wzór P+I+D. Człon "D" jest tak jakby amortyzatorem tłumi drgania (jak w zawieszeniu samochodu). W członie D można przez przypadek pomylić znaki i zamiast pomagać to bardziej przeszkadza ale to już temat na inną rozmowę. Podsumowując ten wywód P prawie na 100%, a resztę robi I. Jak dasz za duży współczynnik na P to będzie bardzo nerwowy i może wpaść w duże oscylacje, tak jak tłumaczyłem będzie przestrzeliwał na lewo i prawo. P ma być zgrubny, a I na uzupełnienie. Rozumiesz?
  7. Dokładnie, wykorzystaj timer. Ustaw aby dawał przerwanie co pewien czas. W przerwaniu wystaw flage, a w pętli glownej sprawdzaj ta flage. Jak bedzie wystawiona to wykonaj funkcje. Chodzi mi abys do samego przerwania nie wrzucał obliczen. Wystaw tylko flagę. Ok działaj. Nagraj jakiś filmik później.
  8. Rzeczywiście odpalasz funkcje co 200hz? Jak to zrobiłeś? Na timerach? Wywoływanie pid czy obliczanie kata w pętli glownej to absurd! Wywoluj funkcje co pewien czas 100 czy tam 200 hz. Tylko bez delay.
  9. Dt ma wynikać z częstotliwości wywolania funkcji w której wykorzystujesz do obliczeń dt. Hmmm rozumiesz? Obliczaj kat co 100hz (na razie tyle) i od razu wykonuj regulator stabilności.
  10. A zmienne nie są przepełnione? Ogólnie tutaj jest według mnie zonk. Robisz podstawowy błąd... Zakładasz że dt moze sie zmieniać... Niestety dt musi buc stałe to podstawa. Regulatory ustawiasz pod stale dt. Nie możesz raz ustawic regulator a dt plywa. Według mnie musisz to poprawić, chyba ze chcesz aby to działało tak sobie... Ps. Zmien to. Daj stale dt poprzez zastosowanie timeroe programowych lub sprzętowy. Dobrze ze wyliczas dt ale niestety to musi być stale.
  11. Jak sprawdzasz? Sorry muszę być pewny że robisz to dobrze. Te czasy sa bardzo ważne, musze miec 200%pewności. Nie napisałeś taktowania. Pamietaj ze float obciąża atmege. Konkretnie odpowiadaj 😄
  12. Będę dociekliwy i upierdliwy 😋. Skąd wiesz ze jest taka częstotliwość? Jakie taktowanie procka? Czy robiłeś te pomiary na analizatorze stanow logicznych?
  13. Zaraz przejrzę kod. Z jaka częstotliwością wywołujesz regulator?
  14. Rozumiem. Będę czekał. Jest dużo darmowych programów na Androida które można wykorzystać do komunikacji np roboremo. Może lepiej z tego skorzystaj?
  15. Jestem już, nie mogłem wcześniej odpisać - obowiązki zawodowe. Robot będzie już stał na ... kołach. Robot będzie trzymał około 0 st. lecz będzie uciekał na boki bo jeszcze nie będzie miał PID prędkości, który będzie zadawał kąt. Pamiętaj, że te nastawy które teraz zrobimy mogę ulec delikatnie zmianie, ponieważ dopiero finalną regulacje zrobi się mając w sumie 3 PID. Więc nie zdziw się jak będziemy musieli jeszcze te nastawy zmienić. Będę mówił w skrócie o poszczególnych członach jako P, I, D. Jak powiem że masz zwiększyć np D to będę miał na myśli zwiększenie "ram_rejestr.p_kd". Proponuje na razie nie zakładać blokady WINDUP. Proponuje jednak aby kontrolować, aby suma błędów nie była za duża. To wyjdzie w regulacji. Ok zaczynamy: Ustaw kąt zadany na 0st. Zlikwiduj ograniczenie windup i wyświetlaj po UART jaki masz wynik na całym członie P, I, D oraz suma błędów (osobna dla każdego). Kąta już nie musisz wyświetlać po UART. Robota postaw pionowo. Zwiększaj P aby robot zaczął oscylować w pobliży 0st, mam tutaj na myśli np w granicy od -5st do 5st. Ważne aby oscylował. Trzymaj robota w pionie, dłońmi trzymaj go z tyły i z przodu aby nie pojechał. Robot ma oscylować. Jak będzie oscylował to zmniejsz P tak aby już nie oscylował. To ma być tak na styk. Wiem, że mój opis jest mało dokładny ale lepiej nie umiem tego opisać. Resztę roboty przejmie człon I. Zwiększaj I aby robot znowu zaczął balansować. Jednocześnie sprawdzaj jaką masz sumę błędu. Nie może być ta wartość za duża. Szczegółowo o tym później napiszę. Teraz zwiększaj D, aż oscylacje będą mniejsze, krótsze. D można porównać do amortyzatora samochodowego. Jak dobrze to ustawisz to robot powinien trzymać około 0 stopni i powoli odjeżdżać w tył lub przód. Mam tutaj na myśli, że może i musi przyspieszać w dany kierunek i ma trzymać około 0st. Nie może oscylować w miejscu ma delikatnie odjeżdżać w tył lub przód. Jak to zrobisz przejdziemy dalej. PS. W żadnym wypadku dane wysłane po UART nie mogą blokować częstotliwości wywołania procesu 10ms. Ja to sprawdzałem na analizatorze stanów logicznych. To jest bardzo ważne.
×
×
  • 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.