libstp
Robotics library for Botball
Loading...
Searching...
No Matches
odometry.hpp
Go to the documentation of this file.
1#pragma once
2
4#include <Eigen/Core>
5
6namespace libstp::odometry
7{
15 {
20 double forward;
21
26 double lateral;
27
33 };
34
55
56 struct IOdometry
57 {
58 virtual ~IOdometry() = default;
59
64 virtual void update(double dt) = 0;
65
70 [[nodiscard]] virtual foundation::Pose getPose() const = 0;
71
76 [[nodiscard]] virtual DistanceFromOrigin getDistanceFromOrigin() const = 0;
77
85 [[nodiscard]] virtual double getHeading() const = 0;
86
100 [[nodiscard]] virtual double getHeadingError(double target_heading_rad) const = 0;
101
106 [[nodiscard]] virtual double getAbsoluteHeading() const = 0;
107
117 [[nodiscard]] virtual double getPathLength() const = 0;
118
122 virtual void reset() = 0;
123
136 {
137 (void)source;
138 }
139
148 [[nodiscard]] virtual OdometrySource getPreferredSource() const
149 {
151 }
152
163 [[nodiscard]] virtual OdometrySource getActiveSource() const
164 {
166 }
167
186 [[nodiscard]] virtual foundation::Pose getPoseFromSource(OdometrySource source) const
187 {
188 (void)source;
189 return getInternalPose();
190 }
191
202 [[nodiscard]] virtual bool isSourceAvailable(OdometrySource source) const
203 {
204 return source == OdometrySource::Internal;
205 }
206
219 [[nodiscard]] virtual foundation::Pose getInternalPose() const
220 {
221 return getPose();
222 }
223
229 [[nodiscard]] virtual double getInternalHeading() const
230 {
231 return getHeading();
232 }
233
240 {
241 return getDistanceFromOrigin();
242 }
243 };
244}
OdometrySource
Which sensor source currently backs the primary pose estimate.
Definition odometry.hpp:49
@ CalibrationBoard
External calibration board (optical-flow + IMU fusion).
Definition odometry.hpp:53
@ Internal
Cheap on-board dead reckoning (STM32 wheel odometry / sim).
Definition odometry.hpp:51
Position plus planar heading used by several motion-related modules.
Definition types.hpp:12
Distance measurements from the origin (set by last reset).
Definition odometry.hpp:15
virtual ~IOdometry()=default
virtual OdometrySource getActiveSource() const
Definition odometry.hpp:163
virtual double getHeading() const =0
virtual foundation::Pose getInternalPose() const
Definition odometry.hpp:219
virtual double getPathLength() const =0
virtual DistanceFromOrigin getDistanceFromOrigin() const =0
virtual double getHeadingError(double target_heading_rad) const =0
virtual void update(double dt)=0
virtual double getInternalHeading() const
Definition odometry.hpp:229
virtual double getAbsoluteHeading() const =0
virtual foundation::Pose getPoseFromSource(OdometrySource source) const
Definition odometry.hpp:186
virtual bool isSourceAvailable(OdometrySource source) const
Definition odometry.hpp:202
virtual void setPreferredSource(OdometrySource source)
Definition odometry.hpp:135
virtual DistanceFromOrigin getInternalDistanceFromOrigin() const
Definition odometry.hpp:239
virtual OdometrySource getPreferredSource() const
Definition odometry.hpp:148
virtual foundation::Pose getPose() const =0