Spacecraft¶
Asset reference
Concept¶
In ASTROLAB a spacecraft is the central orbital actor of a mission study. It owns the dynamic state (orbit + attitude), participates in the 3D scene, and usually acts as the parent for payloads that see the Earth or talk to the ground: sensors, antennas, transmitters/receivers, solar arrays, and batteries.
Think of it as the digital twin of a satellite bus: mass and area properties feed drag/SRP and power; the propagator turns an initial state into an ephemeris over the scenario; attitude laws orient instruments and panels; constraints can further restrict when the spacecraft is allowed to “count” in access-like calculations.
Constellations do not replace spacecraft — a Walker or trailing constellation creates and groups member spacecraft that remain individually propagated.
Where in the UI¶
| Action | How |
|---|---|
| Create | Mission Tree → Spacecraft category → Add Spacecraft (desktop context menu or mobile ⋯) |
| Edit | Select spacecraft → Properties (tabbed editor) |
| Apply | Apply Changes when the header shows dirty * |
| Children | Add from tree under the spacecraft, or manage Power/Battery panels inside the spacecraft tabs |
Editor tabs¶
| Tab | Purpose |
|---|---|
| Generic | Identity, mass properties, propagator |
| Orbit | State / frame / orbit design wizard / external ephemeris |
| Attitude | Attitude law and parameters |
| Visual | 3D model, color, trail |
| COMM | Bus data-plane for Latency (MMFU, rates, processing) |
| Power | Bus size + solar array panels |
| Battery | Battery packs |
| Constraints | Access / environment constraints |
Generic¶
| Parameter | Type | Default | Notes |
|---|---|---|---|
| Asset ID | text | — | Display / report name |
| Active in scene refresh | checkbox | — | When off, skipped on scene refresh |
| Mass [kg] | decimal | 500 |
UI: Mass kg |
| Drag coefficient Cd | decimal | 2.2 |
|
| Geometric properties source | select | Constant Values / From Custom Assembly | Assembly needs a custom 3D design on the Visual tab |
| Area mode | select | Nominal / Randomly Tumbling / Max / Min | Only when From Custom Assembly |
| Drag area [m²] | decimal | 1 |
Locked when areas come from the assembly |
| SRP coefficient Cr | decimal | 1 |
|
| Reflectivity area [m²] | decimal | 1 |
Locked when areas come from the assembly |
| Propagator Type | select | Keplerian |
See table below |

Spacecraft Properties — Generic (mass, Cd, areas).
Propagator types¶
Apply Changes refreshes Design with the selected propagator (Keplerian, Eckstein–Hechler, DSST, or Numerical). Analyses that propagate the bus use the same choice.
| Propagator | Description |
|---|---|
| Keplerian | Two-body analytical |
| Eckstein Hechler | Analytical (LEO-style perturbations) |
| DSST Propagator | Semi-analytical — efficient on long horizons |
| Numerical Propagator | Numerical integrator + force models (table below) |
Numerical propagator options¶
Visible only when Propagator Type = Numerical Propagator:
| Parameter | Type | Default |
|---|---|---|
| Min step [s] | decimal | 0.001 |
| Max step [s] | decimal | 300 |
| Abs tolerance | decimal | 1e-6 |
| Rel tolerance | decimal | 1e-8 |
| Gravity field Degree | integer | 4 |
| Gravity field Order | integer | 4 |
| Include atmospheric drag | checkbox | off |
| Atmosphere model | select | NRLMSISE-00 (also DTM2000, Harris-Priester, Simple Exponential) |
| Space weather source | select | CSSI Space Weather / Marshall Solar Activity Forecast / Constant Flux and GeoMag (web; F10.7, F10.7A, Kp). Desktop stores the same fields if the mission came from web. |
| Solar activity | select | Low / Moderate / High (Marshall only) |
| F10.7 / F10.7A / Kp | decimal | 150 / 150 / 3 when space weather is Constant Flux |
| Include solar radiation pressure | checkbox | off |
| Include third-body point masses | checkbox | off. Web: when on, pick bodies (default Sun and Moon; also Mercury…Neptune). Desktop keeps the same on/off; a bodies list saved from web is preserved. |

