9#include <frc/kinematics/ChassisSpeeds.h>
10#include <units/acceleration.h>
11#include <units/angle.h>
12#include <units/angular_acceleration.h>
13#include <units/angular_velocity.h>
14#include <units/force.h>
15#include <units/length.h>
16#include <units/time.h>
17#include <units/velocity.h>
18#include <wpi/MathExtras.h>
19#include <wpi/json_fwd.h>
21#include "choreo/util/AllianceFlipperUtil.h"
50 units::meter_t
y, units::radian_t
heading,
51 units::meters_per_second_t
vx,
52 units::meters_per_second_t
vy,
53 units::radians_per_second_t
omega,
54 units::meters_per_second_squared_t
ax,
55 units::meters_per_second_squared_t
ay,
56 units::radians_per_second_squared_t
alpha,
81 return frc::Pose2d{
x,
y, frc::Rotation2d{
heading}};
95 template <
int Year = util::kDefaultYear>
97 constexpr auto flipper = choreo::util::GetFlipperForYear<Year>();
98 if constexpr (flipper.isMirrored) {
162 units::second_t t)
const {
165 std::array<units::newton_t, 4> interpolatedForcesX;
166 std::array<units::newton_t, 4> interpolatedForcesY;
167 for (
int i = 0; i < 4; i++) {
168 interpolatedForcesX[i] =
170 interpolatedForcesY[i] =
185 x +
vx * τ + 0.5 *
ax * τ2,
186 y +
vy * τ + 0.5 *
ay * τ2,
195 interpolatedForcesY};
203 constexpr double epsilon = 1e-6;
205 auto compare_units = [epsilon](
const auto& a,
const auto& b) {
207 std::remove_const_t<std::remove_reference_t<
decltype(a)>>;
208 return units::math::abs(a - b) < UnitType(epsilon);
211 auto compare_arrays = [&compare_units](
const auto& arr1,
const auto& arr2) {
212 return std::equal(arr1.begin(), arr1.end(), arr2.begin(), compare_units);
216 compare_units(
x, other.
x) && compare_units(
y, other.
y) &&
218 compare_units(
vx, other.
vx) && compare_units(
vy, other.
vy) &&
219 compare_units(
omega, other.
omega) && compare_units(
ax, other.
ax) &&
220 compare_units(
ay, other.
ay) && compare_units(
alpha, other.
alpha) &&
229 units::meter_t
x = 0_m;
232 units::meter_t
y = 0_m;
238 units::meters_per_second_t
vx = 0_mps;
241 units::meters_per_second_t
vy = 0_mps;
244 units::radians_per_second_t
omega = 0_rad_per_s;
247 units::meters_per_second_squared_t
ax = 0_mps_sq;
250 units::meters_per_second_squared_t
ay = 0_mps_sq;
253 units::radians_per_second_squared_t
alpha = 0_rad_per_s_sq;
264void to_json(wpi::json& json,
const SwerveSample& trajectorySample);
265void from_json(
const wpi::json& json, SwerveSample& trajectorySample);
269#include "choreo/trajectory/struct/SwerveSampleStruct.h"
A single swerve robot sample in a Trajectory.
Definition SwerveSample.h:26
units::meter_t y
The Y position of the sample relative to the blue alliance wall origin.
Definition SwerveSample.h:232
units::meters_per_second_t vy
The velocity of the sample in the Y direction.
Definition SwerveSample.h:241
constexpr SwerveSample Interpolate(const SwerveSample &endValue, units::second_t t) const
Definition SwerveSample.h:161
constexpr units::second_t GetTimestamp() const
Definition SwerveSample.h:75
units::meters_per_second_t vx
The velocity of the sample in the X direction.
Definition SwerveSample.h:238
units::radians_per_second_t omega
The angular velocity of the sample.
Definition SwerveSample.h:244
units::meters_per_second_squared_t ax
The acceleration of the in the X direction.
Definition SwerveSample.h:247
units::meter_t x
The X position of the sample relative to the blue alliance wall origin.
Definition SwerveSample.h:229
constexpr SwerveSample OffsetBy(units::second_t timeStampOffset) const
Definition SwerveSample.h:141
constexpr bool operator==(const SwerveSample &other) const
Definition SwerveSample.h:202
constexpr frc::ChassisSpeeds GetChassisSpeeds() const
Definition SwerveSample.h:87
constexpr frc::Pose2d GetPose() const
Definition SwerveSample.h:80
constexpr SwerveSample()=default
Constructs a SwerveSample that is defaulted.
units::radian_t heading
The heading of the sample, with 0 being in the +X direction.
Definition SwerveSample.h:235
units::second_t timestamp
The timestamp of this sample relative to the beginning of the trajectory.
Definition SwerveSample.h:226
constexpr SwerveSample Flipped() const
Definition SwerveSample.h:96
units::meters_per_second_squared_t ay
The acceleration of the in the Y direction.
Definition SwerveSample.h:250
units::radians_per_second_squared_t alpha
The angular acceleration of the sample.
Definition SwerveSample.h:253
std::array< units::newton_t, 4 > moduleForcesY
Definition SwerveSample.h:261
std::array< units::newton_t, 4 > moduleForcesX
Definition SwerveSample.h:257
constexpr SwerveSample(units::second_t timestamp, units::meter_t x, units::meter_t y, units::radian_t heading, units::meters_per_second_t vx, units::meters_per_second_t vy, units::radians_per_second_t omega, units::meters_per_second_squared_t ax, units::meters_per_second_squared_t ay, units::radians_per_second_squared_t alpha, std::array< units::newton_t, 4 > moduleForcesX, std::array< units::newton_t, 4 > moduleForcesY)
Definition SwerveSample.h:49