Popularny post baton Napisano Wrzesień 30, 2012 Popularny post Udostępnij Napisano Wrzesień 30, 2012 Problem sterowania robota wyposażonego w dwukołowy napęd różnicowy, nazywanego też robotem mobilnym klasy (2,0), prawdopodobnie dosięgnie z czasem większość osób zajmujących się robotyką amatorską. Do tej klasy robotów zalicza się dużą cześć powstających konstrukcji, szczególnie linefollowerów, micromouse'ów i wszelkiej wielkości sumo. Może się okazać, że dla osoby podejmującej się wysterowania takiej platformy po raz pierwszy, będzie to zadanie problematyczne. Z racji na brak materiałów traktujących o tym zagadnieniu w sposób przystępny i jednocześnie w miarę kompletny, powstał niniejszy artykuł. UWAGA, to tylko wstęp! Dalsza część artykułu dostępna jest na blogu.Przeczytaj całość »Poniżej znajdują się komentarze powiązane z tym wpisem. 5
MatManiak Październik 2, 2012 Udostępnij Październik 2, 2012 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?
baton Październik 2, 2012 Autor tematu Udostępnij Październik 2, 2012 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ą
FallenAngel Październik 3, 2012 Udostępnij Październik 3, 2012 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.
grabo Październik 3, 2012 Udostępnij Październik 3, 2012 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
OldSkull Październik 3, 2012 Udostępnij Październik 3, 2012 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ę.
FallenAngel Październik 3, 2012 Udostępnij Październik 3, 2012 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.
grabo Październik 3, 2012 Udostępnij Październik 3, 2012 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.
mog123 Październik 8, 2012 Udostępnij Październik 8, 2012 [...] Nic prostszego - translacja to suma odległości przejechanych przez oba koła [...] A nie większa - rotacja i mniejsza + rotacja?
baton Październik 8, 2012 Autor tematu Udostępnij Październik 8, 2012 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
OldSkull Październik 9, 2012 Udostępnij Październik 9, 2012 baton, generalnie translacja to (L+P)/2; Ale można to traktować jako sumę przeskalowaną, tak samo jak obrót traktujemy jak przeskalowaną różnicę.
Marcin_56 Luty 10, 2017 Udostępnij Luty 10, 2017 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ść ?
MarCiu Wrzesień 3, 2021 Udostępnij Wrzesień 3, 2021 (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 Wrzesień 3, 2021 przez MarCiu
Pomocna odpowiedź
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ę »