1#include "pathplanner/lib/config/RobotConfig.h"
2#include "pathplanner/lib/util/DriveFeedforwards.h"
3#include "pathplanner/lib/util/swerve/SwerveSetpoint.h"
4#include "pathplanner/lib/path/PathConstraints.h"
6#include <frc/kinematics/SwerveModuleState.h>
7#include <frc/kinematics/SwerveDriveKinematics.h>
8#include <frc/RobotController.h>
11using namespace pathplanner;
13namespace pathplanner {
36 units::turns_per_second_t maxSteerVelocity);
58 frc::ChassisSpeeds desiredStateRobotRelative,
59 std::optional<PathConstraints> constraints, units::second_t dt,
60 units::volt_t inputVoltage);
80 frc::ChassisSpeeds desiredStateRobotRelative,
81 std::optional<PathConstraints> constraints, units::second_t dt);
100 frc::ChassisSpeeds desiredStateRobotRelative, units::second_t dt,
101 units::volt_t inputVoltage) {
103 std::nullopt, dt, inputVoltage);
121 frc::ChassisSpeeds desiredStateRobotRelative, units::second_t dt) {
136 return units::math::abs(prevToGoal.Radians()).value() > PI / 2.0;
139 inline static units::radian_t unwrapAngle(
double ref,
double angle) {
140 double diff = angle - ref;
142 return units::radian_t(angle - 2.0 * PI);
143 }
else if (diff < -PI) {
144 return units::radian_t(angle + 2.0 * PI);
146 return units::radian_t(angle);
151 double kEpsilon = 1e-6;
154 units::turns_per_second_t maxSteerVelocity;
155 units::volt_t brownoutVoltage;
157 double findSteeringMaxS(units::meters_per_second_t x_0,
158 units::meters_per_second_t y_0, units::radian_t f_0,
159 units::meters_per_second_t x_1, units::meters_per_second_t y_1,
160 units::radian_t f_1, units::radian_t max_deviation);
162 inline bool isValidS(
double s) {
163 return s >= 0.0 && s <= 1.0 && std::isfinite(s);
166 double findDriveMaxS(units::meters_per_second_t x_0,
167 units::meters_per_second_t y_0, units::meters_per_second_t x_1,
168 units::meters_per_second_t y_1,
169 units::meters_per_second_t max_vel_step);
171 inline bool epsilonEquals(
double a,
double b,
double epsilon) {
172 return (a - epsilon <= b) && (a + epsilon >= b);
175 inline bool epsilonEquals(
double a,
double b) {
176 return epsilonEquals(a, b, kEpsilon);
179 inline bool epsilonEquals(frc::ChassisSpeeds s1, frc::ChassisSpeeds s2) {
180 return epsilonEquals(s1.vx.to<
double>(), s2.vx.to<
double>())
181 && epsilonEquals(s1.vy.to<
double>(), s2.vy.to<
double>())
182 && epsilonEquals(s1.omega.to<
double>(), s2.omega.to<
double>());
Definition: RobotConfig.h:17
Definition: SwerveSetpointGenerator.h:21
SwerveSetpoint generateSetpoint(SwerveSetpoint prevSetpoint, frc::ChassisSpeeds desiredStateRobotRelative, units::second_t dt, units::volt_t inputVoltage)
Definition: SwerveSetpointGenerator.h:99
SwerveSetpoint generateSetpoint(SwerveSetpoint prevSetpoint, frc::ChassisSpeeds desiredStateRobotRelative, units::second_t dt)
Definition: SwerveSetpointGenerator.h:120
static bool flipHeading(frc::Rotation2d prevToGoal)
Definition: SwerveSetpointGenerator.h:135
SwerveSetpoint generateSetpoint(SwerveSetpoint prevSetpoint, frc::ChassisSpeeds desiredStateRobotRelative, std::optional< PathConstraints > constraints, units::second_t dt, units::volt_t inputVoltage)
Definition: SwerveSetpointGenerator.cpp:14
SwerveSetpointGenerator()
Definition: SwerveSetpointGenerator.cpp:4
Definition: SwerveSetpoint.h:18