Autoware.Auto
localizer_base.hpp
Go to the documentation of this file.
1 // Copyright 2019 the Autoware Foundation
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 LOCALIZATION_COMMON__LOCALIZER_BASE_HPP_
18 #define LOCALIZATION_COMMON__LOCALIZER_BASE_HPP_
19 
21 #include <tf2/buffer_core.h>
22 #include <geometry_msgs/msg/transform.hpp>
24 #include <geometry_msgs/msg/pose_with_covariance_stamped.hpp>
26 #include <string>
27 
28 #include "common/types.hpp"
29 
30 namespace autoware
31 {
32 namespace localization
33 {
34 namespace localization_common
35 {
37 
40 class LOCALIZATION_COMMON_PUBLIC OptimizedRegistrationSummary
41 {
42 public:
44  explicit OptimizedRegistrationSummary(const OptimizationSummary & opt_summary);
45 
47  OptimizationSummary optimization_summary() const;
48 
49 private:
50  OptimizationSummary m_optimization_summary;
51 };
52 
57 template<typename InputMsgT, typename MapMsgT, typename RegistrationSummaryT>
58 class LOCALIZATION_COMMON_PUBLIC RelativeLocalizerBase
59 {
60 public:
61  using PoseWithCovarianceStamped = geometry_msgs::msg::PoseWithCovarianceStamped;
63  using RegistrationSummary = RegistrationSummaryT;
64  using InputMsg = InputMsgT;
65  using MapMsg = MapMsgT;
74  RegistrationSummaryT register_measurement(
75  const InputMsgT & msg, const Transform & transform_initial,
76  PoseWithCovarianceStamped & pose_out)
77  {
78  if (!m_map_valid) {
79  on_register_without_map();
80  }
81  return register_measurement_impl(msg, transform_initial, pose_out);
82  }
83 
86  void set_map(const MapMsgT & msg)
87  {
88  try {
89  set_map_impl(msg);
90  set_map_valid();
91  } catch (...) {
92  set_map_invalid();
93  on_bad_map(std::current_exception());
94  }
95  }
96 
99  void insert_to_map(const MapMsgT & msg)
100  {
101  try {
102  insert_to_map_impl(msg);
103  } catch (...) {
104  on_bad_map_insertion(std::current_exception());
105  }
106  }
107 
109  virtual const std::string & map_frame_id() const noexcept = 0;
110 
112  virtual std::chrono::system_clock::time_point map_stamp() const noexcept = 0;
113 
114  bool map_valid() const noexcept
115  {
116  return m_map_valid;
117  }
118 
119  // Deleting move assignment deletes copy and move assignment operators/constructors
120  // See `Rule of DesDeMovA`: https://safecpp.com/2019/07/01/initial.html
121  RelativeLocalizerBase & operator=(RelativeLocalizerBase && other) = delete;
122 
123  virtual ~RelativeLocalizerBase() = default;
124 
125 protected:
127  virtual void set_map_impl(const MapMsgT & msg) = 0;
128 
130  virtual void insert_to_map_impl(const MapMsgT &)
131  {
132  throw std::runtime_error("RelativeLocalizerBase: map insertion is not implemented.");
133  }
134 
136  virtual void on_bad_map(std::exception_ptr eptr)
137  {
138  if (eptr) {
139  std::rethrow_exception(eptr);
140  }
141  }
143  virtual void on_bad_map_insertion(std::exception_ptr eptr)
144  {
145  if (eptr) {
146  std::rethrow_exception(eptr);
147  }
148  }
149 
151  virtual RegistrationSummaryT register_measurement_impl(
152  const InputMsgT & msg,
153  const Transform & transform_initial, PoseWithCovarianceStamped & pose_out) = 0;
154 
156  void set_map_valid() noexcept
157  {
158  m_map_valid = true;
159  }
160 
162  void set_map_invalid() noexcept
163  {
164  m_map_valid = false;
165  }
166 
168  virtual void on_register_without_map()
169  {
170  throw std::logic_error(
171  "RelativeLocalizerBase: Cannot register a measurement without a valid"
172  " map. Either no valid map is set yet or an invalid map had been "
173  "attempted to be set.");
174  }
175 
176 private:
177  bool m_map_valid{false};
178 };
179 } // namespace localization_common
180 } // namespace localization
181 } // namespace autoware
182 
183 #endif // LOCALIZATION_COMMON__LOCALIZER_BASE_HPP_
autoware::localization::localization_common::RelativeLocalizerBase::on_bad_map_insertion
virtual void on_bad_map_insertion(std::exception_ptr eptr)
Action to take on failure to insert to the map.
Definition: localizer_base.hpp:143
types.hpp
This file includes common type definition.
autoware::localization::localization_common::OptimizedRegistrationSummary
Definition: localizer_base.hpp:40
autoware::localization::localization_common::RelativeLocalizerBase< sensor_msgs::msg::PointCloud2, sensor_msgs::msg::PointCloud2, MapperRegistrationSummaryBase< LocalizerT::RegistrationSummary, ConstCloudPtr > >::RegistrationSummary
MapperRegistrationSummaryBase< LocalizerT::RegistrationSummary, ConstCloudPtr > RegistrationSummary
Definition: localizer_base.hpp:63
autoware::localization::localization_common::RelativeLocalizerBase< sensor_msgs::msg::PointCloud2, sensor_msgs::msg::PointCloud2, MapperRegistrationSummaryBase< LocalizerT::RegistrationSummary, ConstCloudPtr > >::MapMsg
sensor_msgs::msg::PointCloud2 MapMsg
Definition: localizer_base.hpp:65
autoware::localization::localization_common::RelativeLocalizerBase::register_measurement
RegistrationSummaryT register_measurement(const InputMsgT &msg, const Transform &transform_initial, PoseWithCovarianceStamped &pose_out)
Definition: localizer_base.hpp:74
autoware::localization::localization_common::RelativeLocalizerBase< sensor_msgs::msg::PointCloud2, sensor_msgs::msg::PointCloud2, MapperRegistrationSummaryBase< LocalizerT::RegistrationSummary, ConstCloudPtr > >::InputMsg
sensor_msgs::msg::PointCloud2 InputMsg
Definition: localizer_base.hpp:64
autoware::localization::localization_common::RelativeLocalizerBase< sensor_msgs::msg::PointCloud2, sensor_msgs::msg::PointCloud2, MapperRegistrationSummaryBase< LocalizerT::RegistrationSummary, ConstCloudPtr > >::PoseWithCovarianceStamped
geometry_msgs::msg::PoseWithCovarianceStamped PoseWithCovarianceStamped
Definition: localizer_base.hpp:61
autoware::common::optimization::OptimizationSummary
Definition: optimizer_options.hpp:77
initialization.hpp
autoware::localization::localization_common::RelativeLocalizerBase::on_bad_map
virtual void on_bad_map(std::exception_ptr eptr)
Action to take on failure to set a new map.
Definition: localizer_base.hpp:136
optimizer_options.hpp
autoware::localization::localization_common::RelativeLocalizerBase::on_register_without_map
virtual void on_register_without_map()
Action to take when a measurement is attempted to be set without a valid map.
Definition: localizer_base.hpp:168
autoware
This file defines the lanelet2_map_provider_node class.
Definition: quick_sort.hpp:24
motion::planning::recordreplay_planner_nodes::Transform
geometry_msgs::msg::TransformStamped Transform
Definition: recordreplay_planner_node.hpp:56
motion::motion_testing_nodes::TransformStamped
geometry_msgs::msg::TransformStamped TransformStamped
Definition: motion_testing_publisher.hpp:37
autoware::localization::localization_common::RelativeLocalizerBase::set_map_valid
void set_map_valid() noexcept
Set current map as valid.
Definition: localizer_base.hpp:156
autoware::localization::localization_common::Real
autoware::common::types::float64_t Real
Definition: localizer_base.hpp:36
autoware::localization::localization_common::RelativeLocalizerBase< sensor_msgs::msg::PointCloud2, sensor_msgs::msg::PointCloud2, MapperRegistrationSummaryBase< LocalizerT::RegistrationSummary, ConstCloudPtr > >::Transform
geometry_msgs::msg::TransformStamped Transform
Definition: localizer_base.hpp:62
autoware::localization::localization_common::RelativeLocalizerBase::insert_to_map
void insert_to_map(const MapMsgT &msg)
Definition: localizer_base.hpp:99
autoware::localization::localization_common::RelativeLocalizerBase
Definition: localizer_base.hpp:58
autoware::localization::localization_common::RelativeLocalizerBase::set_map
void set_map(const MapMsgT &msg)
Definition: localizer_base.hpp:86
autoware::common::types::float64_t
double float64_t
Definition: types.hpp:37
autoware::localization::localization_common::RelativeLocalizerBase::set_map_invalid
void set_map_invalid() noexcept
Set current map as invalid.
Definition: localizer_base.hpp:162
visibility_control.hpp
autoware::localization::localization_common::RelativeLocalizerBase::insert_to_map_impl
virtual void insert_to_map_impl(const MapMsgT &)
insert_to_map implementation.
Definition: localizer_base.hpp:130