3#include <frc/geometry/Translation2d.h>
4#include <frc/geometry/Rotation2d.h>
5#include <frc/geometry/Pose2d.h>
6#include <frc/kinematics/ChassisSpeeds.h>
13 kRotational, kMirrored
16 static FieldSymmetry symmetryType;
17 static units::meter_t fieldSizeX;
18 static units::meter_t fieldSizeY;
27 const frc::Translation2d &pos) {
28 switch (symmetryType) {
30 return frc::Translation2d(fieldSizeX - pos.X(),
31 fieldSizeY - pos.Y());
34 return frc::Translation2d(fieldSizeX - pos.X(), pos.Y());
45 const frc::Rotation2d &rotation) {
46 switch (symmetryType) {
48 return rotation - frc::Rotation2d(180_deg);
51 return frc::Rotation2d(180_deg) - rotation;
74 const frc::ChassisSpeeds &fieldSpeeds) {
75 switch (symmetryType) {
77 return frc::ChassisSpeeds { -fieldSpeeds.vx, -fieldSpeeds.vy,
81 return frc::ChassisSpeeds { -fieldSpeeds.vx, fieldSpeeds.vy,
93 template<
class UnitType,
class = std::enable_if_t<
94 units::traits::is_unit_t<UnitType>::value>>
96 const std::vector<UnitType> &feedforwards) {
97 switch (symmetryType) {
102 if (feedforwards.size() == 4) {
103 return std::vector<UnitType> { feedforwards[1], feedforwards[0],
104 feedforwards[3], feedforwards[2] };
105 }
else if (feedforwards.size() == 2) {
106 return std::vector<UnitType> { feedforwards[1], feedforwards[0] };
119 template<
class UnitType,
class = std::enable_if_t<
120 units::traits::is_unit_t<UnitType>::value>>
122 const std::vector<UnitType> &feedforwardXs) {
133 template<
class UnitType,
class = std::enable_if_t<
134 units::traits::is_unit_t<UnitType>::value>>
136 const std::vector<UnitType> &feedforwardYs) {
138 switch (symmetryType) {
140 return flippedFeedforwardYs;
144 for (
auto &feedforwardY : flippedFeedforwardYs) {
147 return flippedFeedforwardYs;
Definition: FlippingUtil.h:10
static frc::Rotation2d flipFieldRotation(const frc::Rotation2d &rotation)
Definition: FlippingUtil.h:44
static frc::Pose2d flipFieldPose(const frc::Pose2d &pose)
Definition: FlippingUtil.h:61
static frc::ChassisSpeeds flipFieldSpeeds(const frc::ChassisSpeeds &fieldSpeeds)
Definition: FlippingUtil.h:73
static std::vector< UnitType > flipFeedforwardYs(const std::vector< UnitType > &feedforwardYs)
Definition: FlippingUtil.h:135
static frc::Translation2d flipFieldPosition(const frc::Translation2d &pos)
Definition: FlippingUtil.h:26
static std::vector< UnitType > flipFeedforwards(const std::vector< UnitType > &feedforwards)
Definition: FlippingUtil.h:95
static std::vector< UnitType > flipFeedforwardXs(const std::vector< UnitType > &feedforwardXs)
Definition: FlippingUtil.h:121