libstp
Robotics library for Botball
Loading...
Searching...
No Matches
types.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <numbers>
4
5#include "pch.hpp"
6
7namespace libstp::foundation {
8
9 using Vector3f = Eigen::Vector3f;
10
12 struct Pose {
13 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
14 Vector3f position{Vector3f::Zero()};
15 float heading{0.0f}; // radians, 0 = +X, positive = CCW
16 };
17
23 double vx{0.0};
24 double vy{0.0};
25 double wz{0.0};
26
27 ChassisVelocity() = default;
28 ChassisVelocity(double vx_, double vy_, double wz_) : vx(vx_), vy(vy_), wz(wz_) {}
29 };
30
39 double vx{1.0};
40 double vy{1.0};
41 double wz{1.0};
42
44 VelocityCommandGain(double vx_, double vy_, double wz_) : vx(vx_), vy(vy_), wz(wz_) {}
45 };
46
47 // ============================================================================
48 // Strongly-typed unit wrappers to prevent unit conversion errors
49 // ============================================================================
50
55 struct Meters {
56 double value{0.0};
57
58 constexpr Meters() = default;
59 constexpr explicit Meters(double m) : value(m) {}
60
61 static constexpr Meters from_cm(double cm) { return Meters{cm * 0.01}; }
62 static constexpr Meters from_mm(double mm) { return Meters{mm * 0.001}; }
63
64 constexpr double to_cm() const { return value * 100.0; }
65 constexpr double to_mm() const { return value * 1000.0; }
66
67 constexpr operator double() const { return value; }
68
69 constexpr Meters operator-() const { return Meters{-value}; }
70 constexpr Meters operator+(Meters other) const { return Meters{value + other.value}; }
71 constexpr Meters operator-(Meters other) const { return Meters{value - other.value}; }
72 constexpr Meters operator*(double scale) const { return Meters{value * scale}; }
73 constexpr Meters operator/(double scale) const { return Meters{value / scale}; }
74 };
75
80 double value{0.0};
81
82 constexpr MetersPerSecond() = default;
83 constexpr explicit MetersPerSecond(double mps) : value(mps) {}
84
85 static constexpr MetersPerSecond from_cm_per_sec(double cmps) {
86 return MetersPerSecond{cmps * 0.01};
87 }
88
89 constexpr operator double() const { return value; }
90
91 constexpr MetersPerSecond operator-() const { return MetersPerSecond{-value}; }
92 constexpr MetersPerSecond operator*(double scale) const { return MetersPerSecond{value * scale}; }
93 };
94
99 struct Radians {
100 double value{0.0};
101
102 constexpr Radians() = default;
103 constexpr explicit Radians(double rad) : value(rad) {}
104
105 static constexpr Radians from_deg(double deg) {
106 return Radians{deg * std::numbers::pi / 180.0};
107 }
108
109 constexpr double to_deg() const {
110 return value * 180.0 / std::numbers::pi;
111 }
112
113 constexpr operator double() const { return value; }
114
115 constexpr Radians operator-() const { return Radians{-value}; }
116 constexpr Radians operator+(Radians other) const { return Radians{value + other.value}; }
117 constexpr Radians operator-(Radians other) const { return Radians{value - other.value}; }
118 };
119
124 double value{0.0};
125
126 constexpr RadiansPerSecond() = default;
127 constexpr explicit RadiansPerSecond(double rps) : value(rps) {}
128
129 static constexpr RadiansPerSecond from_deg_per_sec(double dps) {
130 return RadiansPerSecond{dps * std::numbers::pi / 180.0};
131 }
132
133 constexpr operator double() const { return value; }
134
135 constexpr RadiansPerSecond operator-() const { return RadiansPerSecond{-value}; }
136 constexpr RadiansPerSecond operator*(double scale) const { return RadiansPerSecond{value * scale}; }
137 };
138
139 // User-defined literals for convenient construction.
140 namespace literals {
141 constexpr Meters operator""_m(long double value) { return Meters{static_cast<double>(value)}; }
142 constexpr Meters operator""_cm(long double value) { return Meters::from_cm(static_cast<double>(value)); }
143 constexpr Meters operator""_mm(long double value) { return Meters::from_mm(static_cast<double>(value)); }
144 constexpr MetersPerSecond operator""_mps(long double value) { return MetersPerSecond{static_cast<double>(value)}; }
145 constexpr Radians operator""_rad(long double value) { return Radians{static_cast<double>(value)}; }
146 constexpr Radians operator""_deg(long double value) { return Radians::from_deg(static_cast<double>(value)); }
147 constexpr RadiansPerSecond operator""_rad_s(long double value) { return RadiansPerSecond{static_cast<double>(value)}; }
148 }
149
150
151} // namespace libstp::foundation
Eigen::Vector3f Vector3f
Definition types.hpp:9
double vx
Forward velocity (m/s), positive = forward.
Definition types.hpp:23
double vy
Lateral velocity (m/s), positive = right.
Definition types.hpp:24
ChassisVelocity(double vx_, double vy_, double wz_)
Definition types.hpp:28
double wz
Angular velocity (rad/s), positive = counter-clockwise.
Definition types.hpp:25
constexpr MetersPerSecond operator*(double scale) const
Definition types.hpp:92
constexpr MetersPerSecond(double mps)
Definition types.hpp:83
static constexpr MetersPerSecond from_cm_per_sec(double cmps)
Definition types.hpp:85
constexpr MetersPerSecond operator-() const
Definition types.hpp:91
constexpr MetersPerSecond()=default
constexpr Meters(double m)
Definition types.hpp:59
constexpr Meters operator-() const
Definition types.hpp:69
static constexpr Meters from_mm(double mm)
Definition types.hpp:62
constexpr Meters operator*(double scale) const
Definition types.hpp:72
constexpr Meters operator-(Meters other) const
Definition types.hpp:71
static constexpr Meters from_cm(double cm)
Definition types.hpp:61
constexpr Meters()=default
constexpr double to_cm() const
Definition types.hpp:64
constexpr Meters operator/(double scale) const
Definition types.hpp:73
constexpr double to_mm() const
Definition types.hpp:65
constexpr Meters operator+(Meters other) const
Definition types.hpp:70
Position plus planar heading used by several motion-related modules.
Definition types.hpp:12
EIGEN_MAKE_ALIGNED_OPERATOR_NEW Vector3f position
Definition types.hpp:14
constexpr RadiansPerSecond operator*(double scale) const
Definition types.hpp:136
static constexpr RadiansPerSecond from_deg_per_sec(double dps)
Definition types.hpp:129
constexpr RadiansPerSecond(double rps)
Definition types.hpp:127
constexpr RadiansPerSecond operator-() const
Definition types.hpp:135
constexpr RadiansPerSecond()=default
constexpr Radians(double rad)
Definition types.hpp:103
static constexpr Radians from_deg(double deg)
Definition types.hpp:105
constexpr Radians()=default
constexpr Radians operator-() const
Definition types.hpp:115
constexpr Radians operator-(Radians other) const
Definition types.hpp:117
constexpr double to_deg() const
Definition types.hpp:109
constexpr Radians operator+(Radians other) const
Definition types.hpp:116
double vx
Forward-axis command gain (1.0 = no scaling).
Definition types.hpp:39
double wz
Angular-axis command gain (1.0 = no scaling).
Definition types.hpp:41
VelocityCommandGain(double vx_, double vy_, double wz_)
Definition types.hpp:44
double vy
Lateral-axis command gain (1.0 = no scaling).
Definition types.hpp:40