Vulcan
Aerospace Engineering Utilities Built on Janus
Loading...
Searching...
No Matches
EstimationTypes.hpp
Go to the documentation of this file.
1// Estimation Types - Common types for Kalman filter implementations
2// Part of Vulcan - Aerospace Engineering Utilities
3#pragma once
4
5#include <Eigen/Dense>
6#include <janus/janus.hpp>
7
9
10// =============================================================================
11// Filter State Container
12// =============================================================================
13
20template <typename Scalar, int N> struct FilterState {
21 Eigen::Matrix<Scalar, N, 1> x;
22 Eigen::Matrix<Scalar, N, N> P;
23
26 : x(Eigen::Matrix<Scalar, N, 1>::Zero()),
27 P(Eigen::Matrix<Scalar, N, N>::Identity()) {}
28
30 FilterState(const Eigen::Matrix<Scalar, N, 1> &state,
31 const Eigen::Matrix<Scalar, N, N> &covariance)
32 : x(state), P(covariance) {}
33};
34
35// =============================================================================
36// Noise Specifications
37// =============================================================================
38
46template <int N> struct ProcessNoise {
47 Eigen::Matrix<double, N, N> Q;
48
50 ProcessNoise() : Q(Eigen::Matrix<double, N, N>::Zero()) {}
51
53 explicit ProcessNoise(const Eigen::Matrix<double, N, N> &covariance)
54 : Q(covariance) {}
55
57 static ProcessNoise<N>
58 diagonal(const Eigen::Matrix<double, N, 1> &variances) {
59 ProcessNoise<N> noise;
60 noise.Q = variances.asDiagonal();
61 return noise;
62 }
63
65 static ProcessNoise<N> scalar(double variance) {
66 ProcessNoise<N> noise;
67 noise.Q = Eigen::Matrix<double, N, N>::Identity() * variance;
68 return noise;
69 }
70};
71
79template <int M> struct MeasurementNoise {
80 Eigen::Matrix<double, M, M> R;
81
83 MeasurementNoise() : R(Eigen::Matrix<double, M, M>::Zero()) {}
84
86 explicit MeasurementNoise(const Eigen::Matrix<double, M, M> &covariance)
87 : R(covariance) {}
88
91 diagonal(const Eigen::Matrix<double, M, 1> &variances) {
93 noise.R = variances.asDiagonal();
94 return noise;
95 }
96
98 static MeasurementNoise<M> scalar(double variance) {
100 noise.R = Eigen::Matrix<double, M, M>::Identity() * variance;
101 return noise;
102 }
103};
104
105} // namespace vulcan::estimation
Definition EstimationTypes.hpp:8
janus::JanusMatrix< Scalar > Matrix
Dynamic-size matrix template (use with Scalar = double or SymbolicScalar).
Definition VulcanTypes.hpp:27
Eigen::Matrix< Scalar, N, 1 > x
State estimate.
Definition EstimationTypes.hpp:21
Eigen::Matrix< Scalar, N, N > P
State covariance.
Definition EstimationTypes.hpp:22
FilterState(const Eigen::Matrix< Scalar, N, 1 > &state, const Eigen::Matrix< Scalar, N, N > &covariance)
Constructor with state and covariance.
Definition EstimationTypes.hpp:30
FilterState()
Default constructor - zero-initializes state, identity covariance.
Definition EstimationTypes.hpp:25
Measurement noise specification.
Definition EstimationTypes.hpp:79
MeasurementNoise()
Default constructor - zero noise.
Definition EstimationTypes.hpp:83
static MeasurementNoise< M > scalar(double variance)
Create scalar (isotropic) measurement noise.
Definition EstimationTypes.hpp:98
MeasurementNoise(const Eigen::Matrix< double, M, M > &covariance)
Constructor with covariance matrix.
Definition EstimationTypes.hpp:86
static MeasurementNoise< M > diagonal(const Eigen::Matrix< double, M, 1 > &variances)
Create diagonal measurement noise from variance vector.
Definition EstimationTypes.hpp:91
Eigen::Matrix< double, M, M > R
Measurement noise covariance.
Definition EstimationTypes.hpp:80
Process noise specification.
Definition EstimationTypes.hpp:46
ProcessNoise()
Default constructor - zero noise.
Definition EstimationTypes.hpp:50
ProcessNoise(const Eigen::Matrix< double, N, N > &covariance)
Constructor with covariance matrix.
Definition EstimationTypes.hpp:53
static ProcessNoise< N > scalar(double variance)
Create scalar (isotropic) process noise.
Definition EstimationTypes.hpp:65
Eigen::Matrix< double, N, N > Q
Process noise covariance.
Definition EstimationTypes.hpp:47
static ProcessNoise< N > diagonal(const Eigen::Matrix< double, N, 1 > &variances)
Create diagonal process noise from variance vector.
Definition EstimationTypes.hpp:58