8

Estoy usando CoreMotion para obtener el encabezado de ccompass y noté algunos problemas con el título de la brújula.Valores incorrectos de encabezado de brújula con CoreMotion

Al principio mi inicialización de CoreMotion. Obtuve un objeto CMMotionManager, locationManager, que es una instancia de CMMotionManager.

// initialize CoreMotion 
motionManager = [CMMotionManager new]; 
[motionManager setDeviceMotionUpdateInterval:1.0/30.0]; 
[motionManager setShowsDeviceMovementDisplay:YES]; 
[self.motionManager startDeviceMotionUpdatesUsingReferenceFrame:CMAttitudeReferenceFrameXTrueNorthZVertical]; 

Los datos de posición se actualiza cada 1/20 segundos.

Para depuración tengo un UILabel que me muestra el encabezado de la brújula actual actualizado en cada intervalo de actualización. Mientras la aplicación está comenzando, siempre tengo que hacer el mágico 8 para calibrar la brújula.

Después de calibrar la brújula, el rumbo para norte y sur es correcto durante casi 2-5 segundos.

Inmediatamente después de un par de segundos, la brújula se vuelve loca y los ángulos están saltando. Mayormente está flotando alrededor de 10-20 grados desde la posición inicial en ambas direcciones. Intentó tener un resultado extraño. Después de 30-60 segundos, de vez en cuando, el sur y el norte se intercambian o se muestran hacia el este y el oeste.

En la WWDC 2011, se ha hablado de cómo calculan cada sensor con otro para compensar este problema. ¿Hay algo que eché de menos en la configuración de CoreMotion que tengo este problema masivo de resultados de encabezado precisos?

He probado la brújula ahora con 3 dispositivos (2 iPhone 4s y iPhone 4) dentro y fuera de los edificios. Estaba en campos, pequeñas ciudades y grandes ciudades. Pasa todo el tiempo. La aplicación de brújula de muestra de Apple es casi precisa, con un 90% de precisión en mis pruebas. Desafortunadamente, no está abierto por Apple.

Gracias por leer.

Respuesta

3

Usando CoreMotion hasta CoreLocation le proporcionará lo que busca.

Por defecto, el teléfono hará la cifra de calibración 8, para desactivar esta, anular locationManagerShouldDisplayHeadingCalibration: de la siguiente manera:

- (BOOL)locationManagerShouldDisplayHeadingCalibration: (CLLocationManager *)manager { 
    return NO; 
} 

No está claro a partir del código en su pregunta si está llamando startUpdateHeading. Si no, que lo hagan:

if([CLLocationManager locationServicesEnabled] && [CLLocationManager headingAvailable]) { 
    [myLocationManager startUpdatingLocation]; 
    [myLocationManager startUpdatingHeading]; 
} 

se pueden obtener resultados locos si no se presenta en el filtro título, te recomiendo que lo haga. Después de eso, solo obtiene los cambios de encabezado en su administrador de ubicación delegado cuando se llama al didUpdateHeading.

También tenga en cuenta que si el teléfono está en modo horizontal, necesitará ajustar el encabezado por el número apropiado de grados (+/- 90), ya que el encabezado está siempre en el marco de referencia Retrato.

+0

Gracias por su respuesta. El lunes recibí una fecha límite para otro proyecto y no puedo probarlo en este momento. Verificare su sugerencia. Suena bastante bien. Te dejaré saber más en unos días. ¡Gracias! – DasFuxx

+0

disculpa la demora. iam lo estoy probando en este momento =) – DasFuxx

+0

¿Qué quieres decir con "Usar CoreMotion a través de CoreLocation"?Tengo un problema similar y las uniones que se dirigen desde CoreLocation son en su mayoría correctas, pero en CoreMotion si establecemos el marco de referencia en el norte verdadero, los datos de movimiento del dispositivo parecen saltar y/o derivar. – pzo

Cuestiones relacionadas