libstp
Robotics library for Botball
Loading...
Searching...
No Matches
odometry_snapshot.hpp
Go to the documentation of this file.
1#pragma once
2
3#include "hal/odometry.hpp"
4
5#include <cmath>
6#include <numbers>
7
8namespace libstp::autotune
9{
15 {
16 double x{0.0};
17 double y{0.0};
18 double heading{0.0};
19
21 {
22 const auto pose = odom.getPose();
23 return {static_cast<double>(pose.position.x()),
24 static_cast<double>(pose.position.y()),
25 static_cast<double>(pose.heading)};
26 }
27
30 [[nodiscard]] std::pair<double, double>
32 {
33 const auto pose = odom.getPose();
34 const double dx = static_cast<double>(pose.position.x()) - x;
35 const double dy = static_cast<double>(pose.position.y()) - y;
36 const double cos_h = std::cos(heading);
37 const double sin_h = std::sin(heading);
38 const double forward = dx * cos_h + dy * sin_h;
39 const double lateral = -dx * sin_h + dy * cos_h;
40 return {forward, lateral};
41 }
42
44 [[nodiscard]] double headingDelta(const odometry::IOdometry& odom) const
45 {
46 const double current = odom.getHeading();
47 return std::remainder(current - heading, 2.0 * std::numbers::pi);
48 }
49 };
50}
static OdometrySnapshot capture(const odometry::IOdometry &odom)
std::pair< double, double > projectBodyFrame(const odometry::IOdometry &odom) const
double headingDelta(const odometry::IOdometry &odom) const
Return signed heading delta wrapped to [-pi, pi].
virtual double getHeading() const =0
virtual foundation::Pose getPose() const =0