Program Listing for File lander_measurements.h

Return to documentation for file (measurements/lander_measurements.h)

#pragma once

#include <string>

#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