Wątek misji
Oprogramowanie wyłącznie doradcze, nie jest to certyfikowany sprzęt nawigacyjny. Tylko źródła publiczne; bez powiązań z żadną agencją i bez jej poparcia, a nic tu nie twierdzi, że spełnia wymagania jakiegokolwiek programu.
kind = "mission-thread" łączy fazy misji, z których każda jest jednym z ośmiu zarejestrowanych rodzajów z własnymi czujnikami i filtrem, i podaje budżet błędu nawigacji i czasu całego łańcucha: dla każdej fazy 1-sigma pozycji, prędkości i biasu zegara na wejściu, w szczycie i na wyjściu; każdy wkład do niego, z jednostką; margines względem wymagania, które podajesz; najsłabsze ogniwo; datowane zdarzenia; i wykres osi czasu. Każda liczba jest MODELLED: podanym wejściem albo modelem takiego wejścia. Jedyne wiersze z zewnętrzną wyrocznią są w xval/mission-thread/ i mówią, co testują.
Uruchom przykład z kopii repozytorium (odczytuje zatwierdzony wycinek jądra Księżyca):
kshana scenarios/mission-thread-artemis-class.toml
Dokument#
kind = "mission-thread"
title = "..." # optional
seed = 20261024 # each phase's seed comes from it and the phase id
epoch_utc = "2028-01-01T00:00:00Z" # mission elapsed time counts from here
moon_kernel_path = "..." # optional JPL SPK cut with the Moon and the Earth (a file: refused by the MCP server)
[entry] # the first phase's entry state
frame = "gcrf"; x = [...] # six numbers, metres and metres per second
sigma_pos_m = 10.0; sigma_vel_mps = 0.01
timescale = "utc"; sigma_time_s = 1e-7; sigma_drift_s_per_s = 1e-12
[[phase]]
id = "ascent" # unique; names the phase in the report and seeds its noise
kind = "launch-ascent"
duration_s = 540.0
nav = ["gnss", "inertial"] # gnss | gnss-ssv | ground-tracking | lunanet | trn | inertial | relative-optical
time = "gnss" # gnss | ground-clock | lunar-time | onboard-holdover
frame = "mci" # optional: the frame this phase needs its entry in
timescale = "ltc" # optional: the clock timescale it needs
[phase.handover] # how this phase hands over to the next (default carry)
rule = "inflate"; q_acc = 1e-9; gap_s = 172800.0
[phase.requirement] # optional limits; the margin is the smallest limit over peak
max_pos_m = 50.0
[phase.model] # the kind's own parameters
Dokument jest odrzucany, a nie zgadywany, gdy powtarza się identyfikator fazy, lista nav jest pusta, nazwa jest nieznana, klucz modelu nie jest kluczem znanym rodzajowi, klucz długości nie zgadza się z duration_s albo faza wymienia źródło, dla którego jej model nie podaje liczb.
Co robi przekazanie#
Przekazywany stan to pełna kowariancja 6x6 dla [x, y, z, vx, vy, vz] w jednostkach SI, zegar (bias, dryf i ich kowariancja, oznaczone skalą czasu), układ odniesienia, czas misji i etykieta dowodowa. Przekazanie nigdy nie zeruje kowariancji.
| Zasada | Co robi |
|---|---|
carry |
przekazuje stan bez zmian |
inflate |
szum białego przyspieszenia o PSD q_acc na gap_s w modelu prostoliniowym; wiersz podaje oba |
reacquire |
nawigacja zliczeniowa przez acquire_s, a potem oś jest ustawiana na dolną granicę źródła tylko tam, gdzie ta granica jest mniejsza; nigdy poniżej granicy, nigdy zerowanie |
Układy odniesienia i skale czasu#
Wątek konwertuje przy przekazaniu, nigdy wewnątrz fazy, a każda konwersja jest osobnym wierszem budżetu. Układy: GCRF, MCI, MCMF (ITRF i LVLH są odrzucane z podaniem powodu). Gcrf <-> Mci przesuwa początek o geocentryczny stan Księżyca: stan klasy DE440 z jądra tam, gdzie obejmuje epokę (zastępnik 5 m i 1 mm/s; zmierzone najgorsze 2,6 m względem przypiętych wartości JPL Horizons), w przeciwnym razie serię analityczną ze zmierzonym 195,7 km RMS, co podaje wiersz; przykład księżycowy musi więc zawierać jądro obejmujące jego epokę. Mci <-> Mcmf to średnia rotacja gwiazdowa z osiami wyrównanymi w epoce i bez libracji. Skale czasu przechodzą przez TT: Utc <-> Tt dokładnie, Tdb <-> Tt dodaje 14 us, Tt <-> Ltc używa wiekowego tempa z lunar_time z jego pasmem od 56 do 59 us/dobę jako niepewnością tempa.
Osiem rodzajów faz#
| Rodzaj | Segment | Co robi | Parametry |
|---|---|---|---|
launch-ascent |
Ziemia | wznoszenie z napędem na orbitę parkingową: kowariancja o stałej prędkości z szumem białego przyspieszenia, akwizycja GNSS i zanik, holdover zegara | klucze [phase.model] w src/mission_thread/earth/launch.rs |
leo-rendezvous |
Ziemia | nawigacja względna na odcinkach czujników: przejście Clohessy'ego-Wiltshire'a w LVLH, kowariancja Kalmana 6x6, okno połączenia | poniżej |
tli-and-cruise |
Ziemia | impuls TLI i lot cislunarny: propagacja Cowella, macierz przejścia stanu liczona różnicą skończoną, aktualizacje gnss-ssv i śledzenia naziemnego | poniżej |
entry |
Ziemia | lot powrotny do granicy wejścia; sigma kąta toru lotu, prawdopodobieństwo korytarza, szczytowe opóźnienie, obszar lądowania | poniżej |
lunar-orbit-rendezvous |
księżycowy | nawigacja względna do połączenia na orbicie księżycowej | mission-thread/lunar-phases.md |
lunar-descent |
księżycowy | budżet rozrzutu lądowania w miejscu przy biegunie | ten sam |
lunar-surface |
księżycowy | dostępność PNT i czasu na powierzchni według miejsca i pory roku | ten sam |
lunar-ascent |
księżycowy | wznoszenie z napędem na orbitę wprowadzenia | ten sam |
Rodzaje księżycowe są też samodzielnymi rodzajami scenariuszy; projekt i dowody są w MISSION-THREAD-LUNAR.md.
leo-rendezvous#
Budżet niesie sigmy względne; bezwzględna kowariancja statku goniącego jest przekazywana bez zmian i mówi o tym wiersz, ponieważ ta faza mierzy pojazdy względem siebie, a nie względem Ziemi. Początkowa kowariancja względna to bezwzględna kowariancja statku goniącego plus podane sigmy celu, dodane jak niezależne (zachowawczo). Klucze: target_alt_m, target_abs_sigma_pos_m, target_abs_sigma_vel_mps, capture_pos_m, capture_vel_mps, opcjonalnie process_q_acc i min_window_s oraz jeden lub więcej [[phase.model.legs]] z range_m, end_range_m, duration_s, sensor (optical-camera, lidar lub rf-ranging, parametry ILLUSTRATIVE w src/mission_thread/sensors.rs) i interval_s; czasy trwania odcinków sumują się do czasu fazy. Okno połączenia to czas od chwili, od której sigma względna pozostaje wewnątrz obwiedni zdolności chwytu, do końca fazy. Powtórzenia są osobnymi fazami z własnymi identyfikatorami.
tli-and-cruise#
Stan średni pochodzi z propagatora Cowella silnika z grawitacją Ziemi i J2 oraz Słońcem i Księżycem jako ciałami trzecimi. Kowariancja przechodzi przez każdy segment step_s z macierzą przejścia stanu liczoną różnicą w przód (przebieg nominalny i sześć przebiegów zaburzonych) i szumem białego przyspieszenia. Impuls jest wzdłuż prędkości wejścia, z podaną częścią wielkości i błędem kierunku. Nazwane ograniczenie: zatwierdzone wycinki jądra Księżyca zawierają Księżyc, ale nie Słońce, więc propagator bierze Księżyc z jądra, a Słońce z serii analitycznej (człon trzeciego ciała Słońca jest niewrażliwy na błąd tej serii); faza podaje w zdarzeniu, której użyła, a tam, gdzie żadne jądro nie obejmuje segmentu, używa serii analitycznej dla obu. Impuls nie jest celowany: stan nominalny jest tam, dokąd prowadzi podany impuls, a fazy księżycowe biorą tylko kowariancję.
Aktualizacje, używane tylko wtedy, gdy dokument wymienia źródło: gnss-ssv (pozycje z dostępnością i PDOP z przeglądu objętości usługi kosmicznej silnika wzdłuż oskulacyjnej orbity okołoziemskiej zastępującej łuk, jeden przegląd na ssv_window_s; sigma pozycji = mediana PDOP razy ssv_uere_m; postać informacji oczekiwanej utrzymuje przebieg deterministyczny) oraz ground-tracking (odległość i prędkość radialna wzdłuż kierunku geocentrycznego, więc płaszczyzna nieba nie jest obserwowana; wariancja aktualizacji jest dzielona przez cykl śledzenia). Klucze: tli_dv_mps, tli_dv_sigma_fraction, tli_pointing_sigma_rad, step_s, clock_q_f, clock_q_d, opcjonalnie process_q_acc, ssv_uere_m, ssv_window_s, ssv_step_min, ssv_cn0_min_dbhz, ground_range_sigma_m, ground_range_rate_sigma_mps, ground_interval_s, ground_duty.
entry#
Lot bezwładny to lot tli-and-cruise bez impulsu, kończący się na granicy wejścia; jego klucze to klucze lotu bezwładnego powyżej. Na granicy faza odczytuje kąt toru lotu i jego sigmę z pełnej kowariancji, prawdopodobieństwo, że kąt mieści się w podanym korytarzu, szczytowe opóźnienie przy kącie nominalnym i na obu brzegach korytarza (płaskie wejście balistyczne silnika obok zamkniętej postaci Allena-Eggersa) względem opcjonalnego limitu oraz obszar lądowania: wzdłuż toru z podanej czułości, w poprzek toru z kowariancji na granicy w poprzek płaszczyzny orbity. Klucze: interface_alt_m, ballistic_coeff_kg_m2, corridor_min_deg, corridor_max_deg, downrange_sensitivity_km_per_deg, flight_time_s, opcjonalnie max_decel_g, scale_height_m i start_state_gcrf (nominalny stan powrotu, sześć liczb, gdy łańcuch nie ma impulsu transziemskiego, który by go dał). Nic tu nie modeluje siły nośnej, prowadzenia ani nagrzewania kapsuły.
Nakładka sieci naziemnej#
Opcjonalna tabela [ground_network] podaje stacje i najniższą elewację śledzenia; dla każdej nazwanej fazy wątek oblicza część fazy, którą stacja może śledzić, i przekazuje ją fazie jako cykl pracy skalujący częstość jej aktualizacji śledzenia naziemnego. Geometrie: entry-orbit (stan wejścia lecący jako dwuciałowy z J2, dla faz niskiej orbity), moon-direction (pojazd w położeniu Księżyca, dla lotu cislunarnego) i stated (podany przez Ciebie cykl pracy). Zmiana stacji traci handover_gap_s; budżet fazy otrzymuje najdłuższy odstęp bez stacji w zasięgu, a zdarzenie podaje cykl pracy. Nic nie modeluje anten ani harmonogramów sieci.
Raport#
kshana-mission-thread/1: phases[] (indeks, identyfikator, rodzaj, czasy, etykieta, źródła nawigacji i czasu, źródło ograniczające, sigmy na wejściu, w szczycie i na wyjściu, wymaganie, margines, budget_rows[] z jednostką na wiersz, events[]), weakest_link (najmniejszy margines względem podanego wymagania, w przeciwnym razie największa pozycja w szczycie), timeline[], label wątku (etykieta najsłabszej fazy) oraz blok units. Wykres to 1-sigma pozycji i biasu zegara względem czasu misji, jedno pasmo na fazę.
Czym są dowody#
Etykieta wątku to etykieta najsłabszej fazy, a każda faza jest MODELLED. Propagator księżycowy jest porównany z LRO i CAPSTONE (xval/mission-thread-lunar/); łuk cislunarny jest porównany z publiczną trajektorią Horizons (xval/mission-thread/). Wiersz zalicza próg albo go nie osiąga, a próg jest ustalony w zatwierdzonym pliku przed przebiegiem, a niespełnienie jest zapisywane jako niespełnienie. Nic nie jest VALIDATED, o ile rejestr tak nie stanowi.