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