Sida 1 av 2
Använda GPS: ekvationer?
Postat: 14 juni 2013, 23:39:27
av Korken
Godagens!
Jag håller på att utöka min estimator för KFly med positionsestimering, men för detta behöver jag använda GPS koordinater, dels för att beräkna sträckor och riktningar samt för att få en fix på min position och estimera accelerometer bias.
Problemet jag står emot är att jag kommer inte på vad jag ska googla efter för att hitta alla dessa ekvationer och undrar om någon här har ett litet länkarkiv för detta? Alternativt någon bra bok om området.
Det jag är ute efter är (det viktigaste):
- - Beräkna sträcka och riktning mellan två GPS koordinater
- Approximera till ett plan så man slipper sfäriska ekvationer
- Information om bruset på GPS position (Gaussiskt?) så jag kan förutspå statistiska ändringar som ekvationerna ger upphov till
Hoppas någon kan hjälpa mig med detta! Tack på förhand.
Jag är lite osäker om jag la den här tråden rätt nu, men flytta den om den ligger fel!
Side note: Satan, min estimator börjar bli stor...
States (22 st):
Kod: Markera allt
| q | quaternion [4x1]
| w | vinkelhastighet [3x1]
| wb | vinkelhastighetsbias [3x1]
X = | pos | position [3x1]
| vel | hastighet [3x1]
| acc | acceleration [3x1]
| accb | accelerationsbias [3x1]
Re: Använda GPS: ekvationer?
Postat: 14 juni 2013, 23:42:57
av blueint
Det går att approximera linjärt med olika "k" för latitud och longitud. Förmodligen inte generellt tillämpbart med iaf en snabb genväg.
Re: Använda GPS: ekvationer?
Postat: 14 juni 2013, 23:45:20
av danei
Om du approximerar det till en lokalt plan blir det ju bara Sinus satsen kvar. Man kan ju sätta faktorerna vid uppstart.
Re: Använda GPS: ekvationer?
Postat: 15 juni 2013, 00:03:20
av Korken
Ni råkar inte ha en sida som sammanfattar dessa ekvation med "original" GPS ekvationerna för jämnförelse?

Vill helst slippa ta en refresh på sfärisk geometri.
Re: Använda GPS: ekvationer?
Postat: 15 juni 2013, 00:21:59
av danei
Pyagorassats räknar du ut avståndet med. Den enda som behövs är ett lokalt mått för hur lång en vinkelenhet är i öst-västlig riktning. Det bör inte vara så svårt att räkna ut. Ska man ta hänsyn till att jorden inte är helt rund så behöver du en faktor för nord-sydlig riktning också.
Re: Använda GPS: ekvationer?
Postat: 15 juni 2013, 00:42:52
av Korken
Sant så sant! Om man vill ha exakt avstånd måste man då använda tex haversine-satsen? Eller finns det någon enklare för detta?
Re: Använda GPS: ekvationer?
Postat: 15 juni 2013, 00:45:20
av danei
Jag tvivlar på att det blir bättre, den förutsätter att jorden är rund. Jag gissar att det är på ganska små ytor du ska navigera?
Re: Använda GPS: ekvationer?
Postat: 15 juni 2013, 00:50:51
av Korken
Precis, säg inom max 10 km (super duper extremfall).
Lite snabba beräkningar säger mig att pythgoras knappt ger något märkbart fel på dessa avstånd.
Re: Använda GPS: ekvationer?
Postat: 15 juni 2013, 00:52:03
av ElectricNooB
Hm, jag har hållit på med detta för en massa år sedan, skall se om jag hittar ekvationerna. En jäkla massa sinus och cosinus vill jag minnas.
Att köra linjärt blir väldigt fel väldigt fort så det avråder jag ifrån!
En snabb googling ger denna sida:
http://www.movable-type.co.uk/scripts/latlong.html
Re: Använda GPS: ekvationer?
Postat: 15 juni 2013, 01:05:57
av Korken
När du säger väldigt fel väldigt fort, hur fel blir det hur fort?

