25 #ifndef INCLUDED_StateHistory_h_GUID_07D9DAEE_6733_46AA_772C_43A51B2BAC10
26 #define INCLUDED_StateHistory_h_GUID_07D9DAEE_6733_46AA_772C_43A51B2BAC10
38 #include <type_traits>
42 namespace pose_externalized_rotation {
46 namespace orient_externalized_rotation {
59 template <
typename StateType>
63 kalman::pose_externalized_rotation::State> : std::true_type {};
66 kalman::orient_externalized_rotation::State> : std::true_type {};
78 using StateVectorBackup =
79 std::array<kalman::types::Scalar, StateDim::value>;
80 using StateCovarianceBackup =
82 StateDim::value * StateDim::value>;
87 StateVec::Map(m_stateVector.data()) = state.stateVector();
88 StateMatrix::Map(m_covariance.data()) = state.errorCovariance();
91 void restore(State &state)
const {
92 state.setStateVector(StateVec::Map(m_stateVector.data()));
93 state.setErrorCovariance(StateMatrix::Map(m_covariance.data()));
98 StateVectorBackup m_stateVector;
99 StateCovarianceBackup m_covariance;
101 struct NoExternalState;
102 struct HasExternalQuaternion;
104 template <
typename State>
105 using StateHistoryEntryTagSelector =
typename std::conditional<
106 detail::StateHasExternalQuaternion<State>::value,
107 HasExternalQuaternion, NoExternalState>::type;
114 template <
typename State,
115 typename Tag = detail::StateHistoryEntryTagSelector<State>>
123 template <
typename State>
130 Eigen::Vector4d::Map(m_quatBackup.data()) =
131 state.getQuaternion().coeffs();
135 m_baseEntry.restore(state);
137 Eigen::Quaterniond quat;
138 quat.coeffs() = Eigen::Vector4d::Map(m_quatBackup.data());
139 state.setQuaternion(quat);
143 BaseEntry m_baseEntry;
144 std::array<kalman::types::Scalar, 4> m_quatBackup;
149 #endif // INCLUDED_StateHistory_h_GUID_07D9DAEE_6733_46AA_772C_43A51B2BAC10
typename detail::Dimension_impl< T >::type Dimension
Vector< Dimension< T >::value > DimVector
A vector of length = dimension of T.
StateHistoryEntryBase(State const &state)
Constructor - saves the state vector and error covariance.
void restore(State &state) const
SquareMatrix< Dimension< T >::value > DimSquareMatrix
A square matrix, n x n, where n is the dimension of T.
StateHistoryEntry(State const &state)
Header providing a C++ wrapper around TimeValueC.h.
Standardized, portable parallel to struct timeval for representing both absolute times and time inter...
double Scalar
Common scalar type.