Introducing LuPNT¶
LuPNT is an open-source C++/Python library for Lunar Positioning,
Navigation, and Timing (PNT) research. It provides high-fidelity astrodynamics,
signal-propagation models, measurement models, and navigation algorithms
tailored for cislunar missions. LuPNT is a product of the
Stanford NAV Lab.
The library is organized as a config-driven, agent-based simulation framework. Agents (satellites, ground stations, rovers, landers, surface stations, and constellations) host Applications — the mission and navigation-filter logic — and run together on a shared, event-scheduled Simulation. Agents, their devices, dynamics, and applications are all assembled from YAML configuration, so new scenarios are described in configuration rather than code. See How to Create a New Simulation for the architecture and the workflow for building a scenario.
Architecture at a glance¶
Module |
Description |
|---|---|
Agents & Applications |
Config-driven agents (satellite, ground station, rover, lander, surface station, constellation) that host navigation / mission Applications — ODTS, ISL, surface-rover and lander navigation, ephemeris / almanac generation — built from YAML via an asset factory. |
Simulations |
Event-scheduled |
Devices & sensors |
Clocks, IMUs, cameras, GNSS receivers, and communication devices attached to agents. |
Dynamics |
Two-body, N-body, and high-fidelity force models (gravity, drag, SRP) for Earth, lunar, and arbitrary central-body orbits (see Dynamics Models). |
Environment |
Gravity fields, atmosphere, solar-system bodies, occultation, and plasma / ionosphere models. |
Plasma |
GCPM v2.4 plasmasphere + IRI ionosphere electron density; GNSS
ray-tracing with TEC and signal delay for cislunar links (integrated
|
GNSS |
GPS/GNSS signal generation, SP3/ANTEX-backed constellations, yaw-steering / attitude models, and space-user ranging. |
Measurements |
Pseudorange, Doppler, and carrier-phase measurement models with light-time, Shapiro, and optional plasma corrections (see GNSS Measurement Model). |
Filters & States |
Extended Kalman Filter (EKF), Unscented Kalman Filter (UKF), square-root information filter (SRIF) / smoother, and batch least-squares estimators over composable state / joint-state abstractions (see Estimation Filters). |
Interfaces |
Data loaders and I/O: SP3, ANTEX, RINEX nav, TLE, SPICE kernels, EOP/TAI-UTC, LOLA DEM and crater data, plus Cesium and Matplotlib export. |
Conversions |
Reference-frame transformations (ECI, ECEF, LVLH, Moon-centered, generic body-fixed / inertial) and time-system utilities (see Frame Conversions). |
Numerics |
Numerical integration (RK4, RK8, RKF45), a Nelder-Mead optimizer, and matrix utilities (see Numerical Integration). |
Visualization |
Matplotlib / Plotly plotting plus interactive 3-D
CesiumJS scenes of
constellations and surface assets ( |
Python bindings |
Full |
Repository layout¶
cpp/lupnt— the C++ library source, organized by module (agents/,applications/,simulations/,devices/,dynamics/,environment/,measurements/,states/,interfaces/,conversions/,core/,numerics/).cpp/examples— C++ example programs, including the tutorial counterparts to the Python notebooks.python/pylupnt— the Python package (installed in place) and high-level utilities (plotting, interfaces, plasma).python/examples— the tutorial notebooks (ex1–ex16).configs— reusable YAML scenario configuration (agents, applications, dynamics, environments, datasets).projects— research workflows, notebooks, and scripts.data/LuPNT_data— runtime data (ephemeris, GNSS products, plasma coefficients, TLEs), fetched automatically on first build.docs— the Sphinx, Breathe, and Exhale documentation source.
Getting started¶
Install the Pixi environment (it manages the compiler toolchain, Python, and every C++ dependency via conda-forge) and build the project from the repository root:
pixi install
pixi run build # build the C++ library
pixi run build-py # build and deploy the Python bindings
The runtime dataset data/LuPNT_data (~650 MB) is downloaded automatically on
the first build. See Development with VSCode for the full setup, the VS Code
debugging workflow, and the Windows/WSL instructions, and Building Documentation for
building this documentation. The Tutorial section walks through the library
hands-on in both Python and
C++.