Obliczanie pozycji obiektu z dwuwiersza TLE

Postm72 | 12 Sie 2022, 00:11

Czy znajdzie się tu ktoś kto zna (i się podzieli) algorytm do obliczania pozycji satelity mając podany dwuwiersz TLE ?
Nie zajmuję się astronomią tylko radiotechniką i chciałem zrobić rotor antenowy do automatycznego śledzenia satelit krótkofalarskich sterowany mikrokontrolerem ale nie znam algorytmu. Zaznaczam że nie chodzi mi o artykuły naukowe i doktoraty (bo tych jest sporo w internecie) tylko o algorytm lub przykład w dowolnym języku komputerowym.
 
Posty: 8
Rejestracja: 12 Sie 2022, 00:03

 

PostVroobel | 12 Sie 2022, 00:18

Polecam Pythona i bibliotekę PyEphem. Ogarnia nie tylko satelity, ale wszystko, co lata wokół Ziemi i Słońca. Bardzo przyjemna biblioteka, a pliki TLE uaktualniane są codziennie. Element wykonawczy to np. optymalny komputerek Raspberry Pi 3 B+.
Pozdrawiam,
Vroobel

* Altair 102EDT F/7 @ Opus Magnum ATM EQ Fork Mount / OnStep / Astroberry
* Altair 102ED F/11 & Vixen A80M + bino @ EQ5

https://www.astrobin.com/users/Vroobel/
Awatar użytkownika
 
Posty: 2324
Rejestracja: 27 Maj 2017, 11:49

 

Postm72 | 12 Sie 2022, 11:31

Co do Pythona i Raspbery to świetna wiadomość bo właśnie ten rotor chcę na tych elementach zrobić. Ale mimo wszystko chciałbym się zapoznać z obliczeniami więc pytanie wciąż aktualne.
 
Posty: 8
Rejestracja: 12 Sie 2022, 00:03

 

Postszuu | 12 Sie 2022, 12:39

int db_tle (char *name, char *l1, char *l2, Obj *op)
https://github.com/brandon-rhodes/pyeph ... ro/dbfmt.c

int obj_earthsat (Now *np, Obj *op)
https://github.com/brandon-rhodes/pyeph ... earthsat.c

8)
Awatar użytkownika
 
Posty: 803
Rejestracja: 22 Mar 2008, 17:51

PostVroobel | 12 Sie 2022, 13:55

Tyle teorii. A jak znajdę dziś czas, to zerknę do mojego poprzedniego projektu i postaram się wyciągnąć gotowca, razem z całą procedurą pobierania TLE. Przymierzałem się do łapania ISS Newtonem 10", ale okazało się to trudniejsze w realizacji, niż zakładałem. Śledziło ładnie, ale spóźnione o jakieś kilka-kilkanaście sekund. :D
Pozdrawiam,
Vroobel

* Altair 102EDT F/7 @ Opus Magnum ATM EQ Fork Mount / OnStep / Astroberry
* Altair 102ED F/11 & Vixen A80M + bino @ EQ5

https://www.astrobin.com/users/Vroobel/
Awatar użytkownika
 
Posty: 2324
Rejestracja: 27 Maj 2017, 11:49

 

Postm72 | 12 Sie 2022, 22:19

Vroobel napisał(a):Tyle teorii. A jak znajdę dziś czas, to zerknę do mojego poprzedniego projektu i postaram się wyciągnąć gotowca, razem z całą procedurą pobierania TLE. Przymierzałem się do łapania ISS Newtonem 10", ale okazało się to trudniejsze w realizacji, niż zakładałem. Śledziło ładnie, ale spóźnione o jakieś kilka-kilkanaście sekund. :D

Na szczęście w przypadku krótkofalarstwa dokładność ustawienia anteny nie ma znaczenia krytycznego.
+ - kilkanaście stopni spokojnie wystarczy
 
Posty: 8
Rejestracja: 12 Sie 2022, 00:03

 

PostVroobel | 12 Sie 2022, 22:36

To spoko dasz radę. Podejrzewam, że mi się obliczenia rozjeżdżały na etapie uruchamiania prowadzenia i rozpędzania po oczekiwaniu na wschód ISS. Ale o kilkunastu stopniach raczej mowy być nie powinno.

Niestety, dziś mi się nie udalo nawet usiąść nad tym i jutro też może być ciężko.
Pozdrawiam,
Vroobel

* Altair 102EDT F/7 @ Opus Magnum ATM EQ Fork Mount / OnStep / Astroberry
* Altair 102ED F/11 & Vixen A80M + bino @ EQ5

https://www.astrobin.com/users/Vroobel/
Awatar użytkownika
 
