Valor 6800 1.0
Loading...
Searching...
No Matches
WorldAlign.h
1
2#pragma once
3#include <utility>
4
5#include <frc/controller/PIDController.h>
6#include <frc/controller/ProfiledPIDController.h>
7#include <frc/geometry/Pose2d.h>
8#include <frc/geometry/Transform2d.h>
9#include <frc/kinematics/ChassisSpeeds.h>
10#include <frc/trajectory/TrapezoidProfile.h>
11#include <networktables/NetworkTableInstance.h>
12#include <networktables/StructTopic.h>
13#include <units/angle.h>
14#include <units/angular_velocity.h>
15#include <units/base.h>
16#include <units/length.h>
17#include <units/time.h>
18#include <units/velocity.h>
19
20#include "valkyrie/controllers/PIDF.h"
21#include "valkyrie/Loggable.h"
22
23namespace valor {
24
26 public:
27 WorldAlign(valor::PIDF x, valor::PIDF y, valor::PIDF rot, frc::TrapezoidProfile<units::meter>::Constraints xConstraints,
28 frc::TrapezoidProfile<units::meter>::Constraints yConstraints,
29 frc::TrapezoidProfile<units::radian>::Constraints rotConstraints);
30
31 static frc::Pose2d offsetGetter(frc::Pose2d, frc::Transform2d);
32
33 template <class Distance, class Velocity = units::compound_unit<Distance, units::inverse<units::seconds>>,
34 class Acceleration = units::compound_unit<Velocity, units::inverse<units::seconds>>>
36 units::unit_t<Distance> distance{0};
37 units::unit_t<Velocity> velocity{0};
38 units::unit_t<Acceleration> acceleration{0};
39 };
40
46 void setPID(valor::PIDF x, valor::PIDF y, valor::PIDF rot);
47 void setPIDx(valor::PIDF);
48 void setPIDy(valor::PIDF);
49 void setPIDrot(valor::PIDF);
50
51 std::array<valor::PIDF, 3> getPID();
52 valor::PIDF getPIDx();
53 valor::PIDF getPIDy();
54 valor::PIDF getPIDrot();
55
56 void resetControllers(frc::Pose2d, frc::ChassisSpeeds);
57 void resetXController(units::meter_t, units::meters_per_second_t);
58 void resetYController(units::meter_t, units::meters_per_second_t);
59 void resetRotController(frc::Rotation2d, units::radians_per_second_t);
60
61 void setConstraints(frc::TrapezoidProfile<units::meter>::Constraints x, frc::TrapezoidProfile<units::meter>::Constraints y,
62 frc::TrapezoidProfile<units::radian>::Constraints rot);
63 void setConstraintsx(frc::TrapezoidProfile<units::meter>::Constraints);
64 void setConstraintsy(frc::TrapezoidProfile<units::meter>::Constraints);
65 void setConstraintsrot(frc::TrapezoidProfile<units::radian>::Constraints);
66
67 void enableContinuousRotation(bool enable = true, units::radian_t minimum = units::radian_t{-std::numbers::pi},
68 units::radian_t maximum = units::radian_t{std::numbers::pi});
69
70 frc::TrapezoidProfile<units::meter>::Constraints getConstraintsx();
71 frc::TrapezoidProfile<units::meter>::Constraints getConstraintsy();
72 frc::TrapezoidProfile<units::radian>::Constraints getConstraintsrot();
73
74 void setGoal(frc::Pose2d, StateVector, bool rotate);
75 std::pair<frc::Pose2d, StateVector> getGoal();
76
77 frc::ChassisSpeeds calculate(frc::Pose2d, frc::ChassisSpeeds);
78 frc::ChassisSpeeds calculate(frc::Pose2d, frc::ChassisSpeeds, StateVector);
79
80 void LoggablePeriodic() override;
81
82 private:
83 frc::ProfiledPIDController<units::meter> xController, yController;
84 frc::ProfiledPIDController<units::radian> rotController;
85
86 valor::PIDF xPIDF, yPIDF, rotPIDF; // Store PIDF values to access kV
87
88 frc::Pose2d goalPosition, currPosition;
89 frc::ChassisSpeeds currSpeed;
90 StateVector goalState, setpointState;
91 double calculatedXVal, calculatedYVal;
92};
93
94} // namespace valor
Base helper for publishing and subscribing values to NetworkTables.
Definition Loggable.h:204
T ReadLog(std::string_view field, const T &defaultValue={})
Read a value from NetworkTables for the given field.
Definition Loggable.h:343
Definition WorldAlign.h:25
void LoggablePeriodic() override
Periodic callback for logging updates.
Container to hold PID and feed forward values for the motor controller.
Definition PIDF.h:22
Definition WorldAlign.h:35
Definition WorldAlign.h:41