Heim > Backend-Entwicklung > C++ > Wie berechnet dieser Algorithmus die Smartphone-Position mithilfe von Sensordaten und GPS genau?

Wie berechnet dieser Algorithmus die Smartphone-Position mithilfe von Sensordaten und GPS genau?

Susan Sarandon
Freigeben: 2025-01-03 14:16:40
Original
272 Leute haben es durchsucht

How Does This Algorithm Accurately Calculate Smartphone Position Using Sensor Data and GPS?

Mein Algorithmus zur Berechnung der Position des Smartphones – Integrierter Algorithmus basierend auf Sensordaten und GPS

Behebung des Algorithmusproblems:

Der bereitgestellte Algorithmus berechnet die Endgeschwindigkeit (Geschwindigkeit) des Geräts nicht korrekt. Um diesen Fehler zu beheben, sollte die folgende Formel verwendet werden:

finalvelocity = initialVelocity + Double.Parse(currentAcceleration) * (t);
Nach dem Login kopieren

Überarbeiteter Algorithmus:

Der überarbeitete Algorithmus umfasst die korrigierte Geschwindigkeitsberechnung und zusätzliche Verbesserungen, um Genauigkeit zu gewährleisten Positionsschätzung:

var prevLocation = ServerHandler.getLatestPosition(IMEI);
var newLocation = new ReceivedDataDTO()
{
    LocationDataDto = new LocationDataDTO(),
    UsersDto = new UsersDTO(),
    DeviceDto = new DeviceDTO(),
    SensorDataDto = new SensorDataDTO()
};

//First Reading
if (prevLocation.Latitude == null)
{
    //Save GPS Readings
    newLocation.LocationDataDto.DeviceId = ServerHandler.GetDeviceIdByIMEI(IMEI);
    newLocation.LocationDataDto.Latitude = Latitude;
    newLocation.LocationDataDto.Longitude = Longitude;
    newLocation.LocationDataDto.Acceleration = float.Parse(currentAcceleration);
    newLocation.LocationDataDto.Direction = float.Parse(currentDirection);
    newLocation.LocationDataDto.Speed = (float) 0.0;
    newLocation.LocationDataDto.ReadingDateTime = date;
    newLocation.DeviceDto.IMEI = IMEI;

    // saving to database
    ServerHandler.SaveReceivedData(newLocation);
    return;
}

//If Previous Position not NULL --> Calculate New Position

**//Algorithm Starts HERE**

var oldLatitude = Double.Parse(prevLocation.Latitude);
var oldLongitude = Double.Parse(prevLocation.Longitude);
var direction = Math.PI * Double.Parse(currentDirection) / 180.0;
Double initialVelocity = prevLocation.Speed;

//Get Current Time to calculate time Travelling - In seconds
var secondsTravelling = date - tripStartTime;
var t = secondsTravelling.TotalSeconds;

//Calculate Distance using physice formula, s= Vi * t + 0.5 *  a * t^2
var distanceTravelled = initialVelocity * t + 0.5 * Double.Parse(currentAcceleration) * t * t;

//Calculate the Final Velocity/ Speed of the device.
// this Final Velocity is the Initil Velocity of the next reading
//Physics Formula: Vf = Vi + a * t
var finalvelocity = initialVelocity + Double.Parse(currentAcceleration) * (t);

//Convert from Degree to Radians (For Formula)
oldLatitude = Math.PI * oldLatitude / 180;
oldLongitude = Math.PI * oldLongitude / 180;

//Calculate the New Longitude and Latitude
var newLatitude = Math.Asin(Math.Sin(oldLatitude) * Math.Cos(distanceTravelled / earthRadius) + Math.Cos(oldLatitude) * Math.Sin(distanceTravelled / earthRadius) * Math.Cos(direction));
var newLongitude = oldLongitude + Math.Atan2(Math.Sin(direction) * Math.Sin(distanceTravelled / earthRadius) * Math.Cos(oldLatitude), Math.Cos(distanceTravelled / earthRadius) - Math.Sin(oldLatitude) * Math.Sin(newLatitude));

//Convert From Radian to degree/Decimal
newLatitude = 180 * newLatitude / Math.PI;
newLongitude = 180 * newLongitude / Math.PI;
Nach dem Login kopieren

Einbindung von Sensordaten Integration:

Dieser Algorithmus nutzt sowohl Beschleunigungsmesser- als auch Magnetometerdaten, um die Bewegungsrichtung zu berechnen. Die folgenden Schritte beschreiben den Prozess:

  1. Linearbeschleunigung: Verwenden Sie den Beschleunigungsmesser, um die lineare Beschleunigung in der X-, Y- und Z-Achse zu berechnen.
  2. Bewegungsrichtung: Kombinieren Sie die Messwerte des Beschleunigungsmessers mit den Messwerten des Magnetometers, um die Richtung zu bestimmen Bewegung.
  3. Geschwindigkeit und Distanz: Integrieren Sie die Beschleunigung über die Zeit, um die Geschwindigkeit zu erhalten. Berechnen Sie die Entfernung mithilfe der Geschwindigkeit und des Zeitintervalls.
  4. Endposition:Aktualisieren Sie die aktuelle Position mithilfe der berechneten Entfernung und Richtung.

Zusätzliche Überlegungen:

  1. Kalibrierung: Kalibrieren Sie die Sensoren regelmäßig, um die Genauigkeit sicherzustellen.
  2. Filterung: Implementieren Sie Rausch- und Driftfilter, um die Datenqualität zu verbessern.
  3. Zeitsynchronisation: Stellen Sie eine genaue Zeitsynchronisation zwischen den sicher Sensoren und die Uhr des Geräts.
  4. Regelmäßige GPS-Updates: Korrigieren Sie die Positionsschätzung regelmäßig mithilfe von GPS Updates.

Das obige ist der detaillierte Inhalt vonWie berechnet dieser Algorithmus die Smartphone-Position mithilfe von Sensordaten und GPS genau?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage