Struct SurfaceNavConfig

Struct Documentation

struct SurfaceNavConfig

Scenario configuration for the surface-rover navigation application: a lunar-surface rover fusing a full IMU (accelerometer + gyroscope, Kalibr noise model), LCRNS (LANS) pseudoranges, and a DEM altitude constraint, with the IMU biases estimated online.

The rover truth path is defined in the local East-North-Up tangent plane centered on the World’s DEM site; its Up coordinate follows the loaded DEM terrain. The body frame is x=forward (heading), y=left, z=up. LCRNS satellites are propagated as Keplerian orbits app-internally and their geometry is evaluated in the Moon-fixed frame. The site / DEM itself is owned by the shared World (world: config block), not by this struct.

Public Members

int seed = 42
std::string start_epoch_utc = "2027-03-01T00:00:00"
double duration_s = 1800.0

total arc [s].

double dt_s = 1.0

IMU / filter / measurement step [s].

double site_lat_deg = -89.45

query latitude [deg] (default Site01).

double site_lon_deg = 222.8

query east longitude [deg].

double dem_half_width_m = 4000.0

half-width of the DEM crop window [m].

double dem_max_res_m = 20.0

DEM downsample target spacing / slope FD step [m].

double rover_start_east_m = 0.0

start East offset from tile center [m].

double rover_start_north_m = -250.0

start North offset from tile center [m].

double rover_speed_mps = 2.0

horizontal ground speed [m/s].

double rover_heading_deg = 0.0

initial heading (0=E, 90=N) [deg].

double rover_turn_rate_dps = 0.6

constant heading rate [deg/s].

double rover_weave_amplitude_deg = 0.0

serpentine heading-weave amplitude [deg] (0=off).

double rover_weave_period_s = 300.0

serpentine heading-weave period [s].

double rover_clock_bias_s = 1.0e-6

truth rover clock bias at t0 [s].

double rover_clock_drift_sps = 1.0e-11

truth rover clock drift [s/s].

double accel_noise_density = 3.4e-4

accel white noise [m/s^2 / sqrt(Hz)].

double accel_bias_rw = 1.0e-4

accel bias random walk [m/s^3 / sqrt(Hz)].

double gyro_noise_density = 3.4e-6

gyro white noise [rad/s / sqrt(Hz)].

double gyro_bias_rw = 1.0e-6

gyro bias random walk [rad/s^2 / sqrt(Hz)].

double accel_bias0 = 1.0e-2

truth initial accel bias 1-sigma/axis [m/s^2].

double gyro_bias0 = 5.0e-4

truth initial gyro bias 1-sigma/axis [rad/s].

std::string constellation_name

Name of a LunarNavConstellation agent in the scenario to source the relay-satellite truth states from. When set, the app queries that agent each epoch instead of propagating the relays itself (satellites is then unused / a legacy fallback).

std::vector<LcrnsSatConfig> satellites

legacy in-app relay list (if no constellation).

double elevation_mask_deg = 5.0

local-horizon mask for visibility [deg].

double pseudorange_sigma_m = 1.0

receiver pseudorange noise 1-sigma [m].

double sise_m = 3.0

per-satellite signal-in-space error 1-sigma [m].

double init_pos_sigma_m = 50.0
double init_vel_sigma_mps = 0.1
double init_att_sigma_deg = 2.0

initial attitude uncertainty [deg].

double init_accel_bias_sigma = 2.0e-2

initial accel-bias uncertainty [m/s^2].

double init_gyro_bias_sigma = 1.0e-3

initial gyro-bias uncertainty [rad/s].

double init_clock_bias_sigma_s = 1.0e-6
double init_clock_drift_sigma_sps = 1.0e-9
double dem_sigma_m = 5.0

DEM constraint pseudo-measurement 1-sigma [m].

double filter_bias_rw_scale = 3.0

Scale applied to the filter’s IMU bias random-walk densities relative to the truth values (>= 1). A modest inflation keeps the EKF consistent in weakly-observable yaw / horizontal-accel-bias directions of a slow surface rover.

bool enable_dem_constraint = true