8#ifndef SEN_UTIL_DR_DETAIL_DEAD_RECKONER_BASE_H
9#define SEN_UTIL_DR_DETAIL_DEAD_RECKONER_BASE_H
109 using SpatialVariant = std::remove_const_t<std::remove_reference_t<decltype(std::declval<T>().getSpatial())>>;
111 using FpsSpatial = std::variant_alternative_t<1U, SpatialVariant>;
112 using RpsSpatial = std::variant_alternative_t<2U, SpatialVariant>;
113 using RvsSpatial = std::variant_alternative_t<3U, SpatialVariant>;
114 using FvsSpatial = std::variant_alternative_t<4U, SpatialVariant>;
115 using RprLocation =
decltype(std::declval<RvsSpatial>().worldLocation);
117 using RprVelocity =
decltype(std::declval<RvsSpatial>().velocityVector);
150 const auto& value = std::get<4>(spatial);
151 return drFvw({value.isFrozen,
162 const auto& value = std::get<3>(spatial);
163 return drRvw({value.isFrozen,
174 const auto& value = std::get<1>(spatial);
175 return drFpw({value.isFrozen,
184 const auto& value = std::get<2>(spatial);
185 return drRpw({value.isFrozen,
195 const auto& value = std::get<8>(spatial);
196 return drFvb({value.isFrozen,
207 const auto& value = std::get<7>(spatial);
208 return drRvb({value.isFrozen,
219 const auto& value = std::get<5>(spatial);
220 return drFpb({value.isFrozen,
229 const auto& value = std::get<6>(spatial);
230 return drRpb({value.isFrozen,
240 const auto& value = std::get<0>(spatial);
251 cachedSituation_ = {};
252 cachedGeodeticSituation_ = {};
257 return timeStamp == cachedSituation_.timeStamp;
264 return timeStamp == cachedGeodeticSituation_.timeStamp;
276 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:272
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:249
const GeodeticSituation & getCachedGeodeticSituation() const noexcept
Definition dead_reckoner_base.h:274
void setCachedGeodeticSituation(const GeodeticSituation &situation)
Definition dead_reckoner_base.h:267
void setCachedSituation(const Situation &situation)
Definition dead_reckoner_base.h:260
bool isSituationCached(sen::TimeStamp timeStamp) const noexcept
Definition dead_reckoner_base.h:255
void smooth(const Situation &update)
const Situation & getSmoothSituation() const noexcept
bool isGeodeticSituationCached(sen::TimeStamp timeStamp) const noexcept
Definition dead_reckoner_base.h:262
std::variant_alternative_t< 2U, SpatialVariant > RpsSpatial
Definition dead_reckoner_base.h:112
DeadReckonerTemplateBase(DrConfig config={})
Definition dead_reckoner_base.h:136
std::variant_alternative_t< 4U, SpatialVariant > FvsSpatial
Definition dead_reckoner_base.h:114
decltype(std::declval< RvsSpatial >().orientation) RprOrientation
Definition dead_reckoner_base.h:116
decltype(std::declval< RvsSpatial >().worldLocation) RprLocation
Definition dead_reckoner_base.h:115
std::variant_alternative_t< 1U, SpatialVariant > FpsSpatial
Definition dead_reckoner_base.h:111
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:141
std::remove_const_t< std::remove_reference_t< decltype(std::declval< T >().getSpatial())> > SpatialVariant
Definition dead_reckoner_base.h:109
decltype(std::declval< RvsSpatial >().accelerationVector) RprAcceleration
Definition dead_reckoner_base.h:118
std::variant_alternative_t< 0U, SpatialVariant > StaticSpatial
Definition dead_reckoner_base.h:110
std::variant_alternative_t< 3U, SpatialVariant > RvsSpatial
Definition dead_reckoner_base.h:113
~DeadReckonerTemplateBase() override=default
decltype(std::declval< RvsSpatial >().angularVelocity) RprAngularVelocity
Definition dead_reckoner_base.h:119
decltype(std::declval< RvsSpatial >().velocityVector) RprVelocity
Definition dead_reckoner_base.h:117
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:172
Velocity fromRprVelocity(const T &value)
Translates to a Velocity struct from a RPR Velocity.
Definition dead_reckoner_impl.h:165
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:179
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:158
SpatialAlgorithm
Enumeration of the different Spatial algorithms.
Definition algorithms.h:210
Location fromRprLocation(const T &value)
Translates to a Location struct from a RPR WorldLocation.
Definition dead_reckoner_impl.h:152
Situation drFpw(const Situation &value, sen::TimeStamp time) noexcept
Returns the extrapolated situation using the FPW algorithm.
@ drFPW
Definition algorithms.h:212
@ drRVB
Definition algorithms.h:218
@ drFPB
Definition algorithms.h:216
@ drRVW
Definition algorithms.h:214
@ drFVB
Definition algorithms.h:219
@ drRPW
Definition algorithms.h:213
@ drRPB
Definition algorithms.h:217
@ drStatic
Definition algorithms.h:211
@ drFVW
Definition algorithms.h:215
Length in meters.
Definition algorithms.h:61
GeodeticSituation structure with the following parameters:
Definition algorithms.h:180
Situation structure with the following parameters:
Definition algorithms.h:148
#define SEN_UNREACHABLE()
Definition compiler_macros.h:420
@ time
Definition unit.h:34
Definition iterator_adapters.h:16