iphone kompenzace kompasu tilt

hlasů
6

má někdo již naprogramovali iphone kompas náhradu nadpis náklonu?

Mám některé přístupy, ale nějakou pomoc nebo lepším řešením by bylo super!

První i definovat vektor Ev, vypočítaný z produktu kříže GV a VN. Gv je vektor gravitace i stavět z hodnot akcelerometru a Hv je nadpis vektor postaven z hodnoty magnetometr. Ev stojí kolmo na GV a VN, tak to směřuje ke horizonatl východ.

DRUHÝ i definovat vektor Rv, vypočítaný z produktu kříže Bv a GV. Bv je můj hledá vektor a je definována jako [0,0, -1]. Rv je kolmá k GV a Bv a ukazuje vždy na pravé straně.

Třetí úhel mezi těmito dvěma vektory, Ev a Rv, by měla být moje opraven nadpis. Pro výpočet úhlu i vybudování skalární součin a jejich Arcos.

fí = Arcos (Ev * Rv / | Ev | * | Rv |)

Teoreticky by to mělo fungovat, ale možná mám normalizovat vektorů ?!

Má někdo dostal řešení pro tento?

Díky, m01d

Položena 27/03/2010 v 16:46
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
0

Ano, udělal jsem to jako bylo popsáno výše. ale výsledek není příliš přesné. Myslím, že s hladší hodnot akcelerometru by to mělo fungovat tímto způsobem. Z tohoto důvodu i si vybrali udělat kompenzaci náklonu přidáním / odečtením hodnoty accelermoter na příslušné osy do / z hodnot kompas.

Zde ISS můj kód pro řešení výše, ale není konečné, pracovní roztok:

- (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading{
if (newHeading != nil) {
float Ax = accelerationValueX;
float Ay = accelerationValueY;
float Az = accelerationValueZ;
float filterFactor = 0.2;
Mx = [newHeading x] * filterFactor + (Mx * (1.0 - filterFactor));
My = [newHeading y] * filterFactor + (My * (1.0 - filterFactor));
Mz = [newHeading z] * filterFactor + (Mz * (1.0 - filterFactor));

float counter = (  -pow(Ax, 2)*Mz + Ax*Az*Mx - pow(Ay, 2)*Mz + Ay*Az*My );
float denominator = ( sqrt( pow((My*Az-Mz*Ay), 2) + pow((Mz*Ax-Mx*Az), 2) + pow((Mx*Ay-My*Ax), 2) ) * sqrt(pow(Ay, 2)+pow(-Ax, 2)) );
headingCorrected = (acos(counter/denominator)* (180.0 / M_PI)) * filterFactor + (headingCorrected * (1.0 - filterFactor));
}
...
}
Odpovězeno 19/05/2010 v 12:35
zdroj uživatelem

hlasů
3

Ano. Ty určitě muset normalizovat. To je z mého kódu, který mohu použít k extrakci orientaci přístroje. Gravitace se získá jako x, y, z akcelerometru a kompas se získá z x, y, z funkce čísla

gravity.normalize (); compass.normalize (); compassEast = gravity.cross (kompas);
compassEast.normalize ();
compassNorth = compassEast.cross (gravitace); compassNorth.normalize ();

Dejte mi vědět, pokud budete potřebovat plnou kód. Také pro ty, kteří havnt ještě neviděl iPhone 4S gyroskop v akci: jeho úžasné! vyměnil jsem nad vstup do závažnosti a kompas pro ekvivalenty z gyroskopu a výsledkem je stabilní a hladká a úžasné :) Go Apple.

Odpovězeno 18/09/2010 v 01:52
zdroj uživatelem

hlasů
2

Nedostal jsem zdrojový kód, ale mám nastavit svůj vlastní příklad. Můžete vidět projekt a kód zde: http://www.sundh.com/blog/2011/09/stabalize-compass-of-iphone-with-gyroscope/

Odpovězeno 19/09/2011 v 16:28
zdroj uživatelem

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