Swerve Modules and Swerve Drives require some inversions to get working properly. The goal is to get everything to increase counter clockwise positive!
{% hint style="warning" %} When your gears are grinding on the ground but not while on blocks and your wheels are facing and spinning in the right directions you may need to tune PID instead of inverting! {% endhint %}
{% hint style="warning" %} IF you are inverted incorrectly your modules or robot may spin "out-of-control" {% endhint %}
When you spin your motor counterclockwise the value in Shuffleboard/NetworkTables swerve/modules/.../Raw Absolute Encoder
and swerve/modules/.../Raw Angle Encoder
should both increase.
- Open shuffleboard.
- Take note of the
swerve/modules/.../Raw Absolute Encoder
value's and use them forabsoluteEncoderOffset
in the module JSONs.
{% hint style="danger" %} Spin your modules COUNTERclockwise from the top down view. {% endhint %}
Purple shows the way your bevels should be facing (photo by Team 2876)
The swerve drive should be on it's side or otherwise lifted. Your swerve module bevels must be facing the left like shown. To rotate the swerve modules they must be rotated counterclockwise like shown.
Invert your angle motor for every module that is decreasing!
{
"drive": {
"type": "sparkmax",
"id": 2,
"canbus": null
},
"angle": {
"type": "sparkmax",
"id": 1,
"canbus": null
},
"encoder": {
"type": "cancoder",
"id": 10,
"canbus": null
},
"inverted": {
"drive": false,
"angle": true
},
"absoluteEncoderInverted": false,
"absoluteEncoderOffset": -50.977,
"location": {
"front": 12,
"left": -12
}
}
Invert the absolute encoder in the module JSON with absoluteEncoderInverted
as shown here.
{
"drive": {
"type": "sparkmax",
"id": 2,
"canbus": null
},
"angle": {
"type": "sparkmax",
"id": 1,
"canbus": null
},
"encoder": {
"type": "cancoder",
"id": 10,
"canbus": null
},
"inverted": {
"drive": false,
"angle": false
},
"absoluteEncoderInverted": true,
"absoluteEncoderOffset": -50.977,
"location": {
"front": 12,
"left": -12
}
}
{% hint style="warning" %} Sometimes you may need to invert these if when you rotate the robot changes it's front/back while driving in field-oriented mode. {% endhint %}
{% hint style="danger" %}
Whenever your robot is driving backwards in odometry and forwards in real life while maintaining that a spin-in-place generates Counter-Clockwise-Positive movement you may need to apply this patch.
You must add 180
to every absoluteEncoderOffset
in every module file to correct this behavior.
{% endhint %}
Invert your drive motor for every module that is decreasing!
{
"drive": {
"type": "sparkmax",
"id": 2,
"canbus": null
},
"angle": {
"type": "sparkmax",
"id": 1,
"canbus": null
},
"encoder": {
"type": "cancoder",
"id": 10,
"canbus": null
},
"inverted": {
"drive": true,
"angle": false
},
"absoluteEncoderInverted": false,
"absoluteEncoderOffset": -50.977,
"location": {
"front": 12,
"left": -12
}
}
{% hint style="danger" %} Keep in mind that your robot spinning counter clockwise should look like this when the wheels are powered! You WILL need to change your IDs for each module file if they don't. {% endhint %}
ID's relocated in swerve module files
You should notice the Raw IMU Yaw
field in Shuffleboard increase. If it doesn't you need to invert your IMU like this.
{
"imu": {
"type": "pigeon2",
"id": 13,
"canbus": "canivore"
},
"invertedIMU": true,
"modules": [
"frontleft.json",
"frontright.json",
"backleft.json",
"backright.json"
]
}