J'ai expérimenté avec la boussole et le gyroscope sur l'iPhone 4 et je voudrais de l'aide pour un problème que j'ai. Je veux compenser la lenteur de la boussole en utilisant les données du gyroscope.Compenser le décalage de la boussole avec le gyroscope sur l'iPhone 4
En utilisant CMMotionManager
et son objet CMDeviceMotion
(motionManager.deviceMotion
), j'obtiens l'objet CMAttitude
. Corrigez-moi si je me trompe (s'il vous plaît), mais voici ce que j'ai déduit de la propriété de l'objet CMAttitude
yaw
(je ne ai pas besoin pitch
ni roll
pour mes besoins):
yaw
varie de0
àPI
lorsque le téléphone est dirigée vers le bas (comme indiqué pardeviceMotion.gravity.z
) et pivotant dans le sens antihoraire et0
--PI
lorsque basculé dans le sens horaire- lorsque le dispositif est dirigé vers le haut,
yaw
varie de-PI
à0
etPI
-0
respectivement - et à partir des données de la boussole (j'utilise
locationManager.heading.magneticHeading
), je vois que la boussole donne des valeurs0
-360
, avec la valeur croissante en balançant dans le sens horaire
D'accord, donc en utilisant tous de cette information ensemble, je suis en mesure d'obtenir une valeur que j'appelle horizontal
qui, peu importe si le périphérique pointe vers le haut ou vers le bas, donnera 0
à 360
et augmentera lorsque l'appareil est balancé dans le sens des aiguilles d'une montre (bien que je problème quand deviceManager.gravity.z
est autour de 0
- la valeur yaw
panique à ceValeur).
Il me semble que je pouvais « synchroniser » les horizontal
et magneticHeading
valeurs, en utilisant une valeur horizontal
calculée qui correspond à magneticHeading
et « synchroniser » la valeur horizontal
-magneticHeading
quand je sens la boussole a « rattrapé. »
Mes questions:
- Suis-je sur la bonne voie avec ce? Est-ce que j'utilise correctement les données gyro de
CMDeviceMotion
et que les hypothèses que j'ai énumérées ci-dessus sont correctes? - Pourquoi pourrait
yaw
paniquer lorsquegravity.z
est d'environ0
?
Merci beaucoup. J'ai hâte d'entendre vos réponses!
Pour l'étape d'initialisation, assurez-vous d'inviter l'utilisateur à s'arrêter un moment. passez l'étape 7 si vos applications ne rencontrent pas l'acier ou l'électricité, dans mon cas j'en ai besoin car il est utilisé en usine avec un équipement haute tension et un pipeline en acier. – FerryHtw