Autoware.Auto
uniform_noise.hpp
Go to the documentation of this file.
1 // Copyright 2021 Apex.AI, Inc.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 //    http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 //
15 // Co-developed by Tier IV, Inc. and Apex.AI, Inc.
16 
17 #ifndef STATE_ESTIMATION__NOISE_MODEL__UNIFORM_NOISE_HPP_
18 #define STATE_ESTIMATION__NOISE_MODEL__UNIFORM_NOISE_HPP_
19 
22 
23 #include <Eigen/Core>
24 
25 #include <algorithm>
26 #include <array>
27 #include <chrono>
28 #include <type_traits>
29 #include <vector>
30 
31 namespace autoware
32 {
33 namespace common
34 {
35 namespace state_estimation
36 {
37 
43 template<typename StateT>
44 class STATE_ESTIMATION_PUBLIC UniformNoise : public NoiseInterface<UniformNoise<StateT>>
45 {
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>;
50 
51 public:
53  using State = StateT;
54 
60  explicit UniformNoise(const Matrix & covariance) noexcept
61  : m_covariance{covariance} {}
62 
70  template<typename OtherScalarT>
71  explicit UniformNoise(
72  const std::array<OtherScalarT, State::size()> & variances) noexcept
73  : m_covariance{
74  Eigen::Map<const VarianceVector<OtherScalarT>>(variances.data())
75  .template cast<Scalar>().array().square().matrix().asDiagonal()} {}
76 
86  template<typename OtherScalarT>
87  explicit UniformNoise(const std::vector<OtherScalarT> & variances)
88  {
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");
94  }
95  m_covariance =
96  Eigen::Map<const VarianceVector<OtherScalarT>>(variances.data())
97  .template cast<Scalar>().array().square().matrix().asDiagonal();
98  }
99 
100 
109  template<typename ... VarianceTs>
110  explicit UniformNoise(const Scalar variance, const VarianceTs ... variances)
111  : UniformNoise{std::array<Scalar, State::size()> {variance, variances ...}}
112  {
113  static_assert(
114  sizeof...(VarianceTs) + 1 == State::size(),
115  "Wrong number of variances passed into the UniformNoise constructor");
116  }
117 
118 protected:
122 
128  Matrix crtp_covariance(const std::chrono::nanoseconds & dt) const noexcept
129  {
130  return m_covariance * std::chrono::duration_cast<std::chrono::duration<Scalar>>(dt).count();
131  }
132 
133 private:
135  Matrix m_covariance{};
136 };
137 
138 } // namespace state_estimation
139 } // namespace common
140 } // namespace autoware
141 
142 #endif // STATE_ESTIMATION__NOISE_MODEL__UNIFORM_NOISE_HPP_
autoware::common::state_estimation::UniformNoise
This class contains the logic for a uniform noise model.
Definition: uniform_noise.hpp:44
autoware::common::state_estimation::NoiseInterface
A CRTP interface for implementing noise models used for providing motion model noise covariance.
Definition: noise_interface.hpp:38
autoware::common::state_estimation::UniformNoise::State
StateT State
A convenience typedef for the state for which this noise model is to be used.
Definition: uniform_noise.hpp:53
autoware::common::state_estimation::UniformNoise::UniformNoise
UniformNoise(const std::vector< OtherScalarT > &variances)
Create the noise model from a vector.
Definition: uniform_noise.hpp:87
autoware::common::state_estimation::UniformNoise::UniformNoise
UniformNoise(const std::array< OtherScalarT, State::size()> &variances) noexcept
Create the noise model from an array.
Definition: uniform_noise.hpp:71
autoware::common::state_estimation::UniformNoise::crtp_covariance
Matrix crtp_covariance(const std::chrono::nanoseconds &dt) const noexcept
A CRTP-called covariance getter.
Definition: uniform_noise.hpp:128
autoware::common::state_estimation::UniformNoise::UniformNoise
UniformNoise(const Matrix &covariance) noexcept
Create the noise model from an existing covariance matrix.
Definition: uniform_noise.hpp:60
autoware
This file defines the lanelet2_map_provider_node class.
Definition: quick_sort.hpp:24
noise_interface.hpp
autoware::common::state_estimation::UniformNoise::UniformNoise
UniformNoise(const Scalar variance, const VarianceTs ... variances)
Create noise model from variances directly.
Definition: uniform_noise.hpp:110
visibility_control.hpp