Spacecraft Properties — Generic (identity and propagator).
Orbit¶
| Parameter | Type | Options / notes |
|---|---|---|
| Epoch start UTC | text | Locked if external ephemeris is on |
| Epoch end UTC | text | Locked if external ephemeris is on |
| Coordinate frame | select | Inertial: EME2000, GCRF, TEME, TOD, MOD, CIRF, ECLIPTIC · Earth-fixed: ITRF |
| State type | select | Cartesian, Keplerian, Equinoctial, Delaunay — Keplerian/Equinoctial/Delaunay require an inertial frame (not ITRF) |
State elements by type¶
| State type | Parameters |
|---|---|
| Keplerian | SMA [km], ECC [-], INC [deg], RAAN [deg], AOP [deg], TA [deg] |
| Cartesian | X/Y/Z [km], VX/VY/VZ [km/s] |
| Equinoctial | a [km], ex, ey, hx, hy, Lv [deg] |
| Delaunay | L/G/H (×1e6), l/g/h [deg] |
Orbit design wizard¶
Writes a designed orbit into the document when you click Design orbit (document) (Apply still required for the scene). Check that the initial state fields updated before applying.
| Wizard class | Key parameters (min–max, default) |
|---|---|
| LEO Generic | alt_km 200–2000 (500), ecc 0–0.1 (0.001), inc_deg 0–180 (98.6), aop/raan/ta 0–360 |
| LEO Alternative | perigee/apogee alt 200–2000, inc, aop/raan/ta |
| SSO | alt 400–900 (700), ecc, mltan_h 0–24 (10.5), aop/raan/ta |
| Repeating Ground-Track | revolutions 1–200 (14), cycle_days 1–100 (1), ecc, inc, raan, aop |
| SSO Repeating (I/D) | i 1–15 (3), d 2–20 (10), ecc, aop/raan/ta |
| GTO | perigee 200–2000 (250), apogee fixed ~35786 km, inc 0–90 (27) |
| GEO | alt fixed ~35786 km, ecc 0–0.01, inc 0–10 |
| Molniya | perigee 500–1000 (600), apogee 39000–41000 (40000), inc ~63.4°, aop often 270° |
External ephemeris¶
| Parameter | Type | Notes |
|---|---|---|
| Use external ephemeris file | checkbox | Locks manual orbit editing |
| Load ephemeris file | file | .txt, .eph, .oem |
| Ephemeris file / external epoch | readonly | Filled after load |

Orbit — frame and state vector.

Orbit — design wizard (SSO, LEO, GEO, …).
Attitude¶
| Parameter | Type | Options |
|---|---|---|
| Attitude law | select | Nadir, LVLH, QSW, TNW, VVLH, Inertial, Sun Pointing, Spin-Stabilized |
| Law | Extra parameters |
|---|---|
| Nadir | — |
| LVLH / QSW / TNW / VVLH | Roll/Pitch/Yaw [deg], Rotation order (XYZ…ZYX) |
| Inertial | Inertial frame (EME2000, GCRF, TEME, TOD, MOD, CIRF, ECLIPTIC) |
| Sun Pointing | Sun axis X/Y/Z (default Z = −1) |
| Spin-Stabilized | Base frame (Inertial/LOF), frame select, spin axis (±X/Y/Z), spin rate [deg/s] |

Spacecraft Properties — Attitude (nadir and other laws).
Visual¶
| Parameter | Type | Default |
|---|---|---|
| Model | select | From resource catalog, or Point only |
| Color | color | #66E8FF typical |
| Model scale | decimal | Normalized Cesium scale |
| Trail [s] | decimal | 3600 |
| Show orbit path | checkbox | on |
| Show label in scene | checkbox | off |

Spacecraft Properties — Visual (model, color, trail).
COMM (spacecraft bus)¶
This tab is the data-plane size of the bus for Latency and ISL routing: how fast data is produced, how much can sit onboard, and how fast it can leave on a downlink or ISL. It is not the RF budget — EIRP, G/T, and margins live on Transmitter / Receiver and Link.
Each field is a value + unit pair.
How Latency uses the bus¶
Coverage answers when you acquire. Latency then moves bytes along a Connection Network. The spacecraft COMM fields are the caps on that move. Under ISL (CGR earliest delivery) they also size the ISL hop and how many radios may fire at once (CGR-ETO).
flowchart LR
Cov["Coverage window"] --> Acq["Acquisition data rate"]
Acq --> Mmfu["MMFU onboard"]
Mmfu --> Isl["ISL Data Rate"]
Mmfu --> Dl["Downlink Data Rate"]
Isl --> Neigh["Neighbour MMFU"]
Neigh --> Gnd["Facility"]
Dl --> Gnd
The COMM tab groups the fields by link, each group with a one-line hint. The (i) button explains every parameter. Order: Onboard storage (MMFU) · Acquisition and processing · Downlink · ISL · Uplink from ground.
| Field (editor) | Default | Where it is used |
|---|---|---|
| MMFU capacity | 512 GB | Onboard mass memory. Acquired bytes accumulate here until a contact can drain them. If the tank fills, later data overflows (not delivered). |
| Acquisition Data Rate | 150 Mbps | How fast this bus produces data while Coverage says it is acquiring — only if the acquirer is the spacecraft (no sensor, or Coverage picked the bus). Bytes ≈ rate × time. If Coverage’s acquirer is a sensor, Latency uses that sensor’s Acquisition data rate (default 80 Mbps) instead; the bytes still land in this spacecraft’s MMFU. Discrete Acquirer rate × acquisition window uses the same rule. Discrete Fixed payload size ignores this rate and uses the size you set on Latency. |
| Downlink Data Rate | 450 Mbps | Space → ground hop. The hop is limited by the slower of this rate and the facility’s Max. RX Data Rate. Used on Direct dump and as the last hop after ISL. |
| ISL Data Rate | 200 Mbps | Spacecraft → spacecraft hop when Latency (or Coverage command) policy is ISL (CGR earliest delivery). Pair rate = min of the two buses. Unused on Direct downlink. |
| Processing Latency | 0 s | Store-and-forward delay added when a file arrives on this bus (ISL relay, or a Static IoT uplink) before it can be forwarded. Data the bus acquires itself does not pay it. CGR counts it when choosing the route, so a slow relay can lose to a later direct pass. |
| Max. Concurrent Downlink Links | 1 | How many X-band dumps may originate at this bus at once. Independent of the ISL radio: a satellite can dump to ground and forward ISL in the same step. |
| Max. Concurrent ISL Links | 1 | Parallel ISL transmits. When the Connection Network uses laser/antenna sensors, this count is per terminal (+V and −V can radiate together). When the CN rows are the buses, it is the spacecraft total. CGR-ETO and Session share that rule. X-band dump is the other knob. |
| Uplink Data Rate | 2 Mbps | How fast the bus can receive from the ground. Static Latency: the uplink of each IoT packet and the session capacity of each user. Station command uplinks (Discrete facility tasking) also use it. It is not the downlink dump rate. |
| Max. Concurrent Uplinks | 1 | Static Latency only. How many ground clients (IoT sites or Session users) this bus receives at once. Continuous and Discrete ignore it, so a spacecraft with two sensors acquiring is never limited by it. Independent of ISL and X-band radios. |
Sensor vs bus: production rate comes from the Coverage acquirer. Memory, uplink, space-to-ground and ISL always come from the parent spacecraft COMM tab. In Static, a site seen only by a sensor uplinks to that sensor's bus.
Three radio classes, not one: Max. Concurrent Uplinks receives from ground clients (Static only). Max. Concurrent ISL Links and Max. Concurrent Downlink Links are the relay and dump transmitters. Raising the uplink cap does not add parallel dumps.
Facility COMM is the other half of a downlink: Max. RX Data Rate, plus concurrent RX / processing — Facility.
After you change these numbers, re-run Latency (it goes stale). Changing COMM does not by itself recompute Coverage geometry or Link RF. Full picture: When analyses become stale.

