pylupnt.LanderNavApp

class pylupnt.LanderNavApp

Strapdown-INS multiplicative EKF (MEKF) for a lunar lander on powered descent, fusing a full IMU, radar altimeter, crater-landmark bearings, and LunaNet (LANS) pseudoranges, with the IMU biases estimated online. Hosted on a Lander agent as its Application.

accel_bias_err(self: pylupnt._pylupnt.LanderNavApp) Annotated[numpy.typing.NDArray[numpy.float64], '[m, n]']

[N x 3] (truth - est) accelerometer bias [m/s^2]

accel_bias_sigma(self: pylupnt._pylupnt.LanderNavApp) Annotated[numpy.typing.NDArray[numpy.float64], '[m, n]']

[N x 3] accelerometer-bias 1-sigma [m/s^2]

alt_est(self: pylupnt._pylupnt.LanderNavApp) Annotated[numpy.typing.NDArray[numpy.float64], '[m, 1]']

[N] estimated height above terrain [m]

alt_truth(self: pylupnt._pylupnt.LanderNavApp) Annotated[numpy.typing.NDArray[numpy.float64], '[m, 1]']

[N] truth height above terrain [m]

att_err_deg(self: pylupnt._pylupnt.LanderNavApp) Annotated[numpy.typing.NDArray[numpy.float64], '[m, n]']

[N x 3] attitude error (rotation vector) [deg]

att_quat_est(self: pylupnt._pylupnt.LanderNavApp) Annotated[numpy.typing.NDArray[numpy.float64], '[m, n]']

[N x 4] estimated body-to-nav attitude quaternion [w,x,y,z] (MEKF)

att_sigma_deg(self: pylupnt._pylupnt.LanderNavApp) Annotated[numpy.typing.NDArray[numpy.float64], '[m, n]']

[N x 3] attitude 1-sigma [deg]

clock_bias_err(self: pylupnt._pylupnt.LanderNavApp) Annotated[numpy.typing.NDArray[numpy.float64], '[m, 1]']

[N] clock-bias error [s]

clock_bias_sigma(self: pylupnt._pylupnt.LanderNavApp) Annotated[numpy.typing.NDArray[numpy.float64], '[m, 1]']

[N] clock-bias 1-sigma [s]

crater_enu(self: pylupnt._pylupnt.LanderNavApp) Annotated[numpy.typing.NDArray[numpy.float64], '[m, n]']

[M x 2] crater (East, North) [m]

dem_elevation(self: pylupnt._pylupnt.LanderNavApp) Annotated[numpy.typing.NDArray[numpy.float64], '[m, n]']

Terrain DEM elevation grid [m]

dem_x(self: pylupnt._pylupnt.LanderNavApp) Annotated[numpy.typing.NDArray[numpy.float64], '[m, n]']

Terrain DEM grid x coordinates (native projected meters)

dem_y(self: pylupnt._pylupnt.LanderNavApp) Annotated[numpy.typing.NDArray[numpy.float64], '[m, n]']

Terrain DEM grid y coordinates (native projected meters)

get_agent(self: pylupnt._pylupnt.Application) lupnt::Agent

The Agent that hosts this application (set by the simulation before Setup()).

get_frequency(self: pylupnt._pylupnt.Application) float

Step() call frequency [Hz]

get_name(self: pylupnt._pylupnt.Application) str

This application’s name

gyro_bias_err(self: pylupnt._pylupnt.LanderNavApp) Annotated[numpy.typing.NDArray[numpy.float64], '[m, n]']

[N x 3] (truth - est) gyroscope bias [rad/s]

gyro_bias_sigma(self: pylupnt._pylupnt.LanderNavApp) Annotated[numpy.typing.NDArray[numpy.float64], '[m, n]']

[N x 3] gyroscope-bias 1-sigma [rad/s]

log(self: pylupnt._pylupnt.Application, t: Real) None

Base Log at simulation time t [s] (emits a debug message; override in a subclass).

n_craters(self: pylupnt._pylupnt.LanderNavApp) Annotated[numpy.typing.NDArray[numpy.int32], '[m, 1]']

[N] number of tracked crater landmarks

n_visible_sat(self: pylupnt._pylupnt.LanderNavApp) Annotated[numpy.typing.NDArray[numpy.int32], '[m, 1]']

[N] number of visible LunaNet satellites

pos_err_enu(self: pylupnt._pylupnt.LanderNavApp) Annotated[numpy.typing.NDArray[numpy.float64], '[m, n]']

[N x 3] (truth - est) position error in ENU [m]

pos_err_norm(self: pylupnt._pylupnt.LanderNavApp) Annotated[numpy.typing.NDArray[numpy.float64], '[m, 1]']

[N] 3D position error magnitude [m]

pos_sigma_enu(self: pylupnt._pylupnt.LanderNavApp) Annotated[numpy.typing.NDArray[numpy.float64], '[m, n]']

[N x 3] 1-sigma position uncertainty in ENU [m]

satellite_names(self: pylupnt._pylupnt.LanderNavApp) list[str]

Names of the LunaNet relay satellites

set_frequency(self: pylupnt._pylupnt.Application, frequency: SupportsFloat | SupportsIndex) None

Set the Step() call frequency [Hz] used by setup() to schedule steps

set_name(self: pylupnt._pylupnt.Application, name: str) None

Set this application’s name

setup(self: pylupnt._pylupnt.Application) None

Base Setup: schedules Step() at get_frequency() Hz. Call via super().setup() from a Python subclass to keep that scheduling.

site_id(self: pylupnt._pylupnt.LanderNavApp) str

Landing-site identifier

site_name(self: pylupnt._pylupnt.LanderNavApp) str

Landing-site name

time_s(self: pylupnt._pylupnt.LanderNavApp) Annotated[numpy.typing.NDArray[numpy.float64], '[m, 1]']

[N] epoch times [s]

traj_enu_est(self: pylupnt._pylupnt.LanderNavApp) Annotated[numpy.typing.NDArray[numpy.float64], '[m, n]']

[N x 3] estimated (East, North, Up) [m]

traj_enu_truth(self: pylupnt._pylupnt.LanderNavApp) Annotated[numpy.typing.NDArray[numpy.float64], '[m, n]']

[N x 3] truth (East, North, Up) [m]

vel_err_norm(self: pylupnt._pylupnt.LanderNavApp) Annotated[numpy.typing.NDArray[numpy.float64], '[m, 1]']

[N] 3D velocity error magnitude [m/s]