Då det slår ganska hårt i prestandan att ha en trig + en sqrt (pyth) mot 7 trig + 2 sqrt (haversine).
Re: Använda GPS: ekvationer?
Postat: 15 juni 2013, 01:18:54
av ToPNoTCH
Här är lite kod (Arduino) som jag använde till min hembyggda OSD.
Kanske kan vara till hjälp
Kod: Markera allt
/**********************************************
***************** Navigation routines **********
***********************************************/
float deg2rad(float deg)
{
return (deg * PI / 180.0);
}
float rad2deg(float rad)
{
return (rad / PI * 180.0);
}
int GetDistance(float lat1, float lon1, float lat2, float lon2)
{
//code for Distance in Meter
float dlong = (deg2rad(lon2) - deg2rad(lon1));
float dlat = (deg2rad(lat2) - deg2rad(lat1));
float a = pow(sin(dlat/2.0), 2) + cos(deg2rad(lat1)) * cos(deg2rad(lat2)) * pow(sin(dlong/2.0), 2);
float c = 2 * atan2(sqrt(a), sqrt(1-a));
float dist = 6367000 * c;
return (dist);
}
int GetDirection(float lat1, float lon1, float lat2, float lon2)
{
//code for Direction in Degrees
float dlat = deg2rad(lat1) - deg2rad(lat2);
float dlon = deg2rad(lon1) - deg2rad(lon2);
float y = sin(dlon) * cos(lat2);
float x = cos(deg2rad(lat1)) * sin(deg2rad(lat2)) - sin(deg2rad(lat1)) * cos(deg2rad(lat2)) * cos(dlon);
float direct = rad2deg(atan2(y, x));
if (direct < 0)
direct = direct + 360;
return (direct);
}
Re: Använda GPS: ekvationer?
Postat: 15 juni 2013, 01:36:08
av ElectricNooB
Hm, såg nu att det var 10Km som mest. Det känns ju att det inte borde vara något större problem att köra "linjärt", men det beror väl helt på vilken precision som efterfrågas...
Tyvärr minns jag inte så mycket från mitt projekt, jag var typ 17 år och försökte bygga en avståndsmätar app med ett picaxe liknande program för android så det är rätt dimmigt...
Btw, hur kan detta vara ett "problem" för någon som har koll på kvarterioner?
Edit: Verkar vara rätt matnyttig:
http://www.movable-type.co.uk/scripts/gis-faq-5.1.html
If the distance is less than about 20 km (12 mi) and the locations of the two points in Cartesian coordinates are X1,Y1 and X2,Y2 then the
Pythagorean Theorem
d = sqrt((X2 - X1)^2 + (Y2 - Y1)^2)
will result in an error of
less than 30 meters (100 ft) for latitudes less than 70 degrees
less than 20 meters ( 66 ft) for latitudes less than 50 degrees
less than 9 meters ( 30 ft) for latitudes less than 30 degrees
(These error statements reflect both the convergence of the meridians and the curvature of the parallels.)
Re: Använda GPS: ekvationer?
Postat: 15 juni 2013, 09:26:20
av Icecap
Allt beror ju på önskat precision. Vincerty-algoritmen är ju (tydligen) riktigt bra med noggrannheten och den är utvecklat för att vara "snål" med processorkraft.
Att läsa:
http://www.ngs.noaa.gov/PUBS_LIB/inverse.pdf
Re: Använda GPS: ekvationer?
Postat: 15 juni 2013, 10:38:15
av danei
ElectricNooB: Det där gäller ju om man inte använder lokala kordinater
Re: Använda GPS: ekvationer?
Postat: 15 juni 2013, 11:00:26
av Andax
Ska du ha hög noggrannhet i avståndsberäkningen så är det bäst att först räkna om koordinaterna till ECEF (earth centered earth fixed) kartesiska koordinater. Har inte formeln i huvudet men kan rota.