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ć:

 

 

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

 

Schemat połączeń

 

 

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.

wahadło

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.

3 comments

  1. ml pisze:

    Bardzo fajny projekt, jestem w trakcie projektowania podobnego, ale widzę, że miałeś inną koncepcję i dlatego będę miał kilka pytań ;)

    1. Jak to jest zrobione, że robot jedzie do przodu, tzn. jeśli silniki mają utrzymywać go w pionie, to jak możliwa jest jednoczesne ich napędzanie joystickiem? Sygnał jazdy do przodu np powoduje przesunięcie dozwolonego kąta (z zera na kilka stopni ) utrzymywanie równowagi w jego pobliżu dynamiką jazdy?)

    Ja chciałem to rozwiązać zmieniając środek ciężkości wychylnym ramieniem serwa, ale widzę, że zrobiłeś to bez jego użycia

    2. Czy prędkość jazdy jest zależna od wychylenia joysticka?

    3. Sterowniki są dedykowane do tych silników? Czy można do nich dołączyć inne silniki ustawiając ich parametry

    4. Czy Arduino DUE wybrane ze względu na szybki procesor? Myślisz, że AVR dawałyby sobie radę z kodem programu? Od razu pytanie, czy kod jest w C, czy potrzebny był momentami assembler (filtracja sygnałów z czujników)?

    5. Czy żyroskop jest niezbędny? W ogóle w jaki sposób komunikujesz te wskazania z czujników i enkoderów wszystko po jakiejś jednej magistrali np. I2C?

    No to tyle pytań jak na razie :) Odpisz tu lub na maila.

    • Robert Mordzon pisze:

      1. Robot dąży do utrzymania 0 stopni odchyłu od pionu. Gdy chcę jechać każę utrzymywać np 2 stopnie odchyłu od pionu. Jest to realizowane za pomocą modyfikowania parametrów przy obliczeniach.

      2. Tak

      3. Sterowniki są uniwersalne. Można zastosować inne.

      4. Wystarczy Arduino UNO. Nie potrzebny jest bardzo wydajny mikrokontroler. Assembler też jest całkowicie zbędny.

      5. Żyroskop jest potrzebny.
      Komunikuje się po I2C

      Pozdrawiam
      Robert

  2. JMJ pisze:

    Please share your code?
    I have a minimu 9 v2. want to build the same robot.