Documents

Reference

ARLAMX v2.7.5

A C++ spacecraft plant (orbit + attitude + environment) with a Python Gymnasium environment and Stable-Baselines3 trainers. It is built to train deep-RL attitude advisors for drag/SRP-sail CubeSats in very-low and low Earth orbit (250–500 km).

How to read this site For commands, a free-molecular run, the control loop, deep RL, and STL simplification, start with the user guide. Each physics page covers what the model computes, the exact equations in the source, where it lives, the configuration switches, how it was validated, and its limits. The Validation & known limits page lists every accuracy issue found during this documentation pass. The CLL + material model plan is the implementation plan and effort estimate you asked for. No code was changed.

Capability status

These are the requirements you stated, checked against the v2.7.5 source (not the older design notes). Status means what the shipped code does today.

RequirementStatusWhat existsWhat is missing / caveat
Train deep-RL modelsSupported Gymnasium env ArlamxV2Env (variants v3–v11, v10r6), SB3 PPO/SAC/TD3, VecNormalize, snapshots, sweeps, v12 wrapper backend, INT8 export. python main.py train. Policy observes plant truth (r, v, ω, σ, B); sensors feed only the torque KF. Step time ≈1.2 ms (v10).
Free-molecular-flow aerodynamics as a perturbationSupported Per-panel Sentman (default) with Moe & Moe energy accommodation. Optional Walker–CLL closed-form fit with a 7-species MSIS mixture. Force and torque enter the equations of motion every 2 s substep, with a co-rotating atmosphere and a wind hook. Accommodation is one global value, not per material. No self-shadowing or flow shielding between panels. CLL is the Walker fit, not the exact kernel (see the plan).
Solar radiation pressureSupported Per-panel optical plate law (absorbed / specular / diffuse), 1/d² scaling, force + moment, Earth IR + albedo, cylindrical eclipse. The default optics preset is al_mylar. One optical partition for the whole vehicle. No thermal re-emission force, no penumbra, no self-shadowing.
Gravity harmonics (“modal harmonics”)Supported GGM03S fully normalised spherical harmonics through degree 70 (presets: fast 2, standard 4, high 8), J2/J3 closed-form fallback, gravity-gradient torque. Earth rotation is GMST-only, with no precession, nutation or polar motion. This is consistent inside the plant.
Dynamic space weatherPartial NRLMSIS 2.1 / NRLMSISE-00 per advisor step at the geodetic point, with linear time interpolation over the step. F10.7/Ap are randomised per episode, plus 2–8 random step jumps (v10+). query_msis accepts a 7-element Ap history. No observed or forecast index files are replayed. The env passes a scalar Ap, so storm-time mode is unused in training. F10.7a is set equal to F10.7, and the v10 floor of F10.7 = 5 sfu is outside MSIS's physical range.
Moon third-body perturbation from an ephemeris filePartial Point-mass Sun + Moon third-body acceleration. CSPICE hook Simulator.load_spice(kernels) uses spkezr_c. The analytic Meeus Moon is the fallback. The current build has no CSPICE linked (CMake cache empty), and no YAML/env path calls load_spice. Lunisolar is on only in the high preset. The analytic Moon measured 0.25° mean / 0.44° max direction error and ≈3000 km range error. How to enable it.
Material-specific panels (diffuse / specular / absorbed, gas + light)Not yet Global optical presets (sail_optics.py) and global α values. The panel table (PanelSoA, .geom) has no material column. See the plan.

What the program is

C++ plant

cpp/ → python/arlamx_v2/arlamx_cpp*.so (pybind11). The Simulator class integrates translational + rotational state (r, v, MRP σ, ω) with classical RK4. Each call to step(q_cmd) advances one advisor step (300 s) in 2 s substeps.

Environment models

Sentman / Walker-CLL aero, optical-plate SRP, Earth IR + albedo, GGM03S gravity, Sun/Moon third body, WMM / tilted dipole field, gravity-gradient torque, MSIS atmosphere (Python side, pymsis).

Actuation & control

MRP or quaternion PD attitude law with per-axis torque clips. Magnetorquers (τ = m × B, 3-axis coils or N torque rods with least-squares allocation), B-dot detumble, flow-frame command holding, optional onboard-nav targets.

RL layer

ArlamxV2Env (Gymnasium) with power, sensors, torque Kalman filter, ground stations, membrane damage and weather jumps. Trained with SB3 PPO/SAC/TD3. Snapshots pin every setting for exact replay.

Quick start

mamba activate arlamx                 # or PY=~/miniforge3/envs/ThesisMS/bin/python
./build.sh                            # C++ plant -> python/arlamx_v2/arlamx_cpp*.so
python main.py test                   # 268 passed on 2026-09-30 (ThesisMS env)
python main.py verify                 # independent physics cross-check
python main.py train --network config/network_quick.yaml   # smoke training run
python main.py train --physics high --gsi cll              # CLL + lunisolar + degree 8
python main.py decay --kind both                           # prescribed min/max-drag decay

Site map