librmb 1.0
Rambunction 4330 Utility Library
Loading...
Searching...
No Matches
SwerveModule.h
1#pragma once
2
3#include <memory>
4
5#include <units/angle.h>
6
7#include <frc/geometry/Translation2d.h>
8#include <frc/kinematics/SwerveModulePosition.h>
9#include <frc/kinematics/SwerveModuleState.h>
10
11#include "frc/drive/RobotDriveBase.h"
12#include "frc/geometry/Rotation2d.h"
13#include "rmb/motorcontrol/AngularPositionController.h"
14#include "rmb/motorcontrol/LinearVelocityController.h"
15#include "units/angular_velocity.h"
16#include "units/velocity.h"
17#include "wpi/sendable/Sendable.h"
18#include "wpi/sendable/SendableHelper.h"
19
20namespace rmb {
21
31 double power; /* <- Power to drive swerve module at. */
32 frc::Rotation2d angle; /* <- Angel to drive swerve module at. */
33
44 static SwerveModulePower Optimize(const SwerveModulePower &desiredPower,
45 const frc::Rotation2d &currentAngle);
46};
47
51class SwerveModule : public wpi::Sendable,
52 public wpi::SendableHelper<SwerveModule> {
53public:
54 SwerveModule(const SwerveModule &) = delete;
55 SwerveModule(SwerveModule &&) = default;
56
65 SwerveModule(std::unique_ptr<LinearVelocityController> velocityController,
66 std::unique_ptr<AngularPositionController> angularController,
67 const frc::Translation2d &moduleTranslation,
68 bool breakMode = false);
69
76 void setState(const units::meters_per_second_t &velocity,
77 const frc::Rotation2d &angle);
78
79 void smartdashboardDisplayTargetState(const std::string &name) const;
80
86 void setState(const frc::SwerveModuleState &state);
87
91 frc::SwerveModuleState getState() const;
92
97 frc::SwerveModulePosition getPosition() const;
98
102 frc::SwerveModuleState getTargetState() const;
103
104 units::meters_per_second_t getTargetVelocity() const;
105 frc::Rotation2d getTargetRotation() const;
106
115 void setPower(double power, const frc::Rotation2d &angle);
116
124 void setPower(const SwerveModulePower &power);
125
126 void stop();
127
128 SwerveModulePower getPower();
129
134 const frc::Translation2d &getModuleTranslation() const;
135
136 virtual void InitSendable(wpi::SendableBuilder &builder) override;
137
138 double getAngle() {
139 return ((units::angle::degree_t)angularController->getPosition())();
140 }
141
142private:
146 std::unique_ptr<AngularPositionController> angularController;
147
151 std::unique_ptr<LinearVelocityController> velocityController;
152
157 frc::Translation2d moduleTranslation;
158
159 bool breakMode;
160};
161} // namespace rmb
Definition SwerveModule.h:52
frc::SwerveModuleState getState() const
void setState(const frc::SwerveModuleState &state)
void setPower(const SwerveModulePower &power)
const frc::Translation2d & getModuleTranslation() const
frc::SwerveModuleState getTargetState() const
void setPower(double power, const frc::Rotation2d &angle)
frc::SwerveModulePosition getPosition() const
void setState(const units::meters_per_second_t &velocity, const frc::Rotation2d &angle)
SwerveModule(std::unique_ptr< LinearVelocityController > velocityController, std::unique_ptr< AngularPositionController > angularController, const frc::Translation2d &moduleTranslation, bool breakMode=false)
the master namespace of librmb
Definition LogitechGamepad.h:9
Definition SwerveModule.h:30
static SwerveModulePower Optimize(const SwerveModulePower &desiredPower, const frc::Rotation2d &currentAngle)