Mein Algorithmus zur Berechnung der Position des Smartphone - GPS und Sensoren

Ich bin die Entwicklung einer android-Applikation zur Berechnung der position basiert auf Sensor-Daten

  1. Beschleunigungsmesser --> Berechnen Lineare Beschleunigung
  2. Magnetometer + Accelerometer --> Richtung der Bewegung

Die erste position wird mit GPS (Latitude + Longitude).

Basiert nun auf der Sensor die Messwerte, die ich brauche, um die Berechnung der neuen position des Smartphones:

Mein Algorithmus ist folgende - (Aber nicht die Berechnung der Genauen Position): Bitte helft mir es zu verbessern.

Hinweis: Mein Algorithmus Code ist in C# (ich bin senden von Sensor-Daten zum Server, Wo die Daten in der Datenbank gespeichert ist. Ich bin die Berechnung der position auf dem Server)

Alle DateTime-Objekte wurden berechnet unter Verwendung der Zeitstempel - Vom 01-01-1970

    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 = Double.Parse(currentDirection);
    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
    //distanceTravelled = initialVelocity * timeTravelling + 0.5 * currentAcceleration * timeTravelling * timeTravelling;
    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;
    direction = Math.PI * direction / 180.0;

    //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;

Dies ist das Ergebnis bekomme ich --> Handy wurde nicht bewegt. Wie Sie sehen können Geschwindigkeit ist 27.3263111114502 So, es ist etwas falsch in der Berechnung der Geschwindigkeit, aber ich weiß nicht, was

Mein Algorithmus zur Berechnung der Position des Smartphone - GPS und Sensoren

ANTWORT:

Fand ich eine Lösung zur Berechnung der position basiert auf Sensor: ich habe geschrieben, eine Antwort weiter unten.

Wenn Sie Hilfe benötigen, bitte einen Kommentar hinterlassen

dies ist Das Ergebnis im Vergleich zu GPS (Hinweis: GPS in Rot)

Mein Algorithmus zur Berechnung der Position des Smartphone - GPS und Sensoren

Sind Sie sicher, dass die Richtung der Bewegung und die Beschleunigung ändert sich nicht während der Reise? Die Gleichung, die Sie angewendet haben, wird davon ausgegangen, dass die Beschleunigung bleibt konstant, während der Reise.
Beschleunigung ändert.
Identitäten wie s = ut + (1/2)^2 (von Punkt A zu Punkt B) kann nur angewendet werden, wenn die Beschleunigung konstant bleibt, bei 'ein' die ganze Zeit zwischen A und B.
Also, was ist zu tun, wenn sich die Beschleunigung verändert?
Wie wirkt sich die Beschleunigung ändern? Muss man diese Identität für kurze Intervalle der Zeit, Wann die Beschleunigung bleibt konstant auf einer bestimmten Ebene. Wenn die Beschleunigung ist stufenlos vergrößern/verkleinern mit einer rate, dann sind Sie bei der Eingabe der domain der Infinitesimalrechnung.

InformationsquelleAutor Dawood Awan | 2013-11-01

Schreibe einen Kommentar