2013-07-12 19 views
6

Locandina prima volta qui.Geopy: calcolo rotta GPS/rilevamento

Sto facendo alcune analisi di dati sui dati GPS raccolti per un octorotor ROV di ispezione del ponte. Abbiamo octorotor in esecuzione su ROS utilizzando un LIDAR di scansione 3D, visione stereo, INS e qualche altra tecnologia pulita. Attualmente sto usando un ublox LEA-6T in una configurazione simile a quella Doug Weibel's per raccogliere dati GPS grezzi come fase portante, spostamento doppler e effemeridi satellitari. Quindi utilizzo un progetto opensource RTKLIB per eseguire alcune operazioni di post elaborazione DGPS con le stazioni locali NOAA CORS per ottenere l'accuratezza del cm per una migliore stima della posa durante la ricostruzione della nuvola di punti 3D del bridge.

In ogni caso, sto utilizzando la maggior parte di scipy per verificare statisticamente i risultati del test.
In particolare per questa parte, però, sto solo usando:

Sono stato Montanti mia covarianza posizionale rispetto a compensare dal mio misurata verità a terra usando la comoda funzione a distanza di geopy. Con pochi massaggiando gli argomenti, posso trovare la distanza rispetto a ciascuna direzione rappresentata da ciascun elemento di deviazione standard nella matrice; Nord, Est, Su e le tre direzioni tra.

Tuttavia, queste distanze sono assolute e non descrivono la direzione.
Dire: positivo, negativo corrisponderebbe a nord o sud rispettivamente.

potrebbe semplicemente utilizzare la latitudine e la longitudine di rilevare la polarità di direzione,
Ma vorrei essere in grado di individuare il punto preciso punto di appoggio della distanza descritto invece,
Come ritengo un valore di l'intestazione globale potrebbe essere utile per ulteriori applicazioni diverse dalla mia attuale.

ho trovato qualcun altro pose una domanda simile
Ma la sua sembra essere ipotizzando un grande cerchio approssimazione
Dove avrei preferisco usare almeno il modello ellissoidale WGS-84, o uno qualsiasi degli stessi modelli che possono essere utilizzato in geopy:
Jump to Calculating distances

Ogni suggerimento apprezzato,
-ruffsl

Fonti se interessati:

012.351.
+2

Stai parlando molto, ma chiedendo poco. Di cosa hai bisogno esattamente? Una funzione che calcola il rilevamento tra due coordinate lat/long WG84? – AlexWien

+0

@AlexWien, Sì, insomma quello che sto puntando. Trovo più utile cercare le risposte dei post precedenti quando le persone si installano da sole, rendendo le parole chiave più pertinenti e ricercabili per gli altri. – ruffsl

+0

Ma per me è stato istruttivo, specialmente RTKlib – AlexWien

risposta

5

utilizzare il pacchetto geographiclib per pitone. Calcola distanze e cuscinetti sull'ellissoide e molto altro. (È possibile interpolare i percorsi, aree di misura, etc.) Ad esempio, dopo

pip install geographiclib 

si può fare

>>> from geographiclib.geodesic import Geodesic 
>>> Geodesic.WGS84.Inverse(-41.32, 174.81, 40.96, -5.50) 
{'lat1': -41.32, 'a12': 179.6197069334283, 's12': 19959679.26735382, 'lat2': 40.96, 'azi2': 18.825195123248392, 'azi1': 161.06766998615882, 'lon1': 174.81, 'lon2': -5.5} 

Questo calcola la geodetica da Wellington, Nuova Zelanda (41.32S 174.81E) a Salamanca , Spagna (40,96 N 5,50 W). La distanza è data da s12 (19959679 metri) e l'azimut iniziale (rilevamento) è dato da azi1 (161,067 ... gradi in senso orario da nord).

+0

Sarebbe utile dare un po 'più dettagli sul set di risultati di 'Geodesic.WGS84.Inverse' e ​​per calcolare effettivamente la rotta/direzione GPS richiesta dalla domanda. – swdon

+0

Vedere la mia modifica sopra ... – cffk

3

cuscinetto tra due latitudine/longitudine coordinate: (LAT1, lon1), (Lat2, lon2)

Nel seguente codice LAT1, lon1, Lat2, lon2 sono asumend sia in radianti.
Converti prima dai gradi ai radianti.

dLon = lon2 - lon1; 
y = Math.sin(dLon) * Math.cos(lat2); 
x = Math.cos(lat1)*Math.sin(lat2) - 
     Math.sin(lat1)*Math.cos(lat2)*Math.cos(dLon); 
brng = Math.atan2(y, x).toDeg(); 

Il rilevamento è ora nell'intervallo -180/180.

normalizzare a bussola cuscinetto (0-360)

if (brng < 0) { 
     brng+= 360; 
    } 
+1

Mi piace l'elegante matematica, ma credo che stia usando coordinate sferiche, quindi ancora l'approssimazione del grande cerchio. Per la navigazione e l'applicazione di direzione generale, compreso il mio scopo per il controllo della polarità, direi che questo è sufficiente rispetto al WG84. Ma per il rilievo e l'ispezione del sito questo potrebbe essere troppo approssimativo o non applicabile per le stime degli episodi locali. Fantastico però. – ruffsl

+0

Sì, queste formule asume la terra come uno sferoide. Più preciso è necessario utilizzare formule/implementazioni basate su ellissoidi. – AlexWien

+1

sono confuso ... perché geopy non ha una funzione per calcolare questo in linea con la funzione vincenty che calcola la distanza? – Michael