Jak odstranit Gravity faktor z akcelerometru četby v 3-osy akcelerometr Android

hlasů
15

Může někdo pomoci na odstranění g faktoru z akcelerometru čtení?

Já používám SensorEventListener s onSensorChanged()metodou pro získávání dat Sensor.TYPE_ACCELEROMETER. Musím jen čisté hodnoty zrychlení ve všech směrech. Takže v každém stavu v případě, že zařízení je stabilní (nebo v konstantní rychlosti), měl by se získá (0.0,0.0,0.0) hrubě.

V současné době, v závislosti na jeho hřišti and rollu, to mi dává variabilní výstup v závislosti na g sil působících na každou osu.

Doufám, že tam je nějaký vzorec odebrat, protože jsem také získat orientační hodnoty (a naklonění) z Sensor.TYPE_ORIENTATION posluchače. Použil jsem některé, ale nefungovalo to.

Položena 31/07/2010 v 08:47
zdroj uživatelem
V jiných jazycích...                            


7 odpovědí

hlasů
4

Rozlišování s ohledem na čas funkcí času vás zbaví konstanty.

Takže tím, že derivát signálu akcelerometru se dostanete na „blbec“, které pak můžete znovu integrovat s cílem získat non-konstantní část zrychlení, které hledáte.

Laicky řečeno, odebere vzorek z akcelerometru každou 1 sekundu, a odečteme z předchozího vzorku. Pokud je odpověď (velmi blízko) nula, nejste urychlení relativně k zemi. V případě, že výsledek je nenulový, integrovat ji (v tomto případě, vynásobte jednu sekundu), máte akceleraci.

Dvě věci, i když: Podívej se na hluk v signálu, zaokrouhlit svůj vstup. -Don't očekávat výsledky hyper-přesný z akcelerometrů na čipu. Můžete je použít k detekci třes, změny v orientaci, ale ne ve skutečnosti pro vědět, kolik G to jste se setkali, zatímco ostrých zatáčkách v autě.

Odpovězeno 19/08/2010 v 14:03
zdroj uživatelem

hlasů
3

Jedním ze způsobů, (pro zařízení pouze s akcelerometrem) je odstranit vektor gravitace z akcelerometru dat odečtením hodnoty, které by mohli přijít do statického případě pro stejnou orientaci. Ale jak orientace je opět vypočítá z naměřené hodnoty zrychlení a ne nezávisle, není příliš přesné.

Gyroskop může pomoci v tomto případě. Ale jen málo androidi mají stále věrný gyroskop. A za použití své syrové čtení není tak jednoduché.

Odpovězeno 18/12/2010 v 20:13
zdroj uživatelem

hlasů
9

Podívejte se na následující odkaz.

http://developer.android.com/reference/android/hardware/SensorEvent.html

Odpovězeno 05/05/2011 v 01:16
zdroj uživatelem

hlasů
10

Můžete použít low-pass filtr.

Udělej to pro každou ze svých hodnot senzorů:

g = 0.9 * g + 0.1 * v

Tam, kde vje aktuální hodnota snímače a gje globální proměnná zpočátku nastavena na nulu. Uvědomte si, že budete potřebovat tolik g proměnných, jako máte osy.

S v = v - gvámi může eliminovat gravitační faktor z vašeho hodnoty senzoru.

Odpovězeno 13/03/2013 v 09:57
zdroj uživatelem

hlasů
3

Jen odečíst z g (~ 9,8 m / s ^ 2) krát Z směr otáčení matice. Nebo být konkrétnější o tom, nechat

a = your accelerometer reading,
R = your rotation matrix (as a 9-long vector).

Tak co chcete, je to

(a[0]-g*R[6], a[1]-g*R[7], a[2]-g*R[8]).
Odpovězeno 30/04/2015 v 23:35
zdroj uživatelem

hlasů
8

Použijte Sensor.TYPE_LINEAR_ACCELERATION místo Sensor.TYPE_ACCELEROMETER

Odpovězeno 12/01/2016 v 09:02
zdroj uživatelem

hlasů
1

je třeba předpokládat dva souřadné systémy: 1 pevný globální systém. 2- pohybující se souřadný systém, ve kterém se pohybuje původu a rotuje jako senzoru dělá. v globálním systému, g je vždy rovnoběžná s osou Z, ale na pohybový systém není. takže vše, co musíte udělat, je spočítat 3 * 3 otáčení matice z orientačních úhlů nebo vybočení, klonění & rollu. (Najdete vzorců všude). pak násobit tuto rotační matici 3 * 1 vektoru zrychlení měřené čidlem. to bude transformace souřadnic a prohlásit hodnoty ve stálých globálního systému. jediná věc, potom je jednoduše odečíst z g z hodnoty.

Odpovězeno 16/05/2018 v 19:51
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more