TODO before Waterbury -update vendordeps and recharacterize so pigeon measures rotations -put limits and setpoints in for arm and elevator -merge autoTesting
Note: ResetToAbsolute doesn't work but isn't necessarily that needed atm AprilTag visual pose also isn't in the works but with simple autos that don't pass the charge station till going on it at the end, it's not neccessary either Tested & working for teleop & pathweaver autos
TODO: Update WPILIB @ 2/18/2023
our changes -tuned pid constants -added angle offsets -added ruffy joysticks -removed controller deadband
Original 364 Base Code: https://github.com/Team364/BaseFalconSwerve
If you want to change the directory that paths are stored in on deploy, you have to change the "outputDir":
attribute of the pathweaver.json
file
Note: During elevator testing we came across an issue when trying to use a single-use "Elevate" command, hence we created 2 seperate commands to raise and lower the elevator with corresponding limit switches
Basic Swerve Code for a Swerve Module using Falcon Motors, a CTRE CANCoder, and a CTRE Pigeon Gyro This code was designed with Swerve Drive Specialties MK3, MK4, and MK4i style modules in mind, but should be easily adaptable to other styles of modules.
The following things must be adjusted to your robot and module's specific constants in the Constants.java file (all distance units must be in meters, and rotation units in radians): These instructions are mostly followable from Step
Gyro Settings: pigeonID
and invertGyro
(ensure that the gyro rotation is CCW+ (Counter Clockwise Positive)
chosenModule
:
If you are using a COTS SDS Module (more modules will be added in the future), set the module and drive ratio you are using here.
This will automatically set certain constants for the specific module required to function properly.
If you are not using a COTS supported module, you should delete this variable, and fix all the errors that pop up with correct values for the module you are using
Here is a list of the constants that will automatically be set if you are using a supported module:
trackWidth
: Center to Center distance of left and right modules in meters.
wheelBase
: Center to Center distance of front and rear module wheels in meters.
wheelCircumference
: Cirumference of the wheel (including tread) in meters.
If you are using a supported module, this value will be automatically set.
driveGearRatio
: Total gear ratio for the drive motor.
If you are using a supported module, this value will be automatically set.
angleGearRatio
: Total gear ratio for the angle motor.
If you are using a supported module, this value will be automatically set.
canCoderInvert
and angleMotorInvert
: Both must be set such that they are CCW+.
If you are using a supported module, this value will be automatically set.
driveMotorInvert
: If you are using a supported module, this value will be automatically set.
This can always remain false, since you set your offsets in step 11 such that a positive input to the drive motor will cause the robot to drive forwards.
However this can be set to true if for some reason you prefer the bevel gears on the wheel to face one direction or another when setting offsets. See Step 11 for more information.
Module Specific Constants
: set the Can Id's of the motors and CANCoders for the respective modules, see the next step for setting offsets.
Setting Offsets
driveMotorInvert
value to fix.angleOffset
variable in constants.
angleOffset
you must use Rotation2d.fromDegrees("copied value")
.Angle Motor PID Values:
If you are using a supported module, this value will be automatically set. If you are not, or prefer a more or less aggressive response, you can use the below instructions to tune.
maxSpeed
: In Meters Per Second. maxAngularVelocity
: In Radians Per Second. For these you can use the theoretical values, but it is better to physically drive the robot and find the actual max values.
Get the drive characterization values (KS, KV, KA) by using the WPILib characterization tool, found here. You will need to lock your modules straight forward, and complete the characterization as if it was a standard tank drive.
driveKP
:
After completeing characterization and inserting the KS, KV, and KA values into the code, tune the drive motor kP until it doesn't overshoot and doesnt oscilate around a target velocity.
Leave driveKI
, driveKD
, and driveKF
at 0.0.
This code is natively setup to use a xbox controller to control the swerve drive.