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"
55 units::meter_t
y, units::radian_t
heading,
56 units::meters_per_second_t
vx,
57 units::meters_per_second_t
vy,
58 units::radians_per_second_t
omega,
59 units::meters_per_second_squared_t
ax,
60 units::meters_per_second_squared_t
ay,
61 units::radians_per_second_squared_t
alpha,
90 return frc::Pose2d{
x,
y, frc::Rotation2d{
heading}};
108 template <
int Year = util::kDefaultYear>
110 constexpr auto flipper = choreo::util::GetFlipperForYear<Year>();
111 if constexpr (flipper.isMirrored) {
179 units::second_t t)
const {
182 std::array<units::newton_t, 4> interpolatedForcesX;
183 std::array<units::newton_t, 4> interpolatedForcesY;
184 for (
int i = 0; i < 4; i++) {
185 interpolatedForcesX[i] =
187 interpolatedForcesY[i] =
207 auto jx = (endValue.
ax -
ax) / dt;
208 auto jy = (endValue.
ay -
ay) / dt;
212 x +
vx * τ + 0.5 *
ax * τ2 + 1.0 / 6.0 * jx * τ3,
213 y +
vy * τ + 0.5 *
ay * τ2 + 1.0 / 6.0 * jy * τ3,
215 vx +
ax * τ + 0.5 * jx * τ2,
216 vy +
ay * τ + 0.5 * jy * τ2,
222 interpolatedForcesY};
232 constexpr double epsilon = 1e-6;
234 auto compare_units = [epsilon](
const auto& a,
const auto& b) {
236 std::remove_const_t<std::remove_reference_t<
decltype(a)>>;
237 return units::math::abs(a - b) < UnitType(epsilon);
240 auto compare_arrays = [&compare_units](
const auto& arr1,
const auto& arr2) {
241 return std::equal(arr1.begin(), arr1.end(), arr2.begin(), compare_units);
245 compare_units(
x, other.
x) && compare_units(
y, other.
y) &&
247 compare_units(
vx, other.
vx) && compare_units(
vy, other.
vy) &&
248 compare_units(
omega, other.
omega) && compare_units(
ax, other.
ax) &&
249 compare_units(
ay, other.
ay) && compare_units(
alpha, other.
alpha) &&
258 units::meter_t
x = 0_m;
261 units::meter_t
y = 0_m;
267 units::meters_per_second_t
vx = 0_mps;
270 units::meters_per_second_t
vy = 0_mps;
273 units::radians_per_second_t
omega = 0_rad_per_s;
276 units::meters_per_second_squared_t
ax = 0_mps_sq;
279 units::meters_per_second_squared_t
ay = 0_mps_sq;
282 units::radians_per_second_squared_t
alpha = 0_rad_per_s_sq;
293void to_json(wpi::json& json,
const SwerveSample& trajectorySample);
294void from_json(
const wpi::json& json, SwerveSample& trajectorySample);
298#include "choreo/trajectory/struct/SwerveSampleStruct.h"
Definition SwerveSample.h:28
units::meter_t y
The Y position of the sample relative to the blue alliance wall origin.
Definition SwerveSample.h:261
units::meters_per_second_t vy
The velocity of the sample in the Y direction.
Definition SwerveSample.h:270
constexpr SwerveSample Interpolate(const SwerveSample &endValue, units::second_t t) const
Definition SwerveSample.h:178
constexpr units::second_t GetTimestamp() const
Definition SwerveSample.h:82
units::meters_per_second_t vx
The velocity of the sample in the X direction.
Definition SwerveSample.h:267
units::radians_per_second_t omega
The angular velocity of the sample.
Definition SwerveSample.h:273
units::meters_per_second_squared_t ax
The acceleration of the in the X direction.
Definition SwerveSample.h:276
units::meter_t x
The X position of the sample relative to the blue alliance wall origin.
Definition SwerveSample.h:258
constexpr SwerveSample OffsetBy(units::second_t timeStampOffset) const
Definition SwerveSample.h:156
constexpr bool operator==(const SwerveSample &other) const
Definition SwerveSample.h:231
constexpr frc::ChassisSpeeds GetChassisSpeeds() const
Definition SwerveSample.h:98
constexpr frc::Pose2d GetPose() const
Definition SwerveSample.h:89
constexpr SwerveSample()=default
units::radian_t heading
The heading of the sample, with 0 being in the +X direction.
Definition SwerveSample.h:264
units::second_t timestamp
The timestamp of this sample relative to the beginning of the trajectory.
Definition SwerveSample.h:255
constexpr SwerveSample Flipped() const
Definition SwerveSample.h:109
units::meters_per_second_squared_t ay
The acceleration of the in the Y direction.
Definition SwerveSample.h:279
units::radians_per_second_squared_t alpha
The angular acceleration of the sample.
Definition SwerveSample.h:282
std::array< units::newton_t, 4 > moduleForcesY
Definition SwerveSample.h:290
std::array< units::newton_t, 4 > moduleForcesX
Definition SwerveSample.h:286
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:54