Takže moje delší odpověď níže předpokládá, že hrací deska projde zrychlením a během této doby musíte být stále schopni změřit výšku, natočení a vybočení během krátké doby. Pokud bude deska pro všechna měření nehybná, pak pro vás bude odpověď Mahendry Gunawardeny fungovat perfektně. Pokud jde o zařízení, jako je segway nebo modelové letadlo nebo multirotor nebo cokoli, co se pohybuje, možná budete chtít číst dál. Tento příspěvek je o tom, jak používat všechny tři senzory metodou zvanou fúze senzorů. Sloučení senzorů vám umožní získat silné stránky každého senzoru a minimalizovat dopady slabostí jednotlivých senzorů.
Vlastnosti a pozadí senzoru
Nejprve si uvědomte, že akcelerometr měří všechny síly, které na něj působí , nejen gravitační síla. Takže v dokonalém světě s akcelerometrem ve stacionární poloze bez jakýchkoli vibrací byste mohli dokonale určit, která cesta je nahoru, pomocí některé základní trigonometrie, jak ukazuje odpověď Mahendry Gunawardeny. Protože však akcelerometr zachytí všechny síly, jakékoli vibrace způsobí hluk. Je třeba také poznamenat, že pokud se deska zrychluje, nemůžete použít pouze jednoduchou trigonometrii, protože síla, kterou akcelerometr hlásí, není jen zemská gravitační síla, ale také síla, která vám způsobuje zrychlení.
Magnetometr je přímočařejší než akcelerometr. Pohyb s ním nebude způsobovat problémy, ale věci jako železo a jiné magnety nakonec ovlivní váš výstup. Pokud jsou zdroje způsobující toto rušení konstantní, není těžké s nimi zacházet, ale pokud tyto zdroje nejsou konstantní, vytvoří se spousta hluku, jehož odstranění je problematické.
Ze tří senzorů je nejspolehlivější gyroskop, který je obvykle velmi dobrý v měření rychlosti otáčení. Není ovlivněn věcmi, jako jsou zdroje železa a zrychlení nemá v zásadě žádný vliv na jejich schopnost měřit rychlost otáčení. Dělají velmi dobrou práci při hlášení rychlosti, při které se zařízení otáčí, ale protože hledáte absolutní úhel, musíte integrovat rychlost, abyste získali polohu. Tímto způsobem přidáte chybu posledního měření k chybě nových měření, protože integrace je v zásadě součtem hodnot v určitém rozsahu, i když je chyba pro jedno měření vypnuta pouze 0,01 stupně za sekundu, při 100 měřeních bude vaše pozice lze vypnout o 1 stupeň, o 1 000 měření, můžete vypnout o 10 stupňů. Pokud provádíte stovky měření za sekundu, můžete vidět, že to způsobuje problémy. Toto se běžně nazývá drift gyroskopu.
Sloučení senzorů
Krása toho, že všechny tyto senzory spolupracují, spočívá v tom, že můžete gyroskop zrušit pomocí informací z akcelerometru a magnetometru drift. To vám nakonec umožní dát vám přesnost a rychlost gyroskopu bez fatální chyby driftu gyroskopu.
Kombinace dat z těchto tří senzorů lze provést více než jedním způsobem, promluvím si o použití doplňkového filtru, protože jeho mnohem jednodušší než kalmanský filtr a kalmanské filtry sníží mnohem více zdrojů na vestavěných systémech. Doplňkový filtr je často dost dobrý, jeho implementace je jednodušší (za předpokladu, že nepoužíváte předem vytvořenou knihovnu) a umožňuje rychlejší zpracování dat.
Nyní k procesu. První kroky, které musíte udělat, je integrovat výstup gyroskopu a převést úhlovou rychlost do úhlové polohy. Pravděpodobně také budete muset použít filtr dolní propusti na akcelerometru a magnetometru, abyste se vypořádali se šumem na výstupu. Zde funguje jednoduchý filtr FIR, jako je ten, který je zobrazen níže. S trochou trigonometrie můžete najít rozteč a otáčky s akcelerometrem a vybočení s magnetometrem.
filtrované údaje = (1 váha) * filtrované údaje + váha * nové údaje
Hmotnost je pouze konstanta, kterou lze upravit v závislosti na tom, s jakým hlukem se musíte vypořádat, čím vyšší je hluk, tím menší bude hodnota hmotnosti. Nyní lze kombinovat data ze senzorů pomocí následujícího řádku kódu.
fusedData = (1-weight) * gyroData + weight * accelMagData
Je třeba poznamenat, že data jsou vektorem výšky, náklonu a vybočení. K tomu můžete použít pouze tři proměnné místo polí, pokud chcete. Pro tento výpočet gyroskop poskytuje polohu ve stupních v rozteči, náklonu a vybočení, magnetometr poskytuje úhel vybočení, zatímco akcelerometr poskytuje vlastní čísla pro rozteč a vybočení.
Pokud stále potřebujete více informací, umí google „fúze senzorů s doplňkovým filtrem“, je o tom spousta článků.