2010-10-15 6 views
6

Me gustaría transformar la inclinación, inclinación y balanceo del iPhone desde el marco del cuerpo al marco mundial, es decir, acimut, cabeceo y balanceo. En Android esto se hace fácilmente con los SensorManager.remapCoordinateSystem(), métodos SensorManager.getOrientation como se detalla aquí: http://blog.mysticlakesoftware.com/2009/07/sensor-accelerometer-magnetics.htmlTransformar la orientación del dispositivo al marco mundial en el objetivo c

son métodos similares disponibles para el iPhone o alguien me puede apuntar en la dirección correcta de cómo hacer esta transformación?

Gracias

Respuesta

0

El acelerómetro (UIAccelerometer) le dará un vector desde el chip acelerómetro del dispositivo hacia abajo. Si puede asumir que el dispositivo se mantiene bastante estable (, es decir,, que no está leyendo la aceleración del movimiento real), entonces puede usar el simple trig (acos(), asin()) para determinar la orientación del dispositivo.

Si le preocupa que el dispositivo se pueda mover, puede esperar varias lecturas de acelerómetro seguidas que sean casi las mismas. También puede filtrar cualquier vector con una longitud que sea ± TOLERANCIA (según lo defina) de 1.0

En términos más generales, el dispositivo no tiene manera de conocer su orientación, excepto por "sensación de gravedad", que es hecho a través del acelerómetro. Los desafíos que tendrás se centrarán en el hecho de que el acelerómetro siente toda la aceleración, de la cual la gravedad es solo una posible fuente.

1

El acelerómetro es lo suficientemente bueno para obtener el vector de dirección de la gravedad en el sistema de coordenadas del dispositivo. Eso es en caso de que el dispositivo se calme.

El siguiente paso para la orientación completa del dispositivo es usar CLLocationManager y obtener el vector real del norte en el sistema de coordenadas del dispositivo. Con el vector vector gravitatorio y vector trueno normalizado, puede obtener fácilmente todas las demás direcciones usando el producto de vectores de puntos y cruces.

0

Si se dirige a un dispositivo con un giroscopio (iPhone 4 en el momento de la escritura), la estructura CMMotionManager de la estructura CoreMotion puede proporcionarle CMDeviceMotion actualizaciones. El marco hace un buen trabajo al procesar los datos del sensor sin procesar y separando gravity y userAcceleration por usted. Te interesa el vector de gravedad, que puede definir el cabeceo y el balanceo con un poco de trigonometría. Para agregar guiñada, (rotación del dispositivo alrededor del vector de gravedad), también necesitará usar el CLLocationManager del marco de CoreLocation para obtener actualizaciones de encabezado de brújula.

Cuestiones relacionadas