Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

arduino - sterowanie osiami wykorzystując żyroskop i akcelerometr

03 Jan 2015 18:14 2505 5
  • Level 7  
    Witam,

    dopiero zaczynam przygodę z Arduino Uno i programowaniem.
    Za pomocą interfejsu I2C i płytki MPU6050 (GY 521) chciałbym sterować trzema osiami wykorzystując dane z żyroskopu i akcelerometru.
    W sieci znalazłem wiele gotowców lecz większość nie porusza problemu z osią Z, aby ją poruszyć muszę wykorzystać dane z żyroskopu i połączyć je z danymi z akcelerometru, lecz nie wiem jak.
    Interesuje mnie również stabilizacja serw dzisiaj znalazłem funkcję FIFO co o niej myślicie??

    Byłbym wdzięczny za wszelką pomoc.
    Do you have a problem with Arduino? Ask question. Visit our forum Arduino.
  • MCUs specialist
    Jak myślisz, czy ktoś tutaj rozumie, o co pytasz?

    Co to jest "sterowanie trzema osiami"?

    Co ma wspólnego FIFO (czyli kolejka) ze sterowaniem serwami?
  • Level 7  
    Chciałbym stworzyć coś takiego
    https://www.youtube.com/watch?v=mX_8-Brb9s0
    lecz z dodatkowym serwem, które sterowałoby osią Z.
    Starałem się zmodyfikować kod właściciela lecz nie udaje mi się to.

    Dzięki FIFO serwa zachowują się stabilniej.

    Byłbym wdzięczny za pomoc.[/youtube]
  • MCUs specialist
    I oczywiście mamy zgadnąć, w której linii Twojego kodu jest błąd, nie widząc tego kodu?

    Do sterowania na zasadzie odtwarzania pozycji potrzebujesz trójosiowego akcelerometru, nie żyroskopu. Czyli dokładnie to samo, co obecnie robisz dla dwóch osi, masz robić dla trzech.

    Zdanie "Dzięki FIFO serwa zachowują się stabilniej." Jest ciut pozbawione sensu. Stabilność można poprawić przez filtrowanie odczytów z akcelerometru i "wygładzanie" sterowania serwami.
  • Level 35  
    92rafael wrote:
    lecz z dodatkowym serwem, które sterowałoby osią Z.

    Nie da sie. Przynajmniej nie opierając się o to, o co oparł się autor tego na jutubie. Musiałbyś mieć dwa przyspieszenia odsniesienia, czyli jedno ziemskie, a drugą... pozaziemskie ;] I dodatkowo, precyzyjnie je znać.
    Patrz tutaj. Nie rozpoznasz 'yaw'.

    92rafael wrote:
    Dzięki FIFO serwa zachowują się stabilniej.

    Bzdura. FIFO to tylko kolejka, dzieki niej nic nie 'działa stabilniej'. To jest programistyczny klocek pełniący określoną funkcjonalność; najpierw zrozum co robi FIFO...

    To co zrobił autor na podanym filmie to wyliczanie kąta nachylenia akcelerometru względem ziemi.
    Akcelerometr w spoczynku leżący płasko na powierzchni ziemi widzi dokładnie 1g 'w dół' wzdłuż jednej ze swoich osi (nie podam której, zalezy od akcelerometru), na pozostałych osiach widzi dokładnie 0g przyspieszenia (tak, przyspieszenie ziemskie to też przyspieszenie, wiec czujnik tego przyspieszenia widzi to... przyspieszenie).

    Trzeciej osi nie ogarniesz tak łatwo - ruchu 'wokół osi' przyspieszenia ziemskiego akcelerometru nie rozpoznasz inaczej niż całkując wypadkowe chwilowe przyspieszenie dwóch osi na raz. Aby znać pozycję, musisz całkować dwa razy. Biorąc pod uwagę szumy akcelerometru, taki pomiar to nie pomiar, i wyniki nie będą powtarzalne - więc rozwiązanie idzie do śmieci. Musisz szukać w tym wypadku czegoś innego. Np. kompas...

    Na podstawie rozłozenia przypieszenia ziemskiego na osie akcelerometru autor oblicza kąt jego nachylenia względem płaszczyzny (:D) ziemi, więc wie, jaki kąt ustawić na serwach.

    FIFO to nie jest 'magiczny algorytm', tylko najpewniej służy w tym przypadku do płynnego przerzucania danych sterujących serwami między producentem (procesem obliczającym nachylenie akcelerometru) a konsumentem (procesem sterującym serwami)...

    BlueDraco wrote:
    Do sterowania na zasadzie odtwarzania pozycji potrzebujesz trójosiowego akcelerometru

    Jak napisałem wyżej, i jak napisałeś Ty sam w wątku o potencjometrze inercyjnym - określanie pozycji na podstawie podwójnego całkowania chwilowego przyspieszenia to siłą rzeczy generator błędów....

    BlueDraco wrote:
    Stabilność można poprawić przez filtrowanie odczytów z akcelerometru i "wygładzanie" sterowania serwami.

    Dolnoprzepustowy filtr ;] ale sądzę ze zwykła średnia krocząca zdecydowanie poprawiłaby już płynność sterowania serwami.
  • Level 7  
    Dziękuję za pomoc.
pcbway logo