Spacecraft Properties — COMM (MMFU, rates, ISL, concurrent radios).
Power (solar arrays)¶
Solar arrays are child assets (solar_array) edited inside this tab (no standalone web editor).
| Control | Meaning |
|---|---|
| Add panel / Remove panel | Create/remove solar_array children |
| Model source | Custom Design (bus X/Y/Z [m]) or Default Models |
| Per panel | Asset ID, Mount face (±X/Y/Z), Pos X/Y/Z [m], Euler sequence, R1/R2/R3 [°], Dim X/Y/Z [m], Use SADM, Pointing (Fixed / Sun-Tracking), SADM axis, Area [m²] (default 5), Efficiency (default 0.3) |
Plan limit
solarArrayPerParent caps how many panels you can add per spacecraft.

Power — bus size and model source.

Power — solar-array panel card.
Battery¶
Batteries are child assets (battery) edited in this tab.
| Group | Parameters |
|---|---|
| Generic | Battery ID; Battery Type preset (Generic Li-Ion / LiFePO4 / NiH2) — applies chemistry defaults |
| Energy | Nominal Capacity [Wh] (default 500), Initial / Min / Max SOC [%] |
| Charge/discharge | Charge/Discharge efficiency [%], Max charge/discharge power [W] |
| Electrical bus | Nominal / Min / Max voltage [V] |
| Advanced | Self-discharge [%/day], Capacity degradation [%/yr], Min/Max operating temp [°C] |
Validation: non-empty ID; capacity > 0; 0 ≤ min SOC ≤ max SOC ≤ 100; initial SOC in 0–100; nominal voltage > 0.
Plan limit
batteryPerParent caps batteries per spacecraft.

Spacecraft Properties — Battery (packs and SOC limits).
Constraints¶
| Constraint type | Default parameters |
|---|---|
| Range | min_km 0, max_km 2000 |
| Ground elevation | min_deg 10, max_deg 90 |
| Eclipse state | not_in / in |
| Target illuminated | (flag only) |
| Ground sun zenith angle | min_deg 0, max_deg 80 |
| Altitude | min_km 0, max_km 2000 |
| Solar beta angle | min_deg -90, max_deg 90 |
Each constraint card has Enabled and Remove.

Spacecraft Properties — Constraints (type, Enabled, parameters).
Allowed children¶
| Child type | How |
|---|---|
| sensor, antenna, transmitter, receiver | Tree → Add under spacecraft |
| solar_array, battery | Power / Battery tabs (preferred on web) |
Example workflow¶
- Add Spacecraft, set Asset ID
SAT-DEMO. - Orbit wizard → SSO, altitude 700 km → Design orbit (document) → check that the initial state fields updated.
- Attitude → Nadir.
- Power → Add one sun-tracking panel.
- Battery → Add Generic Li-Ion, 500 Wh.
- Apply Changes (updates the 3D scene).
- Optionally attach a sensor, then create Coverage / Power analyses.