9 #include "ad/map/match/AdMapMatching.hpp"
22 ::ad::physics::Distance
const vehicleSamplingDistance,
23 ::ad::physics::Distance
const pedestrianSamplingDistance,
24 ::ad::physics::Distance
const artificialObjectSamplingDistance,
25 ::ad::map::lane::LaneIdSet
const &mapAreaLanes)
26 : mCurrentTime(currentTime)
27 , mVehicleSamplingDistance(vehicleSamplingDistance)
28 , mPedestrianSamplingDistance(pedestrianSamplingDistance)
29 , mArtificialObjectSamplingDistance(artificialObjectSamplingDistance)
30 , mConservativeMaxStoppingDistance(0.)
31 , mMaxVehicleLength(0.)
33 mMapMatching.setRelevantLanes(mapAreaLanes);
41 if (pedestrianToUpdate.second.mActive)
43 auto pedestrianAdapter = pedestrianToUpdate.second.getAdapter();
44 if (!
bool(pedestrianAdapter))
46 throw std::runtime_error(
"RssRouteChecker::ParallelObjectUpdater>> pedestrian adapter invalid");
48 pedestrianToUpdate.second.mRssObjectData
49 = getRssObjectData(pedestrianAdapter, mPedestrianSamplingDistance, pedestrianAdapter->getObjectType());
50 pedestrianToUpdate.second.mClearObjectHistory = !pedestrianAdapter->isObjectIdUniqueOverTime();
51 getLogger()->trace(
"ParallelObjectUpdater::updatePedestrian[{}] {}",
52 pedestrianAdapter->getObjectId(),
53 pedestrianToUpdate.second.mRssObjectData);
60 if (artificialObjectToUpdate.second.mActive)
62 auto artificialObjectAdapter = artificialObjectToUpdate.second.getAdapter();
63 if (!
bool(artificialObjectAdapter))
65 throw std::runtime_error(
"RssRouteChecker::ParallelObjectUpdater>> artificialObject adapter invalid");
67 artificialObjectToUpdate.second.mRssObjectData = getRssObjectData(
68 artificialObjectAdapter, mArtificialObjectSamplingDistance, artificialObjectAdapter->getObjectType());
69 artificialObjectToUpdate.second.mClearObjectHistory = !artificialObjectAdapter->isObjectIdUniqueOverTime();
71 getLogger()->trace(
"ParallelObjectUpdater::updateArtificialObject[{}] {}",
72 artificialObjectAdapter->getObjectId(),
73 artificialObjectToUpdate.second.mRssObjectData);
79 if (vehicleToUpdate.second.mActive)
81 auto vehicleAdapter = vehicleToUpdate.second.getAdapter();
82 if (!
bool(vehicleAdapter))
84 throw std::runtime_error(
"RssRouteChecker::ParallelObjectUpdater>> vehicle adapter invalid");
86 updateVehicle(vehicleToUpdate.second, vehicleAdapter->getObjectType());
92 if (egoVehicleToUpdate.second.mActive)
94 auto egoVehicleAdapter = egoVehicleToUpdate.second.getAdapter();
95 if (!
bool(egoVehicleAdapter))
97 throw std::runtime_error(
"RssRouteChecker::ParallelObjectUpdater>> ego_vehicle adapter invalid");
99 updateVehicle(egoVehicleToUpdate.second, egoVehicleAdapter->getObjectType());
104 physics::Distance
const sampling_distance,
105 ::ad::rss::world::ObjectType
const object_type)
const
108 rssObjectData.
id =
object->getObjectId();
109 rssObjectData.
type = object_type;
111 rssObjectData.
match_object =
object->getMatchedObject(mMapMatching, sampling_distance);
112 rssObjectData.
speed_range =
object->getSpeedRange();
113 rssObjectData.
yaw_rate =
object->getYawRate();
114 rssObjectData.
rss_dynamics =
object->getDefaultRssDynamics();
116 return rssObjectData;
120 ::ad::rss::world::ObjectType
const object_type)
const
124 if (!
bool(vehicleAdapter))
126 throw std::runtime_error(
"RssRouteChecker::ParallelObjectUpdater>> vehicle adapter invalid");
128 vehicle.
mRssObjectData = getRssObjectData(vehicleAdapter, mVehicleSamplingDistance, object_type);
131 "ParallelObjectUpdater::updateVehicle[{}] {}", vehicleAdapter->getObjectId(), vehicle.
mRssObjectData);
141 else if (isValid(lastCenterPoint,
false) && (!vehicle.
mRoutes.empty()))
143 auto const traveledDistance
147 if (traveledDistance > vehicleAdapter->getPositionJumpTraveledDistance())
149 getLogger()->warn(
"ParallelObjectUpdater::updateVehicle[{}] Jump of {} in vehicle position detected {} -> {}, "
150 "larger than allowed distance {}. Force new route!",
155 vehicleAdapter->getPositionJumpTraveledDistance());
160 updateConservativeMaxStoppingDistance(vehicle);
163 ad::physics::Distance getMinRoutePreviewDistance()
165 uint32_t currentMaxStoppingDistance = mConservativeMaxStoppingDistance;
167 currentMaxStoppingDistance /= 10u;
168 currentMaxStoppingDistance++;
169 currentMaxStoppingDistance *= 10;
170 ::ad::physics::Distance result(2 * currentMaxStoppingDistance);
174 result += ::ad::physics::Distance(mMaxVehicleLength);
186 ::ad::physics::Distance conservativeMinStoppingDistance;
190 conservativeMinStoppingDistance))
193 auto const conservativeMinStoppingDistance_uint
194 =
static_cast<uint32_t
>(conservativeMinStoppingDistance.mDistance);
195 uint32_t currentMaxStoppingDistance = mConservativeMaxStoppingDistance;
196 while (conservativeMinStoppingDistance_uint > currentMaxStoppingDistance)
198 mConservativeMaxStoppingDistance.compare_exchange_weak(currentMaxStoppingDistance,
199 conservativeMinStoppingDistance_uint);
203 auto const vehicleLength_uint =
static_cast<uint32_t
>(vehicle.
getAdapter()->getDimensions().length.mDistance);
204 uint32_t currentMaxVehicleLength = mMaxVehicleLength;
205 while (vehicleLength_uint > currentMaxVehicleLength)
207 mMaxVehicleLength.compare_exchange_weak(currentMaxVehicleLength, vehicleLength_uint);
211 std::chrono::system_clock::time_point
const mCurrentTime;
212 ::ad::map::match::AdMapMatching mMapMatching;
213 ::ad::physics::Distance
const mVehicleSamplingDistance;
214 ::ad::physics::Distance
const mPedestrianSamplingDistance;
215 ::ad::physics::Distance
const mArtificialObjectSamplingDistance;
216 mutable std::atomic_uint32_t mConservativeMaxStoppingDistance;
217 mutable std::atomic_uint32_t mMaxVehicleLength;
namespace ad
Definition: RouteAccelerations.hpp:33