8#ifndef META_OCEAN_TRACKING_SLAM_TRACKER_H
9#define META_OCEAN_TRACKING_SLAM_TRACKER_H
69 inline unsigned int harrisThresholdMean()
const;
85 inline bool isValid()
const;
90 unsigned int numberBins_ = 200u;
93 unsigned int harrisThresholdMin_ = 5u;
96 unsigned int harrisThresholdMax_ = 40u;
99 unsigned int patchSize_ = 7u;
105 float maximalTrackingDistanceUnguided_ = 0.025f;
108 float maximalTrackingDistanceGuidedIMU_ = 0.015f;
111 float maximalTrackingDistanceGuidedObjectPoint_ = 0.01f;
120 Scalar gravityMaximalAngle_ = Numeric::deg2rad(15);
123 double expectedFramesPerSecond_ = 30.0;
151 inline bool isValid()
const;
156 unsigned int layers_ = 0u;
159 unsigned int coarsestLayerRadius_ = 0u;
197 inline bool isValid()
const;
202 unsigned int patchSize_ = 0u;
215 static constexpr bool loggingEnabled_ =
false;
234 inline void reportDelay(
const char* description,
const double maxDelayMs = 1.0);
251 static std::string translateTrackerState(
const TrackerState trackerState);
273 return (harrisThresholdMin_ + harrisThresholdMax_ + 1u) / 2u;
278 if (numberBins_ <= 1u || numberBins_ > 10000u)
283 if (harrisThresholdMin_ <= 0u || harrisThresholdMax_ >= 255u || harrisThresholdMin_ > harrisThresholdMax_)
288 if (patchSize_ != 7u && patchSize_ != 15u && patchSize_ != 31u)
293 if (maximalProjectionError_ <
Scalar(0))
298 if (maximalTrackingDistanceUnguided_ <= 0.0f || maximalTrackingDistanceUnguided_ > 1.0f)
303 if (maximalTrackingDistanceGuidedIMU_ <= 0.0f || maximalTrackingDistanceGuidedIMU_ > maximalTrackingDistanceUnguided_)
308 if (maximalTrackingDistanceGuidedObjectPoint_ <= 0.0f || maximalTrackingDistanceGuidedObjectPoint_ > maximalTrackingDistanceGuidedIMU_)
313 if (!worldGravity_.isUnit())
318 if (gravityMaximalAngle_ <= 0 || gravityMaximalAngle_ >
Numeric::pi_2())
323 if (expectedFramesPerSecond_ <= 0.0)
333 coarsestLayerRadius_(coarsestLayerRadius)
340 return layers_ != 0u && coarsestLayerRadius_ != 0u;
345 return patchSize_ != 0u && trackingParametersUnguided_.isValid() && trackingParametersGuidedIMU_.isValid() && trackingParametersGuidedObjectPoint_.isValid();
353 const double delay = timer_.mseconds();
355 if (delay > maxDelayMs)
357 Log::warning() <<
"Delay: " << description <<
": " << delay <<
"ms";
364 switch (trackerState)
370 return "Initializing";
376 ocean_assert(
false &&
"Invalid tracker state");
static MessageObject warning()
Returns the message for warning messages.
Definition Messenger.h:1090
static constexpr T pi_2()
Returns PI/2 which is equivalent to 90 degree.
Definition Numeric.h:938
This class implements a timestamp.
Definition Timestamp.h:64
This class implements a configuration object for the tracker.
Definition tracking/slam/Tracker.h:56
bool isValid() const
Returns whether this configuration object holds valid setting values.
Definition tracking/slam/Tracker.h:276
unsigned int harrisThresholdMean() const
Returns the mean Harris threshold.
Definition tracking/slam/Tracker.h:271
Configuration()
Creates a new default configuration object.
Definition tracking/slam/Tracker.h:266
bool isInsideExpectedFrameInterval(const Timestamp &previousFrameTimestamp, const Timestamp ¤tFrameTimestamp) const
Returns whether the time interval between the previous and current frame is within the expected range...
This class implements a delay debugger for performance monitoring.
Definition tracking/slam/Tracker.h:224
void reportDelay(const char *description, const double maxDelayMs=1.0)
Reports a delay and logs a warning if it exceeds the threshold.
Definition tracking/slam/Tracker.h:348
HighPerformanceTimer timer_
The high performance timer for measuring elapsed time (release builds only).
Definition tracking/slam/Tracker.h:240
This class holds a pair of tracking parameters defining the pyramid configuration.
Definition tracking/slam/Tracker.h:131
bool isValid() const
Returns whether this parameter pair is valid.
Definition tracking/slam/Tracker.h:338
TrackingParameterPair()=default
Creates an invalid tracking parameter pair.
This class holds tracking parameters for different tracking modes.
Definition tracking/slam/Tracker.h:167
bool isValid() const
Returns whether these tracking parameters are valid.
Definition tracking/slam/Tracker.h:343
TrackingParameterPair trackingParametersGuidedIMU_
Tracking parameters for IMU-guided tracking (IMU rotation available).
Definition tracking/slam/Tracker.h:208
const TrackingParameterPair & parameterPair(const HomogenousMatrix4 &world_T_previousCamera, const Quaternion &previousCamera_Q_currentCamera, const Scalar strongMotionAngle=Numeric::deg2rad(1)) const
Returns the appropriate tracking parameter pair based on camera motion and available guidance.
TrackingParameterPair trackingParametersGuidedObjectPoint_
Tracking parameters for object point-guided tracking (3D object points available for prediction).
Definition tracking/slam/Tracker.h:211
TrackingParameters(const unsigned int width, const unsigned int height, const Tracker::Configuration &configuration)
Creates new tracking parameters based on frame dimensions and configuration.
TrackingParameters()=default
Creates invalid tracking parameters.
TrackingParameterPair trackingParametersUnguided_
Tracking parameters for unguided tracking (no IMU, no prior object points).
Definition tracking/slam/Tracker.h:205
This class implements the base class for all SLAM trackers.
Definition tracking/slam/Tracker.h:35
virtual ~Tracker()=default
Destructs this tracker object.
Tracker()=default
Creates a new tracker object.
static std::string translateTrackerState(const TrackerState trackerState)
Translates a tracker state to a human-readable string.
Definition tracking/slam/Tracker.h:362
TrackerState
Definition of individual tracker states.
Definition tracking/slam/Tracker.h:42
@ TS_UNKNOWN
The tracker is in an unknown state (e.g., not yet started).
Definition tracking/slam/Tracker.h:44
@ TS_INITIALIZING
The tracker is currently initializing (e.g., building initial map).
Definition tracking/slam/Tracker.h:46
@ TS_TRACKING
The tracker is currently tracking (e.g., has a valid map and pose).
Definition tracking/slam/Tracker.h:48
float Scalar
Definition of a scalar type.
Definition Math.h:129
The namespace covering the entire Ocean framework.
Definition Accessor.h:15