Calcolare la distanza tra due satelliti partendo dai TLE

Per python c’è pyephem… Sono in ferie dalla famiglia, ma magari nel weekend ci faccio un tentativo.

No no, io sono sempre stato Aperol Flight :grin:

E chi era Teflon Flight?

Prima che vado avanti, ho calcolato le distanze ogni secondo per 5 minuti, vedi se ci siamo capiti bene su quello che vuoi:

Per farlo per 24 ore devo trovare un formato più intelligente, non posso fare 86400 righe di excel…
Se poi sei soddisfatto ti mando lo script di GMAT e ti dico come ho estratto i dati. Considera che uso questo programma da circa 24 ore, quindi non c’è molta eleganza nelle funzioni.

4 Mi Piace

Yes, è proprio quello che mi serve! :slight_smile:

86400 righe in Excel non sono più un problema, da quando Windows è a 64 bit.
Comunque a me basta un punto ogni minuto.

Come hai estratto le posizioni da GMAT?

Non mi ricordo, report file, qualcosa del genere, che figuri negli output. Ma lunedì appena apro il computer di nuovo ti do tutti i dettagli.
Buon weekend :slight_smile:

1 Mi Piace

Ah ecco, cliccando col destro nella cartella Output di Resources basta fare add - Report file.
E poi il file esce nel tab “Output” a destra, dopo Resources e Mission dopo che fai un run con F5.
Ho usato due report file diversi che ho unito nel foglio di lavoro, perché le epoche da cui ho preso i dati sono diverse (3 minuti di differenza) e non riesco a fare un unico run con i due satelliti insieme.

Senti, sono a un passo dalla soluzione finale perfetta, ma ne ho una approssimata bene, può andare lo stesso? Ho fatto il 99%, l’ultimo 1% mi richiede troppo tempo.
Ho aggiornato il file condiviso, c’è solo un problema che non riesco a risolvere per l’epoca sfasata: alla fine la distanza tra i due satelliti è tra le posizioni prese a 11 secondi di differenza.

Alla fine è meglio impararsi python per bene e fare come dice il buon vecchio @Mike.

Ho fatto un vago tentativo nel weekend, scoprendo che pyephem è discontinued.
L’alternativa è skyfield, con cui sono riuscito a scaricare i TLE, ad avere coordinate geocentriche di entrambi, ma la differenza tra le due non mi da una distanza (ovviamente posso calcolarla manualmente, ma sembra un lavoro per la libreria :smiley: )

Non aiuta che non ho familiarità con i vari formati delle coordinate.

Ok ho qualcosa di funzionante, ma la distanza è nello stesso ordine di grandezza, ma diversa (47k vs 48k) del tuo (@vespiacic) in excel.
Che TLE hai usato?

Create Spacecraft EutelSAT9B;
GMAT EutelSAT9B.DateFormat = UTCGregorian;
GMAT EutelSAT9B.Epoch = ‘21 Aug 2019 08:20:26.000’;
GMAT EutelSAT9B.CoordinateSystem = EarthMJ2000Eq;
GMAT EutelSAT9B.DisplayStateType = Keplerian;
GMAT EutelSAT9B.SMA = 42164.00000000003;
GMAT EutelSAT9B.ECC = 0.0002899999999999806;
GMAT EutelSAT9B.INC = 0.06229999999892783;
GMAT EutelSAT9B.RAAN = 5.45060000000001;
GMAT EutelSAT9B.AOP = 170.761699999986;
GMAT EutelSAT9B.TA = 31.77670000001409;

Create Spacecraft Sentinel1A;
GMAT Sentinel1A.DateFormat = UTCGregorian;
GMAT Sentinel1A.Epoch = ‘21 Aug 2019 08:16:15.000’;
GMAT Sentinel1A.CoordinateSystem = EarthMJ2000Eq;
GMAT Sentinel1A.DisplayStateType = Keplerian;
GMAT Sentinel1A.SMA = 7072.999999999997;
GMAT Sentinel1A.ECC = 0.0001199999999990654;
GMAT Sentinel1A.INC = 98.18259999999999;
GMAT Sentinel1A.RAAN = 15.97579999999997;
GMAT Sentinel1A.AOP = 85.91330000020717;
GMAT Sentinel1A.TA = 274.3062999997928;

