1#ifndef IMU_CALIBRATION_HPP
2#define IMU_CALIBRATION_HPP
120 const std::vector<double>& reference_rates = {});
128 const Eigen::Vector3d& reference_field);
159 void estimateBias(
const std::vector<RawReading>& readings);
162 const std::vector<double>& temperatures);
170 const std::vector<double>& reference_rates);
203 std::shared_ptr<IMUCalibration>
getCalibrator(SensorType type);
212 bool calibrateAll(
const std::vector<IMUCalibration::RawReading>& accel_readings,
213 const std::vector<IMUCalibration::RawReading>& gyro_readings,
214 const std::vector<IMUCalibration::RawReading>& mag_readings,
215 const Eigen::Vector3d& reference_magnetic_field);
std::shared_ptr< IMUCalibration > gyro_calibrator_
std::shared_ptr< IMUCalibration > mag_calibrator_
std::shared_ptr< IMUCalibration > getCalibrator(SensorType type)
Get calibrator for specific sensor.
CalibrationStatus getStatus() const
std::shared_ptr< IMUCalibration > accel_calibrator_
bool calibrateAll(const std::vector< IMUCalibration::RawReading > &accel_readings, const std::vector< IMUCalibration::RawReading > &gyro_readings, const std::vector< IMUCalibration::RawReading > &mag_readings, const Eigen::Vector3d &reference_magnetic_field)
Calibrate all sensors.
CalibratedIMU calibrateIMU(const IMUCalibration::RawReading &accel, const IMUCalibration::RawReading &gyro, const IMUCalibration::RawReading &mag) const
bool calibrate()
Perform calibration.
void reset()
Reset calibration.
CalibrationParams params_
bool calibrateMagEllipsoidFit(const std::vector< RawReading > &readings)
void estimateBias(const std::vector< RawReading > &readings)
void estimateScaleAndMisalignment(const std::vector< CalibrationPoint > &points)
double computeCalibrationQuality() const
std::vector< CalibrationPoint > calibration_data_
CalibrationStatus
Calibration status.
IMUCalibration(SensorType type)
bool calibrateGyroZeroVelocity(const std::vector< RawReading > &readings)
bool calibrateMagnetometer(const std::vector< RawReading > &readings, const Eigen::Vector3d &reference_field)
Calibrate magnetometer using known field.
std::vector< RawReading > recent_readings_
bool calibrateGyroscope(const std::vector< RawReading > &readings, const std::vector< double > &reference_rates={})
Calibrate gyroscope using rotation rates.
CalibratedReading calibrateReading(const RawReading &raw) const
Apply calibration to raw reading.
bool detectDrift(const RawReading &reading) const
CalibrationParams getCalibrationParams() const
Get calibration parameters.
void estimateTemperatureCoeff(const std::vector< RawReading > &readings, const std::vector< double > &temperatures)
CalibrationStatus status_
static constexpr size_t MAX_RECENT_READINGS
CalibrationStatus getStatus() const
Get calibration status.
bool calibrateAccelStatic(const std::vector< RawReading > &readings)
void initialize(const CalibrationParams &initial_params=CalibrationParams{})
Initialize calibration.
bool calibrateGyroRotation(const std::vector< RawReading > &readings, const std::vector< double > &reference_rates)
bool calibrateAccelerometer(const std::vector< RawReading > &readings)
Calibrate accelerometer using static positions.
void addCalibrationPoint(const CalibrationPoint &point)
Add calibration data point.
bool isValid() const
Check if calibration is valid.
Output smoothing for calibrated PT pressure, per sensor uid (ESP32 and LabJack T7 alike).
Motorized ball valve position: raw ADC counts -> % open.
Apply calibration to IMU reading.
IMUCalibration::CalibratedReading accelerometer
IMUCalibration::CalibratedReading gyroscope
IMUCalibration::CalibratedReading magnetometer
Get calibration status for all sensors.
IMUCalibration::CalibrationStatus gyro
IMUCalibration::CalibrationStatus accel
IMUCalibration::CalibrationStatus mag
Eigen::Matrix3d covariance
double calibration_quality
Eigen::Matrix3d scale_matrix
Eigen::Matrix3d misalignment
double reference_temperature
double reference_uncertainty
Eigen::Vector3d reference
std::chrono::steady_clock::time_point timestamp