Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Self Balancing Robot

Maniak.M 07 Lis 2013 10:28 27960 30
  • Self Balancing Robot
    Od kilku lat można zaobserwować wzrost zainteresowania pojazdami balansującymi. Przyczyniły się one do rozwoju różnego rodzaju platform transportowych. Najpopularniejszą z nich jest „Segway”. Roboty tego typu są niczym innym jak odwróconym, mobilnym wahadłem. Idea ta zakłada, że środek ciężkości w takim układzie znajduje się powyżej osi obrotu. Takie wahadło jest więc układem niestabilnym. W związku z tym wymagane jest aktywne regulowanie położenia w celu utrzymania pojazdu w pozycji pionowej. Jest to możliwe dzięki odpowiedniemu dawkowaniu momentu obrotowego dwóm silnikom umieszczonym w podstawie pojazdu. Moment obrotowy jaki trzeba przekazać na koła, które są na stałe sprzęgnięte z silnikami elektrycznymi zamocowanymi w podstawie robota jest wyliczany kilkadziesiąt razy na sekundę za pomocą zestawu czujników takich jak akcelerometr, żyroskop i enkodery silników. Aby opracować algorytmy sterowania konieczne okazało się filtrowanie sygnałów pomiarowych z czujników, co zrealizowano wykorzystując dyskretny filtr Kalmana. Następnie opracowano dedykowany system sterowania silnikami z wykorzystaniem sterowników PID.

    Roboty balansujące są bardzo ciekawym przedmiotem badań, ze względu na swoją niestabilną naturę. Pozwalają na zastosowanie różnych metod przetwarzania sygnałów, sterowania silnikami oraz wymagają uwzględnienia ograniczeń związanych z pracą części mechanicznych.

    Przedstawiam konstrukcję, którą udało się mi wykonać:

    Link


    Poniższy schemat przedstawia schemat ideowy połączeń między modułami.
    Self Balancing Robot

    Utrzymywanie równowagi

    Utrzymanie pojazdu w pozycji pionowej sprowadza się do rozwiązania dwóch głównych problemów, które dotyczą pojazdów balansujących. Pierwszym problemem jest określenie orientacji pojazdu w przestrzeni, natomiast drugim utrzymanie pojazdu w dynamicznie stabilnej pozycji.

    Utrzymanie pojazdu w pozycji stabilnej przeważnie polega na ciągłym pomiarze kąta odchylenia od pozycji równowagi. W konstrukcjach robotów balansujących zwykle wykorzystuje się do tego celu dane z żyroskopu, akcelerometru i enkoderów umieszczonych w napędzie robota. Dane z czujników są filtrowane i poddawane fuzji poprzez filtr komplementarny lub filtr Kalmana. Do sterowania silnikami wykorzystywane są również sterowniki PID.





    Pomiar kąta odchylenia pojazdu od pionu

    Pomiar kąta odchylenia można zrealizować na różne sposoby. Kąt może być wyznaczony na podstawie czujnika odległości platformy od podłoża, lecz to rozwiązanie jest dosyć wrażliwe ze względu na rodzaj podłoża po jakim porusza się robot. Innym sposobem może być zamontowanie ramienia dotykającego podłoże, którego oś obrotu zamontowana jest na enkoderze lub potencjometrze. Takie dodatkowe ramie może stwarzać kolejne problemy przy poruszaniu się robota, jest ono wrażliwe na nierówności itp. Zdecydowanie lepszym sposobem, który został wykorzystany w niniejszej pracy jest pomiar kąta odchylenia względem wektora przyspieszenia grawitacyjnego w połączeniu z pomiarem prędkości obrotowej. W tym celu zastosowano czujnik przyspieszenia, czyli akcelerometr oraz czujnik prędkości obrotowej (żyroskop).

    Odwrócone wahadło

    Robot bazuje na idei odwróconego wahadła. Środek obrotu w takim układzie znajduje się powyżej osi obrotu.

    Self Balancing Robot

    Rysunek: Schemat obróconego wahadła,
    m – masa; g – przyspieszenie grawitacyjne; F- siła działająca na masę m; θ – wychylenie od pozycji pionowej; l – długość ramienia

    Odwrócone wahadło jest przykładem układu niestabilnego. W związku z tym, aby utrzymać je w stanie równowagi niezbędna jest aktywna regulacja. Utrzymanie wahadła w pionie możliwe jest dzięki ściśle określonemu przemieszczaniu osi x układu współrzędnych.

    W omawianym pojeździe przemieszczanie osi X jest uzyskane poprzez zamontowanie osi obrotu wahadła na ułożyskowanych kołach, które są dynamicznie napędzane przez niezależne silniki prądu stałego.

    Taki układ umożliwia ciągłe przekazywanie odpowiedniego momentu obrotowego na koła dążąc do uzyskania stanu równowagi wahadła.

    Podsumowanie

    Tak powstał pojazd samodzielnie utrzymujący równowagę na dwóch kołach. Podczas budowy wielokrotnie zmieniano koncepcje w kwestii mechanicznych, elektronicznych i programistycznych. Powstały 3 różne konstrukcje mechaniczne, wiele wersji oprogramowania oraz użyto dwóch różnych czujników przyspieszenia i prędkości kątowej. Na każdej konfiguracji zostały przeprowadzone testy, które pozwoliły wybrać rozsądne rozwiązanie. Znaczącym problemem były przekładnie użyte do przeniesienia napędu. Niestety posiadały znaczące luzy, które utrudniały poprawne utrzymywanie równowagi. Bezwładność przekładni silnikowej nie została nigdzie uwzględniona w obliczeniach. Powodowało to wpadanie robota w wibracje.

    Konstrukcja jest w dalszym ciągu rozwijana. W przyszłości planowana jest budowa pełnowymiarowego transportera, który będzie mógł przewodzić człowieka. Już w tej chwili część elementów nadaje się do przeniesienia 1:1 do pełno wymiarowego pojazdu. Są to sterowniki silników, czujniki odchylenia od pionu, elektronika sterująca. Do zbudowania potrzebna jest całkowicie nowa konstrukcja mechaniczna, silniki, zasilanie, enkodery oraz modyfikacja oprogramowania.

    W trakcie budowy zebrano wiele interesujących informacji i zdobyto bezcenne doświadczenie, które zostanie wykorzystane do budowy pełno wymiarowego pojazdu.

    Po zbudowaniu modelu okazało się, że wybrana metoda pomiaru odchylenia od pionu na podstawie przyspieszeń w dwóch osiach oraz przyspieszenia kątowego ma dość dobrą dynamikę oraz udało się wyeliminować dryft żyroskopu gdy pojazd jest w stanie statycznym. Robot jest w stanie utrzymywać równowagę i powracać do stanu stabilnego po wystąpieniu przyłożeniu siły z zewnątrz. Taki układ ma jednak pewne ograniczenia. Sprawdza się jedynie podczas przemieszczania się po płaskiej powierzchni oraz nachylone zgodnie z kierunkiem jazdy. Nie sprawdza się gdy pojazd porusza się po powierzchni przechylonej na boki. Można by uwzględnić to w obliczeniach mierząc również odchylenie w kolejnej osi robota. Jednak prowadzi to do znacznego skomplikowania oprogramowania.

    Wykonano również oprogramowanie umożliwiające kontrolowanie parametrów pracy pojazdu w czasie rzeczywistym na ekranie komputera zarówno w postaci surowych liczb jak również wykresów. Taka analiza danych bardzo ułatwiła dalsze pisanie oprogramowania i kalibracje.



    Możliwości rozbudowy

    Opisywany pojazd osiągnął etap samodzielnego utrzymywania równowagi. Jest to kluczowa funkcjonalność którą można rozwinąć o wiele innych dodatkowych zarówno elektronicznych, mechanicznych jak i programistycznych. Oto kilka możliwych przykładów rozwoju:

    Zastosowanie silników bezszczotkowych (BLDC). Pozwoli to na kontrolowanie prędkości obrotowej prawie niezależnie od mocy silnika.
    Zastosowanie precyzyjniejszej przekładni. Zredukuje to luzy, które utrudniają utrzymanie równowagi.
    Zamontowanie dokładniejszych enkoderów. Zwiększy to dokładność odczytu prędkości i przemieszczenia.
    Stworzenie modelu dynamicznego pojazdu oraz implementacja nieliniowego sterownika. Pozwoli to na lepsze zachowanie przy dużych odchyleniach od pionu.
    Zamontowanie urządzeń służących do skanowania otoczenia. Pozwoli to na eksploracje terenu, budowanie mapy, omijanie przeszkód itp.
    Budowa pełnowymiarowego transportera dla człowieka.

    Pozdrawiam
    Robert Mordzon
    http://www.mordzon.net/blog/


    Fajne! Ranking DIY
    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz kartę SD 64GB.
  • #2 07 Lis 2013 12:07
    377475
    Użytkownik usunął konto  
  • #3 07 Lis 2013 12:36
    Maniak.M
    Poziom 16  

    Dziękuję, projekt pochłonął trochę czasu :)

    Poniższa tabela przedstawia koszty:

    Self Balancing Robot

  • #4 07 Lis 2013 13:21
    gradek83
    Poziom 37  

    Czy robot jest wstanie sam podnieść się do pionu?

  • #5 07 Lis 2013 13:24
    Maniak.M
    Poziom 16  

    gradek83 napisał:
    Czy robot jest w stanie sam podnieść się do pionu ?

    Nie ma takiej możliwości :D

  • #6 07 Lis 2013 13:38
    gradek83
    Poziom 37  

    Maniak.M napisał:
    Nie ma takiej możliwości

    A jak bys musiał taką możliwość wprowadzić oczywiście z tego co widzę koła by musiały mieć większą średnice aby były szersze od obudowy korpusu... a sposób stawiania musiał by być odpowiednio zaprojektowany bez dodatkowego jakiegoś podnośnika. Ale to już chyba bardziej skomplikowane zadanie aczkolwiek wtedy to dopiero był by robocik :D

  • #7 07 Lis 2013 14:01
    Maniak.M
    Poziom 16  

    @gradek83:
    Koła mają średnicę trochę większą od korpusu. Jak robot leży na boku to koła dotykają ziemi.
    W teorii przy dobrej przyczepności kół, można by go rozpędzić na boku, a następnie gwałtownie zmienić kierunek obrotu kół. Może by go poderwało :D. A później to już tylko utrzymanie równowagi. Może kiedyś to sprawdzę, ale musiał bym chyba po papierze ściernym jeździć, hehe

  • #8 07 Lis 2013 14:21
    gradek83
    Poziom 37  

    A jak by mu tak po obu stronach korpusu zamontować małe koła bezwładne czy jak to się na to mówi no takie co w markecie są tylko oczywiście wersja mini i zamiast rozpędzania obracał się dookoła własnej osi czyli jedno koło w prawo drugie w lewo i wtedy jedno nagle by się blokowało czy jakoś tak... ale to już znawca fizyki musiał by jakoś obliczenia przeprowadzić siła odśrodkowa itp...

    Jeszcze jedno pytanie czy robot ma możliwość obliczenia drogi jaką przebył oraz szybkości z jaką się porusza ?

  • #9 07 Lis 2013 14:34
    Maniak.M
    Poziom 16  

    Robot wie jaką drogę przebył dzięki enkoderom na osi silników. Potrafi nawet utrzymywać zadaną pozycję.
    Prędkość nie jest nigdzie liczona bo nie było takiej potrzeby, jednak gdyby trzeba było to nie stanowi to problemu. Zawsze, z dużą dokładnością wiadomo o ile obróciło się każde z kół.

    W pojeździe zamontowano dwa enkodery magnetyczne. Po jednym na każdy z silników napędzających robota. Rozdzielczość enkodera wynosi 64 podziałki na obrót. Silnik połączony jest z kołami za pośrednictwem przekładni 29:1, więc pozycje koła możemy określić z dokładnością 29 * 64 = 1856 kroków.

  • #10 07 Lis 2013 14:51
    gradek83
    Poziom 37  

    A jakbyś ręcznie zablokował koła, to silniki maja na tyle mocy aby podnieść bez problemu cały korpus z poziomej pozycji w pion? Bo jeśli tak, to może aby podnieść takiego robota wystarczyłoby zastosować jakieś hamulce na elektrozaworach magnetycznych blokujących same koła i wtedy byłaby szansa na podniesienie go bez potrzeby bawienia się w jakieś rozpędzanie go itp.

  • #11 07 Lis 2013 14:58
    Maniak.M
    Poziom 16  

    Silniki mają tyle mocy, żeby zrobić z korpusu wiatrak :D

    Ale nie rozumiem Twojej wizji.

  • #12 07 Lis 2013 16:26
    gradek83
    Poziom 37  

    Blokując koła blokujesz wał czyli silnik obraca się a wał jest nieruchomy a tym samym skoro silnik przymocowany jest do korpusy to i korpus się powinien obracać. Tylko właśnie ta blokada kół by musiała być jakoś odpowiednio opracowana.

  • #13 07 Lis 2013 16:44
    pk999
    Poziom 10  

    gradek83 napisał:
    Blokując koła blokujesz wał czyli silnik obraca się a wał jest nieruchomy a tym samym skoro silnik przymocowany jest do korpusy to i korpus się powinien obracać. Tylko właśnie ta blokada kół by musiała być jakoś odpowiednio opracowana.


    W takim wypadku trzebaby zablokować koła względem podłoża bo inaczej nic z tego.
    Już chyba lepiej zrobić prosty mechanizm na sprężynie z blokadą odbijający górną część pojazdu od podłoża do, w przybliżeniu prostopadłej do podłoża pozycji, a złapanie równowagi już zostawić automatyce. Wystarczyłoby tylko przed każdym startem napiąć sprężynę.

  • #14 07 Lis 2013 17:55
    MaxX850
    Poziom 13  

    pk999 napisał:
    W takim wypadku trzebaby zablokować koła względem podłoża bo inaczej nic z tego.


    Mechaniczna ręka podkłądająca kliny pod koła :wink:

  • #16 07 Lis 2013 19:02
    submariner
    Poziom 32  

    Świetny projekt i dobrze działa , napisałeś ..." co zrealizowano wykorzystując dyskretny filtr Kalmana." czy możesz podesłać schemat ew. algorytm (listing)tego filtru?

  • #17 07 Lis 2013 20:13
    Maniak.M
    Poziom 16  

    hubertfab napisał:
    Zadaniem robota balansującego jest jak sama nazwa wskazuje utrzymywanie pionowej pozycji, a nie podnoszenie się.

    Tak, właśnie :)

    hubertfab napisał:
    Jaki model akcelerometru i żyroskopu został wykorzystany w projekcie?


    MinIMU-9 v2

    Akcelerometr LSM303DLHC
    Magnetometr LSM303DLHC
    Żyroskop L3GD20

    http://botland.com.pl/akcelerometry-moduly/852-minimu-9-v2-akcelerometr-zyroskop-i-magnetometr-modul.html

  • #18 07 Lis 2013 20:16
    Frog_Qmak
    Poziom 25  

    Kolega też jest studentem? Wykrywam perfekcyjnie znany styl pisania sprawozdań na laborki;)

    Konstrukcja rewelacyjna, zazdroszczę wiedzy i wykonania!

  • #19 07 Lis 2013 22:44
    Strumien swiadomosci swia
    Poziom 43  

    A mam pytanie czy robocik ma zaimplementowane poruszanie się po pochyłości i czy to wykrywa, tak samo jak coś wpadnie pod koło np obrzeże wykładziny to co robot wtedy robi ?
    Albo co Twój robocik zrobi w kuwecie z piaskiem?

  • #20 08 Lis 2013 06:50
    Maniak.M
    Poziom 16  

    submariner napisał:
    Świetny projekt i dobrze działa , napisałeś ..." co zrealizowano wykorzystując dyskretny filtr Kalmana." czy możesz podesłać schemat ew. algorytm (listing)tego filtru?


    Używam tej biblioteki: https://github.com/TKJElectronics/KalmanFilter


    Frog_Qmak napisał:
    Kolega też jest studentem? Wykrywam perfekcyjnie znany styl pisania sprawozdań na laborki;)


    Ten projekt zakończy moje studiowanie :D


    Strumien swiadomosci swia napisał:
    A mam pytanie czy robocik ma zaimplementowane poruszanie się po pochyłości i czy to wykrywa, tak samo jak coś wpadnie pod koło np obrzeże wykładziny to co robot wtedy robi ?
    Albo co Twój robocik zrobi w kuwecie z piaskiem?


    Jak widać na filmiku robot radzi sobie na pochyłościach.
    Co do nierówności to nie ma problemu. Można najechać jednym kołem na książkę np. 2cm i jest ok.
    Co do kuwety z piachem to nie mam pojęcia, to nie łazik marsjański, ale na trawie utrzymuje równowagę.

  • #21 08 Lis 2013 12:31
    Pablo2015
    Poziom 18  

    Witam,
    Czy algorytm przewiduje sytuację zablokowania jednego koła? Chodzi mi o to, co zrobi gdy jedno koło się zablokuje np. kamieniem? Czy robot w tedy będzie się starał balansować jednym kołem czy może po prostu padnie ;-)?

    Pozdrawiam

  • #22 08 Lis 2013 21:01
    gucio222
    Poziom 13  

    Witam
    Projekt super tylko cena mnie trochę powaliła. Mam trójkę dzieciaków i myśląc o ich rozwoju właśnie wczoraj odebrałem coś co nazywa się Lego Mindstorms EV3. Na nim taki balansujący robot po zakupie dodatkowo żyroskopu za 160zł wychodzi za 1400zł i do tego ma się jeszcze kupę części i sensorów. Ich nowa jednostka centralna oparta jest na arm9 chodzącym na Linuksie. Nie chcę robić reklamy ale zabawka mnie powaliła. Może otworzyć oddzielny temat na elektrodzie co na tym urządzaniu można zrobić. To takie na marginesie złote myśli po artykule powyżej i zakupie nowej zabawki.

  • #23 09 Lis 2013 22:41
    Maniak.M
    Poziom 16  

    Pablo2015 napisał:
    Witam,
    Czy algorytm przewiduje sytuację zablokowania jednego koła? Chodzi mi o to, co zrobi gdy jedno koło się zablokuje np. kamieniem? Czy robot w tedy będzie się starał balansować jednym kołem czy może po prostu padnie ;-)?

    Pozdrawiam


    Robot nie ma jakiś specjalnych, algorytmów na taką sytuacje, jednak obecny kod zachowuje się tak jak napisałeś. Będzie utrzymywał równowagę obracając się w okół osi zablokowanego koła.

  • #24 12 Lis 2013 22:15
    piotr_go
    Poziom 27  
  • #25 15 Lis 2013 17:11
    c4r0
    Poziom 36  

    Super projekt, bardzo mi się podoba :) Jak trudne jest strojenie regulatora PID żeby robot stabilnie jeździł? Czy myślałeś o implementacji jakiegoś algorytmu automatycznej korekty współczynników ("uczenia") tak, żeby robot mógł optymalizować parametry PID po tym jak na przykład coś niewielkiego na nim postawisz? Jak by mógł jeździć z filiżanką kawy na "głowie" to byłby niezły bajer :D

  • #26 16 Lis 2013 13:08
    Maniak.M
    Poziom 16  

    c4r0 napisał:
    Super projekt, bardzo mi się podoba :) Jak trudne jest strojenie regulatora PID żeby robot stabilnie jeździł? Czy myślałeś o implementacji jakiegoś algorytmu automatycznej korekty współczynników ("uczenia") tak, żeby robot mógł optymalizować parametry PID po tym jak na przykład coś niewielkiego na nim postawisz? Jak by mógł jeździć z filiżanką kawy na "głowie" to byłby niezły bajer :D


    Dla Ciebie c4r0 to nie będzie żaden problem :)
    Można go tak wy kalibrować, że będzie woził kawe.
    Faktycznie, fany był by algorytm automatycznej kalibracji sterownika PID, ale ja już raczej nie będę dopisywał takiej funkcjonalności. Teraz kolejne projekty są na warsztacie.

  • #27 16 Lis 2013 14:21
    piotr_go
    Poziom 27  

    To co z tą martwą strefą? Nadaje się ten pad do dokładnego sterowania czy połowa wychylenia drążków jest nie wykrywana?

  • #28 16 Lis 2013 14:22
    Maniak.M
    Poziom 16  

    Nie zauważyłem martwej strefy.
    Wydaje się, że analogowe joystick działają w całym zakresie.

  • #29 16 Lis 2013 14:31
    piotr_go
    Poziom 27  

    OK, dzięki. Pewnie go zamówię.
    Będę kombinował jak tu go połączyć bezpośrednio z własnym układem z pominięciem kompa. Ciekawe czy coś z tego wyjdzie :)
    Zastanawiałeś się nad taką możliwością?

  • #30 22 Wrz 2014 16:45
    adamtyros
    Poziom 1  

    Witam. Realizuje projekt takiego robota. Jestem na etapie strojenia regulatora PI. Czy mógłbyś zdradzić jak stroiłeś swojego robota? Jeśli stroiłeś go intuicyjnie, to czy możesz zdradzić jakich zachować należy doszukiwać się w robocie, aby widzieć że zbliżam się do prawidłowych wartości? Użyłeś regulatora PI czy PID?