Skocz do zawartości

[Programowanie] Sterowanie robotem mobilnym klasy (2,0)


Pomocna odpowiedź

Bardzo dobrze napisany artykuł! Wyjaśnia wiele kwestii - dziękuję, wiedza zdobyta po przeczytaniu tego artykułu na pewno mi się przyda. Interesuje mnie jeszcze kwestia użycia żyroskopu w MM - w jaki sposób wykorzystać odczyt z żyroskopu do ustalania/kontroli rotacji? Może napiszesz drugą część, opisując właśnie użycie żyroskopu? Podobnie sprawa wygląda z użyciem czujników - żadna z myszy nie jeździ po labiryncie wyłącznie w oparciu o enkodery, tylko koryguje swoją pozycje odczytując błąd poprzez różnicę odległości poszczególnych czujników od ścianek. W jaki sposób prowadzić tego typu korektę do zaprezentowanego przez Ciebie modelu? Na podstawie różnicy odczytów czujników bocznych można zniwelować błąd translacji, a na podstawie różnicy przednich, błąd rotacji (oczywiście w momencie dotarcia do ślepego zaułku), tak? Jak to się ma, do regulatora PD opartego na enkoderach? W jaki sposób zmodyfikować opisane przez Ciebie rozwiązanie, by uwzględnić analogowe odczyty czujników?

Nie obiecuję, że opiszę to w równie dogłębny sposób jak powyższe zagadnienie, szczególnie że aktualnie jeszcze nad tym pracuję. Gdy będę to już miał w miarę ogarnięte i znajdzie się chwila czasu, postaram podzielić się wiedzą 😉

Baton, gratuluję udanego artykułu. Sporo przydatnej wiedzy i praktyczne podejście do tematu. Masz może pod ręką jakieś źródła w których można poczytać więcej o profilerach?

Interesuje mnie jeszcze kwestia użycia żyroskopu w MM - w jaki sposób wykorzystać odczyt z żyroskopu do ustalania/kontroli rotacji? Może napiszesz drugą część, opisując właśnie użycie żyroskopu?

To kiepski pomysł. Osobiście nie znalazłem żyroskopu MEMS, który mierzy położenie kątowe.(jeśli ktoś ma namiary na takie coś - niech da znać) Błędy całkowania prędkości kątowej tylko przysporzą Ci kłopotów. Proponuje pomyśleć o dwuosiowym magnetometrze jako kompasie. Jeśli nie ma dookoła silnych magnesów będziesz miał piękny pomiar kąta w płaszczyźnie XY.

Podobnie sprawa wygląda z użyciem czujników - żadna z myszy nie jeździ po labiryncie wyłącznie w oparciu o enkodery, tylko koryguje swoją pozycje odczytując błąd poprzez różnicę odległości poszczególnych czujników od ścianek. W jaki sposób prowadzić tego typu korektę do zaprezentowanego przez Ciebie modelu?

Dodać je do rotacji. Translacja "przesuwa" robota w kierunku ruchu, rotacja odpowiada za skręt.

Osobiście nie znalazłem żyroskopu MEMS, który mierzy położenie kątowe.(jeśli ktoś ma namiary na takie coś - niech da znać) Błędy całkowania prędkości kątowej tylko przysporzą Ci kłopotów.

Nie znalazłeś, bo takich nie ma, żyroskop to żyroskop - służy do mierzenia prędkości kątowej. Nie ma innej metody niż to scałkować 😉 Przy odpowiednio krótkim okresie całkowania, można uzyskać wystarczające efekty i właśnie tą wartość podaje się wtedy jako błąd w profilerze rotacji.

Proponuje pomyśleć o dwuosiowym magnetometrze jako kompasie. Jeśli nie ma dookoła silnych magnesów będziesz miał piękny pomiar kąta w płaszczyźnie XY.

Silne magnesy są, i to na tej samej płytce, w silnikach 🙂

Silne magnesy są, i to na tej samej płytce, w silnikach

Teraz pytanie czy silniki będą mieć wpływ - bądź co bądź magnesy są obudowane metalem, doatkowo się kręcą z dużąprędkością, co przy czasach reakcji magnetometru nei powinno sprawiać dużych problemów. Natomiast duże problemy sprawią elementy na płytce - ścieżki prądowe mogąpotwornie zakłócać jego pracę.

Nie znalazłeś, bo takich nie ma, żyroskop to żyroskop - służy do mierzenia prędkości kątowej. Nie ma innej metody niż to scałkować 😉 Przy odpowiednio krótkim okresie całkowania, można uzyskać wystarczające efekty i właśnie tą wartość podaje się wtedy jako błąd w profilerze rotacji.

