Class IslCrosslinkMeasurement¶
Defined in File crosslink_measurement.h
Nested Relationships¶
Nested Types¶
Inheritance Relationships¶
Base Type¶
public lupnt::MeasurementClone< IslCrosslinkMeasurement >(Template Class MeasurementClone)
Class Documentation¶
-
class IslCrosslinkMeasurement : public lupnt::MeasurementClone<IslCrosslinkMeasurement>¶
Two-way inter-satellite crosslink range/range-rate (+ optional one-way pseudorange to a known-position transmitter) measurement model for a hub satellite.
The filter state stacks one
[r(3), v(3), clock_bias, clock_drift]block per satellite (Config::sub_state_size): block 0 is the hub, blocks1..n_linksare the linked satellites. The model produces, per epoch:2 * n_linksclock-independent two-way crosslink rows[range, range-rate](RangeAndRangeRatebetween the hub and each linked block), followed byone one-way pseudorange row per known-position anchor transmitter (e.g. a lunar surface station with a known clock),
|r_hub - r_anchor| + C * b_hub.
The Jacobian is taken by autodiff directly on the raw state (not on a reconstructed
State), matching the deliberate workaround that keeps the derivative seeds intact for theSchmidtEKFupdate. This model was previously implemented inline inIslOdtsApp; it now lives here so the application only stages data and wires the model.Public Functions
-
IslCrosslinkMeasurement() = default¶
-
virtual MeasData Compute(const State &x, MatXd *H = nullptr) const override¶
Predict the measurement
z = h(x), its noise covarianceR, and (ifH != nullptr) the measurement JacobianH = dh/dxsizedn_z x x.size().- Parameters:
x – Estimation state.
H – [out] If non-null, filled with the measurement Jacobian; if null, only the value and covariance are computed.
- Returns:
MeasDatawithvalue = zandcovariance = R.
-
struct Config¶
Configuration + per-epoch geometry for the combined crosslink/GPS model.
Public Members
-
int sub_state_size = 8¶
per-satellite state block size
[r,v,cb,cd]
-
int n_links = 0¶
number of two-way crosslinks (hub <-> linked sat i)
-
int idx_position = 0¶
hub position offset within its state block
-
int idx_velocity = 3¶
hub velocity offset
-
int idx_clock_bias = 6¶
hub clock-bias offset (for the pseudorange rows)
-
int idx_clock_drift = 7¶
hub clock-drift offset (for the anchor Doppler rows)
-
std::vector<Vec3d> anchor_pos_mci¶
Known-position anchor transmitter positions [m], hub Moon-centered inertial frame (
Frame::MOON_CI), e.g. a lunar surface station; empty for a crosslink-only update.
-
std::vector<Vec3d> anchor_vel_mci¶
Anchor inertial velocities [m/s],
Frame::MOON_CI(parallel toanchor_pos_mci), required only wheninclude_anchor_doppleris set.
-
double sigma_range_m = 1.0¶
two-way crosslink range noise 1-sigma [m]
-
double sigma_range_rate_mps = 1.0e-3¶
crosslink range-rate noise 1-sigma [m/s]
-
double sigma_pseudorange_m = 200.0¶
one-way anchor pseudorange noise 1-sigma [m]
-
bool include_anchor_doppler = false¶
When true, each anchor also yields a one-way Doppler (pseudorange-rate) row,
u . (v_hub - v_anchor) + C * clock_drift_hub(u= line of sight), appended after all anchor pseudorange rows. Adds velocity + clock-drift observability.
-
double sigma_anchor_doppler_mps = 1.0e-3¶
one-way anchor Doppler noise 1-sigma [m/s]
-
bool include_time_transfer = false¶
When true, each two-way crosslink also yields a two-way time-transfer row: the clock-bias difference
C * (b_hub - b_link_i)between the two endpoints. Two-way ranging cancels the clocks (its sum-of-one-ways gives range), whereas the difference of the same two one-way exchanges recovers the relative clock offset. These rows are appended after the anchor pseudorange rows.
-
double sigma_time_transfer_m = 1.0¶
two-way time-transfer noise 1-sigma [m]
-
bool include_frequency_transfer = false¶
When true, each crosslink also yields a two-way frequency-transfer row: the range-rate-equivalent clock-*drift* difference
C * (d_hub - d_link_i), appended after the time-transfer rows. This is the rate companion to the time transfer and makes the endpoints’ relative clock drift directly observable.
-
double sigma_frequency_transfer_mps = 1.0e-3¶
frequency-transfer noise 1-sigma [m/s]
-
int sub_state_size = 8¶