TinyRobotics
Loading...
Searching...
No Matches
IOdometryModel2D.h
1#pragma once
2#include "TinyRobotics/units/Units.h"
3
4namespace tinyrobotics {
5
6/**
7 * @brief Abstract interface for 2D odometry models.
8 */
9class IOdometryModel2D : public MessageHandler {
10 public:
11 /**
12 * @brief Virtual destructor for interface.
13 */
14 virtual ~IOdometryModel2D() = default;
15
16 /**
17 * @brief Get the current speed of the vehicle.
18 * @return Speed of the vehicle (meters/second)
19 */
20 virtual Speed getSpeed() const = 0;
21
22 /**
23 * @brief Get the current steering angle of the vehicle.
24 * @return Steering angle (radians)
25 */
26 virtual Angle getSteeringAngle() const = 0;
27
28 /**
29 * @brief Update the speed estimate based on elapsed time.
30 * @param deltaTimeMs Time interval (milliseconds)
31 */
32 virtual void updateSpeed(uint32_t deltaTimeMs) = 0;
33
34 /**
35 * @brief Set the speed source (e.g., encoder, estimator) for this model.
36 * @param speedSource Reference to an ISpeedSource implementation
37 */
38 virtual void setSpeedSource(ISpeedSource& speedSource) = 0;
39 /**
40 * @brief Register a callback to be invoked on relevant events (e.g., input change, update).
41 * @param callback Function pointer with signature void callback(void* userData)
42 * @param userData User-provided pointer passed to the callback
43 */
44 virtual void registerCallback(void (*callback)(void*), void* userData) = 0;
45 /**
46 * @brief Compute heading change (deltaTheta) for odometry kinematics.
47 * @param speed Speed of the vehicle (meters/second)
48 * @param steeringAngle Steering angle (radians)
49 * @param deltaTimeMs Time interval (milliseconds)
50 * @return Change in heading (radians)
51 */
52 virtual float computeDeltaTheta(uint16_t deltaTimeMs) const = 0;
53 /**
54 * @brief Compute position change (deltaX, deltaY) for odometry kinematics.
55 * @param speed Speed of the vehicle (meters/second)
56 * @param theta Heading (radians)
57 * @param deltaTimeMs Time interval (milliseconds)
58 * @param[out] deltaX Change in X position (meters)
59 * @param[out] deltaY Change in Y position (meters)
60 */
61 virtual void computeDeltaXY(float theta, uint32_t deltaTimeMs, float& deltaX, float& deltaY) const = 0;
62};
63
64} // namespace tinyrobotics
Represents an angle with unit conversion and wrap-around support.
Definition: Angle.h:42
Abstract interface for 2D odometry models.
Definition: IOdometryModel2D.h:9
virtual float computeDeltaTheta(uint16_t deltaTimeMs) const =0
Compute heading change (deltaTheta) for odometry kinematics.
virtual Angle getSteeringAngle() const =0
Get the current steering angle of the vehicle.
virtual ~IOdometryModel2D()=default
Virtual destructor for interface.
virtual Speed getSpeed() const =0
Get the current speed of the vehicle.
virtual void computeDeltaXY(float theta, uint32_t deltaTimeMs, float &deltaX, float &deltaY) const =0
Compute position change (deltaX, deltaY) for odometry kinematics.
virtual void updateSpeed(uint32_t deltaTimeMs)=0
Update the speed estimate based on elapsed time.
virtual void registerCallback(void(*callback)(void *), void *userData)=0
Register a callback to be invoked on relevant events (e.g., input change, update).
virtual void setSpeedSource(ISpeedSource &speedSource)=0
Set the speed source (e.g., encoder, estimator) for this model.
Represents a speed measurement with unit conversion support.
Definition: Speed.h:40