ad_rss_map_integration
RssWorldModelCreator.hpp
Go to the documentation of this file.
1 // ----------------- BEGIN LICENSE BLOCK ---------------------------------
2 //
3 // Copyright (C) 2019-2021 Intel Corporation
4 //
5 // SPDX-License-Identifier: LGPL-2.1-only
6 //
7 // ----------------- END LICENSE BLOCK -----------------------------------
12 #pragma once
13 
14 #include <ad/map/geometry/PolygonOperation.hpp>
15 #include <ad/map/intersection/Intersection.hpp>
16 #include <ad/map/route/FullRoute.hpp>
17 #include <ad/rss/structured/RssFormulas.hpp>
18 #include <ad/rss/world/WorldModel.hpp>
21 
25 namespace ad {
29 namespace rss {
33 namespace map {
34 
39 {
40 public:
54  RssWorldModelCreator(RssRestrictSpeedLimitMode const &restrict_speed_limit_mode,
55  ::ad::map::landmark::LandmarkIdSet const &greenTrafficLights,
56  RssWorldModelCreation &worldModelCreation);
57 
65  explicit RssWorldModelCreator(RssWorldModelCreation &worldModelCreation);
66 
70  ~RssWorldModelCreator() = default;
71 
81  bool appendNotRelevantConstellation(::ad::map::route::FullRoute const &route,
83  RssObjectConversion::ConstPtr otherObject);
84 
96  bool appendNonIntersectionConstellation(::ad::map::route::ConnectingRoute const &connectingRoute,
97  world::ConstellationType const &constellation_type,
99  RssObjectConversion::ConstPtr otherObject);
100 
111  bool appendMergingConstellation(::ad::map::route::ConnectingRoute const &connectingRoute,
112  world::ConstellationType const &constellation_type,
114  RssObjectConversion::ConstPtr otherObject);
115 
128  bool appendIntersectionConstellation(::ad::map::intersection::IntersectionPtr intersection,
129  ::ad::map::route::FullRoute const &egoRoute,
130  ::ad::map::route::FullRoute const &objectRoute,
131  ::ad::map::route::FullRoute const &intersectionOtherRoute,
133  RssObjectConversion::ConstPtr otherObject);
134 
143  bool appendRoadBoundaryConstellations(::ad::map::route::FullRoute const &egoRoute,
145 
146  bool appendUnstructuredConstellation(RssObjectConversion::ConstPtr iEgoObject,
147  RssObjectConversion::ConstPtr iOtherObject);
148 
149 private:
150  struct Route
151  {
152  explicit Route(::ad::map::route::FullRoute const &route_in)
153  : route(route_in)
154  , min_lane_offset(route_in.min_lane_offset)
155  , max_lane_offset(route_in.max_lane_offset)
156  {
157  }
158  Route(::ad::map::route::FullRoute const &route_in,
159  ::ad::map::point::ENUHeading const &route_heading_start_in,
160  ::ad::map::point::ENUHeading const &route_heading_end_in)
161  : route(route_in)
162  , min_lane_offset(route_in.min_lane_offset)
163  , max_lane_offset(route_in.max_lane_offset)
164  , route_heading_available(true)
165  , route_heading_start(route_heading_start_in)
166  , route_heading_end(route_heading_end_in)
167  {
168  }
169  Route(::ad::map::route::FullRoute const &route_in,
170  ::ad::map::route::RouteLaneOffset const min_lane_offset_in,
171  ::ad::map::route::RouteLaneOffset const max_lane_offset_in,
172  ::ad::map::point::ENUHeading const &route_heading_start_in,
173  ::ad::map::point::ENUHeading const &route_heading_end_in)
174  : route(route_in)
175  , min_lane_offset(min_lane_offset_in)
176  , max_lane_offset(max_lane_offset_in)
177  , route_heading_available(true)
178  , route_heading_start(route_heading_start_in)
179  , route_heading_end(route_heading_end_in)
180  {
181  }
182  ::ad::map::route::FullRoute const &route;
183  ::ad::map::route::RouteLaneOffset const min_lane_offset;
184  ::ad::map::route::RouteLaneOffset const max_lane_offset;
185  bool route_heading_available{false};
186  ::ad::map::point::ENUHeading const route_heading_start;
187  ::ad::map::point::ENUHeading const route_heading_end;
188  };
189 
201  bool createRoadArea(Route const &route,
202  ::ad::map::lane::LaneIdSet const &intersectionLanes,
203  std::vector<RssObjectConversion::Ptr> objects,
204  world::RoadArea &roadArea,
205  std::vector<ad::map::route::RoadSegment> *intersectingArea = nullptr);
206 
216  bool createNonIntersectionRoadArea(::ad::map::route::FullRoute const &route,
217  ::ad::map::point::ENUHeading const &route_heading_start,
218  ::ad::map::point::ENUHeading const &route_heading_end,
219  std::vector<RssObjectConversion::Ptr> objects,
220  world::RoadArea &roadArea);
221 
231  bool createMergingRoadArea(::ad::map::route::FullRoute const &route,
232  ::ad::map::point::ENUHeading const &route_heading_start,
233  ::ad::map::point::ENUHeading const &route_heading_end,
235  world::RoadArea &roadArea);
236 
247  bool createIntersectionRoadArea(::ad::map::route::FullRoute const &route,
248  ::ad::map::intersection::IntersectionConstPtr intersection,
250  world::RoadArea &roadArea,
251  std::vector<ad::map::route::RoadSegment> &intersectingArea);
252 
262  bool appendConstellation(world::ConstellationType const &constellation_type,
264  world::RoadArea const &egoRoad,
265  RssObjectConversion::ConstPtr otherObject,
266  world::RoadArea const &intersecting_road);
267 
276  void extractLaneIntervalsAndPolygon(std::vector<ad::map::route::RoadSegment> const &intersectionArea,
277  std::vector<ad::map::route::LaneInterval> &intersectionLaneIntervals,
278  ::ad::geometry::Polygon &polygon);
279 
290  bool updateExactIntersectionArea(world::RoadArea &roadArea,
291  std::vector<ad::map::route::LaneInterval> const &originalLaneIntervals,
292  ad::map::match::LaneOccupiedRegionList const &exactIntersectingRegions);
293 
308  bool updateExactIntersectionArea(world::RoadArea &roadAreaA,
309  std::vector<ad::map::route::RoadSegment> const &intersectionAreaA,
310  world::RoadArea &roadAreaB,
311  std::vector<ad::map::route::RoadSegment> const &intersectionAreaB);
312 
313  double mSpeedLimitFactor;
314  ::ad::map::landmark::LandmarkIdSet mGreenTrafficLights;
315  RssWorldModelCreation &mWorldModelCreation;
316 };
317 
318 } // namespace map
319 } // namespace rss
320 } // namespace ad
std::shared_ptr< RssObjectConversion > Ptr
Smart pointer on RssObjectConversion.
Definition: RssObjectConversion.hpp:41
std::shared_ptr< RssObjectConversion const > ConstPtr
Smart pointer on constant RssObjectConversion.
Definition: RssObjectConversion.hpp:46
class providing supporting functions to create a world model and its constellations.
Definition: RssWorldModelCreation.hpp:51
class providing support to create the RSS world model and append RSS Constellations
Definition: RssWorldModelCreator.hpp:39
RssWorldModelCreator(RssRestrictSpeedLimitMode const &restrict_speed_limit_mode, ::ad::map::landmark::LandmarkIdSet const &greenTrafficLights, RssWorldModelCreation &worldModelCreation)
constructor
bool appendMergingConstellation(::ad::map::route::ConnectingRoute const &connectingRoute, world::ConstellationType const &constellation_type, RssObjectConversion::ConstPtr egoObject, RssObjectConversion::ConstPtr otherObject)
append a merging constellation
RssWorldModelCreator(RssWorldModelCreation &worldModelCreation)
overloaded constructor using default values
bool appendIntersectionConstellation(::ad::map::intersection::IntersectionPtr intersection, ::ad::map::route::FullRoute const &egoRoute, ::ad::map::route::FullRoute const &objectRoute, ::ad::map::route::FullRoute const &intersectionOtherRoute, RssObjectConversion::ConstPtr egoObject, RssObjectConversion::ConstPtr otherObject)
append an intersection constellation
~RssWorldModelCreator()=default
standard destructor
bool appendNonIntersectionConstellation(::ad::map::route::ConnectingRoute const &connectingRoute, world::ConstellationType const &constellation_type, RssObjectConversion::ConstPtr egoObject, RssObjectConversion::ConstPtr otherObject)
append a non intersection constellation
bool appendNotRelevantConstellation(::ad::map::route::FullRoute const &route, RssObjectConversion::ConstPtr egoObject, RssObjectConversion::ConstPtr otherObject)
append a not relevant constellation
bool appendRoadBoundaryConstellations(::ad::map::route::FullRoute const &egoRoute, RssObjectConversion::ConstPtr egoObject)
append a road boundary constellation
RssRestrictSpeedLimitMode
DataType RssRestrictSpeedLimitMode.
Definition: RssRestrictSpeedLimitMode.hpp:44
namespace ad
Definition: RouteAccelerations.hpp:33