Ugh, devo riconvertire in TLE per confrontare.
Gli orari nell’excel sono UTC?

Ho preso i dati da qui:

Confido vivamente data la serietà del sito che sono UTC.

Per trovare i TLE ho trovato questo che è molto completo:
https://www.celestrak.com/NORAD/elements/

1 Mi Piace

Allora, per vedere se il vostro tool funziona, approcciamo il problema in maniera “scientifica” e creiamo uno scenario di riferimento, così da poter confrontare i vari risultati.

Prima di tutto bisogna farlo con i TLE aggiornati ad oggi 27.08.2019, perché quelli vecchi non li trovo più.

EUTELSAT 9B:
1 41310U 16005A 19239.13868775 .00000051 00000-0 00000+0 0 9995
2 41310 0.0510 77.7728 0003410 175.8661 140.3653 1.00273690 13180
https://celestrak.com/satcat/tle.php?INTDES=2016-005

SENTINEL-1A:
1 39634U 14016A 19239.17320253 -.00000006 00000-0 84923-5 0 9992
2 39634 98.1822 245.3821 0001288 85.2357 274.8989 14.59198327287509
https://celestrak.com/satcat/tle.php?INTDES=2014-016

Se uso i TLE di oggi per un calcolo per il 21 agosto, è tutto sballato perché i TLE sono troppo imprecisi. Tra l’altro per il 21 agosto STK mi dà un buco tra le 07:55 e le 08:31, quindi non riesco proprio a paragonare i miei dati con quelli del file Excel condiviso sopra, che sono alle 08:21.

Quindi, con STK, ho fatto uno scenario per le seguenti date:
27.08.2019 08:00:00 UTC
28.08.2019 16:00:00 UTC

Questo è l’output che mi dà STK (metto solo la prima mezz’ora e poi allego tutto il file):

Time (UTCG) Azimuth (deg) Elevation (deg) Range (km)
27 Aug 2019 08:00:00.000 255.180 -80.907 39295,83344
27 Aug 2019 08:01:00.000 252.034 -81.065 39009,23217
27 Aug 2019 08:02:00.000 248.702 -81.236 38739,13968
27 Aug 2019 08:03:00.000 245.168 -81.416 38486,94881
27 Aug 2019 08:04:00.000 241.414 -81.602 38253,97422
27 Aug 2019 08:05:00.000 237.429 -81.789 38041,4373
27 Aug 2019 08:06:00.000 233.200 -81.972 37850,45587
27 Aug 2019 08:07:00.000 228.724 -82.147 37682,02998
27 Aug 2019 08:08:00.000 224.004 -82.307 37537,03249
27 Aug 2019 08:09:00.000 219.051 -82.449 37416,19695
27 Aug 2019 08:10:00.000 213.889 -82.567 37320,1104
27 Aug 2019 08:11:00.000 208.552 -82.657 37249,20462
27 Aug 2019 08:12:00.000 203.086 -82.715 37203,75199
27 Aug 2019 08:13:00.000 197.546 -82.741 37183,86113
27 Aug 2019 08:14:00.000 191.990 -82.732 37189,47648
27 Aug 2019 08:15:00.000 186.478 -82.690 37220,37883
27 Aug 2019 08:16:00.000 181.065 -82.615 37276,18879
27 Aug 2019 08:17:00.000 175.800 -82.513 37356,37213
27 Aug 2019 08:18:00.000 170.718 -82.385 37460,24672
27 Aug 2019 08:19:00.000 165.844 -82.238 37586,99222
27 Aug 2019 08:20:00.000 161.192 -82.075 37735,65962
27 Aug 2019 08:21:00.000 156.765 -81.902 37905,18406
27 Aug 2019 08:22:00.000 152.561 -81.723 38094,39617
27 Aug 2019 08:23:00.000 148.569 -81.544 38302,03655
27 Aug 2019 08:24:00.000 144.776 -81.367 38526,76782
27 Aug 2019 08:25:00.000 141.165 -81.197 38767,18959
27 Aug 2019 08:26:00.000 137.720 -81.037 39021,85012
27 Aug 2019 08:27:00.000 134.422 -80.889 39289,26051
27 Aug 2019 08:28:00.000 131.255 -80.756 39567,90633
27 Aug 2019 08:29:00.000 128.201 -80.639 39856,2582
27 Aug 2019 08:30:00.000 125.244 -80.540 40152,78391

