.. _program_listing_file_measurements_lander_measurements.h: Program Listing for File lander_measurements.h ============================================== |exhale_lsh| :ref:`Return to documentation for file ` (``measurements/lander_measurements.h``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp #pragma once #include #include "lupnt/core/definitions.h" #include "lupnt/measurements/measurement.h" #include "lupnt/measurements/measurement_utils.h" #include "lupnt/measurements/surface_measurements.h" namespace lupnt { constexpr int kLanderNavErrorStateSize = 17; // The lander reuses the surface IMU and LANS/LunaNet pseudorange measurement models: // - `SurfaceImuMeasurement` : body-frame accelerometer specific force + gyro angular rate. // - `SurfaceLansMeasurement`: one-way LunaNet (LANS) pseudorange from a relay satellite. // (see `lupnt/measurements/surface_measurements.h`). struct LanderAltimeterMeasurement : public ErrorStateMeasurement { struct Config { int i_dr = 0; }; double timestamp = 0.0; double altitude_m = 0.0; double sigma_m = 2.0; double predicted_altitude_m = 0.0; Vec3d h_pos = Vec3d::Zero(); Config config; double NoiseVariance() const { return sigma_m * sigma_m; } MeasData Compute(const NavErrorContext& nom, MatXd* H = nullptr) const override; }; struct LanderCraterMeasurement : public ErrorStateMeasurement { struct Config { int i_dr = 0; int i_dth = 6; }; double timestamp = 0.0; Vec3d r_crater = Vec3d::Zero(); Vec3d los_body = Vec3d::Zero(); double sigma_rad = 1.0e-3; std::string id; Config config; Vec3d PredictedLosBody(const Vec3d& r, const Mat3d& R_b2n) const; MeasData Compute(const NavErrorContext& nom, MatXd* H = nullptr) const override; }; } // namespace lupnt