Autoware.Auto
add_covariance.hpp
Go to the documentation of this file.
1 // Copyright 2020 Apex.AI, Inc., Arm Limited
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 
17 
18 #ifndef COVARIANCE_INSERTION__ADD_COVARIANCE_HPP_
19 #define COVARIANCE_INSERTION__ADD_COVARIANCE_HPP_
20 
23 
24 #include <string>
25 #include <vector>
26 
27 namespace autoware
28 {
29 namespace covariance_insertion
30 {
31 
32 namespace detail
33 {
34 static constexpr auto kPoseTag = "pose";
35 static constexpr auto kTwistTag = "twist";
36 static constexpr auto kDirectlyTag = "directly";
37 } // namespace detail
38 
39 template<typename MsgT, typename ScalarT>
41  MsgT * msg,
42  const std::vector<ScalarT> & covariance,
43  const std::enable_if_t<has_covariance_member<MsgT>::value, std::string> & field)
44 {
45  if (!msg) {return;}
46  if (field != detail::kDirectlyTag) {
47  throw std::runtime_error("Message has covariance directly, but asked for field: " + field);
48  }
49  if (msg->covariance.size() != covariance.size()) {
50  throw std::runtime_error(
51  "Number of covariance entries does not match. The message has " +
52  std::to_string(msg->covariance.size()) + " entries, while there are " +
53  std::to_string(covariance.size()) + " entries in parameters of this node.");
54  }
55  for (auto i = 0U; i < covariance.size(); ++i) {
56  msg->covariance[i] = covariance[i];
57  }
58 }
59 
60 template<typename MsgT, typename ScalarT>
62  MsgT * msg,
63  const std::vector<ScalarT> & covariance,
64  const std::string & field)
65 {
66  if (!msg) {return;}
68  add_covariance(msg, covariance, detail::kDirectlyTag);
69  } else {
70  add_covariance(msg, covariance, field);
71  }
72 }
73 
74 template<typename MsgT, typename ScalarT>
76  MsgT * msg,
77  const std::vector<ScalarT> & covariance,
78  const std::enable_if_t<
81  !has_covariance_member<MsgT>::value, std::string> & field)
82 {
83  if (!msg) {return;}
84  if (field != detail::kTwistTag) {
85  throw std::runtime_error("Cannot set: " + field);
86  }
87  add_covariance_to_field(&msg->twist, covariance, field);
88 }
89 
90 template<typename MsgT, typename ScalarT>
92  MsgT * msg,
93  const std::vector<ScalarT> & covariance,
94  const std::enable_if_t<
97  !has_covariance_member<MsgT>::value, std::string> & field)
98 {
99  if (!msg) {return;}
100  if (field != detail::kPoseTag) {
101  throw std::runtime_error("Cannot set: " + field);
102  }
103  add_covariance_to_field(&msg->pose, covariance, field);
104 }
105 
106 template<typename MsgT, typename ScalarT>
108  MsgT * msg,
109  const std::vector<ScalarT> & covariance,
110  const std::enable_if_t<
113  !has_covariance_member<MsgT>::value, std::string> & field)
114 {
115  if (!msg) {return;}
116  if (field == detail::kTwistTag) {
117  add_covariance_to_field(&msg->twist, covariance, field);
118  } else if (field == detail::kPoseTag) {
119  add_covariance_to_field(&msg->pose, covariance, field);
120  } else {
121  throw std::runtime_error("Cannot set: " + field);
122  }
123 }
124 
125 } // namespace covariance_insertion
126 } // namespace autoware
127 
128 #endif // COVARIANCE_INSERTION__ADD_COVARIANCE_HPP_
void add_covariance_to_field(MsgT *msg, const std::vector< ScalarT > &covariance, const std::string &field)
Definition: add_covariance.hpp:61
void add_covariance(MsgT *msg, const std::vector< ScalarT > &covariance, const std::enable_if_t< has_covariance_member< MsgT >::value, std::string > &field)
Definition: add_covariance.hpp:40
static constexpr auto kDirectlyTag
Definition: add_covariance.hpp:36
static constexpr auto kPoseTag
Definition: add_covariance.hpp:34
static constexpr auto kTwistTag
Definition: add_covariance.hpp:35
This file defines the lanelet2_map_provider_node class.
Definition: quick_sort.hpp:24