8#ifndef SEN_UTIL_DR_DETAIL_DEAD_RECKONER_BASE_H
9#define SEN_UTIL_DR_DETAIL_DEAD_RECKONER_BASE_H
107 using SpatialVariant = std::remove_const_t<std::remove_reference_t<decltype(std::declval<T>().getSpatial())>>;
109 using FpsSpatial = std::variant_alternative_t<1U, SpatialVariant>;
110 using RpsSpatial = std::variant_alternative_t<2U, SpatialVariant>;
111 using RvsSpatial = std::variant_alternative_t<3U, SpatialVariant>;
112 using FvsSpatial = std::variant_alternative_t<4U, SpatialVariant>;
113 using RprLocation =
decltype(std::declval<RvsSpatial>().worldLocation);
115 using RprVelocity =
decltype(std::declval<RvsSpatial>().velocityVector);
148 const auto& value = std::get<4>(spatial);
149 return drFvw({value.isFrozen,
160 const auto& value = std::get<3>(spatial);
161 return drRvw({value.isFrozen,
172 const auto& value = std::get<1>(spatial);
173 return drFpw({value.isFrozen,
182 const auto& value = std::get<2>(spatial);
183 return drRpw({value.isFrozen,
193 const auto& value = std::get<8>(spatial);
194 return drFvb({value.isFrozen,
205 const auto& value = std::get<7>(spatial);
206 return drRvb({value.isFrozen,
217 const auto& value = std::get<5>(spatial);
218 return drFpb({value.isFrozen,
227 const auto& value = std::get<6>(spatial);
228 return drRpb({value.isFrozen,
238 const auto& value = std::get<0>(spatial);
249 cachedSituation_ = {};
250 cachedGeodeticSituation_ = {};
255 return timeStamp == cachedSituation_.timeStamp;
262 return timeStamp == cachedGeodeticSituation_.timeStamp;
274 return cachedGeodeticSituation_;
A point in time.
Definition timestamp.h:26
const DrConfig & getConfig() const noexcept
virtual Situation situation(sen::TimeStamp timeStamp)
Returns the extrapolated/smoothed situation of the object at the timestamp introduced as argument,...
virtual ~DeadReckonerBase()=default
DeadReckonerBase(DrConfig config={})
virtual GeodeticSituation geodeticSituation(sen::TimeStamp timeStamp)
Returns the extrapolated/smoothed situation of the object at the timestamp introduced as argument,...
const Situation & getCachedSituation() const noexcept
Definition dead_reckoner_base.h:270
void updateSituation(const Situation &value)
Updates the last known real time Situation. A valid timestamp is needed inside the Situation provided...
void updateGeodeticSituation(const GeodeticSituation &value)
Updates the last known real time GeodeticSituation. A valid timestamp is needed inside the GeodeticSi...
void setConfig(const DrConfig &config)
void invalidateCache()
Definition dead_reckoner_base.h:247
const GeodeticSituation & getCachedGeodeticSituation() const noexcept
Definition dead_reckoner_base.h:272
void setCachedGeodeticSituation(const GeodeticSituation &situation)
Definition dead_reckoner_base.h:265
void setCachedSituation(const Situation &situation)
Definition dead_reckoner_base.h:258
bool isSituationCached(sen::TimeStamp timeStamp) const noexcept
Definition dead_reckoner_base.h:253
void smooth(const Situation &update)
const Situation & getSmoothSituation() const noexcept
bool isGeodeticSituationCached(sen::TimeStamp timeStamp) const noexcept
Definition dead_reckoner_base.h:260
std::variant_alternative_t< 2U, SpatialVariant > RpsSpatial
Definition dead_reckoner_base.h:110
DeadReckonerTemplateBase(DrConfig config={})
Definition dead_reckoner_base.h:134
std::variant_alternative_t< 4U, SpatialVariant > FvsSpatial
Definition dead_reckoner_base.h:112
decltype(std::declval< RvsSpatial >().orientation) RprOrientation
Definition dead_reckoner_base.h:114
decltype(std::declval< RvsSpatial >().worldLocation) RprLocation
Definition dead_reckoner_base.h:113
std::variant_alternative_t< 1U, SpatialVariant > FpsSpatial
Definition dead_reckoner_base.h:109
static Situation extrapolate(const SpatialVariant &spatial, sen::TimeStamp time, sen::TimeStamp lastTimeStamp)
Returns the extrapolated situation of the RPR Entity given its Spatial field and two timestamps that ...
Definition dead_reckoner_base.h:139
std::remove_const_t< std::remove_reference_t< decltype(std::declval< T >().getSpatial())> > SpatialVariant
Definition dead_reckoner_base.h:107
decltype(std::declval< RvsSpatial >().accelerationVector) RprAcceleration
Definition dead_reckoner_base.h:116
std::variant_alternative_t< 0U, SpatialVariant > StaticSpatial
Definition dead_reckoner_base.h:108
std::variant_alternative_t< 3U, SpatialVariant > RvsSpatial
Definition dead_reckoner_base.h:111
~DeadReckonerTemplateBase() override=default
decltype(std::declval< RvsSpatial >().angularVelocity) RprAngularVelocity
Definition dead_reckoner_base.h:117
decltype(std::declval< RvsSpatial >().velocityVector) RprVelocity
Definition dead_reckoner_base.h:115
Situation drRvb(const Situation &value, sen::TimeStamp time) noexcept
Returns the extrapolated situation using the RVB algorithm.
Situation drRvw(const Situation &value, sen::TimeStamp time) noexcept
Returns the extrapolated situation using the RVW algorithm.
Acceleration fromRprAcceleration(const T &value)
Translates to Acceleration struct from a RPR Acceleration.
Definition dead_reckoner_impl.h:160
Velocity fromRprVelocity(const T &value)
Translates to a Velocity struct from a RPR Velocity.
Definition dead_reckoner_impl.h:153
Situation drFpb(const Situation &value, sen::TimeStamp time) noexcept
Returns the extrapolated situation using the FPB algorithm. The velocity is expressed in body coordin...
Situation drFvb(const Situation &value, sen::TimeStamp time) noexcept
Returns the extrapolated situation using the FVB algorithm.
Situation drRpb(const Situation &value, sen::TimeStamp time) noexcept
Returns the extrapolated situation using the RPB algorithm. The input situation should be expressed i...
Situation drRpw(const Situation &value, sen::TimeStamp time) noexcept
Returns the extrapolated situation using the RPW algorithm.
AngularVelocity fromRprAngularVelocity(const T &value)
Translates to AngularVelocity struct from a RPR AngularVelocity.
Definition dead_reckoner_impl.h:167
Situation drFvw(const Situation &value, sen::TimeStamp time) noexcept
Returns the extrapolated situation using the FVW algorithm.
Orientation fromRprOrientation(const T &value)
Translates to an Orientation struct from a RPR Orientation.
Definition dead_reckoner_impl.h:146
SpatialAlgorithm
Enumeration of the different Spatial algorithms.
Definition algorithms.h:202
Location fromRprLocation(const T &value)
Translates to a Location struct from a RPR WorldLocation.
Definition dead_reckoner_impl.h:140
Situation drFpw(const Situation &value, sen::TimeStamp time) noexcept
Returns the extrapolated situation using the FPW algorithm.
@ drFPW
Definition algorithms.h:204
@ drRVB
Definition algorithms.h:210
@ drFPB
Definition algorithms.h:208
@ drRVW
Definition algorithms.h:206
@ drFVB
Definition algorithms.h:211
@ drRPW
Definition algorithms.h:205
@ drRPB
Definition algorithms.h:209
@ drStatic
Definition algorithms.h:203
@ drFVW
Definition algorithms.h:207
Length in meters.
Definition algorithms.h:58
GeodeticSituation structure with the following parameters:
Definition algorithms.h:173
Situation structure with the following parameters:
Definition algorithms.h:143
#define SEN_UNREACHABLE()
Definition compiler_macros.h:420
@ time
Definition unit.h:34
Definition iterator_adapters.h:16