Mylisz się, żyroskop - w zależności od typu mierzy prędkość kątową bądź kat. Ten drugi typ często spotykany jest w awionice (jako żyrokompas lub/i sztuczny horyzont - będąc precyzyjnym). Fakt, iż nie można znaleźć go w amatorskich konstrukcjach jako pojedynczy chip nie znaczy że takie rozwiązane nie istnieje. Powiedzenie "szukałem i nie znalazłem" też niestety niczego nie dowodzi.

Masz rację iż ze zwykłego żyroskopu MEMS można uzyskać w miarę przybliżone wyniki, musisz jednak kompensować jego bias. Nie zdziw się jeśli robot będzie "obracał się" mimo stania w miejscu po scałkowaniu prędkości kątowej.

Silne magnesy są, i to na tej samej płytce, w silnikach 🙂

Wydaje mi się, iż silniki BLDC bardziej "sieją" magnetycznie(wirujące neodymowe magnesy) niż DC. Jakoś nie widziałem nigdy coptera który by spadł z tego powodu. Myślę iż OldSkull ma rację, problemem mogą być ścieżki prądowe. Nikt jednak nie mówi o tym, aby umieszczać go w robocie między silnikami lub w głównej sekcji zasilania - niech sobie siedzi koło uC podpięty do zasilania ADC z "przodu" robota. - to powinno załatwić sprawę.

Z praktyki wiem na pewno, iż spore zakłócenia powodował monitor CRT w niewielkiej odległości(kilkadziesiąt cm) od magnetometru. Gdy będę miał dostęp do płytki IMU sprawdzę jak wpływają na niego silniki Pololu - to powinno być dość miarodajne.

Sam uściśliłeś, że chodzi o elementy MEMS, a tutaj wszystkie żyroskopy działają tak samo. Do uzyskania sztucznego horyzontu na elementach MEMS konieczna jest fuzja kilku czujników (np. żyroskop + akcelerometr).

Zacytuję tutaj znajomego: "w teorii, praktyka pokrywa się z teorią, ale w praktyce już nie", więc zanim stanowczo stwierdzisz że coś się nadaje a coś nie, proszę poprzyj to praktycznym doświadczeniem 🙂

Rozwiązanie z żyroskopem jest sprawdzone w wielu konstrukcjach myszy na całym świecie, a właśnie w kontekście micromouse padło pytanie ze strony MatManiaka. Magnetometr jest zdecydowanie za wolny... Co innego fuzja żyroskopu i magnetometru, ale równie dobrze można sobie skorygować kierunek czujnikami optycznymi.

Co innego jeśli chodzi o platformę z nawigacją, czy to latającą, czy jeżdżącą. Tam użycie magnetometru ma jak najbardziej sens.

A nie większa - rotacja i mniejsza + rotacja?

Zakładając, że L - odczyt lewego koła, P - odczyt prawego koła, R - rotacja, oraz L > P:

R = L-P

T = L-R + P+R = L-(L-P) + P+(L-P) = L-L+P+P+L-P = L+P

To samo 😉

  • 4 lat(a) później...
reg_newPWML = regV_P * regV_aktE + regV_D * (regV_aktE - regV_prevE) 
               + regT_P * regT_aktE + regT_D * (regT_aktE - regT_prevE); 
reg_newPWMP = regV_P * regV_aktE + regV_D * (regV_aktE - regV_prevE) 
               - regT_P * regT_aktE + regT_D * (regT_aktE - regT_prevE); 

Czym są te zmienne "regV_P, regV_D, regT_P, regT_D", bo do końca nie mogę załapać ?

Jak sądzę jest do związane z liczeniem odchyłek, ale skąd ma to dostać wartość ?

  • 4 lat(a) później...
(edytowany)

Witam.

Mam pytanie odnośnie linii obliczania w powyższym algorytmie:

if(((aktualna_V_8 - next_V_8)*((aktualna_V_8 + next_V_8 + 128) >> 8))/(2*przysp_8) >= target_S - zad_S)

Odnosi się ona do liczb stałoprzecinkowych 8.8. 

Cytuję za artykułem:

Cytat

Ta pojedyncza linijka wymaga chwili uwagi. Ponieważ w liczniku ułamka pomnożone zostają dwie zmienne stałoprzecinkowe X.8 (a więc będące zapisane jako liczby całkowite 256 razy większe od ich wartości w naszej interpretacji), a w mianowniku znajduje się jedna taka zmienna, aby otrzymać w wyniku zmienną całkowitą, musimy ten pierwszy podzielić przez 256. Nie robimy tego jednak z całym licznikiem, a tylko jednym mnożnikiem.

W przypadku użycia zwykłych liczb zmiennoprzecinkowych. Rozumiem to dzielenie jest niepotrzebne?

Druga sprawa tyczy się tej linii:

if(set_S >= target_S || (stan == HAMOWANIE && MYSZ.prof_mV == 0))

Co sprawdza Część warunku: MYSZ.prof_mV == 0

Co przechowuje ta wartość?

Edytowano przez MarCiu

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...