Posty: 2324
Rejestracja: 27 Maj 2017, 11:49

 

Postm72 | 17 Sie 2022, 10:49

Pierwsze koty za płoty. Położenie aktualne księżyca w porównaniu z orbitronem.
Może nie za dokładnie ale chyba dla tego że w innych jednostkach (chyba).
Obliczanie pozycji obiektu z dwuwiersza TLE: moo.jpg


Próbowałem obliczeń ISS-a na podstawie świeżego TLE ze strony http://www.amsat.org/amsat/ftp/keps/current/nasa.all
Ale wyskakiwały kompletne głupoty. Muszę jeszcze się doszkolić z astro bo nie mam o tym bladego pojęcia.
 
Posty: 8
Rejestracja: 12 Sie 2022, 00:03

 

PostVroobel | 17 Sie 2022, 11:53

O kurcze, biję się w pierś, kompletnie zapomniałem, przepraszam, byłem po 3 bezsennych nocach pod rząd. Widzę, że temat jest ogarnięty, więc moje linijki kodu już niewiele wniosą. Skoro, jak pisałeś, duża dokładność nie jest wymagana, to chyba cel został osiągnięty.

Czy to będzie stacjonarna konstrukcja? Jest szansa, że będzie jedna wyznaczona pozycja do resetowania śledzenia, czy zamierzasz z tym podróżować?
Pozdrawiam,
Vroobel

* Altair 102EDT F/7 @ Opus Magnum ATM EQ Fork Mount / OnStep / Astroberry
* Altair 102ED F/11 & Vixen A80M + bino @ EQ5

https://www.astrobin.com/users/Vroobel/
Awatar użytkownika
 
Posty: 2324
Rejestracja: 27 Maj 2017, 11:49

 

Postm72 | 17 Sie 2022, 14:24

Konstrukcja będzie przenośna, lipna. Tu chodzi tylko o to że jak się robi łączności trzymając antenę w ręce to nie ma jak notować znaków korespondentów. Po prostu brakuje rąk. Cały czas trzeba kręcić gałami. Nie jest to proste. Przykładowy film z takiej łączności https://youtu.be/kEvsKN9ZSyw?t=152
Coś mi nie działa zaciąganie z TLE. Próbuję śledzić ISS ale wyniki stoją w miejscu, nie wiem czemu. W zasadzie po każdym odświeżeniu programu powinny się zmieniać.
Obliczanie pozycji obiektu z dwuwiersza TLE: aaa.PNG


    import ephem

    sanok = ephem.Observer()
    sanok.lat = '49.55'
    sanok.long = '22.22'

    line1 = "ISS (ZARYA)"
    line2 = "1 25544U 98067A 22223.85858796 .00005080 00000-0 96458-4 0 9996"
    line3 = "2 25544 51.6435 60.7994 0005755 110.8341 79.0000 15.50139625353814"

    iss = ephem.readtle(line1, line2, line3)
    iss.compute('2022/8/17')

    print('%s %s' % (iss.sublong, iss.sublat))

 
Posty: 8
Rejestracja: 12 Sie 2022, 00:03

 

PostVroobel | 17 Sie 2022, 17:49

Zaciąganie - masz na myśli pobieranie danych?

Ja to robiłem tak (Python):


import ephem
import urllib.request as urllib2
import math

url = "https://www.celestrak.com/NORAD/elements/stations.txt"
urllib2.urlretrieve(url, "/home/pi/Python/satellites.txt")

file = open("/home/pi/Python/satellites.txt", "r")
content = file.readlines()
for line in content:
-> if ObjectName in line:
-> -> StationTLE = (content[content.index(line)].rstrip(), content[content.index(line)+1].rstrip(), content[content.index(line)+2].rstrip())
PyEphemObject = ephem.readtle(StationTLE[0], StationTLE[1], StationTLE[2])


Nadal działa, ISS jest pierwszym satelitą na liście.

A potem regularnie w kółko leciało to:

Now = datetime.now()

Year = int(Now.strftime("%Y"))
Month = int(Now.strftime("%m"))
Day = int(Now.strftime("%d"))
Hour = int(Now.strftime("%H"))
Minute = int(Now.strftime("%M"))
Second = float(Now.strftime("%S.%f"))

