Otázka:
Výpočet výšky, vybočení a otáčení z mag, acc a gyroskopických dat
MaltDew
2015-06-27 03:43:48 UTC
view on stackexchange narkive permalink

Mám desku Arduino se senzorem volnosti 9 stupňů, ze kterého musím určit rozteč, vybočení a natočení desky.

Zde je příklad jedné sady dat z 9-DOF senzor:

Akcelerometr (m / s)

  • $ \ text {Acc} _ {X} $ = -5,85
  • $ \ text {Acc} _ {Y} $ = 1,46
  • $ \ text {Acc} _ {Z} $ = 17,98

Gyroskop (RPM)

  • $ \ text {Gyr} _ {X} $ = 35,14
  • $ \ text {Gyr} _ {Y} $ = -40, 22
  • $ \ text {Gyr} _ {Z} $ = -9,86

magnetometr (Gauss)

  • $ \ text {Mag} _ {X} $ = 0,18
  • $ \ text {Mag} _ {Y} $ = -0,04
  • $ \ text {Mag} _ {Z} $ = -0,15

Jak z těchto údajů mohu vypočítat rozteč, zatáčení a otáčení?

Základní princip: od detekce gravitace ve vašem akcelerometru víte, která cesta je dole; z detekce zemského magnetického pole ve vašem magnetometru víte, kterým směrem je sever. Na základě toho a za předpokladu, že nedojde k žádným dalším významným zrychlením nebo silným magnetickým polím, můžete určit svůj vlastní postoj.
Data gyroskopu poskytují rychlost otáčení, ale ne absolutní polohu. Může být integrován k odhadu změny ze známého postoje, ale to je obvykle hlučné a náchylné k driftu, pokud se nepoužívá ve spojení s ostatními senzory.
odkazují také na kalmanovy filtry, protože statické počty je třeba zpracovat docela dost, aby bylo možné spolehlivě odhadnout rozteč a zatáčení. Nezapomeňte také, že poloha snímače je důležitá (musíte ji vzít v úvahu).
Tři odpovědi:
Mahendra Gunawardena
2015-06-27 04:33:05 UTC
view on stackexchange narkive permalink

Rozteč, natočení a vybočení jsou definovány jako rotace kolem os X, Y a Z. Níže jako obrázek pro ilustraci definice.

Roll Pitch and Yaw

V předchozím projektu jsem k výpočtu náklonu a rozteče použil akcelerometr ADXL345 od Analog Devices. Níže jsou rovnice použité k výpočtu náklonu a výšky tónu. Zpřístupnil jsem část zdrojového kódu pro veřejné použití.

  accelerationX = (signed int) (((signed int) rawData_X) * 3.9); accelerationY = (signed int) (((signed int) rawData_Y) * 3.9); accelerationZ = (podepsáno int) (((signed int) rawData_Z) * 3,9); rozteč = 180 * atan (accelerationX / sqrt (accelerationY * accelerationY + accelerationZ * accelerationZ)) / M_PI; role = 180 * atan (accelerationY / sqrt (accelerationX * accelerationX + accelerationZ * accelerationZ)) / M_PI;  

Kompletní zdrojový kód najdete zde.

Vycházejte z výše uvedených definic

  yaw = 180 * atan (accelerationZ / sqrt (accelerationX * accelerationX + accelerationZ * accelerationZ)) / M_PI;  

Poznámka: M_PI = 3.14159265358979323846 je konstanta definována v math.h

Níže uvádíme několik odkazů, včetně zdrojového kódu Arduino base, který vám může pomoci.


Odkazy:

Pěkná odpověď, stálo by za to dodat, že by byla důležitá poloha a orientace senzoru ve vozidle a že údaje musí být dále zpracovány, aby byly získány spolehlivé výsledky. (filtrováno nebo spojeno se spolehlivějšími nízkofrekvenčními daty, jako je GPS)
(@Zubair) "yaw = 180 * atan (accelerationZ / sqrt (accelerationXaccelerationX + accelerationZaccelerationZ)) / M_PI;" co je to 'M_PI' ??
@Wasabi M_PI = 3,14159265358979323846. Je konstanta definovaná v knihovně math.h.
proč někdy najdu pitch and roll pomocí pythagoras a někdy to používá jen jeden
@Mr-Programs, Je to už mnoho let, co jsem na problému pracoval. Navrhuji zveřejnit novou otázku a propojit tuto odpověď.
Dave851
2016-01-29 21:39:55 UTC
view on stackexchange narkive permalink

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ů.

Efthymios Kalyviotis
2018-06-10 18:40:52 UTC
view on stackexchange narkive permalink

Z dat senzoru akcelerátoru můžete vypočítat pouze stoupání a naklánění. Níže uvedený dokument Freescale vysvětluje se spoustou informací, co potřebujete:

AN3461 - Snímání náklonu pomocí tříosého Akcelerometr

Na základě tvrzení dokumentu,

$$ \ tan \ phi_ {xyz} = \ frac {G_ {py}} {G_ {pz} } $$

$$ \ tan \ theta_ {xyz} = \ frac {-G_ {px}} {G_ {py} \ sin \ phi + G_ {pz} \ cos \ phi} = \ frac {-G_ {px}} {\ sqrt {G_ {py} ^ 2 + G_ {pz} ^ 2}} $$

což odpovídá:

  roll = atan2 (accelerationY, accelerationZ) pitch = atan2 (-accelerationX, sqrt (accelerationY * accelerationY + accelerationZ * accelerationZ))  

Výsledek je samozřejmě možný pouze tehdy, když dochází k rotacím na konkrétní objednávku (Rxyz):

  1. Rolovat kolem osy x o úhel $ \ phi $
  2. Rozteč kolem osy y o úhel $ \ theta $
  3. Otočení kolem osy z o úhel $ \ psi $

V závislosti na pořadí rotací získáte různé rovnice. Pro pořadí rotace $ R_ {xyz} $ nemůžete najít úhel $ \ psi $ pro vybočení kolem osy z.

On, vítejte na Engineering SE! Tato stránka podporuje latex, podívejte se, jak krásná se vaše odpověď stala nyní. :-)
Pořád nechápu, proč zde musí použít Pythagora pro druhý úhel


Tyto otázky a odpovědi byly automaticky přeloženy z anglického jazyka.Původní obsah je k dispozici na webu stackexchange, za který děkujeme za licenci cc by-sa 3.0, pod kterou je distribuován.
Loading...