Výpočet čtveřice z gyroskopů + akcelerometru dat

hlasů
4

Mám gyroskop + akcelerometru dat v každém časovém období T.

V jazyce C ++, chci vypočítat natočení objektu v každém okamžiku - je možné otáčet vzhledem k jeho os. Četl jsem, že je vhodné reprezentovat rotaci soustavy v podmínkách čtveřic (ne v Eulerových úhlech).

Jak lze transformovat z úhlové rychlosti (od gyroskopu) k reprezentaci čtveřice? Myslím, že aby se to udělat musím řešit diferenciální rovnici pomocí numerických metod.

Položena 27/09/2010 v 02:30
zdroj uživatelem
V jiných jazycích...                            


4 odpovědí

hlasů
7

Nejsem si jistý, který jazyk hledáte, ale C ++ Zvýšení knihovna má pracovní třídu čtveřice ( quaternion.hpp ). Použil jsem tuto knihovnu pro vytvoření jednoduchého třídu otáčení pro výpočet výsledků nebo otočných bodů o libovolných vektorech s velmi malou nesnází.

UPDATE: Na váš komentář základě nemyslím si, že budete nutně potřebovat použít knihovnu čtveřici přijít na svou úhlovou polohu v daném čase, vzhledem k tomu, buď konstantní úhlovou rychlost nebo úhlové zrychlení. Vše, co musíte udělat, je přijít na to, co to je úhel, a pak použít třídu čtveřici pro výpočet polohy vektorů když se otáčí okolo vašeho rotace vektoru úhlu jste vypočtené.

Vzhledem k tomu, konstantní úhlové zrychlení α, počáteční úhlová rychlost ω (t 0 ) a první úhlovou polohou θ (t 0 ) v rozsahu [0, 2π) úhlová poloha v určitém čase t> t 0 , θ (t) je dána podle:

θ (t) = [θ (t 0 ) + ω (t 0 ) * (tt 0 ) + α * (tt 0 ) 2 /2] mod 2π

Zde mod operace 2π je jednoduše zbytkový Odečtením n2π kde n je celé číslo nezbytné pro zajištění zbytkového je v rozsahu [0, 2π). Pro konstantní úhlovou rychlostí (tj α = 0) poslední termín vypadne.

To znamená, že vše, co opravdu potřebujete udělat, je sledovat v úhlu více než nějaký časový interval se zrychlením (nebo zjistit průměrnou zrychlení v průběhu této doby, pokud to není konstantní) a aktualizovat úhel. Potom použít výslednou rotaci o své rotace vektoru do čtveřice, kterou používáte akumulovat své rotace. To může být snadno implementován jako třídu C ++.

Přesto, pokud hledáte open source nástroj, jak to udělat vy, předpokládám, že některý z modelových knihoven hra fyziky bude více než adekvátní. Pár open source ty jsou Bullet a otevřené Dynamics knihovny .

Odpovězeno 27/09/2010 v 02:45
zdroj uživatelem

hlasů
3

Bys mluvit o Slerp ? (Sférické lineární interpolace)

Viz článek Jonathan Blow je „ Porozumění Slerp, pak ji nepoužíváte “, který má příklad zdroj v C ++ ...

http://number-none.com/product/Understanding%20Slerp,%20Then%20Not%20Using%20It/

Odpovězeno 27/09/2010 v 02:47
zdroj uživatelem

hlasů
1

Každý vzorek ze svých gyroskopů představuje jen malou rotaci:

rot_x = angV_x * timestep
rot_y = angV_y * timestep
rot_z = angV_z * timestep

Pokud budou výsledné otáčky jsou malé, můžete převést to přímo do čtveřice tím, že poloviční úhel natočení:

// for small rotations, quick & dirty quaternion is sufficient
// (note: all angles *must* be in radians!)
float k = timestep * 0.5;
quaternion raw_delta_Q(1.0, angV_x*k, angV_y*k, angV_z*k);  // unnormalized!

// combine rotation for current timestep with orientation state
estimated_orient_Q *= raw_delta_Q;  // multiply by unnormalized delta
estimated_orient_Q *= 1 / norm(estimated_orient_Q);  // then renormalize it!

Pokud se vaše rotace jsou větší než několik stupňů, nebo pokud potřebujete maximální přesnost, budete muset věnovat větší pozornost tomu, jak vám vaše čtveřici.

EDIT: Povšimněte si, že výše uvedený kód předpokládá * = je definován cíl násobení čtveřice oběma čtveřic a reálných skaláry. Nějaká forma z těchto funkcí (stejně jako zřejmá konstruktér) bude přítomen v nějakém rozumném knihovně čtveřice.

Odpovězeno 28/09/2010 v 20:20
zdroj uživatelem

hlasů
1

Jaký jazyk? Například pro Python cgkit má šikovný quatmodul (čtveřic inicializuje z rotační matice, ne „úhlovou rychlostí“, ale pravděpodobně si můžete postavit bývalý od něj?) A euclid.py má Python zdrojový kód pro třídu čtveřice včetně metod třídy stavět to z matice rotace a jinými způsoby.

Odpovězeno 27/09/2010 v 02:48
zdroj uživatelem

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