PyEphemObserver.lat = str(MojaSzerokośćGeograficzna)
PyEphemObserver.lon = str(MojaDługośćGeograficzna)
PyEphemObserver.elev = 30 # Tyle około mam nad poziomem morza.
PyEphemDateNow = (Year, Month, Day, Hour, Minute, Second)
PyEphemObserver.date = ephem.date(PyEphemDateNow)
PyEphemObject.compute(PyEphemObserver)
PyEphemObjectListAz = re.split('[:]+', str(PyEphemObject.az))
PyEphemObjectAz = abs(int(PyEphemObjectListAz[0])) + int(PyEphemObjectListAz[1])/60 + float(PyEphemObjectListAz[2])/3600
PyEphemObjectListAlt = re.split('[:]+', str(PyEphemObject.alt))
PyEphemObjectAlt = abs(int(PyEphemObjectListAlt[0])) + int(PyEphemObjectListAlt[1])/60 + float(PyEphemObjectListAlt[2])/3600
if int(PyEphemObjectListAlt[0]) < 0:
-> PyEphemObjectAlt *= -1
Az = PyEphemObjectAz
Alt0 = PyEphemObjectAlt


Żeby być precyzyjnym, dodaj refrakcję atmosferyczną (na podstawie "Astronomical Algorithms, wyd. II, Jean Meeus):

R = 1.02 / math.tan((Alt0 + 10.3 / (Alt0 + 5.11))*math.pi/180)
Alt = Alt0 + R/60


Daj znać, czy działa.
Pozdrawiam,
Vroobel

* Altair 102EDT F/7 @ Opus Magnum ATM EQ Fork Mount / OnStep / Astroberry
* Altair 102ED F/11 & Vixen A80M + bino @ EQ5

https://www.astrobin.com/users/Vroobel/
Awatar użytkownika
 
Posty: 2324
Rejestracja: 27 Maj 2017, 11:49

 

Postm72 | 18 Sie 2022, 11:10

Dzięki za przykładowy kod. Będę powoli coś działał.
 
Posty: 8
Rejestracja: 12 Sie 2022, 00:03

 

Postm72 | 20 Sie 2022, 00:44

Czy jest możliwość rozpoznania na podstawie danych zawartych w TLE który z dwóch plików z danymi TLE jest nowszy ?
Pierwsze co przychodzi mi do głowy jest ro porównanie ile obrotów wokół ziemi wykonał jakiś obiekt na podstawie tych danych.
Obliczanie pozycji obiektu z dwuwiersza TLE: obraz_2022-08-20_004521359.png


Ale czy jest kulturalniejszy sposób ?
 
Posty: 8
Rejestracja: 12 Sie 2022, 00:03

 

PostVroobel | 20 Sie 2022, 08:49

A skąd taka potrzeba? Zaproponowane przeze mnie rozwiązanie, o ile pamiętam, nadpisuje plik. Potrzebujesz archiwizować pliki?

(Ostatni raz dłubałem w tym kodzie 2.5 roku temu.)

Edit.
Zastanawiam się teraz, czy PyEphem przypadkiem nie podaje Alt z uwzględnieniem refrakcji atmosferycznej. Sprawdź to sobie, albo sprawdź wyniki z i bez tego.
Pozdrawiam,
Vroobel

* Altair 102EDT F/7 @ Opus Magnum ATM EQ Fork Mount / OnStep / Astroberry
* Altair 102ED F/11 & Vixen A80M + bino @ EQ5

https://www.astrobin.com/users/Vroobel/
Awatar użytkownika
 
Posty: 2324
Rejestracja: 27 Maj 2017, 11:49

 

Postm72 | 20 Sie 2022, 14:31

Vroobel napisał(a):A skąd taka potrzeba? Zaproponowane przeze mnie rozwiązanie, o ile pamiętam, nadpisuje plik. Potrzebujesz archiwizować pliki?

(Ostatni raz dłubałem w tym kodzie 2.5 roku temu.)

Edit.
Zastanawiam się teraz, czy PyEphem przypadkiem nie podaje Alt z uwzględnieniem refrakcji atmosferycznej. Sprawdź to sobie, albo sprawdź wyniki z i bez tego.


Potrzeba stąd bo źródeł danych tle jest chyba kilka i w jednym pliku nie ma wszystkich satelitów które mnie interesują więc plan jest taki ->
Zaciągamy do bazy danych wszystko co się da np stąd:
- https://celestrak.org/NORAD/elements/stations.txt
- http://www.amsat.org/amsat/ftp/keps/cur ... sabare.txt
Niepotrzebne (nie radiokomunikacyjne) satelity usuwam.
Następnie zdublowane satelity trzeba jakoś odsiać i pozostawić tylko te z nowszymi danymi.
Problem tylko skąd wiedzieć które dane są nowsze.
 
Posty: 8
Rejestracja: 12 Sie 2022, 00:03

 

Użytkownicy przeglądający to forum: Brak zarejestrowanych użytkowników oraz 23 gości

AstroChat

Wejdź na chat