ad_rss_map_integration
RssObjectAdapter.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/match/AdMapMatching.hpp>
21 
25 namespace ad {
29 namespace rss {
33 namespace map {
34 
56 template <class OBJECT_INSTANCE_TYPE> class RssObjectAdapter : public RssObjectAdapterData
57 {
58 public:
62  typedef std::shared_ptr<RssObjectAdapter> Ptr;
63 
67  typedef std::shared_ptr<RssObjectAdapter const> ConstPtr;
68 
69  typedef typename RssObjectInstance<OBJECT_INSTANCE_TYPE>::Ptr ObjectInstancePtr;
70  typedef typename RssObjectInstance<OBJECT_INSTANCE_TYPE>::ConstPtr ObjectInstanceConstPtr;
71 
74  explicit RssObjectAdapter(ObjectInstancePtr const objectInstance)
75  : mObjectInstance(objectInstance)
76  {
77  RssObjectAdapterData::object_type = mObjectInstance->getObjectType();
78  }
79 
82  virtual ~RssObjectAdapter() = default;
83 
89  ::ad::rss::world::ObjectType getObjectType() const
90  {
91  return object_type;
92  }
93 
97  {
98  return getObjectInstance()->getCheckerControl();
99  }
100 
103  ObjectInstancePtr getObjectInstance() const
104  {
105  return mObjectInstance;
106  }
107 
110  OBJECT_INSTANCE_TYPE &getObjectInstanceType()
111  {
112  return getObjectInstance()->getObjectInstanceType();
113  }
114 
117  OBJECT_INSTANCE_TYPE const &getObjectInstanceType() const
118  {
119  return getObjectInstance()->getObjectInstanceType();
120  }
121 
126  virtual ::ad::rss::world::RssDynamics getDefaultRssDynamics() const
127  {
128  return getCheckerControl()->getDefaultRssDynamics(object_type, getObjectInstanceType());
129  }
130 
134  ::ad::physics::Dimension3D getDimensions() const override
135  {
136  ::ad::physics::Dimension3D expanded_dimension = dimension;
137  if (getCheckerControl()->getConsiderPositionConfidence())
138  {
139  expanded_dimension.length += 2.0 * position_confidence_ellipse_half_axis_dimension.length;
140  expanded_dimension.width += 2.0 * position_confidence_ellipse_half_axis_dimension.width;
141  }
142  return expanded_dimension;
143  }
144 
157  virtual ::ad::map::match::Object getMatchedObject(::ad::map::match::AdMapMatching const &mapMatching,
158  physics::Distance const sampling_distance) const
159  {
160  ::ad::map::match::Object matchedObject;
161  matchedObject.enu_position.center_point = getCenterPoint();
162  matchedObject.enu_position.heading = getHeading();
163  matchedObject.enu_position.dimension = getDimensions();
164  matchedObject.enu_position.enu_reference_point = ::ad::map::access::getENUReferencePoint();
165  matchedObject.map_matched_bounding_box
166  = mapMatching.getMapMatchedBoundingBox(matchedObject.enu_position, sampling_distance);
167  return matchedObject;
168  }
169 
181  virtual bool isObjectIdUniqueOverTime() const
182  {
183  return true;
184  }
185 
186 protected:
187  ObjectInstancePtr mObjectInstance;
188 };
189 
190 template <class OBJECT_INSTANCE_TYPE> class RssPedestrianAdapter : public virtual RssObjectAdapter<OBJECT_INSTANCE_TYPE>
191 {
192 public:
196  typedef std::shared_ptr<RssPedestrianAdapter> Ptr;
197 
201  typedef std::shared_ptr<RssPedestrianAdapter const> ConstPtr;
202 
203  using typename RssObjectAdapter<OBJECT_INSTANCE_TYPE>::ObjectInstancePtr;
204 
207  explicit RssPedestrianAdapter(ObjectInstancePtr const objectInstance)
208  : RssObjectAdapter<OBJECT_INSTANCE_TYPE>(objectInstance)
209  {
210  }
211 
214  virtual ~RssPedestrianAdapter() = default;
215 };
216 
220 template <class OBJECT_INSTANCE_TYPE>
221 using RssPedestrianAdapterList = std::vector<typename RssPedestrianAdapter<OBJECT_INSTANCE_TYPE>::Ptr>;
222 
252 template <class OBJECT_INSTANCE_TYPE>
253 class RssArtificialObjectAdapter : public virtual RssObjectAdapter<OBJECT_INSTANCE_TYPE>
254 {
255 public:
259  typedef std::shared_ptr<RssArtificialObjectAdapter> Ptr;
260 
264  typedef std::shared_ptr<RssArtificialObjectAdapter const> ConstPtr;
265 
266  using typename RssObjectAdapter<OBJECT_INSTANCE_TYPE>::ObjectInstancePtr;
267 
273  explicit RssArtificialObjectAdapter(RssObjectAdapterData const &objectAdapterData,
274  ::ad::rss::world::RssDynamics rssDynamics,
276  : RssObjectAdapter<OBJECT_INSTANCE_TYPE>(
277  std::make_shared<RssObjectInstanceDummy<OBJECT_INSTANCE_TYPE>>(objectAdapterData, checkerControl))
278  , mRssDynamics(rssDynamics)
279  {
280  // directly fill the objectAdapterData
281  *static_cast<RssObjectAdapterData *>(this) = objectAdapterData;
282  }
283 
286  virtual ~RssArtificialObjectAdapter() = default;
287 
292  ::ad::rss::world::RssDynamics getDefaultRssDynamics() const override
293  {
294  return mRssDynamics;
295  }
296 
297 protected:
298  ::ad::rss::world::RssDynamics const mRssDynamics;
299 
300  template <class OBJECT_INSTANCE_TYPE_INNER>
301  class RssObjectInstanceDummy : public RssObjectInstance<OBJECT_INSTANCE_TYPE_INNER>
302  {
303  public:
304  RssObjectInstanceDummy(RssObjectAdapterData const &objectAdapterData,
306  : RssObjectInstance<OBJECT_INSTANCE_TYPE_INNER>(mDummyObjectInstanceType, checkerControl)
307  , mObjectAdapterData(objectAdapterData)
308  {
309  }
310 
311  virtual ~RssObjectInstanceDummy() = default;
312 
317  ::ad::rss::world::ObjectType getObjectType() const override
318  {
319  // fallback to the standard RssObjectAdapter function
320  return mObjectAdapterData.object_type;
321  }
322 
323  RssObjectAdapterData const &mObjectAdapterData;
324  OBJECT_INSTANCE_TYPE_INNER mDummyObjectInstanceType{};
325  };
326 };
327 
331 template <class OBJECT_INSTANCE_TYPE>
332 using RssArtificialObjectAdapterList = std::vector<typename RssArtificialObjectAdapter<OBJECT_INSTANCE_TYPE>::Ptr>;
333 
361 template <class OBJECT_INSTANCE_TYPE> class RssVehicleAdapter : public virtual RssObjectAdapter<OBJECT_INSTANCE_TYPE>
362 {
363 public:
367  typedef std::shared_ptr<RssVehicleAdapter> Ptr;
368 
372  typedef std::shared_ptr<RssVehicleAdapter const> ConstPtr;
373 
374  using typename RssObjectAdapter<OBJECT_INSTANCE_TYPE>::ObjectInstancePtr;
379 
382  RssVehicleAdapter(ObjectInstancePtr const objectInstance)
383  : RssObjectAdapter<OBJECT_INSTANCE_TYPE>(objectInstance)
384  {
385  }
386 
389  virtual ~RssVehicleAdapter() = default;
390 
408  {
410  }
411 
423 
427  {
428  None,
429  AppendTargets,
433  };
434 
439  {
441  ::ad::map::point::ENUPointList routingTargets{};
442  };
443 
454  {
455  return getCheckerControl()->getCurrentRoutingTargetOperation(getObjectId());
456  }
457 
464  virtual ad::physics::Distance getRoutingTargetReachedDistance() const
465  {
466  return ad::physics::Distance(3.);
467  }
468 
475  virtual void activeRoutingTargets(::ad::map::point::ENUPointList const &activeRoutingTargets)
476  {
477  getCheckerControl()->setActiveRoutingTargets(getObjectId(), activeRoutingTargets);
478  }
480 
487  virtual ad::physics::Distance getPositionJumpTraveledDistance() const
488  {
489  return getCheckerControl()->getPositionJumpTraveledDistance();
490  }
491 
499  virtual ad::physics::Distance getMinimumDistanceToObjectsThatHaveToBeAnalyzed() const
500  {
501  return getCheckerControl()->getMinimumDistanceToObjectsThatHaveToBeAnalyzed();
502  }
503 };
504 
508 template <class OBJECT_INSTANCE_TYPE>
509 using RssVehicleAdapterList = std::vector<typename RssVehicleAdapter<OBJECT_INSTANCE_TYPE>::Ptr>;
510 
529 template <class OBJECT_INSTANCE_TYPE>
530 class RssEgoVehicleAdapter : public virtual RssVehicleAdapter<OBJECT_INSTANCE_TYPE>
531 {
532 public:
536  typedef std::shared_ptr<RssEgoVehicleAdapter> Ptr;
537 
541  typedef std::shared_ptr<RssEgoVehicleAdapter const> ConstPtr;
542 
543  using typename RssObjectAdapter<OBJECT_INSTANCE_TYPE>::ObjectInstancePtr;
547 
550  RssEgoVehicleAdapter(ObjectInstancePtr const objectInstance)
551  : RssObjectAdapter<OBJECT_INSTANCE_TYPE>(objectInstance)
552  , RssVehicleAdapter<OBJECT_INSTANCE_TYPE>(objectInstance)
553  {
554  }
555 
558  virtual ~RssEgoVehicleAdapter() = default;
563  virtual ::ad::map::landmark::LandmarkIdSet
564  getGreenTrafficLightsOnRoute(::ad::map::route::FullRoute const &route) const
565  {
566  // the default implementation is independent from route...
567  (void)route;
568  return getCheckerControl()->getCurrentGreenTrafficLights();
569  }
570 
575  virtual RssAppendRoadBoundariesMode getRoadBoundariesMode(::ad::map::route::FullRoute const &route) const
576  {
577  // the default implementation is independent from route...
578  (void)route;
579  return getCheckerControl()->getRoadBoundariesMode();
580  }
581 
594  RssObjectData const &egoVehicleObject,
596  RssObjectData const &otherVehicleObject) const
597  {
598  return getCheckerControl()->getVehicleConstellation(
599  route, egoVehicleObject, getObjectInstanceType(), otherVehicleObject, otherVehicle->getObjectInstanceType());
600  }
601 
614  RssObjectData const &egoVehicleObject,
616  RssObjectData const &pedestrianObject) const
617  {
618  return getCheckerControl()->getPedestrianConstellation(
619  route, egoVehicleObject, getObjectInstanceType(), pedestrianObject, pedestrian->getObjectInstanceType());
620  }
621 
633  RssRoute const &route,
634  RssObjectData const &egoVehicleObject,
635  typename RssArtificialObjectAdapter<OBJECT_INSTANCE_TYPE>::ConstPtr artificialObjectAdapter,
636  RssObjectData const &artificialObject) const
637  {
638  (void)artificialObjectAdapter;
639  return getCheckerControl()->getArtificialObjectConstellation(
640  route, egoVehicleObject, getObjectInstanceType(), artificialObject);
641  }
642 
648  ::ad::rss::world::ObjectType getObjectType() const
649  {
650  return ::ad::rss::world::ObjectType::EgoVehicle;
651  }
652 
658  ::ad::rss::world::RssDynamics getDefaultRssDynamics() const override
659  {
660  return getCheckerControl()->getDefaultRssDynamics(::ad::rss::world::ObjectType::EgoVehicle,
662  }
663 };
664 
668 template <class OBJECT_INSTANCE_TYPE>
669 using RssEgoVehicleAdapterList = std::vector<typename RssEgoVehicleAdapter<OBJECT_INSTANCE_TYPE>::Ptr>;
670 
671 } // namespace map
672 } // namespace rss
673 } // namespace ad
::ad::rss::world::ObjectType getObjectType() const override
get the object type
Definition: RssObjectAdapter.hpp:317
Base class to access artificialObject information required to perform the RSS checks in conjunction w...
Definition: RssObjectAdapter.hpp:254
std::shared_ptr< RssArtificialObjectAdapter const > ConstPtr
Smart pointer on constant RssArtificialObjectAdapter.
Definition: RssObjectAdapter.hpp:264
virtual ~RssArtificialObjectAdapter()=default
default destructor
std::shared_ptr< RssArtificialObjectAdapter > Ptr
Smart pointer on RssArtificialObjectAdapter.
Definition: RssObjectAdapter.hpp:259
RssArtificialObjectAdapter(RssObjectAdapterData const &objectAdapterData, ::ad::rss::world::RssDynamics rssDynamics, typename RssRouteCheckerControl< OBJECT_INSTANCE_TYPE >::Ptr checkerControl)
constructor
Definition: RssObjectAdapter.hpp:273
::ad::rss::world::RssDynamics getDefaultRssDynamics() const override
get the default RSS dynamics to be used for the object.
Definition: RssObjectAdapter.hpp:292
Base class to access ego vehicle information required to perform the RSS checks in conjunction with t...
Definition: RssObjectAdapter.hpp:531
virtual RssConstellationConfiguration getArtificialObjectConstellationOnRoute(RssRoute const &route, RssObjectData const &egoVehicleObject, typename RssArtificialObjectAdapter< OBJECT_INSTANCE_TYPE >::ConstPtr artificialObjectAdapter, RssObjectData const &artificialObject) const
get the parameters to be used for the artificialObject constellation on the route.
Definition: RssObjectAdapter.hpp:632
::ad::rss::world::RssDynamics getDefaultRssDynamics() const override
get the default RSS dynamics to be used for the object.
Definition: RssObjectAdapter.hpp:658
virtual RssConstellationConfiguration getVehicleConstellationOnRoute(RssRoute const &route, RssObjectData const &egoVehicleObject, typename RssVehicleAdapter< OBJECT_INSTANCE_TYPE >::ConstPtr otherVehicle, RssObjectData const &otherVehicleObject) const
get the parameters to be used for the vehicle constellation on the route.
Definition: RssObjectAdapter.hpp:593
virtual RssConstellationConfiguration getPedestrianConstellationOnRoute(RssRoute const &route, RssObjectData const &egoVehicleObject, typename RssPedestrianAdapter< OBJECT_INSTANCE_TYPE >::ConstPtr pedestrian, RssObjectData const &pedestrianObject) const
get the parameters to be used for the pedestrian constellation on the route.
Definition: RssObjectAdapter.hpp:613
virtual RssAppendRoadBoundariesMode getRoadBoundariesMode(::ad::map::route::FullRoute const &route) const
get the road boundaries mode on the investigated route
Definition: RssObjectAdapter.hpp:575
RssEgoVehicleAdapter(ObjectInstancePtr const objectInstance)
default constructor
Definition: RssObjectAdapter.hpp:550
std::shared_ptr< RssEgoVehicleAdapter > Ptr
Smart pointer on RssEgoVehicleAdapter.
Definition: RssObjectAdapter.hpp:536
::ad::rss::world::ObjectType getObjectType() const
Definition: RssObjectAdapter.hpp:648
virtual ~RssEgoVehicleAdapter()=default
default destructor
virtual ::ad::map::landmark::LandmarkIdSet getGreenTrafficLightsOnRoute(::ad::map::route::FullRoute const &route) const
get the green traffic lights along the investigated route
Definition: RssObjectAdapter.hpp:564
std::shared_ptr< RssEgoVehicleAdapter const > ConstPtr
Smart pointer on constant RssEgoVehicleAdapter.
Definition: RssObjectAdapter.hpp:541
Base class to access basic object information required to perform the RSS checks in conjunction with ...
Definition: RssObjectAdapter.hpp:57
OBJECT_INSTANCE_TYPE & getObjectInstanceType()
get the underlying object instance type.
Definition: RssObjectAdapter.hpp:110
virtual ~RssObjectAdapter()=default
default destructor
::ad::rss::world::ObjectType getObjectType() const
Definition: RssObjectAdapter.hpp:89
virtual bool isObjectIdUniqueOverTime() const
Indicate if the object id of this remains unique over time.
Definition: RssObjectAdapter.hpp:181
virtual ::ad::rss::world::RssDynamics getDefaultRssDynamics() const
get the default RSS dynamics to be used for the object.
Definition: RssObjectAdapter.hpp:126
std::shared_ptr< RssObjectAdapter const > ConstPtr
Smart pointer on constant RssObjectAdapter.
Definition: RssObjectAdapter.hpp:67
std::shared_ptr< RssObjectAdapter > Ptr
Smart pointer on RssObjectAdapter.
Definition: RssObjectAdapter.hpp:62
RssRouteCheckerControl< OBJECT_INSTANCE_TYPE >::Ptr getCheckerControl() const
get the checker control instance
Definition: RssObjectAdapter.hpp:96
ObjectInstancePtr getObjectInstance() const
get the underlying object instance type
Definition: RssObjectAdapter.hpp:103
OBJECT_INSTANCE_TYPE const & getObjectInstanceType() const
get the underlying object instance type
Definition: RssObjectAdapter.hpp:117
virtual ::ad::map::match::Object getMatchedObject(::ad::map::match::AdMapMatching const &mapMatching, physics::Distance const sampling_distance) const
Perform actual map matching of the object.
Definition: RssObjectAdapter.hpp:157
::ad::physics::Dimension3D getDimensions() const override
get the dimensions of the object to be considered: the stored (estimated) dimensions are expanded by ...
Definition: RssObjectAdapter.hpp:134
RssObjectAdapter(ObjectInstancePtr const objectInstance)
default constructor
Definition: RssObjectAdapter.hpp:74
base type of an object instance
Definition: RssObjectInstance.hpp:35
std::shared_ptr< RssObjectInstance const > ConstPtr
Smart pointer on constant RssObjectAdapter.
Definition: RssObjectInstance.hpp:45
std::shared_ptr< RssObjectInstance > Ptr
Smart pointer on RssObjectAdapter.
Definition: RssObjectInstance.hpp:40
Definition: RssObjectAdapter.hpp:191
std::shared_ptr< RssPedestrianAdapter const > ConstPtr
Smart pointer on constant RssPedestrianAdapter.
Definition: RssObjectAdapter.hpp:201
RssPedestrianAdapter(ObjectInstancePtr const objectInstance)
constructor
Definition: RssObjectAdapter.hpp:207
std::shared_ptr< RssPedestrianAdapter > Ptr
Smart pointer on RssPedestrianAdapter.
Definition: RssObjectAdapter.hpp:196
virtual ~RssPedestrianAdapter()=default
default destructor
std::shared_ptr< RssRouteCheckerControl > Ptr
Smart pointer on RssObjectAdapter.
Definition: RssRouteCheckerControl.hpp:51
Base class to access vehicle information required to perform the RSS checks in conjunction with the R...
Definition: RssObjectAdapter.hpp:362
virtual ad::physics::Distance getPositionJumpTraveledDistance() const
Defines the distance at which a delta in vehicle position is considered as unexpected jump....
Definition: RssObjectAdapter.hpp:487
::ad::rss::world::ObjectId getObjectId() const
get the id of the object
Definition: RssObjectAdapterData.hpp:140
std::shared_ptr< RssVehicleAdapter const > ConstPtr
Smart pointer on constant RssVehicleAdapter.
Definition: RssObjectAdapter.hpp:372
virtual RssRoutingTargetOperation getRoutingTargetOperation()
Return a routing target operation to be applied (optional)
Definition: RssObjectAdapter.hpp:453
std::shared_ptr< RssVehicleAdapter > Ptr
Smart pointer on RssVehicleAdapter.
Definition: RssObjectAdapter.hpp:367
virtual ad::physics::Distance getMinimumDistanceToObjectsThatHaveToBeAnalyzed() const
Defines the distance below which a detailed analysis becomes necessary regardless of the objects stop...
Definition: RssObjectAdapter.hpp:499
RssVehicleAdapter(ObjectInstancePtr const objectInstance)
default constructor
Definition: RssObjectAdapter.hpp:382
virtual ~RssVehicleAdapter()=default
default destructor
virtual void activeRoutingTargets(::ad::map::point::ENUPointList const &activeRoutingTargets)
Provides information on the currently active routing targets.
Definition: RssObjectAdapter.hpp:475
virtual ::ad::rss::map::RssRouteList getRoutePredictions() const
Return the list of route predictions of the object (optionally).
Definition: RssObjectAdapter.hpp:407
virtual ad::physics::Distance getRoutingTargetReachedDistance() const
Defines the distance at which a given routing target is interpreted to be reached.
Definition: RssObjectAdapter.hpp:464
RssRoutingTargetCommand
The mode to be applied on routing target operation.
Definition: RssObjectAdapter.hpp:427
std::vector<::ad::rss::map::RssRoute > RssRouteList
DataType RssRouteList.
Definition: RssRouteList.hpp:42
std::vector< typename RssVehicleAdapter< OBJECT_INSTANCE_TYPE >::Ptr > RssVehicleAdapterList
typedef for a list of RssEgoVehicleAdapter smart pointers
Definition: RssObjectAdapter.hpp:509
std::vector< typename RssArtificialObjectAdapter< OBJECT_INSTANCE_TYPE >::Ptr > RssArtificialObjectAdapterList
typedef for a list of RssArtificialObjectAdapter smart pointers
Definition: RssObjectAdapter.hpp:332
std::vector< typename RssPedestrianAdapter< OBJECT_INSTANCE_TYPE >::Ptr > RssPedestrianAdapterList
typedef for a list of RssPedestrianAdapter smart pointers
Definition: RssObjectAdapter.hpp:221
RssAppendRoadBoundariesMode
DataType RssAppendRoadBoundariesMode.
Definition: RssAppendRoadBoundariesMode.hpp:44
std::vector< typename RssEgoVehicleAdapter< OBJECT_INSTANCE_TYPE >::Ptr > RssEgoVehicleAdapterList
typedef for a list of RssEgoVehicleAdapter smart pointers
Definition: RssObjectAdapter.hpp:669
namespace ad
Definition: RouteAccelerations.hpp:33
DataType RssConstellationConfiguration.
Definition: RssConstellationConfiguration.hpp:43
DataType RssObjectAdapterData.
Definition: RssObjectAdapterData.hpp:54
::ad::rss::world::ObjectId getObjectId() const
get the id of the object
Definition: RssObjectAdapterData.hpp:140
::ad::map::point::ENUHeading getHeading() const
get the heading of the object
Definition: RssObjectAdapterData.hpp:175
::ad::physics::Dimension3D dimension
Definition: RssObjectAdapterData.hpp:238
::ad::rss::world::ObjectType object_type
Definition: RssObjectAdapterData.hpp:216
::ad::map::point::ENUPoint getCenterPoint() const
get the center point of the object
Definition: RssObjectAdapterData.hpp:154
DataType RssObjectData.
Definition: RssObjectData.hpp:52
DataType RssRoute.
Definition: RssRoute.hpp:49
The mode to be applied on routing target operation.
Definition: RssObjectAdapter.hpp:439