librmb 1.0
Rambunction 4330 Utility Library
Loading...
Searching...
No Matches
DifferentialDrive.h
1#pragma once
2
3#include <initializer_list>
4#include <memory>
5#include <string>
6#include <unordered_map>
7
8#include <units/velocity.h>
9
10#include <frc/controller/RamseteController.h>
11#include <frc/estimator/DifferentialDrivePoseEstimator.h>
12#include <frc/interfaces/Gyro.h>
13#include <frc/kinematics/ChassisSpeeds.h>
14#include <frc/kinematics/DifferentialDriveKinematics.h>
15#include <frc/kinematics/DifferentialDriveWheelSpeeds.h>
16#include <frc/trajectory/Trajectory.h>
17
18#include <frc2/command/CommandPtr.h>
19
20#include <pathplanner/lib/path/PathPlannerTrajectory.h>
21
22#include "pathplanner/lib/path/PathPlannerPath.h"
23#include "rmb/drive/BaseDrive.h"
24#include "rmb/motorcontrol/LinearVelocityController.h"
25
26namespace rmb {
27
34public:
35 DifferentialDrive(const DifferentialDrive &) = delete;
37
52 DifferentialDrive(std::unique_ptr<LinearVelocityController> left,
53 std::unique_ptr<LinearVelocityController> right,
54 std::shared_ptr<const frc::Gyro> gyro,
55 frc::DifferentialDriveKinematics kinematics,
56 frc::RamseteController ramseteController,
57 std::string visionTable,
58 const frc::Pose2d &initalPose = frc::Pose2d());
59
72 DifferentialDrive(std::unique_ptr<LinearVelocityController> left,
73 std::unique_ptr<LinearVelocityController> right,
74 std::shared_ptr<const frc::Gyro> gyro,
75 frc::DifferentialDriveKinematics kinematics,
76 frc::RamseteController ramseteController,
77 const frc::Pose2d &initalPose = frc::Pose2d());
78
79 //---------------
80 // Drive Methods
81 //---------------
82
93 void arcadeDrive(double xSpeed, double zRotation);
94
107 void curvatureDrive(double xSpeed, double zRotation, bool turnInPlace);
108
119 void tankDrive(double leftSpeed, double rightSpeed);
120
127 void driveWheelSpeeds(units::meters_per_second_t leftVelocity,
128 units::meters_per_second_t rightVelocity);
129
135 void driveWheelSpeeds(frc::DifferentialDriveWheelSpeeds wheelSpeeds);
136
140 frc::DifferentialDriveWheelSpeeds getWheelSpeeds() const;
141
147 void driveChassisSpeeds(frc::ChassisSpeeds chassisSpeeds) override;
148
152 frc::ChassisSpeeds getChassisSpeeds() const override;
153
154 //------------------
155 // Odometry Methods
156 //------------------
157
161 frc::Pose2d getPose() const override;
162
172 frc::Pose2d updatePose() override;
173
179 void resetPose(const frc::Pose2d &pose = frc::Pose2d()) override;
180
192 void addVisionMeasurments(const frc::Pose2d &poseEstimate,
193 units::second_t time) override;
194
204 void setVisionSTDevs(wpi::array<double, 3> standardDevs) override;
205
206 //----------------------
207 // Trajectory Following
208 //----------------------
209
215 bool isHolonomic() const override { return false; }
216
226 frc2::CommandPtr followWPILibTrajectory(
227 frc::Trajectory trajectory,
228 std::initializer_list<frc2::Subsystem *> driveRequirements) override;
229
239 frc2::CommandPtr followPPPath(
240 std::shared_ptr<pathplanner::PathPlannerPath> path,
241 std::initializer_list<frc2::Subsystem *> driveRequirements) override;
242
243private:
244 //-----------------
245 // Drive Variables
246 //-----------------
247
251 std::unique_ptr<LinearVelocityController> left;
252
257 std::unique_ptr<LinearVelocityController> right;
258
262 std::shared_ptr<const frc::Gyro> gyro;
263
267 frc::DifferentialDriveKinematics kinematics;
268
272 frc::RamseteController ramseteController;
273
274 //-------------------
275 // Odometry Variables
276 //-------------------
277
281 frc::DifferentialDrivePoseEstimator poseEstimator;
282
286 mutable std::mutex visionThreadMutex;
287};
288} // namespace rmb
Definition BaseDrive.h:32
Definition DifferentialDrive.h:33
void driveChassisSpeeds(frc::ChassisSpeeds chassisSpeeds) override
frc2::CommandPtr followPPPath(std::shared_ptr< pathplanner::PathPlannerPath > path, std::initializer_list< frc2::Subsystem * > driveRequirements) override
DifferentialDrive(std::unique_ptr< LinearVelocityController > left, std::unique_ptr< LinearVelocityController > right, std::shared_ptr< const frc::Gyro > gyro, frc::DifferentialDriveKinematics kinematics, frc::RamseteController ramseteController, const frc::Pose2d &initalPose=frc::Pose2d())
void tankDrive(double leftSpeed, double rightSpeed)
frc2::CommandPtr followWPILibTrajectory(frc::Trajectory trajectory, std::initializer_list< frc2::Subsystem * > driveRequirements) override
void setVisionSTDevs(wpi::array< double, 3 > standardDevs) override
void driveWheelSpeeds(units::meters_per_second_t leftVelocity, units::meters_per_second_t rightVelocity)
void curvatureDrive(double xSpeed, double zRotation, bool turnInPlace)
void resetPose(const frc::Pose2d &pose=frc::Pose2d()) override
void driveWheelSpeeds(frc::DifferentialDriveWheelSpeeds wheelSpeeds)
void addVisionMeasurments(const frc::Pose2d &poseEstimate, units::second_t time) override
DifferentialDrive(std::unique_ptr< LinearVelocityController > left, std::unique_ptr< LinearVelocityController > right, std::shared_ptr< const frc::Gyro > gyro, frc::DifferentialDriveKinematics kinematics, frc::RamseteController ramseteController, std::string visionTable, const frc::Pose2d &initalPose=frc::Pose2d())
frc::ChassisSpeeds getChassisSpeeds() const override
bool isHolonomic() const override
Definition DifferentialDrive.h:215
frc::Pose2d updatePose() override
void arcadeDrive(double xSpeed, double zRotation)
frc::Pose2d getPose() const override
frc::DifferentialDriveWheelSpeeds getWheelSpeeds() const
the master namespace of librmb
Definition LogitechGamepad.h:9