PathPlannerLib
Loading...
Searching...
No Matches
PPHolonomicDriveController.h
1#pragma once
2
3#include <frc/controller/PIDController.h>
4#include <frc/controller/ProfiledPIDController.h>
5#include <units/velocity.h>
6#include <units/length.h>
7#include <units/time.h>
8#include <units/angular_velocity.h>
9#include <frc/geometry/Translation2d.h>
10#include <frc/geometry/Rotation2d.h>
11#include <frc/geometry/Pose2d.h>
12#include <frc/kinematics/ChassisSpeeds.h>
13#include <functional>
14#include <optional>
15#include "pathplanner/lib/util/GeometryUtil.h"
16#include "pathplanner/lib/config/PIDConstants.h"
17#include "pathplanner/lib/trajectory/PathPlannerTrajectory.h"
18#include "pathplanner/lib/controllers/PathFollowingController.h"
19
20namespace pathplanner {
22public:
30 PPHolonomicDriveController(PIDConstants translationConstants,
31 PIDConstants rotationConstants, units::second_t period = 0.02_s);
32
39 constexpr void setEnabled(bool enabled) {
40 m_enabled = enabled;
41 }
42
43 inline void reset(const frc::Pose2d &currentPose,
44 const frc::ChassisSpeeds &currentSpeeds) override {
45 m_xController.Reset();
46 m_yController.Reset();
47 m_rotationController.Reset();
48 }
49
55 inline units::meter_t getPositionalError() override {
56 return m_translationError.Norm();
57 }
58
66 frc::ChassisSpeeds calculateRobotRelativeSpeeds(
67 const frc::Pose2d &currentPose,
68 const PathPlannerTrajectoryState &referenceState) override;
69
76 inline bool isHolonomic() override {
77 return true;
78 }
79
86 [[deprecated("Use overrideRotationFeedback instead, with the output of your own PID controller")]]
87 static inline void setRotationTargetOverride(
88 std::function<std::optional<frc::Rotation2d>()> rotationTargetOverride) {
89 PPHolonomicDriveController::rotationTargetOverride =
90 rotationTargetOverride;
91 }
92
98 static inline void overrideXFeedback(
99 std::function<units::meters_per_second_t()> xFeedbackOverride) {
100 PPHolonomicDriveController::xFeedbackOverride = xFeedbackOverride;
101 }
102
107 static inline void clearXFeedbackOverride() {
108 PPHolonomicDriveController::xFeedbackOverride = { };
109 }
110
116 static inline void overrideYFeedback(
117 std::function<units::meters_per_second_t()> yFeedbackOverride) {
118 PPHolonomicDriveController::yFeedbackOverride = yFeedbackOverride;
119 }
120
125 static inline void clearYFeedbackOverride() {
126 PPHolonomicDriveController::yFeedbackOverride = { };
127 }
128
135 static inline void overrideXYFeedback(
136 std::function<units::meters_per_second_t()> xFeedbackOverride,
137 std::function<units::meters_per_second_t()> yFeedbackOverride) {
138 overrideXFeedback(xFeedbackOverride);
139 overrideYFeedback(yFeedbackOverride);
140 }
141
146 static inline void clearXYFeedbackOverride() {
149 }
150
156 static inline void overrideRotationFeedback(
157 std::function<units::radians_per_second_t()> rotationFeedbackOverride) {
158 PPHolonomicDriveController::rotationFeedbackOverride =
159 rotationFeedbackOverride;
160 }
161
166 static inline void clearRotationFeedbackOverride() {
167 PPHolonomicDriveController::rotationFeedbackOverride = { };
168 }
169
171 static inline void clearFeedbackOverrides() {
174 }
175
176private:
177 frc::PIDController m_xController;
178 frc::PIDController m_yController;
179 frc::PIDController m_rotationController;
180
181 frc::Translation2d m_translationError;
182 bool m_enabled = true;
183
184 static std::function<std::optional<frc::Rotation2d>()> rotationTargetOverride;
185
186 static std::function<units::meters_per_second_t()> xFeedbackOverride;
187 static std::function<units::meters_per_second_t()> yFeedbackOverride;
188 static std::function<units::radians_per_second_t()> rotationFeedbackOverride;
189};
190}
Definition: PIDConstants.h:4
Definition: PPHolonomicDriveController.h:21
void reset(const frc::Pose2d &currentPose, const frc::ChassisSpeeds &currentSpeeds) override
Definition: PPHolonomicDriveController.h:43
static void setRotationTargetOverride(std::function< std::optional< frc::Rotation2d >()> rotationTargetOverride)
Definition: PPHolonomicDriveController.h:87
static void clearYFeedbackOverride()
Definition: PPHolonomicDriveController.h:125
static void overrideXFeedback(std::function< units::meters_per_second_t()> xFeedbackOverride)
Definition: PPHolonomicDriveController.h:98
frc::ChassisSpeeds calculateRobotRelativeSpeeds(const frc::Pose2d &currentPose, const PathPlannerTrajectoryState &referenceState) override
Definition: PPHolonomicDriveController.cpp:28
static void clearFeedbackOverrides()
Definition: PPHolonomicDriveController.h:171
units::meter_t getPositionalError() override
Definition: PPHolonomicDriveController.h:55
static void overrideXYFeedback(std::function< units::meters_per_second_t()> xFeedbackOverride, std::function< units::meters_per_second_t()> yFeedbackOverride)
Definition: PPHolonomicDriveController.h:135
static void overrideYFeedback(std::function< units::meters_per_second_t()> yFeedbackOverride)
Definition: PPHolonomicDriveController.h:116
bool isHolonomic() override
Definition: PPHolonomicDriveController.h:76
static void clearXYFeedbackOverride()
Definition: PPHolonomicDriveController.h:146
static void overrideRotationFeedback(std::function< units::radians_per_second_t()> rotationFeedbackOverride)
Definition: PPHolonomicDriveController.h:156
static void clearRotationFeedbackOverride()
Definition: PPHolonomicDriveController.h:166
static void clearXFeedbackOverride()
Definition: PPHolonomicDriveController.h:107
constexpr void setEnabled(bool enabled)
Definition: PPHolonomicDriveController.h:39
Definition: PathFollowingController.h:9
Definition: PathPlannerTrajectoryState.h:17