17 #ifndef STATE_ESTIMATION__NOISE_MODEL__UNIFORM_NOISE_HPP_
18 #define STATE_ESTIMATION__NOISE_MODEL__UNIFORM_NOISE_HPP_
28 #include <type_traits>
35 namespace state_estimation
43 template<
typename StateT>
46 using Scalar =
typename StateT::Scalar;
47 using Matrix =
typename StateT::Matrix;
48 template<
typename OtherScalarT>
49 using VarianceVector = Eigen::Matrix<OtherScalarT, StateT::size(), 1>;
61 : m_covariance{covariance} {}
70 template<
typename OtherScalarT>
72 const std::array<OtherScalarT, State::size()> & variances) noexcept
74 Eigen::Map<const VarianceVector<OtherScalarT>>(variances.data())
75 .
template cast<Scalar>().array().square().matrix().asDiagonal()} {}
86 template<
typename OtherScalarT>
89 if (variances.size() !=
static_cast<std::size_t
>(State::size())) {
90 throw std::runtime_error(
91 "There must be " + std::to_string(State::size()) +
92 " variances for initializing the uniform noise model, but " +
93 std::to_string(variances.size()) +
" provided");
96 Eigen::Map<const VarianceVector<OtherScalarT>>(variances.data())
97 .
template cast<Scalar>().array().square().matrix().asDiagonal();
109 template<
typename ... VarianceTs>
110 explicit UniformNoise(
const Scalar variance,
const VarianceTs ... variances)
111 :
UniformNoise{std::array<Scalar, State::size()> {variance, variances ...}}
114 sizeof...(VarianceTs) + 1 == State::size(),
115 "Wrong number of variances passed into the UniformNoise constructor");
130 return m_covariance * std::chrono::duration_cast<std::chrono::duration<Scalar>>(dt).count();
135 Matrix m_covariance{};
142 #endif // STATE_ESTIMATION__NOISE_MODEL__UNIFORM_NOISE_HPP_