ad_rss_map_integration
RssRouteChecker.hpp
Go to the documentation of this file.
1 // ----------------- BEGIN LICENSE BLOCK ---------------------------------
2 //
3 // Copyright (C) 2019-2022 Intel Corporation
4 //
5 // SPDX-License-Identifier: LGPL-2.1-only
6 //
7 // ----------------- END LICENSE BLOCK -----------------------------------
12 #pragma once
13 
14 #include "ad/map/lane/MapAreaOperation.hpp"
15 #include "ad/map/route/Planning.hpp"
19 
23 namespace ad {
27 namespace rss {
31 namespace map {
32 
34 template <class OBJECT_INSTANCE_TYPE> class RssRouteChecker
35 {
36 public:
40  typedef std::shared_ptr<RssRouteChecker> Ptr;
41 
45  typedef std::shared_ptr<RssRouteChecker const> ConstPtr;
46 
48  RssRouteChecker(::ad::physics::Duration const dropOutdatedObjecstDuration)
49  : mDropOutdatedObjectsDuration(dropOutdatedObjecstDuration)
50  , mTimeIndex(0u)
51  , mArtificialObjectSamplingDistance(1.)
52  , mArtificialObjectsInjectionCallback(nullptr)
53  {
54  }
55 
57  virtual ~RssRouteChecker() = default;
58 
66  = std::function<RssArtificialObjectAdapterList<OBJECT_INSTANCE_TYPE>(
70 
84  ::ad::physics::Distance const artificialObjectSamplingDistance,
85  ArtificialObjectInjectionCallbackFunctionType artificialObjectsInjectionCallback);
86 
102  = std::function<bool(RssRouteCheckerEgoVehicleData<OBJECT_INSTANCE_TYPE> const &egoVehicle,
103  ::ad::rss::map::RssRouteId const &routeId,
104  ::ad::rss::core::RelativeConstellation const &constellation,
105  ::ad::rss::world::ObjectId const &objectId,
106  ::ad::rss::core::RelativeObjectState const &vehicleState,
107  ::ad::geometry::Polygon &brakePolygon,
108  ::ad::geometry::Polygon &continueForwardPolygon)>;
109 
116  void
117  registerCalculateTrajectorySetsCallback(world::ObjectType objectType,
118  CalculateTrajectorySetsCallbackFunctionType calculateTrajectorySetsCallback);
119 
143  virtual RssObjectResultList
144  checkObjects(std::chrono::system_clock::time_point const &currentTime,
145  ::ad::physics::Distance const vehicleSamplingDistance,
148  ::ad::physics::Distance const pedestrianSamplingDistance,
151 
178  void restrictOperationToMapArea(::ad::map::lane::LaneIdSet const &lanesToConsider);
179 
192  bool restrictOperationToMapArea(::ad::map::point::BoundingSphere const &bounding_sphere);
193 
205  bool restrictOperationToMapArea(std::vector<ad::map::lane::MapAreaPredictionStartPoint> const &predictionStartPoints);
206 
221  bool restrictOperationToIntersectionArea(::ad::map::point::ENUPoint const &intersectionPoint,
222  ::ad::physics::Distance const &intersectionDistance);
223 
240  bool isEgoVehicleAvailable(::ad::rss::world::ObjectId ego_object_id)
241  {
242  return mEgoVehicleMap.find(ego_object_id) != mEgoVehicleMap.end();
243  }
244 
251  bool isEgoVehicleActive(::ad::rss::world::ObjectId ego_object_id)
252  {
253  auto findResult = mEgoVehicleMap.find(ego_object_id);
254  if (findResult != mEgoVehicleMap.end())
255  {
256  return findResult->second.mActive;
257  }
258  else
259  {
260  return false;
261  }
262  }
263 
264 protected:
279  {
280  (void)egoVehicleMap;
281  }
286  {
287  (void)vehicleMap;
288  }
293  {
294  (void)pedestrianMap;
295  }
300  {
301  (void)artificialObjectMap;
302  }
307  {
308  (void)egoVehicleMap;
309  }
314  {
315  (void)vehicleMap;
316  }
325  RssRouteCheckResult &rssRouteCheckResult)
326  {
327  (void)ego_vehicle;
328  (void)rssRouteCheckResult;
329  }
338  RssObjectResult &rssObjectResult)
339  {
340  (void)ego_vehicle;
341  (void)rssObjectResult;
342  }
346  virtual void situationsCreated(RssObjectResultList &objectResultList)
347  {
348  (void)objectResultList;
349  }
353  virtual void checksPerformed(RssObjectResultList &objectResultList)
354  {
355  (void)objectResultList;
356  }
361 private:
364  template <class Data, class Adapter>
365  void updateObjectMap(std::chrono::system_clock::time_point const &currentTime,
366  std::map<::ad::rss::world::ObjectId, Data> &objectMap,
367  std::vector<typename Adapter::Ptr> const &activeObjectAdapterList);
368 
372  void updateRssCheckers();
373 
374  RssRouteCheckResult createSituationForRoute(RssRouteCheckerEgoVehicleData<OBJECT_INSTANCE_TYPE> const &ego_vehicle,
375  RssRoute const &rss_route);
376 
377  RssObjectResultList createSituations();
378 
379  void appendObjectsToResults(RssObjectResultList &objectResultList);
380 
381  void updateRssCheckerCallbacks(RssRouteCheckerEgoVehicleData<OBJECT_INSTANCE_TYPE> const &egoVehicle,
382  RssRouteCheckMap::iterator routeCheckerMapIter);
383 
384  void updateRssCheckerCallbacksLocked(RssRouteCheckerEgoVehicleData<OBJECT_INSTANCE_TYPE> const &egoVehicle,
385  RssRouteCheckMap::iterator routeCheckerMapIter);
386 
387  bool callCalculateTrajectorySetsCallback(CalculateTrajectorySetsCallbackFunctionType callback,
388  ::ad::rss::world::ObjectId const &egoVehicleId,
389  ::ad::rss::map::RssRouteId const &routeId,
390  ::ad::rss::core::RelativeConstellation const &constellation,
391  ::ad::rss::world::ObjectId const &objectId,
392  ::ad::rss::core::RelativeObjectState const &vehicleState,
393  ::ad::geometry::Polygon &brakePolygon,
394  ::ad::geometry::Polygon &continueForwardPolygon);
395 
396  ::ad::physics::Duration const mDropOutdatedObjectsDuration;
397  ::ad::rss::world::TimeIndex mTimeIndex;
398  ::ad::map::lane::LaneIdSet mMapAreaLanes;
399  ConnectingRoutesCache mConnectingRoutesCache;
400 
404  ::ad::physics::Distance mArtificialObjectSamplingDistance;
405  ArtificialObjectInjectionCallbackFunctionType mArtificialObjectsInjectionCallback;
407 
408  // one writer mutex for the callbacks of the class should be sufficient
409  // vast majority of concurrent access is of shared nature
410  mutable std::shared_timed_mutex mCallbackRwLock;
411 
412  std::map<world::ObjectType, CalculateTrajectorySetsCallbackFunctionType> mCalculateTrajectorySetsCallbackMap;
413 };
414 
415 } // namespace map
416 } // namespace rss
417 } // namespace ad
418 
419 #include "ad/rss/map/detail/RssRouteCheckerDetail.hpp"
class to cache ConnectingRouteList between vehicles to speed up world model creation
Definition: ConnectingRoutesCache.hpp:36
Class to store data of RssVehicleAdapter.
Definition: RssRouteCheckerData.hpp:258
RouteExtensionMode
enumeration defining the mode on route extension
Definition: RssRouteCheckerData.hpp:165
supporting class for implementing the RSS checks
Definition: RssRouteChecker.hpp:35
virtual void objectDataUpdated(RssRouteCheckerPedestrianDataMap< OBJECT_INSTANCE_TYPE > &pedestrianMap)
callback after object data of the pedestrians has been updated
Definition: RssRouteChecker.hpp:292
bool isEgoVehicleAvailable(::ad::rss::world::ObjectId ego_object_id)
check if the ego vehicle object is still present.
Definition: RssRouteChecker.hpp:240
virtual void situationCreated(RssRouteCheckerEgoVehicleData< OBJECT_INSTANCE_TYPE > const &ego_vehicle, RssRouteCheckResult &rssRouteCheckResult)
callback after the rssRouteCheckResult situations has been created for the respective ego vehicle
Definition: RssRouteChecker.hpp:324
bool isEgoVehicleActive(::ad::rss::world::ObjectId ego_object_id)
check if the ego vehicle object is still present and currently active.
Definition: RssRouteChecker.hpp:251
std::function< bool(RssRouteCheckerEgoVehicleData< OBJECT_INSTANCE_TYPE > const &egoVehicle, ::ad::rss::map::RssRouteId const &routeId, ::ad::rss::core::RelativeConstellation const &constellation, ::ad::rss::world::ObjectId const &objectId, ::ad::rss::core::RelativeObjectState const &vehicleState, ::ad::geometry::Polygon &brakePolygon, ::ad::geometry::Polygon &continueForwardPolygon)> CalculateTrajectorySetsCallbackFunctionType
Function callback type for unstructured trajectory set calculation.
Definition: RssRouteChecker.hpp:108
virtual ~RssRouteChecker()=default
destructor
virtual void situationsCreated(RssRouteCheckerEgoVehicleData< OBJECT_INSTANCE_TYPE > const &ego_vehicle, RssObjectResult &rssObjectResult)
callback after all rssRouteCheckResult situations have been created for the respective ego vehicle
Definition: RssRouteChecker.hpp:337
virtual void routesUpdated(RssRouteCheckerVehicleDataMap< OBJECT_INSTANCE_TYPE > &vehicleMap)
callback after the routes of the vehicles have been updated
Definition: RssRouteChecker.hpp:313
virtual void objectDataUpdated(RssRouteCheckerArtificialObjectDataMap< OBJECT_INSTANCE_TYPE > &artificialObjectMap)
callback after object data of the artificial objects has been updated
Definition: RssRouteChecker.hpp:299
std::shared_ptr< RssRouteChecker > Ptr
Smart pointer on RssVehicleAdapter.
Definition: RssRouteChecker.hpp:40
bool restrictOperationToMapArea(std::vector< ad::map::lane::MapAreaPredictionStartPoint > const &predictionStartPoints)
restriction of the map area to a set of reachable lanes
bool restrictOperationToIntersectionArea(::ad::map::point::ENUPoint const &intersectionPoint, ::ad::physics::Distance const &intersectionDistance)
restriction of the map area around an intersection to a set of reachable lanes
Definition: RssRouteCheckerDetail.hpp:505
RssRouteChecker(::ad::physics::Duration const dropOutdatedObjecstDuration)
default constructor
Definition: RssRouteChecker.hpp:48
virtual RssObjectResultList checkObjects(std::chrono::system_clock::time_point const &currentTime, ::ad::physics::Distance const vehicleSamplingDistance, RssEgoVehicleAdapterList< OBJECT_INSTANCE_TYPE > &egoVehicles, RssVehicleAdapterList< OBJECT_INSTANCE_TYPE > &vehicles, ::ad::physics::Distance const pedestrianSamplingDistance, RssPedestrianAdapterList< OBJECT_INSTANCE_TYPE > &pedestrians, typename RssRouteCheckerVehicleData< OBJECT_INSTANCE_TYPE >::RouteExtensionMode routeExtensionMode)
perform the RSS check of the objects
Definition: RssRouteCheckerDetail.hpp:396
virtual void objectDataUpdated(RssRouteCheckerEgoVehicleDataMap< OBJECT_INSTANCE_TYPE > &egoVehicleMap)
callback after object data of the ego vehicles has been updated
Definition: RssRouteChecker.hpp:278
std::shared_ptr< RssRouteChecker const > ConstPtr
Smart pointer on constant RssObjectAdapter.
Definition: RssRouteChecker.hpp:45
void registerCalculateTrajectorySetsCallback(world::ObjectType objectType, CalculateTrajectorySetsCallbackFunctionType calculateTrajectorySetsCallback)
Register a callback for unstructured trajectory set calculation.
Definition: RssRouteCheckerDetail.hpp:192
std::function< RssArtificialObjectAdapterList< OBJECT_INSTANCE_TYPE >(RssRouteCheckerEgoVehicleDataMap< OBJECT_INSTANCE_TYPE > const &egoVehicleMap, RssRouteCheckerVehicleDataMap< OBJECT_INSTANCE_TYPE > const &vehicleMap, RssRouteCheckerPedestrianDataMap< OBJECT_INSTANCE_TYPE > const &pedestrianMap)> ArtificialObjectInjectionCallbackFunctionType
defines the type for callback to inject artificial objects
Definition: RssRouteChecker.hpp:69
virtual void routesUpdated(RssRouteCheckerEgoVehicleDataMap< OBJECT_INSTANCE_TYPE > &egoVehicleMap)
callback after the routes of the ego vehicles have been updated
Definition: RssRouteChecker.hpp:306
virtual void checksPerformed(RssObjectResultList &objectResultList)
callback after all constellations for all ego vehicles have been checked
Definition: RssRouteChecker.hpp:353
virtual void situationsCreated(RssObjectResultList &objectResultList)
callback after all situations for all ego vehicles have been created
Definition: RssRouteChecker.hpp:346
void restrictOperationToMapArea(::ad::map::lane::LaneIdSet const &lanesToConsider)
These group of functions restrict the operation of this class to a certain map area.
Definition: RssRouteCheckerDetail.hpp:478
void registerArtificialObjectInjectionCallback(::ad::physics::Distance const artificialObjectSamplingDistance, ArtificialObjectInjectionCallbackFunctionType artificialObjectsInjectionCallback)
register a callback to inject artificial objects
Definition: RssRouteCheckerDetail.hpp:29
virtual void objectDataUpdated(RssRouteCheckerVehicleDataMap< OBJECT_INSTANCE_TYPE > &vehicleMap)
callback after object data of the vehicles has been updated
Definition: RssRouteChecker.hpp:285
void clearOperationToMapAreaRestriction()
clear the restriction to a certain map area
Definition: RssRouteCheckerDetail.hpp:516
std::vector< typename RssVehicleAdapter< OBJECT_INSTANCE_TYPE >::Ptr > RssVehicleAdapterList
typedef for a list of RssEgoVehicleAdapter smart pointers
Definition: RssObjectAdapter.hpp:509
std::map<::ad::rss::world::ObjectId, RssRouteCheckerEgoVehicleData< OBJECT_INSTANCE_TYPE > > RssRouteCheckerEgoVehicleDataMap
Definition: RssRouteCheckerData.hpp:387
std::map<::ad::rss::world::ObjectId, RssRouteCheckerArtificialObjectData< OBJECT_INSTANCE_TYPE > > RssRouteCheckerArtificialObjectDataMap
Definition: RssRouteCheckerData.hpp:393
std::vector< typename RssPedestrianAdapter< OBJECT_INSTANCE_TYPE >::Ptr > RssPedestrianAdapterList
typedef for a list of RssPedestrianAdapter smart pointers
Definition: RssObjectAdapter.hpp:221
std::map<::ad::rss::world::ObjectId, RssRouteCheckerVehicleData< OBJECT_INSTANCE_TYPE > > RssRouteCheckerVehicleDataMap
Definition: RssRouteCheckerData.hpp:381
std::vector< typename RssEgoVehicleAdapter< OBJECT_INSTANCE_TYPE >::Ptr > RssEgoVehicleAdapterList
typedef for a list of RssEgoVehicleAdapter smart pointers
Definition: RssObjectAdapter.hpp:669
uint64_t RssRouteId
DataType RssRouteId.
Definition: RssRouteId.hpp:39
std::vector<::ad::rss::map::RssObjectResult > RssObjectResultList
DataType RssObjectResultList.
Definition: RssObjectResultList.hpp:42
std::map<::ad::rss::world::ObjectId, RssRouteCheckerPedestrianData< OBJECT_INSTANCE_TYPE > > RssRouteCheckerPedestrianDataMap
Definition: RssRouteCheckerData.hpp:375
namespace ad
Definition: RouteAccelerations.hpp:33
DataType RssObjectResult.
Definition: RssObjectResult.hpp:47
DataType RssRouteCheckResult.
Definition: RssRouteCheckResult.hpp:48
DataType RssRoute.
Definition: RssRoute.hpp:49