ad_rss
RssDynamicsValidInputRange.hpp
Go to the documentation of this file.
1 /*
2  * ----------------- BEGIN LICENSE BLOCK ---------------------------------
3  *
4  * Copyright (C) 2018-2022 Intel Corporation
5  *
6  * SPDX-License-Identifier: LGPL-2.1-only
7  *
8  * ----------------- END LICENSE BLOCK -----------------------------------
9  */
10 
18 #pragma once
19 
20 #include <cmath>
21 #include <limits>
22 #include "ad/physics/DistanceValidInputRange.hpp"
23 #include "ad/physics/DurationValidInputRange.hpp"
24 #include "ad/physics/SpeedValidInputRange.hpp"
29 #include "spdlog/fmt/ostr.h"
30 #include "spdlog/spdlog.h"
31 
44 inline bool withinValidInputRange(::ad::rss::world::RssDynamics const &input, bool const logErrors = true)
45 {
46  // check for generic member input ranges
47  bool inValidInputRange = true;
48  inValidInputRange = withinValidInputRange(input.alpha_lon, logErrors)
49  && withinValidInputRange(input.alpha_lat, logErrors)
51  && withinValidInputRange(input.response_time, logErrors)
53  && withinValidInputRange(input.unstructured_settings, logErrors)
55  if (!inValidInputRange && logErrors)
56  {
57  spdlog::error("withinValidInputRange(::ad::rss::world::RssDynamics)>> {} has invalid member",
58  input); // LCOV_EXCL_BR_LINE
59  }
60 
61  // check for individual input ranges
62  if (inValidInputRange)
63  {
64  inValidInputRange = (::ad::physics::Distance(0.) <= input.lateral_fluctuation_margin)
65  && (input.lateral_fluctuation_margin <= ::ad::physics::Distance(1.));
66  if (!inValidInputRange && logErrors)
67  {
68  spdlog::error(
69  "withinValidInputRange(::ad::rss::world::RssDynamics)>> {} element {} out of valid input range [{}, {}]",
70  input,
72  ::ad::physics::Distance(0.),
73  ::ad::physics::Distance(1.)); // LCOV_EXCL_BR_LINE
74  }
75  }
76 
77  if (inValidInputRange)
78  {
79  inValidInputRange
80  = (::ad::physics::Duration(0.) < input.response_time) && (input.response_time <= ::ad::physics::Duration(10.));
81  if (!inValidInputRange && logErrors)
82  {
83  spdlog::error(
84  "withinValidInputRange(::ad::rss::world::RssDynamics)>> {} element {} out of valid input range [{}, {}]",
85  input,
86  input.response_time,
87  ::ad::physics::Duration(0.),
88  ::ad::physics::Duration(10.)); // LCOV_EXCL_BR_LINE
89  }
90  }
91 
92  return inValidInputRange;
93 }
bool withinValidInputRange(::ad::rss::world::RssDynamics const &input, bool const logErrors=true)
check if the given RssDynamics is within valid input range
Definition: RssDynamicsValidInputRange.hpp:44
DataType RssDynamics.
Definition: RssDynamics.hpp:51
::ad::physics::Speed max_speed_on_acceleration
Definition: RssDynamics.hpp:155
::ad::rss::world::UnstructuredSettings unstructured_settings
Definition: RssDynamics.hpp:160
::ad::physics::Distance lateral_fluctuation_margin
Definition: RssDynamics.hpp:141
::ad::physics::Distance min_longitudinal_safety_distance
Definition: RssDynamics.hpp:172
::ad::rss::world::LateralRssAccelerationValues alpha_lat
Definition: RssDynamics.hpp:136
::ad::physics::Duration response_time
Definition: RssDynamics.hpp:146
::ad::rss::world::LongitudinalRssAccelerationValues alpha_lon
Definition: RssDynamics.hpp:131