33 #ifndef INCLUDED_FlexibleUnscentedCorrect_h_GUID_21E01E3B_5BD0_4F85_3B75_BBF6C657DBB4 34 #define INCLUDED_FlexibleUnscentedCorrect_h_GUID_21E01E3B_5BD0_4F85_3B75_BBF6C657DBB4 48 template <
typename State,
typename Measurement>
74 SigmaPointsGen::NumSigmaPoints;
78 using TransformedSigmaPointsMat =
84 State &s, Measurement &m,
86 : state(s), measurement(m),
88 getAugmentedStateCov(s, m), params),
91 reconstruction(sigmaPoints, transformedPoints),
93 state, measurement, reconstruction)),
98 deltaz(measurement.getResidual(reconstruction.getMean(), state)),
100 stateCorrection(K *
deltaz),
103 computeStateCorrection(reconstruction,
deltaz, PvvDecomp)),
105 stateCorrectionFinite(stateCorrection.array().allFinite()) {
109 Measurement
const &m) {
127 static TransformedSigmaPointsMat
130 TransformedSigmaPointsMat ret;
132 for (std::size_t i = 0; i < NumSigmaPoints; ++i) {
134 ret.col(i) = meas.predictMeasurement(tempS);
140 computeInnovationCovariance(
State const &s, Measurement &meas,
142 return recon.getCov() + meas.getCovariance(s);
154 GainMatrix ret = Pvv.transpose().ldlt().solve(recon.getCrossCov());
158 static StateVec computeStateCorrection(
161 StateVec ret = recon.getCrossCov() * pvvDecomp.
solve(deltaz);
191 reconstruction.getCrossCov() *
192 PvvDecomp.solve(MeasurementSquareMatrix::Identity()) *
193 reconstruction.getCrossCov().transpose();
195 bool finite = newP.array().allFinite();
196 if (cancelIfNotFinite && !finite) {
202 state.setErrorCovariance(newP);
210 Measurement &measurement;
212 TransformedSigmaPointsMat transformedPoints;
223 bool stateCorrectionFinite;
225 template <
typename State,
typename Measurement>
227 beginUnscentedCorrection(
228 State &s, Measurement &m,
235 #endif // INCLUDED_FlexibleUnscentedCorrect_h_GUID_21E01E3B_5BD0_4F85_3B75_BBF6C657DBB4 Robust Cholesky decomposition of a matrix with pivoting.
Definition: LDLT.h:48
static AugmentedStateVec getAugmentedStateVec(State const &s, Measurement const &m)
Definition: FlexibleUnscentedCorrect.h:108
static TransformedSigmaPointsMat transformSigmaPoints(State const &s, Measurement &meas, SigmaPointsGen const &sigmaPoints)
Transforms sigma points by having the measurement class compute the estimated measurement for a state...
Definition: FlexibleUnscentedCorrect.h:128
typename detail::Dimension_impl< T >::type Dimension
Given a state or measurement, get the dimension as a std::integral_constant.
Definition: FlexibleKalmanBase.h:87
const internal::solve_retval< LDLT, Rhs > solve(const MatrixBase< Rhs > &b) const
Definition: LDLT.h:186
The main namespace for all C++ elements of the framework, internal and external.
Definition: namespace_osvr.dox:3
static const types::DimensionType AugmentedStateDim
state augmented with measurement noise mean
Definition: FlexibleUnscentedCorrect.h:67
StateVector const & stateVector() const
xhat
Definition: PoseState.h:177
MeasurementSquareMatrix innovationCovariance
aka Pvv
Definition: FlexibleUnscentedCorrect.h:215
types::Vector< m > deltaz
reconstructed mean measurement residual/delta z/innovation
Definition: FlexibleUnscentedCorrect.h:221
StateSquareMatrix const & errorCovariance() const
P.
Definition: PoseState.h:183
Definition: PoseState.h:164
bool finishCorrection(bool cancelIfNotFinite=true)
Finish computing the rest and correct the state.
Definition: FlexibleUnscentedCorrect.h:170
std::size_t DimensionType
Type for dimensions.
Definition: FlexibleKalmanBase.h:51
The matrix class, also used for vectors and row-vectors.
Definition: Matrix.h:127
void setStateVector(StateVector const &state)
set xhat
Definition: PoseState.h:175
Definition: FlexibleUnscentedCorrect.h:49
For further details on the scaling factors, refer to: Julier, S.
Definition: SigmaPointGenerator.h:49