0.4.1
Loading...
Searching...
No Matches
BsplineKF.hpp
Go to the documentation of this file.
1// This file is part of INSTINCT, the INS Toolkit for Integrated
2// Navigation Concepts and Training by the Institute of Navigation of
3// the University of Stuttgart, Germany.
4//
5// This Source Code Form is subject to the terms of the Mozilla Public
6// License, v. 2.0. If a copy of the MPL was not distributed with this
7// file, You can obtain one at https://mozilla.org/MPL/2.0/.
8
9/// @file BsplineKF.hpp
10/// @brief Kalman filter matrices for the B-spline Multi-IMU fusion
11/// @author M. Maier (marcel.maier@ins.uni-stuttgart.de)
12/// @date 2024-04-02
13
14#pragma once
15
16#include "util/Eigen.hpp"
17#include "../PinData.hpp"
19
20#include <vector>
21
23{
24/// @brief Initial error covariance matrix P_0
25/// @param[in] initCovariances Initial covariances of the states
26/// @param[in] numStates Number of KF states
27/// @param[in] imuCharacteristicsIdentical If the multiple IMUs have the same characteristics, GUI input cells can be reduced considerably
28/// @return The initial P matrix, i.e. P_0, which contains the initial state variances (numStates) x (numStates)
29[[nodiscard]] Eigen::MatrixXd initialErrorCovarianceMatrix_P0(const std::vector<Eigen::VectorXd>& initCovariances, const uint8_t& numStates, const bool& imuCharacteristicsIdentical = false);
30
31/// @brief Calculates the process noise matrix Q
32/// @param[in] Q Process noise matrix of the previous time step
33/// @param[in] dt Time difference between two successive measurements
34/// @param[in] processNoiseVariances Vector that contains the variances for each state's process noise
35/// @param[in] numStates Number of KF states
36/// @param[in] imuCharacteristicsIdentical If the multiple IMUs have the same characteristics, GUI input cells can be reduced considerably
37void processNoiseMatrix_Q(Eigen::MatrixXd& Q, const double& dt, const std::vector<Eigen::VectorXd>& processNoiseVariances, const uint8_t& numStates, const bool& imuCharacteristicsIdentical = false);
38
39/// @brief Rotates the B-spline coefficient states in the state vector x, once a new B-spline is introduced
40/// @param[in] x Old state vector
41void rotateCoeffStates(Eigen::MatrixXd& x);
42
43/// @brief Rotates the B-spline coefficient error covariances in P, once a new B-spline is introduced
44/// @param[in] P Old error covariance matrix
45/// @param[in] numStates Number of states of the B-spline KF
46/// @param[in] sigmaScalingFactorAngRate Scaling factor relating the error covariance of the newly introduced B-spline coefficients for angular rate to their old error covariance
47/// @param[in] sigmaScalingFactorAccel Scaling factor relating the error covariance of the newly introduced B-spline coefficients for acceleration to their old error covariance
48void rotateErrorCovariances(Eigen::MatrixXd& P,
49 uint8_t& numStates,
50 const double& sigmaScalingFactorAngRate = 3.0,
51 const double& sigmaScalingFactorAccel = 3.0);
52
53/// @brief Calculates the design matrix H
54/// @param[in] ti Current point in time
55/// @param[in] splineSpacing distance - in time - between two splines of the stacked B-spline
56/// @param[in] DCM_accel Rotation matrix of mounting angles of an accelerometer w.r.t. a common reference
57/// @param[in] DCM_gyro Rotation matrix of mounting angles of a gyroscope w.r.t. a common reference
58/// @param[in] pinIndex Index of pin to identify sensor
59/// @param[in] numMeasurements Number of measurements
60/// @param[in] numStates Number of KF states
61/// @param[in] numStatesEst Number of estimated states (depends on imuFusionType)
62/// @param[in] numStatesPerPin Number of states per pin (biases of accel and gyro)
63/// @return Design matrix H
64[[nodiscard]] Eigen::MatrixXd designMatrix_H(const double& ti,
65 const double& splineSpacing,
66 const Eigen::Matrix3d& DCM_accel,
67 const Eigen::Matrix3d& DCM_gyro,
68 const size_t& pinIndex,
69 const uint8_t& numMeasurements,
70 const uint8_t& numStates,
71 const uint8_t& numStatesEst,
72 const uint8_t& numStatesPerPin);
73
74/// @brief Initializes the BsplineKF manually (i.e. using GUI inputs instead of averaging)
75/// @param[in] numInputPins Number of input pins of the IMU fusion node
76/// @param[in] pinData pin data (i.e. GUI settings for the BsplineKF with manual initialization)
77/// @param[in] pinDataBsplineKF pin data specific to the B-spline-KF
78/// @param[in] numStates Number of states of the BsplineKF
79/// @param[in] dtInit Initial value for dt (discrete state transition time)
80/// @param[in] processNoiseVariances Container for process noise of each state
81/// @param[in] kalmanFilter Initial BsplineKF object, which has the size defined in the GUI (numStates and numMeasurements)
82/// @param[in] imuCharacteristicsIdentical If the multiple IMUs have the same characteristics, GUI input cells can be reduced considerably
83/// @param[in] imuBiasesIdentical If the multiple IMUs have the same characteristics, GUI input cells can be reduced considerably
84/// @return Initialized BsplineKF object
85KalmanFilter initializeKalmanFilterManually(const size_t& numInputPins,
86 const std::vector<PinData>& pinData,
87 const PinDataBsplineKF& pinDataBsplineKF,
88 const uint8_t& numStates,
89 const double& dtInit,
90 std::vector<Eigen::VectorXd>& processNoiseVariances,
91 KalmanFilter& kalmanFilter,
92 const bool& imuCharacteristicsIdentical,
93 const bool& imuBiasesIdentical);
94
95} // namespace NAV::BsplineKF
Vector space operations.
Generalized Kalman Filter class.
Information about a sensor which is connected to a certain pin.
Generalized Kalman Filter class.
void rotateErrorCovariances(Eigen::MatrixXd &P, uint8_t &numStates, const double &sigmaScalingFactorAngRate=3.0, const double &sigmaScalingFactorAccel=3.0)
Rotates the B-spline coefficient error covariances in P, once a new B-spline is introduced.
Definition BsplineKF.cpp:62
void processNoiseMatrix_Q(Eigen::MatrixXd &Q, const double &dt, const std::vector< Eigen::VectorXd > &processNoiseVariances, const uint8_t &numStates, const bool &imuCharacteristicsIdentical=false)
Calculates the process noise matrix Q.
Definition BsplineKF.cpp:38
void rotateCoeffStates(Eigen::MatrixXd &x)
Rotates the B-spline coefficient states in the state vector x, once a new B-spline is introduced.
Definition BsplineKF.cpp:56
KalmanFilter initializeKalmanFilterManually(const size_t &numInputPins, const std::vector< PinData > &pinData, const PinDataBsplineKF &pinDataBsplineKF, const uint8_t &numStates, const double &dtInit, std::vector< Eigen::VectorXd > &processNoiseVariances, KalmanFilter &kalmanFilter, const bool &imuCharacteristicsIdentical, const bool &imuBiasesIdentical)
Initializes the BsplineKF manually (i.e. using GUI inputs instead of averaging)
Eigen::MatrixXd initialErrorCovarianceMatrix_P0(const std::vector< Eigen::VectorXd > &initCovariances, const uint8_t &numStates, const bool &imuCharacteristicsIdentical=false)
Initial error covariance matrix P_0.
Definition BsplineKF.cpp:16
Eigen::MatrixXd designMatrix_H(const double &ti, const double &splineSpacing, const Eigen::Matrix3d &DCM_accel, const Eigen::Matrix3d &DCM_gyro, const size_t &pinIndex, const uint8_t &numMeasurements, const uint8_t &numStates, const uint8_t &numStatesEst, const uint8_t &numStatesPerPin)
Calculates the design matrix H.
Definition BsplineKF.cpp:91
Sensor information specific to the Bspline-KF.
Definition PinData.hpp:179