Satellite-EUTELSAT_9B_41310-To-Satellite-SENTINEL-1A_20190827-28_AER.xlsx (73,5 KB)

Ecco, ho capito perché STK non mi mostra le distanze: hai fatto un calcolo in un periodo in cui i due satelliti non erano in visibilità tra di loro :smiley:

Ho inserito in STK questi parameteri orbitali che hai postato e ho fatto una simulazione per il 21.08.2019, questo è quello che esce:

Ti metto qui sotto le distanze calcolate da STK, con i tuoi parameteri orbitali e per il passaggio delle 08:35 UTC del 21.08.2019.

Però questi TLE cominciano ad essere vecchiotti. Quindi consiglio di usare il mio post sopra (con i TLE di oggi) per fare ulteriori verifiche.

PS: oggi sono stato a casa con la febbre, quindi ho avuto un sacco di tempo per giocare con le orbite :sweat_smile:

Time (UTCG) Azimuth (deg) Elevation (deg) Range (km)
21 Aug 2019 08:35:18.230 283.413 -81.325 44768,0219
21 Aug 2019 08:36:18.000 282.420 -81.093 44369,34822
21 Aug 2019 08:37:18.000 281.424 -80.889 43959,80509
21 Aug 2019 08:38:18.000 280.419 -80.716 43542,40034
21 Aug 2019 08:39:18.000 279.399 -80.574 43118,69264
21 Aug 2019 08:40:18.000 278.355 -80.465 42690,30578
21 Aug 2019 08:41:18.000 277.280 -80.389 42258,92476
21 Aug 2019 08:42:18.000 276.165 -80.349 41826,29291
21 Aug 2019 08:43:18.000 275.002 -80.344 41394,20791
21 Aug 2019 08:44:18.000 273.779 -80.377 40964,51692
21 Aug 2019 08:45:18.000 272.487 -80.446 40539,11066
21 Aug 2019 08:46:18.000 271.112 -80.553 40119,91639
21 Aug 2019 08:47:18.000 269.641 -80.697 39708,88974
21 Aug 2019 08:48:18.000 268.055 -80.878 39308,00509
21 Aug 2019 08:49:18.000 266.334 -81.095 38919,24427
21 Aug 2019 08:50:18.000 264.455 -81.347 38544,58578
21 Aug 2019 08:51:18.000 262.386 -81.633 38185,98833
21 Aug 2019 08:52:18.000 260.094 -81.949 37845,37851
21 Aug 2019 08:53:18.000 257.533 -82.292 37524,6317
21 Aug 2019 08:54:18.000 254.650 -82.659 37225,55726
21 Aug 2019 08:55:18.000 251.380 -83.044 36949,87734
21 Aug 2019 08:56:18.000 247.643 -83.440 36699,21081
21 Aug 2019 08:57:18.000 243.345 -83.839 36475,05139
21 Aug 2019 08:58:18.000 238.379 -84.230 36278,75169
21 Aug 2019 08:59:18.000 232.635 -84.602 36111,50264
21 Aug 2019 09:00:18.000 226.013 -84.939 35974,3193
21 Aug 2019 09:01:18.000 218.461 -85.224 35868,02447
21 Aug 2019 09:02:18.000 210.026 -85.439 35793,23719
21 Aug 2019 09:03:18.000 200.893 -85.569 35750,36305
21 Aug 2019 09:04:18.000 191.403 -85.603 35739,58794
21 Aug 2019 09:05:18.000 181.985 -85.537 35760,87521
21 Aug 2019 09:06:18.000 173.047 -85.378 35813,96636
21 Aug 2019 09:07:18.000 164.873 -85.140 35898,38529
21 Aug 2019 09:08:18.000 157.594 -84.839 36013,44593
21 Aug 2019 09:09:18.000 151.211 -84.494 36158,26286
21 Aug 2019 09:10:18.000 145.651 -84.120 36331,76534
21 Aug 2019 09:11:18.000 140.805 -83.731 36532,71171
21 Aug 2019 09:12:18.000 136.563 -83.339 36759,70867
21 Aug 2019 09:13:18.000 132.821 -82.953 37011,2277
21 Aug 2019 09:14:18.000 129.491 -82.581 37285,62674
21 Aug 2019 09:15:18.000 126.497 -82.227 37581,16706
21 Aug 2019 09:16:18.000 123.779 -81.898 37896,03503
21 Aug 2019 09:17:18.000 121.285 -81.595 38228,35797
21 Aug 2019 09:18:18.000 118.974 -81.323 38576,22423
21 Aug 2019 09:19:18.000 116.812 -81.082 38937,69704
21 Aug 2019 09:20:18.000 114.770 -80.875 39310,83155
21 Aug 2019 09:21:18.000 112.823 -80.701 39693,68754
21 Aug 2019 09:22:18.000 110.951 -80.562 40084,34033
21 Aug 2019 09:23:18.000 109.137 -80.457 40480,89345
21 Aug 2019 09:24:18.000 107.364 -80.385 40881,48639
21 Aug 2019 09:25:18.000 105.619 -80.347 41284,30282
21 Aug 2019 09:26:18.000 103.888 -80.342 41687,57712
21 Aug 2019 09:27:18.000 102.159 -80.367 42089,59988
21 Aug 2019 09:28:18.000 100.422 -80.423 42488,72236
21 Aug 2019 09:29:18.000 98.664 -80.507 42883,36003
21 Aug 2019 09:30:18.000 96.874 -80.619 43271,99538
21 Aug 2019 09:31:18.000 95.040 -80.756 43653,18004
21 Aug 2019 09:32:18.000 93.152 -80.917 44025,5363
21 Aug 2019 09:33:18.000 91.196 -81.100 44387,75822
21 Aug 2019 09:34:18.000 89.158 -81.303 44738,61185
21 Aug 2019 09:34:24.582 88.929 -81.327 44776,35979
1 Mi Piace

