PathPlannerLib
Loading...
Searching...
No Matches
SwerveSetpointGenerator.h
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"
5
6#include <frc/kinematics/SwerveModuleState.h>
7#include <frc/kinematics/SwerveDriveKinematics.h>
8#include <frc/RobotController.h>
9#include <optional>
10
11using namespace pathplanner;
12
13namespace pathplanner {
22public:
23
28
36 units::turns_per_second_t maxSteerVelocity);
37
58 frc::ChassisSpeeds desiredStateRobotRelative,
59 std::optional<PathConstraints> constraints, units::second_t dt,
60 units::volt_t inputVoltage);
61
80 frc::ChassisSpeeds desiredStateRobotRelative,
81 std::optional<PathConstraints> constraints, units::second_t dt);
82
100 frc::ChassisSpeeds desiredStateRobotRelative, units::second_t dt,
101 units::volt_t inputVoltage) {
102 return generateSetpoint(prevSetpoint, desiredStateRobotRelative,
103 std::nullopt, dt, inputVoltage);
104 }
105
121 frc::ChassisSpeeds desiredStateRobotRelative, units::second_t dt) {
122 return generateSetpoint(prevSetpoint, desiredStateRobotRelative,
123 std::nullopt, dt);
124 }
125
135 inline static bool flipHeading(frc::Rotation2d prevToGoal) {
136 return units::math::abs(prevToGoal.Radians()).value() > PI / 2.0;
137 }
138
139 inline static units::radian_t unwrapAngle(double ref, double angle) {
140 double diff = angle - ref;
141 if (diff > PI) {
142 return units::radian_t(angle - 2.0 * PI);
143 } else if (diff < -PI) {
144 return units::radian_t(angle + 2.0 * PI);
145 } else {
146 return units::radian_t(angle);
147 }
148 }
149
150private:
151 double kEpsilon = 1e-6;
152
153 RobotConfig m_robotConfig;
154 units::turns_per_second_t maxSteerVelocity;
155 units::volt_t brownoutVoltage;
156
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);
161
162 inline bool isValidS(double s) {
163 return s >= 0.0 && s <= 1.0 && std::isfinite(s);
164 }
165
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);
170
171 inline bool epsilonEquals(double a, double b, double epsilon) {
172 return (a - epsilon <= b) && (a + epsilon >= b);
173 }
174
175 inline bool epsilonEquals(double a, double b) {
176 return epsilonEquals(a, b, kEpsilon);
177 }
178
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>());
183 }
184
185};
186}
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