8#ifndef SEN_UTIL_DR_DEAD_RECKONER_H
9#define SEN_UTIL_DR_DEAD_RECKONER_H
83 [[nodiscard]]
static bool isBodyReferenced(
const SpatialVariant& spatial)
noexcept;
140 const auto situation = extrapolateAt(timeStamp);
142 if (!isBodyReferenced(lastSpatial_))
166 return const_cast<T&
>(object_);
255 const auto update = Parent::extrapolate(lastSpatial_,
time, lastTimeStamp_);
262inline bool DeadReckoner<T>::isBodyReferenced(
const SpatialVariant& spatial)
noexcept
271 if (
const auto& newSpatial = object_.getSpatial(); newSpatial != lastSpatial_)
273 lastSpatial_ = newSpatial;
274 lastTimeStamp_ = spatialOrigin(
time);
275 this->invalidateCache();
280inline sen::TimeStamp DeadReckoner<T>::spatialOrigin(sen::TimeStamp
time)
const noexcept
288 if (
const auto committed = object_.asObject().getLastCommitTime();
289 committed > lastTimeStamp_ && committed <=
time)
A point in time.
Definition timestamp.h:26
const DrConfig & getConfig() const noexcept
const Situation & getCachedSituation() const noexcept
Definition detail/dead_reckoner_base.h:279
const Situation & smoothIfEnabled(const Situation &update)
Smooths the update when configured to and returns what to publish. With smoothing off the walk is ski...
const GeodeticSituation & getCachedGeodeticSituation() const noexcept
Definition detail/dead_reckoner_base.h:281
void setCachedGeodeticSituation(const GeodeticSituation &situation)
Definition detail/dead_reckoner_base.h:274
void setCachedSituation(const Situation &situation)
Definition detail/dead_reckoner_base.h:267
bool isSituationCached(sen::TimeStamp timeStamp) const noexcept
Definition detail/dead_reckoner_base.h:262
bool isGeodeticSituationCached(sen::TimeStamp timeStamp) const noexcept
Definition detail/dead_reckoner_base.h:269
DeadReckonerTemplateBase< T > Parent
Definition dead_reckoner.h:37
typename Parent::RprOrientation RprOrientation
Definition dead_reckoner.h:45
typename Parent::StaticSpatial StaticSpatial
Definition dead_reckoner.h:39
T & getObject() noexcept
Provides direct mutable access to the internal object managed by this instance of the DeadReckoner.
Definition dead_reckoner.h:164
Situation situation(sen::TimeStamp timeStamp) override
Returns the extrapolated/smoothed situation of the object at the timestamp introduced as argument,...
Definition dead_reckoner.h:126
std::function< Situation(sen::TimeStamp)> SituationProcessor
Definition dead_reckoner.h:51
typename Parent::RprAngularVelocity RprAngularVelocity
Definition dead_reckoner.h:48
typename Parent::FpsSpatial FpsSpatial
Definition dead_reckoner.h:40
static Situation toSituation(const SpatialVariant &spatial, sen::TimeStamp timeStamp={})
Translates a SpatialVariant to a Situation struct.
Definition dead_reckoner.h:170
~DeadReckoner() override=default
DeadReckoner(const T &object, DrConfig config={})
Constructor for the DeadReckoner where an object inheriting from rpr::BaseEntity is inputted as a ref...
Definition dead_reckoner.h:119
typename Parent::SpatialVariant SpatialVariant
Definition dead_reckoner.h:38
typename Parent::RpsSpatial RpsSpatial
Definition dead_reckoner.h:41
static GeodeticSituation toGeodeticSituation(const SpatialVariant &spatial, sen::TimeStamp timeStamp={})
Translates a SpatialVariant to a GeodeticSituation struct.
Definition dead_reckoner.h:220
typename Parent::RprVelocity RprVelocity
Definition dead_reckoner.h:46
typename Parent::RprAcceleration RprAcceleration
Definition dead_reckoner.h:47
typename Parent::FvsSpatial FvsSpatial
Definition dead_reckoner.h:43
GeodeticSituation geodeticSituation(sen::TimeStamp timeStamp) override
Returns the extrapolated/smoothed situation of the object at the timestamp introduced as argument,...
Definition dead_reckoner.h:136
std::function< GeodeticSituation(sen::TimeStamp)> GeodeticSituationProcessor
Definition dead_reckoner.h:52
typename Parent::RvsSpatial RvsSpatial
Definition dead_reckoner.h:42
typename Parent::RprLocation RprLocation
Definition dead_reckoner.h:44
std::variant_alternative_t< 2U, SpatialVariant > RpsSpatial
Definition detail/dead_reckoner_base.h:119
DeadReckonerTemplateBase(DrConfig config={})
Definition detail/dead_reckoner_base.h:143
std::variant_alternative_t< 4U, SpatialVariant > FvsSpatial
Definition detail/dead_reckoner_base.h:121
decltype(std::declval< RvsSpatial >().orientation) RprOrientation
Definition detail/dead_reckoner_base.h:123
decltype(std::declval< RvsSpatial >().worldLocation) RprLocation
Definition detail/dead_reckoner_base.h:122
std::variant_alternative_t< 1U, SpatialVariant > FpsSpatial
Definition detail/dead_reckoner_base.h:118
std::remove_const_t< std::remove_reference_t< decltype(std::declval< T >().getSpatial())> > SpatialVariant
Definition detail/dead_reckoner_base.h:116
decltype(std::declval< RvsSpatial >().accelerationVector) RprAcceleration
Definition detail/dead_reckoner_base.h:125
std::variant_alternative_t< 0U, SpatialVariant > StaticSpatial
Definition detail/dead_reckoner_base.h:117
std::variant_alternative_t< 3U, SpatialVariant > RvsSpatial
Definition detail/dead_reckoner_base.h:120
decltype(std::declval< RvsSpatial >().angularVelocity) RprAngularVelocity
Definition detail/dead_reckoner_base.h:126
decltype(std::declval< RvsSpatial >().velocityVector) RprVelocity
Definition detail/dead_reckoner_base.h:124
Orientation ecefToNed(const Orientation &value, const GeodeticWorldLocation &latLonAlt) noexcept
Translates the Orientation in euler angles from ECEF to NED using quaternions.
Acceleration fromRprAcceleration(const T &value)
Translates to Acceleration struct from a RPR Acceleration.
Definition dead_reckoner_impl.h:187
Velocity fromRprVelocity(const T &value)
Translates to a Velocity struct from a RPR Velocity.
Definition dead_reckoner_impl.h:180
GeodeticWorldLocation toLla(const Location &worldLocation) noexcept
Translates from ECEF Location to Geodetic (LatLonAlt) Location.
Situation toSituation(const GeodeticSituation &value) noexcept
Converts a situation from geodetic to ECEF.
GeodeticSituation toGeodeticSituation(const Situation &value) noexcept
Converts a situation from ECEF to geodetic, building the position rotation once for all three quantit...
AngularVelocity fromRprAngularVelocity(const T &value)
Translates to AngularVelocity struct from a RPR AngularVelocity.
Definition dead_reckoner_impl.h:194
Velocity bodyToNed(const Velocity &value, const Orientation &orientationNed) noexcept
Translates Velocity vectors expressed in body coordinates to NED coordinates.
constexpr std::array< SpatialAlgorithm, 4U > bodyAlgorithms
Definition algorithms.h:70
Orientation fromRprOrientation(const T &value)
Translates to an Orientation struct from a RPR Orientation.
Definition dead_reckoner_impl.h:173
SpatialAlgorithm
Length in meters.
Definition algorithms.h:58
Location fromRprLocation(const T &value)
Translates to a Location struct from a RPR WorldLocation.
Definition dead_reckoner_impl.h:167
Dead Reckoning configuration.
Definition algorithms.h:80
GeodeticSituation structure with the following parameters:
Definition algorithms.h:208
Situation structure with the following parameters:
Definition algorithms.h:176
@ time
Definition unit.h:34
Definition iterator_adapters.h:16
Situation toSituation(const GeodeticSituation &value)
Transforms a GeodeticSituation to a Situation.
Definition dead_reckoner.h:112
GeodeticSituation toGeodeticSituation(const Situation &value)
Transform a Situation to a GeodeticSituation.
Definition dead_reckoner.h:106
Helper type for std::variant lambda visitors.
Definition class_helpers.h:170
True when T can report when its data was committed. Generated RPR types can, through asObject(); a ha...
Definition dead_reckoner_impl.h:27