0 votes

Aide sur le taux d'échantillonnage du GPS de l'iPhone XR

Je n'ai pas encore trouvé d'informations utiles sur le taux d'échantillonnage/de sortie du GPS dans les iPhones. Veuillez me diriger vers tout article utile et pertinent que j'ai manqué. Veuillez également m'indiquer comment rendre mon message plus clair.

Comportement réel : L'iPhone XR émet des échantillons GPS à un rythme lent, environ un échantillon toutes les 6 secondes, mais parfois avec deux échantillons en succession plus rapide (par exemple 1,5 seconde, mais très rarement). Cela se produit en position assise, en marchant rapidement et en secouant le téléphone dans tous les sens, et avec différentes affectations de CLLocationManager.desiredAccuracy.

Comportement attendu/optimiste : Des sorties d'échantillons GPS plus rapides de mon iPhone XR, comme celles de cette vidéo juste ici. Je suis conscient que cette vidéo date de 2017, même si je ne sais pas ce qui rend cela significatif. https://www.youtube.com/watch?v=XyncTJdXbbw&t=5m20s

Discussion : J'ai besoin d'échantillons GPS pour un projet, et j'aimerais idéalement qu'ils soient échantillonnés à 1,0+ Hz. J'ai écrit des programmes sur Swift et téléchargé des applications qui enregistrent et représentent graphiquement les données GPS de mon iPhone XR, mais le taux d'échantillonnage de mes données GPS semble être incohérent et très lent, environ une mesure toutes les 6 secondes.

J'ai beaucoup de questions, notamment :

  • L'iPhone XR a-t-il un taux de sortie GPS bien défini ?
  • Quels sont les facteurs qui l'affectent ?
  • Où puis-je trouver ces informations mieux documentées ?
  • Comment puis-je augmenter le taux de sortie du GPS ?

Je suis novice dans l'utilisation d'iOS et je ne sais pas comment les iPhones calculent les coordonnées GPS. J'ai entendu dire que le GPS de l'iPhone peut émettre des données à 1 Hz, mais je n'ai pas encore trouvé de documentation officielle à ce sujet.

Je suis conscient que je peux spécifier les paramètres desiredAccuracy et distanceFilter dans mon programme Swift, mais le paramètre desiredAccuracy ne semble pas avoir beaucoup d'effet sur la précision de mes coordonnées ou mon taux de sortie. Mon iPhone XR est sous iOS 13.4.1, et mon téléphone de 128 Go est presque entièrement rempli de photos, au cas où cela ferait une différence bizarre. Je supprime ces photos juste pour faire le ménage maintenant.

J'ai inclus mon programme Swift ci-dessous. Il est très basique, et je ne sais pas comment coder en Swift, donc n'hésitez pas à m'informer si je fais des choses incorrectes. La dernière fois que je l'ai exécuté avec succès (il y a deux jours), mon iPhone était sur iOs 13.3 ou plus, Mac OS sur 10.13 ou plus. Le programme Swift doit être aussi basique que possible, une application à vue unique avec une interface utilisateur de type storyboard. Si nécessaire, je peux fournir des mises à jour sur des versions plus récentes d'OS/iOS/Xcode une fois que j'aurai nettoyé mon téléphone et réussi à faire fonctionner certaines choses.

Je n'arrive pas à trouver mon fichier texte de sortie de console, je vais donc télécharger quelque chose dès que j'y arriverai. Je suppose que je réponds en supposant que ma sortie se produit toutes les 6 +/- 0,05 secondes.

//
//  ViewController.swift
//  CoreMotionExample
//
//  Created by COVID-19 on 11/17/19
//  Copyright © 2019 COVID N. Teen. All rights reserved.
//
import UIKit
import CoreMotion
import CoreLocation

class ViewController: UIViewController {

    let motionManager = CMMotionManager()
    let locationManager = CLLocationManager()
    var timer: Timer!
    let start = Date()
    var time_prev = 0.0
    var elapsedTime = 0.0

    let verbose = false;

    override func viewDidLoad() {

        super.viewDidLoad()

        motionManager.startAccelerometerUpdates()
        motionManager.startGyroUpdates()
        motionManager.startMagnetometerUpdates()
        motionManager.startDeviceMotionUpdates()

        locationManager.requestAlwaysAuthorization()
        locationManager.delegate = self
        locationManager.desiredAccuracy = kCLLocationAccuracyBest
        locationManager.distanceFilter = kCLDistanceFilterNone
        locationManager.startUpdatingLocation()

        timer = Timer.scheduledTimer(timeInterval: 0.01, target: self, selector: #selector(ViewController.update), userInfo: nil, repeats: true)

        }

    func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {

            if let location = locations.first
            {
                if(true)
                {
                    print(location.coordinate, "\n")
                    elapsedTime = time_prev - start.timeIntervalSinceNow
                    print("Time elapsed: ", elapsedTime, "\n")
                    time_prev = start.timeIntervalSinceNow
                }
            }
    }

    @objc func update() {

//      IMU/MARG/INS data:

        if let accelerometerData = motionManager.accelerometerData
        {
            if(verbose)
            {
                print("Accelerometer data:\n",accelerometerData, "\n")
            }
        }

        if let gyroData = motionManager.gyroData
        {
            if(verbose)
            {
                print("Gyroscope data:\n", gyroData,"\n")
            }
        }

        if let magnetometerData = motionManager.magnetometerData
        {
            if(verbose)
            {
                print("Magnetometer data:\n", magnetometerData,"\n")
            }
        }

        if let deviceMotion = motionManager.deviceMotion
        {
            if(verbose)
            {
                print("deviceMotion data:\n", deviceMotion,"\n")
            }
        }

        //GPS/Location data:
        //Nothing successful here, see above

    }

}

extension ViewController: CLLocationManagerDelegate {
  // handle delegate methods of location manager here, also nothing here
}

1voto

Jose Chavez Points 645

Il n'y a aucun moyen de définir explicitement le taux de mise à jour de votre emplacement. Notez que vous ne "communiquez" pas directement avec un GPS, mais que vous recevez plutôt des mises à jour de votre position de la part de Core Location qui peuvent provenir d'une source GPS, mais aussi d'autres sources.

N'oubliez pas que les mises à jour de l'emplacement sont filtrées pour économiser l'énergie. Cela signifie que vous ne recevez des mises à jour que lorsque le téléphone s'est effectivement déplacé d'une certaine distance - et le nombre de mises à jour peut être affecté par des facteurs externes tels que le fait que le téléphone soit ou non en mode d'économie d'énergie. N'oubliez pas non plus de tester cette fonction pendant que à l'extérieur de et de se déplacer. Vous n'obtiendrez pas un bon positionnement à l'intérieur.

Veillez à définir le filtre de distance sur une distance appropriée à votre application (vous l'avez actuellement réglé sur aucune), et à définir l'activité correcte (c'est-à-dire que vous l'avez actuellement réglé sur autre, mais si vous voulez par exemple faire de la navigation automobile, réglez-le sur cela).

Dans votre code source ci-joint, vous ne regardez que le premier emplacement qui vous a été donné en didUpdateLocations . Normalement, vous ne voulez pas faire ça. L'emplacement le plus récent est le dernier dans le tableau, donc je le changerais au moins pour regarder le dernier.

Si vous souhaitez disposer d'un plus grand nombre d'emplacements sur une période donnée, n'oubliez pas d'examiner toutes les mises à jour du tableau. Il peut y avoir plus d'un emplacement dans chaque mise à jour.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X