Confermo che il mio metodo ritorna esattamente la stessa distanza (al km, dopo la virgola cambia).

L’az/el è dal punto di vista del Sentinel?
Quello riesco a calcolarlo solo per punti sulla superficie terrestre…

Ma hai implementato anche una libreria che propaga i TLE?
Cioè dai TLE hai estratto le coordinate in base a data/ora e poi hai calcolato le distanze?
E cosa hai usato?

Sono curioso :slight_smile:

Dipende da come è settato in STK.
In questo caso, visto che l’elevation è -80° direi che è quella di E9B (che dalla GEO guarda in basso verso la LEO).

Ho usato Skyfield.

import skyfield
import numpy
from skyfield.api import Topos, load

ts = load.timescale()

satellites = load.tle('https://celestrak.com/NORAD/elements/geo.txt')
eutelsat9b = satellites['EUTELSAT 9B']
print(eutelsat9b)

satellites = load.tle('https://celestrak.com/NORAD/elements/resource.txt')
sentinel1a = satellites['SENTINEL-1A']
print(sentinel1a)

eut=eutelsat9b.at(ts.utc(2019,8,27,8,0,0)).position.km
sen=sentinel1a.at(ts.utc(2019,8,27,8,0,0)).position.km

print(numpy.linalg.norm(eut-sen))

def dist(x,y):   
    return numpy.sqrt(numpy.sum((x-y)**2))

print(dist(eut,sen))

Risultato

EarthSatellite 'EUTELSAT 9B' number=41310 epoch=2019-08-24T20:45:41Z
EarthSatellite 'SENTINEL-1A' number=39634 epoch=2019-08-25T11:00:50Z
39295.57437764145
39295.57437764145

(provavo 2 metodi diversi per calcolare la distanza euclidea tra i due vettori, ma sono identiche, come si vede)

2 Mi Piace

Ho trovato come fare per avere azimuth e elevazione (in questo caso da Sentinel a Eutelsat, mi pare che sia più utile no? Chi fa il tracking?)

subpoint = sentinel1a.at(ts.utc(2019,8,27,8,0,0)).subpoint()
difference = eutelsat9b - subpoint
az, el, distance = difference.at(ts.utc(2019,8,27,8,0,0)).altaz()
print('Azimuth:', az)
print('Elevation:', el)
print('Distance:', distance.km)

Output

Azimuth: 19deg 17' 06.8"
Elevation: 150deg 54' 38.9"
Distance: 39295.57437756731

edit: Temo che az ed el siano invertiti :smiley: