Compare commits

..

2 Commits

56 changed files with 224 additions and 2872 deletions

View File

@ -1,12 +0,0 @@
{
"robotWidth": 0.88,
"robotLength": 0.88,
"holonomicMode": true,
"pathFolders": [],
"autoFolders": [],
"defaultMaxVel": 4.0,
"defaultMaxAccel": 4.0,
"defaultMaxAngVel": 540.0,
"defaultMaxAngAccel": 720.0,
"maxModuleSpeed": 4.03
}

View File

@ -1,118 +0,0 @@
{
"version": 1.0,
"startingPose": {
"position": {
"x": 1.3216735004898588,
"y": 5.55593454044051
},
"rotation": 180.0
},
"command": {
"type": "sequential",
"data": {
"commands": [
{
"type": "named",
"data": {
"name": "Speaker Note Shot"
}
},
{
"type": "parallel",
"data": {
"commands": [
{
"type": "path",
"data": {
"pathName": "Center Sub to Note 1"
}
},
{
"type": "named",
"data": {
"name": "Auto Intake"
}
}
]
}
},
{
"type": "path",
"data": {
"pathName": "Note 1 to Center Sub"
}
},
{
"type": "named",
"data": {
"name": "Speaker Note Shot"
}
},
{
"type": "parallel",
"data": {
"commands": [
{
"type": "path",
"data": {
"pathName": "Center Sub to Note 2"
}
},
{
"type": "named",
"data": {
"name": "Auto Intake"
}
}
]
}
},
{
"type": "path",
"data": {
"pathName": "Note 2 to Center Sub"
}
},
{
"type": "named",
"data": {
"name": "Speaker Note Shot"
}
},
{
"type": "parallel",
"data": {
"commands": [
{
"type": "path",
"data": {
"pathName": "Left Sub to Note 3"
}
},
{
"type": "named",
"data": {
"name": "Auto Intake"
}
}
]
}
},
{
"type": "path",
"data": {
"pathName": "Left Note 3 to Sub"
}
},
{
"type": "named",
"data": {
"name": "Speaker Note Shot"
}
}
]
}
},
"folder": null,
"choreoAuto": false
}

View File

@ -1,37 +0,0 @@
{
"version": 1.0,
"startingPose": {
"position": {
"x": 1.335622956146197,
"y": 5.5196408968316515
},
"rotation": 179.37978729180955
},
"command": {
"type": "sequential",
"data": {
"commands": [
{
"type": "named",
"data": {
"name": "Charge Shooter"
}
},
{
"type": "named",
"data": {
"name": "Speaker Note Shot"
}
},
{
"type": "path",
"data": {
"pathName": "Center Subwoofer to Center"
}
}
]
}
},
"folder": null,
"choreoAuto": false
}

View File

@ -1,37 +0,0 @@
{
"version": 1.0,
"startingPose": {
"position": {
"x": 0.4585613729632017,
"y": 4.0695657459691
},
"rotation": 180.0
},
"command": {
"type": "sequential",
"data": {
"commands": [
{
"type": "path",
"data": {
"pathName": "Gremlin Start"
}
},
{
"type": "named",
"data": {
"name": "Speaker Note Shot"
}
},
{
"type": "path",
"data": {
"pathName": "Gremlin Path"
}
}
]
}
},
"folder": null,
"choreoAuto": false
}

View File

@ -1,25 +0,0 @@
{
"version": 1.0,
"startingPose": {
"position": {
"x": 0.9847983228729987,
"y": 1.9646179463299098
},
"rotation": 0
},
"command": {
"type": "sequential",
"data": {
"commands": [
{
"type": "path",
"data": {
"pathName": "Just Backup"
}
}
]
}
},
"folder": null,
"choreoAuto": false
}

View File

@ -1,111 +0,0 @@
{
"version": 1.0,
"startingPose": {
"position": {
"x": 0.4936438362905214,
"y": 6.981410202136645
},
"rotation": 180.0
},
"command": {
"type": "sequential",
"data": {
"commands": [
{
"type": "path",
"data": {
"pathName": "Left Subwoofer"
}
},
{
"type": "named",
"data": {
"name": "Charge Shooter"
}
},
{
"type": "named",
"data": {
"name": "Speaker Note Shot"
}
},
{
"type": "parallel",
"data": {
"commands": [
{
"type": "path",
"data": {
"pathName": "L Sub to Note 1"
}
},
{
"type": "named",
"data": {
"name": "Auto Intake"
}
}
]
}
},
{
"type": "path",
"data": {
"pathName": "Note 1 to Speaker"
}
},
{
"type": "named",
"data": {
"name": "Charge Shooter"
}
},
{
"type": "named",
"data": {
"name": "Speaker Note Shot"
}
},
{
"type": "parallel",
"data": {
"commands": [
{
"type": "path",
"data": {
"pathName": "L Sub to Note 2"
}
},
{
"type": "named",
"data": {
"name": "Auto Intake"
}
}
]
}
},
{
"type": "path",
"data": {
"pathName": "Note 2 to L Sub"
}
},
{
"type": "named",
"data": {
"name": "Charge Shooter"
}
},
{
"type": "named",
"data": {
"name": "Speaker Note Shot"
}
}
]
}
},
"folder": null,
"choreoAuto": false
}

View File

@ -1,148 +0,0 @@
{
"version": 1.0,
"startingPose": {
"position": {
"x": 0.5740411480822968,
"y": 7.021880329474945
},
"rotation": 180.0
},
"command": {
"type": "sequential",
"data": {
"commands": [
{
"type": "path",
"data": {
"pathName": "Left Subwoofer"
}
},
{
"type": "named",
"data": {
"name": "Charge Shooter"
}
},
{
"type": "named",
"data": {
"name": "Speaker Note Shot"
}
},
{
"type": "parallel",
"data": {
"commands": [
{
"type": "path",
"data": {
"pathName": "L Sub to Note 1"
}
},
{
"type": "named",
"data": {
"name": "Auto Intake"
}
}
]
}
},
{
"type": "path",
"data": {
"pathName": "Note 1 to Speaker"
}
},
{
"type": "named",
"data": {
"name": "Charge Shooter"
}
},
{
"type": "named",
"data": {
"name": "Speaker Note Shot"
}
},
{
"type": "parallel",
"data": {
"commands": [
{
"type": "path",
"data": {
"pathName": "L Sub to Note 2"
}
},
{
"type": "named",
"data": {
"name": "Auto Intake"
}
}
]
}
},
{
"type": "path",
"data": {
"pathName": "Note 2 to L Sub (4S)"
}
},
{
"type": "named",
"data": {
"name": "Charge Shooter"
}
},
{
"type": "named",
"data": {
"name": "Speaker Note Shot"
}
},
{
"type": "parallel",
"data": {
"commands": [
{
"type": "path",
"data": {
"pathName": "Left Sub to Note 3"
}
},
{
"type": "named",
"data": {
"name": "Auto Intake"
}
}
]
}
},
{
"type": "path",
"data": {
"pathName": "Left Note 3 to Sub"
}
},
{
"type": "named",
"data": {
"name": "Charge Shooter"
}
},
{
"type": "named",
"data": {
"name": "Speaker Note Shot"
}
}
]
}
},
"folder": null,
"choreoAuto": false
}

View File

@ -1,62 +0,0 @@
{
"version": 1.0,
"startingPose": {
"position": {
"x": 0.4936438362905214,
"y": 6.981410202136645
},
"rotation": 180.0
},
"command": {
"type": "sequential",
"data": {
"commands": [
{
"type": "path",
"data": {
"pathName": "Left Subwoofer"
}
},
{
"type": "named",
"data": {
"name": "Charge Shooter"
}
},
{
"type": "named",
"data": {
"name": "Speaker Note Shot"
}
},
{
"type": "parallel",
"data": {
"commands": [
{
"type": "path",
"data": {
"pathName": "L Sub to Note 1"
}
},
{
"type": "named",
"data": {
"name": "Auto Intake"
}
}
]
}
},
{
"type": "path",
"data": {
"pathName": "Note 1 to Speaker"
}
}
]
}
},
"folder": null,
"choreoAuto": false
}

View File

@ -1,62 +0,0 @@
{
"version": 1.0,
"startingPose": {
"position": {
"x": 0.52,
"y": 4.034483282641779
},
"rotation": 180.0
},
"command": {
"type": "sequential",
"data": {
"commands": [
{
"type": "parallel",
"data": {
"commands": [
{
"type": "path",
"data": {
"pathName": "Right Sub"
}
},
{
"type": "named",
"data": {
"name": "Charge Shooter"
}
}
]
}
},
{
"type": "named",
"data": {
"name": "Speaker Note Shot"
}
},
{
"type": "path",
"data": {
"pathName": "Right Sub to Right Center Note"
}
},
{
"type": "path",
"data": {
"pathName": "Right Sub from Center"
}
},
{
"type": "named",
"data": {
"name": "Speaker Note Shot"
}
}
]
}
},
"folder": null,
"choreoAuto": false
}

View File

@ -1,74 +0,0 @@
{
"version": 1.0,
"startingPose": {
"position": {
"x": 0.4936438362905214,
"y": 4.092954054853979
},
"rotation": 180.0
},
"command": {
"type": "sequential",
"data": {
"commands": [
{
"type": "path",
"data": {
"pathName": "Right Wall to Sub"
}
},
{
"type": "named",
"data": {
"name": "Charge Shooter"
}
},
{
"type": "named",
"data": {
"name": "Speaker Note Shot"
}
},
{
"type": "parallel",
"data": {
"commands": [
{
"type": "named",
"data": {
"name": "Auto Intake"
}
},
{
"type": "path",
"data": {
"pathName": "Right Sub Note 3"
}
}
]
}
},
{
"type": "path",
"data": {
"pathName": "Note 3 to Sub"
}
},
{
"type": "named",
"data": {
"name": "Charge Shooter"
}
},
{
"type": "named",
"data": {
"name": "Speaker Note Shot"
}
}
]
}
},
"folder": null,
"choreoAuto": false
}

View File

@ -1,43 +0,0 @@
{
"version": 1.0,
"startingPose": {
"position": {
"x": 1.0578032584636603,
"y": 4.485794114445372
},
"rotation": 141.84277341263092
},
"command": {
"type": "sequential",
"data": {
"commands": [
{
"type": "named",
"data": {
"name": "Charge Shooter"
}
},
{
"type": "wait",
"data": {
"waitTime": 2.0
}
},
{
"type": "named",
"data": {
"name": "Speaker Note Shot"
}
},
{
"type": "path",
"data": {
"pathName": "Right Subwoofer to Center"
}
}
]
}
},
"folder": null,
"choreoAuto": false
}

File diff suppressed because one or more lines are too long

View File

@ -1,52 +0,0 @@
{
"version": 1.0,
"waypoints": [
{
"anchor": {
"x": 1.3216735004898588,
"y": 5.55593454044051
},
"prevControl": null,
"nextControl": {
"x": 1.8054356108712222,
"y": 6.010377735041184
},
"isLocked": false,
"linkedName": null
},
{
"anchor": {
"x": 2.5050384003901907,
"y": 6.829386194384925
},
"prevControl": {
"x": 2.241168158363992,
"y": 6.433580831345627
},
"nextControl": null,
"isLocked": false,
"linkedName": null
}
],
"rotationTargets": [],
"constraintZones": [],
"eventMarkers": [],
"globalConstraints": {
"maxVelocity": 4.0,
"maxAcceleration": 4.0,
"maxAngularVelocity": 540.0,
"maxAngularAcceleration": 720.0
},
"goalEndState": {
"velocity": 0,
"rotation": -151.8214098900407,
"rotateFast": false
},
"reversed": false,
"folder": null,
"previewStartingState": {
"rotation": 180.0,
"velocity": 0
},
"useDefaultConstraints": true
}

View File

@ -1,52 +0,0 @@
{
"version": 1.0,
"waypoints": [
{
"anchor": {
"x": 1.3216735004898588,
"y": 5.541275082550166
},
"prevControl": null,
"nextControl": {
"x": 1.7449183616315946,
"y": 5.55472336015897
},
"isLocked": false,
"linkedName": null
},
{
"anchor": {
"x": 2.294543620426272,
"y": 5.541275082550166
},
"prevControl": {
"x": 1.2945436204262721,
"y": 5.541275082550166
},
"nextControl": null,
"isLocked": false,
"linkedName": null
}
],
"rotationTargets": [],
"constraintZones": [],
"eventMarkers": [],
"globalConstraints": {
"maxVelocity": 4.0,
"maxAcceleration": 4.0,
"maxAngularVelocity": 540.0,
"maxAngularAcceleration": 720.0
},
"goalEndState": {
"velocity": 0,
"rotation": 180.0,
"rotateFast": false
},
"reversed": false,
"folder": null,
"previewStartingState": {
"rotation": 180.0,
"velocity": 0
},
"useDefaultConstraints": true
}

View File

@ -1,74 +0,0 @@
{
"version": 1.0,
"waypoints": [
{
"anchor": {
"x": 1.335622956146197,
"y": 5.5196408968316515
},
"prevControl": null,
"nextControl": {
"x": 2.3356229561461985,
"y": 5.5196408968316515
},
"isLocked": false,
"linkedName": null
},
{
"anchor": {
"x": 4.072055095677142,
"y": 5.028486410249174
},
"prevControl": {
"x": 3.364392809755599,
"y": 5.618204981850461
},
"nextControl": {
"x": 4.843869288878178,
"y": 4.385307915914977
},
"isLocked": false,
"linkedName": null
},
{
"anchor": {
"x": 7.299641721790566,
"y": 0.877061583182996
},
"prevControl": {
"x": 6.773404771880769,
"y": 4.046177437084219
},
"nextControl": null,
"isLocked": false,
"linkedName": null
}
],
"rotationTargets": [
{
"waypointRelativePos": 0.9,
"rotationDegrees": 90.25335933192582,
"rotateFast": false
}
],
"constraintZones": [],
"eventMarkers": [],
"globalConstraints": {
"maxVelocity": 4.0,
"maxAcceleration": 4.0,
"maxAngularVelocity": 540.0,
"maxAngularAcceleration": 720.0
},
"goalEndState": {
"velocity": 0,
"rotation": 0,
"rotateFast": false
},
"reversed": false,
"folder": null,
"previewStartingState": {
"rotation": 179.04515874612784,
"velocity": 0
},
"useDefaultConstraints": true
}

View File

@ -1,123 +0,0 @@
{
"version": 1.0,
"waypoints": [
{
"anchor": {
"x": 0.8912450873334795,
"y": 4.4671669970120575
},
"prevControl": null,
"nextControl": {
"x": 1.8912450873334783,
"y": 4.4671669970120575
},
"isLocked": false,
"linkedName": null
},
{
"anchor": {
"x": 4.013584323464943,
"y": 1.9763121007723505
},
"prevControl": {
"x": 1.9257282443058341,
"y": 3.278151773659794
},
"nextControl": {
"x": 5.007587451072338,
"y": 1.3565219153230341
},
"isLocked": false,
"linkedName": null
},
{
"anchor": {
"x": 8.56261040157408,
"y": 1.2278862164561943
},
"prevControl": {
"x": 8.317033158282841,
"y": 0.09355323553951994
},
"nextControl": {
"x": 8.686725702060071,
"y": 1.801180699653394
},
"isLocked": false,
"linkedName": null
},
{
"anchor": {
"x": 8.761411027095559,
"y": 6.478561561111727
},
"prevControl": {
"x": 8.843270108192637,
"y": 4.794603321400375
},
"nextControl": {
"x": 8.68370806922782,
"y": 8.077022408676678
},
"isLocked": false,
"linkedName": null
},
{
"anchor": {
"x": 6.30563859418317,
"y": 7.203599136543003
},
"prevControl": {
"x": 7.451665729542288,
"y": 7.051575128791285
},
"nextControl": null,
"isLocked": false,
"linkedName": null
}
],
"rotationTargets": [
{
"waypointRelativePos": 1.7,
"rotationDegrees": -178.9636039256695,
"rotateFast": true
},
{
"waypointRelativePos": 2.15,
"rotationDegrees": 151.60505283278198,
"rotateFast": true
}
],
"constraintZones": [
{
"name": "New Constraints Zone",
"minWaypointRelativePos": 1.7,
"maxWaypointRelativePos": 2.4,
"constraints": {
"maxVelocity": 3.0,
"maxAcceleration": 4.0,
"maxAngularVelocity": 540.0,
"maxAngularAcceleration": 720.0
}
}
],
"eventMarkers": [],
"globalConstraints": {
"maxVelocity": 4.0,
"maxAcceleration": 4.0,
"maxAngularVelocity": 540.0,
"maxAngularAcceleration": 720.0
},
"goalEndState": {
"velocity": 0,
"rotation": 64.23067237566114,
"rotateFast": false
},
"reversed": false,
"folder": null,
"previewStartingState": {
"rotation": 132.61405596961126,
"velocity": 0
},
"useDefaultConstraints": true
}

View File

@ -1,52 +0,0 @@
{
"version": 1.0,
"waypoints": [
{
"anchor": {
"x": 0.66,
"y": 4.38
},
"prevControl": null,
"nextControl": {
"x": 0.8945513262455097,
"y": 3.688073587575746
},
"isLocked": false,
"linkedName": null
},
{
"anchor": {
"x": 0.9539344375942316,
"y": 4.503791885637482
},
"prevControl": {
"x": 1.3164532253098697,
"y": 4.117884789036965
},
"nextControl": null,
"isLocked": false,
"linkedName": null
}
],
"rotationTargets": [],
"constraintZones": [],
"eventMarkers": [],
"globalConstraints": {
"maxVelocity": 4.0,
"maxAcceleration": 4.0,
"maxAngularVelocity": 540.0,
"maxAngularAcceleration": 720.0
},
"goalEndState": {
"velocity": 0,
"rotation": 133.4021151464655,
"rotateFast": false
},
"reversed": false,
"folder": null,
"previewStartingState": {
"rotation": 119.88721357012417,
"velocity": 0
},
"useDefaultConstraints": true
}

View File

@ -1,52 +0,0 @@
{
"version": 1.0,
"waypoints": [
{
"anchor": {
"x": 0.9847983228729987,
"y": 1.9646179463299098
},
"prevControl": null,
"nextControl": {
"x": 1.9847983228729973,
"y": 1.9646179463299098
},
"isLocked": false,
"linkedName": null
},
{
"anchor": {
"x": 2.6453682536994707,
"y": 1.9646179463299098
},
"prevControl": {
"x": 1.6453682536994707,
"y": 1.9646179463299098
},
"nextControl": null,
"isLocked": false,
"linkedName": null
}
],
"rotationTargets": [],
"constraintZones": [],
"eventMarkers": [],
"globalConstraints": {
"maxVelocity": 4.0,
"maxAcceleration": 4.0,
"maxAngularVelocity": 540.0,
"maxAngularAcceleration": 720.0
},
"goalEndState": {
"velocity": 0,
"rotation": 0,
"rotateFast": false
},
"reversed": false,
"folder": null,
"previewStartingState": {
"rotation": 1.3971810272964678,
"velocity": 0
},
"useDefaultConstraints": true
}

View File

@ -1,69 +0,0 @@
{
"version": 1.0,
"waypoints": [
{
"anchor": {
"x": 1.4408703461281565,
"y": 6.583808951093687
},
"prevControl": null,
"nextControl": {
"x": 1.8852482149408742,
"y": 7.121740055445923
},
"isLocked": false,
"linkedName": null
},
{
"anchor": {
"x": 2.7272273347965497,
"y": 6.876162812154685
},
"prevControl": {
"x": 2.259461157098952,
"y": 6.864468657712245
},
"nextControl": null,
"isLocked": false,
"linkedName": null
}
],
"rotationTargets": [
{
"waypointRelativePos": 0.45,
"rotationDegrees": 179.22679798216734,
"rotateFast": true
}
],
"constraintZones": [],
"eventMarkers": [
{
"name": "New Event Marker",
"waypointRelativePos": 0.1,
"command": {
"type": "parallel",
"data": {
"commands": []
}
}
}
],
"globalConstraints": {
"maxVelocity": 4.0,
"maxAcceleration": 4.0,
"maxAngularVelocity": 540.0,
"maxAngularAcceleration": 720.0
},
"goalEndState": {
"velocity": 0,
"rotation": 180.0,
"rotateFast": false
},
"reversed": false,
"folder": null,
"previewStartingState": {
"rotation": -145.66978280449663,
"velocity": 0
},
"useDefaultConstraints": true
}

View File

@ -1,58 +0,0 @@
{
"version": 1.0,
"waypoints": [
{
"anchor": {
"x": 1.5578118905525558,
"y": 6.4083966344570875
},
"prevControl": null,
"nextControl": {
"x": 1.9671072960379536,
"y": 6.349925862244889
},
"isLocked": false,
"linkedName": null
},
{
"anchor": {
"x": 2.6687565625843503,
"y": 5.613194132371171
},
"prevControl": {
"x": 2.306237774868712,
"y": 5.999101228971689
},
"nextControl": null,
"isLocked": false,
"linkedName": null
}
],
"rotationTargets": [
{
"waypointRelativePos": 0.7,
"rotationDegrees": 136.8500052941468,
"rotateFast": true
}
],
"constraintZones": [],
"eventMarkers": [],
"globalConstraints": {
"maxVelocity": 4.0,
"maxAcceleration": 4.0,
"maxAngularVelocity": 540.0,
"maxAngularAcceleration": 720.0
},
"goalEndState": {
"velocity": 0,
"rotation": 139.08561677997477,
"rotateFast": false
},
"reversed": false,
"folder": null,
"previewStartingState": {
"rotation": -148.523160650416,
"velocity": 0
},
"useDefaultConstraints": true
}

View File

@ -1,52 +0,0 @@
{
"version": 1.0,
"waypoints": [
{
"anchor": {
"x": 2.2594611570989525,
"y": 4.560720232551577
},
"prevControl": null,
"nextControl": {
"x": 2.130825458232113,
"y": 4.946627329152095
},
"isLocked": false,
"linkedName": null
},
{
"anchor": {
"x": 1.3707054194735169,
"y": 5.5196408968316515
},
"prevControl": {
"x": 1.8267774427286747,
"y": 5.285757807982852
},
"nextControl": null,
"isLocked": false,
"linkedName": null
}
],
"rotationTargets": [],
"constraintZones": [],
"eventMarkers": [],
"globalConstraints": {
"maxVelocity": 4.0,
"maxAcceleration": 4.0,
"maxAngularVelocity": 540.0,
"maxAngularAcceleration": 720.0
},
"goalEndState": {
"velocity": 0,
"rotation": 180.0,
"rotateFast": false
},
"reversed": false,
"folder": null,
"previewStartingState": {
"rotation": 144.46232220802574,
"velocity": 0
},
"useDefaultConstraints": true
}

View File

@ -1,52 +0,0 @@
{
"version": 1.0,
"waypoints": [
{
"anchor": {
"x": 1.1134340217398382,
"y": 6.525338178881486
},
"prevControl": null,
"nextControl": {
"x": 1.148516485067158,
"y": 7.191904982100564
},
"isLocked": false,
"linkedName": null
},
{
"anchor": {
"x": 2.3179319293111518,
"y": 6.981410202136645
},
"prevControl": {
"x": 1.8033891338437944,
"y": 6.981410202136645
},
"nextControl": null,
"isLocked": false,
"linkedName": null
}
],
"rotationTargets": [],
"constraintZones": [],
"eventMarkers": [],
"globalConstraints": {
"maxVelocity": 4.0,
"maxAcceleration": 4.0,
"maxAngularVelocity": 540.0,
"maxAngularAcceleration": 720.0
},
"goalEndState": {
"velocity": 0,
"rotation": 0,
"rotateFast": false
},
"reversed": false,
"folder": null,
"previewStartingState": {
"rotation": 40.97173633351488,
"velocity": 0
},
"useDefaultConstraints": true
}

View File

@ -1,52 +0,0 @@
{
"version": 1.0,
"waypoints": [
{
"anchor": {
"x": 1.5812001994374358,
"y": 6.221290163378048
},
"prevControl": null,
"nextControl": {
"x": 1.932024832710634,
"y": 5.70674736791069
},
"isLocked": false,
"linkedName": null
},
{
"anchor": {
"x": 2.2243786937716323,
"y": 4.151424827066179
},
"prevControl": {
"x": 0.7041386162544403,
"y": 4.350225452587658
},
"nextControl": null,
"isLocked": false,
"linkedName": null
}
],
"rotationTargets": [],
"constraintZones": [],
"eventMarkers": [],
"globalConstraints": {
"maxVelocity": 4.0,
"maxAcceleration": 4.0,
"maxAngularVelocity": 540.0,
"maxAngularAcceleration": 720.0
},
"goalEndState": {
"velocity": 0,
"rotation": 171.86989764584402,
"rotateFast": false
},
"reversed": false,
"folder": null,
"previewStartingState": {
"rotation": -160.6410058243053,
"velocity": 0
},
"useDefaultConstraints": true
}

View File

@ -1,52 +0,0 @@
{
"version": 1.0,
"waypoints": [
{
"anchor": {
"x": 0.4936438362905214,
"y": 6.981410202136645
},
"prevControl": null,
"nextControl": {
"x": 1.3941696612245824,
"y": 6.981410202136645
},
"isLocked": false,
"linkedName": null
},
{
"anchor": {
"x": 1.382399573915957,
"y": 5.964018765644369
},
"prevControl": {
"x": 1.8150832882862347,
"y": 6.268066781147808
},
"nextControl": null,
"isLocked": false,
"linkedName": null
}
],
"rotationTargets": [],
"constraintZones": [],
"eventMarkers": [],
"globalConstraints": {
"maxVelocity": 4.0,
"maxAcceleration": 4.0,
"maxAngularVelocity": 540.0,
"maxAngularAcceleration": 720.0
},
"goalEndState": {
"velocity": 0,
"rotation": -164.4071890607336,
"rotateFast": false
},
"reversed": false,
"folder": null,
"previewStartingState": {
"rotation": -178.6677801461302,
"velocity": 0
},
"useDefaultConstraints": true
}

View File

@ -1,102 +0,0 @@
{
"version": 1.0,
"waypoints": [
{
"anchor": {
"x": 3.347017520241028,
"y": 6.993104356575341
},
"prevControl": null,
"nextControl": {
"x": 4.446268037830382,
"y": 7.110045900999739
},
"isLocked": false,
"linkedName": null
},
{
"anchor": {
"x": 6.071755505338439,
"y": 7.297152372084174
},
"prevControl": {
"x": 5.077752377722138,
"y": 7.262069908751458
},
"nextControl": {
"x": 6.725659674531382,
"y": 7.320231342764915
},
"isLocked": false,
"linkedName": null
},
{
"anchor": {
"x": 7.63877220062539,
"y": 7.425788070951012
},
"prevControl": {
"x": 6.621380764133118,
"y": 7.460870534278332
},
"nextControl": {
"x": 8.656163637117663,
"y": 7.390705607623692
},
"isLocked": false,
"linkedName": null
},
{
"anchor": {
"x": 3.545818145767345,
"y": 6.642279723305886
},
"prevControl": {
"x": 6.323179825848877,
"y": 7.12758713266797
},
"nextControl": null,
"isLocked": false,
"linkedName": null
}
],
"rotationTargets": [
{
"waypointRelativePos": 1,
"rotationDegrees": 172.50414236027015,
"rotateFast": false
}
],
"constraintZones": [
{
"name": "New Constraints Zone",
"minWaypointRelativePos": 0.85,
"maxWaypointRelativePos": 1.35,
"constraints": {
"maxVelocity": 1.5,
"maxAcceleration": 3.0,
"maxAngularVelocity": 540.0,
"maxAngularAcceleration": 720.0
}
}
],
"eventMarkers": [],
"globalConstraints": {
"maxVelocity": 4.0,
"maxAcceleration": 4.0,
"maxAngularVelocity": 540.0,
"maxAngularAcceleration": 720.0
},
"goalEndState": {
"velocity": 1.5,
"rotation": -179.23610153906992,
"rotateFast": false
},
"reversed": false,
"folder": null,
"previewStartingState": {
"rotation": 0,
"velocity": 0
},
"useDefaultConstraints": true
}

View File

@ -1,52 +0,0 @@
{
"version": 1.0,
"waypoints": [
{
"anchor": {
"x": 2.230559889691208,
"y": 6.640734424325992
},
"prevControl": null,
"nextControl": {
"x": 1.8200950687615667,
"y": 5.863783156137741
},
"isLocked": false,
"linkedName": null
},
{
"anchor": {
"x": 1.3070140425995143,
"y": 5.570593998330854
},
"prevControl": {
"x": 1.8494139845422553,
"y": 5.629231829892232
},
"nextControl": null,
"isLocked": false,
"linkedName": null
}
],
"rotationTargets": [],
"constraintZones": [],
"eventMarkers": [],
"globalConstraints": {
"maxVelocity": 4.0,
"maxAcceleration": 4.0,
"maxAngularVelocity": 540.0,
"maxAngularAcceleration": 720.0
},
"goalEndState": {
"velocity": 0,
"rotation": 180.0,
"rotateFast": false
},
"reversed": false,
"folder": null,
"previewStartingState": {
"rotation": 180.0,
"velocity": 0
},
"useDefaultConstraints": true
}

View File

@ -1,52 +0,0 @@
{
"version": 1.0,
"waypoints": [
{
"anchor": {
"x": 2.0,
"y": 7.0
},
"prevControl": null,
"nextControl": {
"x": 3.0,
"y": 7.0
},
"isLocked": false,
"linkedName": null
},
{
"anchor": {
"x": 1.3707054194735169,
"y": 5.940630456759489
},
"prevControl": {
"x": 1.8150832882862349,
"y": 6.1745135456082885
},
"nextControl": null,
"isLocked": false,
"linkedName": null
}
],
"rotationTargets": [],
"constraintZones": [],
"eventMarkers": [],
"globalConstraints": {
"maxVelocity": 4.0,
"maxAcceleration": 4.0,
"maxAngularVelocity": 540.0,
"maxAngularAcceleration": 720.0
},
"goalEndState": {
"velocity": 0,
"rotation": -165.25643716352937,
"rotateFast": false
},
"reversed": false,
"folder": null,
"previewStartingState": {
"rotation": 179.55484341368705,
"velocity": 0
},
"useDefaultConstraints": true
}

View File

@ -1,52 +0,0 @@
{
"version": 1.0,
"waypoints": [
{
"anchor": {
"x": 2.503225806451614,
"y": 5.535411299394028
},
"prevControl": null,
"nextControl": {
"x": 2.016531804492181,
"y": 5.541275082550166
},
"isLocked": false,
"linkedName": null
},
{
"anchor": {
"x": 1.3480605246924788,
"y": 5.535411299394028
},
"prevControl": {
"x": 1.6881599477484674,
"y": 5.55300264886244
},
"nextControl": null,
"isLocked": false,
"linkedName": null
}
],
"rotationTargets": [],
"constraintZones": [],
"eventMarkers": [],
"globalConstraints": {
"maxVelocity": 4.0,
"maxAcceleration": 4.0,
"maxAngularVelocity": 540.0,
"maxAngularAcceleration": 720.0
},
"goalEndState": {
"velocity": 0,
"rotation": -178.53119928561404,
"rotateFast": false
},
"reversed": false,
"folder": null,
"previewStartingState": {
"rotation": 180.0,
"velocity": 0
},
"useDefaultConstraints": true
}

View File

@ -1,58 +0,0 @@
{
"version": 1.0,
"waypoints": [
{
"anchor": {
"x": 2.1776020760018726,
"y": 5.964018765644369
},
"prevControl": null,
"nextControl": {
"x": 1.8267774427286747,
"y": 5.928936302317049
},
"isLocked": false,
"linkedName": null
},
{
"anchor": {
"x": 1.3005404928188775,
"y": 5.5430292057165325
},
"prevControl": {
"x": 1.674753434976956,
"y": 5.683359059025812
},
"nextControl": null,
"isLocked": false,
"linkedName": null
}
],
"rotationTargets": [
{
"waypointRelativePos": 0.5,
"rotationDegrees": -164.3011806576524,
"rotateFast": false
}
],
"constraintZones": [],
"eventMarkers": [],
"globalConstraints": {
"maxVelocity": 4.0,
"maxAcceleration": 4.0,
"maxAngularVelocity": 540.0,
"maxAngularAcceleration": 720.0
},
"goalEndState": {
"velocity": 0,
"rotation": 180.0,
"rotateFast": false
},
"reversed": false,
"folder": null,
"previewStartingState": {
"rotation": 150.25511870305772,
"velocity": 0
},
"useDefaultConstraints": true
}

View File

@ -1,58 +0,0 @@
{
"version": 1.0,
"waypoints": [
{
"anchor": {
"x": 2.1776020760018726,
"y": 5.964018765644369
},
"prevControl": null,
"nextControl": {
"x": 1.9671072960379539,
"y": 6.209596008935608
},
"isLocked": false,
"linkedName": null
},
{
"anchor": {
"x": 1.2537638750491173,
"y": 6.385008325572207
},
"prevControl": {
"x": 1.6279768172071958,
"y": 6.525338178881487
},
"nextControl": null,
"isLocked": false,
"linkedName": null
}
],
"rotationTargets": [
{
"waypointRelativePos": 0.5,
"rotationDegrees": -164.3011806576524,
"rotateFast": false
}
],
"constraintZones": [],
"eventMarkers": [],
"globalConstraints": {
"maxVelocity": 4.0,
"maxAcceleration": 4.0,
"maxAngularVelocity": 540.0,
"maxAngularAcceleration": 720.0
},
"goalEndState": {
"velocity": 0,
"rotation": -152.10272896905224,
"rotateFast": false
},
"reversed": false,
"folder": null,
"previewStartingState": {
"rotation": 150.25511870305772,
"velocity": 0
},
"useDefaultConstraints": true
}

View File

@ -1,52 +0,0 @@
{
"version": 1.0,
"waypoints": [
{
"anchor": {
"x": 2.142519612674553,
"y": 4.163118981508619
},
"prevControl": null,
"nextControl": {
"x": 1.756612516074035,
"y": 3.964318355987141
},
"isLocked": false,
"linkedName": null
},
{
"anchor": {
"x": 1.171904793952038,
"y": 4.701050085860856
},
"prevControl": {
"x": 1.8501657516135543,
"y": 3.9643183559871393
},
"nextControl": null,
"isLocked": false,
"linkedName": null
}
],
"rotationTargets": [],
"constraintZones": [],
"eventMarkers": [],
"globalConstraints": {
"maxVelocity": 4.0,
"maxAcceleration": 4.0,
"maxAngularVelocity": 540.0,
"maxAngularAcceleration": 720.0
},
"goalEndState": {
"velocity": 0,
"rotation": 140.0131137550358,
"rotateFast": false
},
"reversed": false,
"folder": null,
"previewStartingState": {
"rotation": 178.40885972880548,
"velocity": 0
},
"useDefaultConstraints": true
}

View File

@ -1,58 +0,0 @@
{
"version": 1.0,
"waypoints": [
{
"anchor": {
"x": 1.3005404928188775,
"y": 4.397002070357417
},
"prevControl": null,
"nextControl": {
"x": 1.7683066705164747,
"y": 4.361919607030098
},
"isLocked": false,
"linkedName": null
},
{
"anchor": {
"x": 2.3647085470809115,
"y": 4.081259900411539
},
"prevControl": {
"x": 1.8029020887081402,
"y": 4.081259900411539
},
"nextControl": null,
"isLocked": false,
"linkedName": null
}
],
"rotationTargets": [
{
"waypointRelativePos": 1.0,
"rotationDegrees": 180.0,
"rotateFast": true
}
],
"constraintZones": [],
"eventMarkers": [],
"globalConstraints": {
"maxVelocity": 4.0,
"maxAcceleration": 4.0,
"maxAngularVelocity": 540.0,
"maxAngularAcceleration": 720.0
},
"goalEndState": {
"velocity": 0,
"rotation": 180.0,
"rotateFast": false
},
"reversed": false,
"folder": null,
"previewStartingState": {
"rotation": 131.18592516570968,
"velocity": 0
},
"useDefaultConstraints": true
}

View File

@ -1,52 +0,0 @@
{
"version": 1.0,
"waypoints": [
{
"anchor": {
"x": 5.335023775460655,
"y": 1.1577212898015548
},
"prevControl": null,
"nextControl": {
"x": 3.803089543501023,
"y": 0.9472265098376356
},
"isLocked": false,
"linkedName": null
},
{
"anchor": {
"x": 1.0432690950851984,
"y": 4.478861151454497
},
"prevControl": {
"x": 2.013883913807713,
"y": 1.5436283864020721
},
"nextControl": null,
"isLocked": false,
"linkedName": null
}
],
"rotationTargets": [],
"constraintZones": [],
"eventMarkers": [],
"globalConstraints": {
"maxVelocity": 4.0,
"maxAcceleration": 4.0,
"maxAngularVelocity": 540.0,
"maxAngularAcceleration": 720.0
},
"goalEndState": {
"velocity": 0,
"rotation": 143.130102354156,
"rotateFast": false
},
"reversed": false,
"folder": null,
"previewStartingState": {
"rotation": 180.0,
"velocity": 0
},
"useDefaultConstraints": true
}

View File

@ -1,76 +0,0 @@
{
"version": 1.0,
"waypoints": [
{
"anchor": {
"x": 1.335622956146197,
"y": 4.315142989260338
},
"prevControl": null,
"nextControl": {
"x": 1.8735540604984342,
"y": 1.4149926875352343
},
"isLocked": false,
"linkedName": null
},
{
"anchor": {
"x": 7.603689737294005,
"y": 0.8068966565283563
},
"prevControl": {
"x": 6.603689737294005,
"y": 0.8068966565283563
},
"nextControl": null,
"isLocked": false,
"linkedName": null
}
],
"rotationTargets": [
{
"waypointRelativePos": 0.6,
"rotationDegrees": 180.0,
"rotateFast": false
}
],
"constraintZones": [],
"eventMarkers": [
{
"name": "Note Pickup",
"waypointRelativePos": 0.6,
"command": {
"type": "parallel",
"data": {
"commands": [
{
"type": "named",
"data": {
"name": "Note Pickup"
}
}
]
}
}
}
],
"globalConstraints": {
"maxVelocity": 4.0,
"maxAcceleration": 4.0,
"maxAngularVelocity": 540.0,
"maxAngularAcceleration": 720.0
},
"goalEndState": {
"velocity": 0,
"rotation": 180.0,
"rotateFast": false
},
"reversed": false,
"folder": null,
"previewStartingState": {
"rotation": 139.21417852273407,
"velocity": 0
},
"useDefaultConstraints": true
}

View File

@ -1,52 +0,0 @@
{
"version": 1.0,
"waypoints": [
{
"anchor": {
"x": 0.52,
"y": 4.034483282641779
},
"prevControl": null,
"nextControl": {
"x": 1.0783515584179242,
"y": 3.5199404871715854
},
"isLocked": false,
"linkedName": null
},
{
"anchor": {
"x": 1.2186814117217974,
"y": 4.677661776975976
},
"prevControl": {
"x": 1.9904956049228333,
"y": 4.174813135951059
},
"nextControl": null,
"isLocked": false,
"linkedName": null
}
],
"rotationTargets": [],
"constraintZones": [],
"eventMarkers": [],
"globalConstraints": {
"maxVelocity": 4.0,
"maxAcceleration": 4.0,
"maxAngularVelocity": 540.0,
"maxAngularAcceleration": 720.0
},
"goalEndState": {
"velocity": 0,
"rotation": 143.9726266148963,
"rotateFast": false
},
"reversed": false,
"folder": null,
"previewStartingState": {
"rotation": -178.76146677965983,
"velocity": 0
},
"useDefaultConstraints": true
}

View File

@ -1,52 +0,0 @@
{
"version": 1.0,
"waypoints": [
{
"anchor": {
"x": 1.0578032584636603,
"y": 4.485794114445372
},
"prevControl": null,
"nextControl": {
"x": 1.5708842846257125,
"y": 2.6240429623716395
},
"isLocked": false,
"linkedName": null
},
{
"anchor": {
"x": 7.639899851228273,
"y": 0.7769512681882514
},
"prevControl": {
"x": 6.639899851228273,
"y": 0.7769512681882514
},
"nextControl": null,
"isLocked": false,
"linkedName": null
}
],
"rotationTargets": [],
"constraintZones": [],
"eventMarkers": [],
"globalConstraints": {
"maxVelocity": 4.0,
"maxAcceleration": 4.0,
"maxAngularVelocity": 540.0,
"maxAngularAcceleration": 720.0
},
"goalEndState": {
"velocity": 0,
"rotation": 180.0,
"rotateFast": false
},
"reversed": false,
"folder": null,
"previewStartingState": {
"rotation": 144.68878656036674,
"velocity": 0
},
"useDefaultConstraints": true
}

View File

@ -1,52 +0,0 @@
{
"version": 1.0,
"waypoints": [
{
"anchor": {
"x": 0.4936438362905214,
"y": 4.092954054853979
},
"prevControl": null,
"nextControl": {
"x": 1.359011265031077,
"y": 4.034483282641779
},
"isLocked": false,
"linkedName": null
},
{
"anchor": {
"x": 1.2186814117217974,
"y": 4.736132549188175
},
"prevControl": {
"x": 1.2303755661642373,
"y": 4.350225452587658
},
"nextControl": null,
"isLocked": false,
"linkedName": null
}
],
"rotationTargets": [],
"constraintZones": [],
"eventMarkers": [],
"globalConstraints": {
"maxVelocity": 4.0,
"maxAcceleration": 4.0,
"maxAngularVelocity": 540.0,
"maxAngularAcceleration": 720.0
},
"goalEndState": {
"velocity": 0,
"rotation": 141.76617482255304,
"rotateFast": false
},
"reversed": false,
"folder": null,
"previewStartingState": {
"rotation": 180.0,
"velocity": 0
},
"useDefaultConstraints": true
}

View File

@ -1,13 +0,0 @@
package frc.robot.Commands;
import edu.wpi.first.wpilibj2.command.ParallelCommandGroup;
import frc.robot.subsystems.Indexer;
import frc.robot.subsystems.Shooter;
public class AmpHandoff extends ParallelCommandGroup{
AmpHandoff(Indexer indexer, Shooter shooter){
//addCommands(indexer.shootNote(() -> 1), shooter.ampHandoff());
}
}

View File

@ -1,13 +0,0 @@
package frc.robot.Commands;
import edu.wpi.first.wpilibj2.command.ParallelCommandGroup;
import frc.robot.constants.ShooterConstants;
import frc.robot.subsystems.Indexer;
import frc.robot.subsystems.Shooter;
public class SpeakerShot extends ParallelCommandGroup{
SpeakerShot(Indexer indexer, Shooter shooter){
//addCommands(shooter.angleSpeedsSetpoints(ShooterConstants.kShooterLoadAngle, 0, 0), indexer.shootNote(() -> 1.0));
}
}

View File

@ -1,32 +0,0 @@
package frc.robot.Commands;
import java.util.function.BooleanSupplier;
import edu.wpi.first.wpilibj2.command.Command;
import frc.robot.constants.IntakeConstants;
import frc.robot.subsystems.Intake;
public class autoIntaking extends Command{
private Intake m_intake;
private BooleanSupplier m_beamBreak;
public autoIntaking(Intake intake, BooleanSupplier beamBreak){
m_intake = intake;
m_beamBreak = beamBreak;
addRequirements(intake);
}
@Override
public void execute(){
m_intake.intakeControl(() -> IntakeConstants.kDownAngle, () -> 1.0);
}
@Override
public boolean isFinished(){
if(!m_beamBreak.getAsBoolean()){
return true;
}else {return false;}
}
}

View File

@ -9,31 +9,20 @@ import java.util.Optional;
import com.pathplanner.lib.auto.AutoBuilder;
import com.pathplanner.lib.auto.NamedCommands;
import com.pathplanner.lib.util.PPLibTelemetry;
import com.pathplanner.lib.util.PathPlannerLogging;
import edu.wpi.first.math.MathUtil;
import edu.wpi.first.math.geometry.Pose2d;
import edu.wpi.first.math.geometry.Transform3d;
import edu.wpi.first.math.util.Units;
import edu.wpi.first.wpilibj.DriverStation;
import edu.wpi.first.wpilibj.RobotBase;
import edu.wpi.first.wpilibj.GenericHID.RumbleType;
import edu.wpi.first.wpilibj.shuffleboard.BuiltInWidgets;
import edu.wpi.first.wpilibj.shuffleboard.Shuffleboard;
import edu.wpi.first.wpilibj.shuffleboard.ShuffleboardTab;
import edu.wpi.first.wpilibj.smartdashboard.SendableChooser;
import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard;
import edu.wpi.first.wpilibj2.command.Command;
import edu.wpi.first.wpilibj2.command.Commands;
import edu.wpi.first.wpilibj2.command.InstantCommand;
import edu.wpi.first.wpilibj2.command.PrintCommand;
import edu.wpi.first.wpilibj2.command.RunCommand;
import edu.wpi.first.wpilibj2.command.WaitCommand;
import edu.wpi.first.wpilibj2.command.button.CommandXboxController;
import edu.wpi.first.wpilibj2.command.button.Trigger;
import frc.robot.Commands.autoIntaking;
import frc.robot.constants.IntakeConstants;
import frc.robot.constants.OIConstants;
import frc.robot.constants.PhotonConstants;
import frc.robot.constants.ShooterConstants;
@ -60,8 +49,6 @@ public class RobotContainer {
private CommandXboxController operator;
private Trigger isTeleopTrigger;
private Trigger isEnabledTrigger;
private Trigger indexerBeamBreakWatcher;
private SendableChooser<Command> autoChooser;
@ -73,10 +60,6 @@ public class RobotContainer {
// TODO There's more than one speaker tag, how do we want to handle this?
private int speakerTag;
private boolean setAmpAngle;
private boolean intakeDown;
private boolean invertXYDrive;
public RobotContainer() {
/*try {
@ -97,87 +80,16 @@ public class RobotContainer {
intake = new Intake();
shooter = new Shooter();
climber = new Climber(shooter.getShooterAngle());
indexer = new Indexer();
shooter = new Shooter(indexer::getBeamBreak);
climber = new Climber(shooter::getShooterAngle);
NamedCommands.registerCommand(
"Charge Shooter 2 Sec",
shooter.angleSpeedsSetpoints(
() -> ShooterConstants.kShooterLoadAngle,
1.0,
1.0
).withTimeout(2.0)
);
/*
NamedCommands.registerCommand(
"Speaker Note Shot",
Commands.parallel(
shooter.angleSpeedsSetpoints(
() -> ShooterConstants.kShooterLoadAngle,
1.0,
1.0
),
indexer.shootNote(() -> 1.0)
).withTimeout(1.0)
);
*/
NamedCommands.registerCommand(
"Speaker Note Shot",
shooter.angleSpeedsSetpoints(
() -> ShooterConstants.kShooterLoadAngle,
1.0,
1.0
).raceWith(
new WaitCommand(1.0)
).andThen(
shooter.angleSpeedsSetpoints(
() -> ShooterConstants.kShooterLoadAngle,
1.0,
1.0
).alongWith(indexer.shootNote(() -> 1.0))
.withTimeout(0.75)
)
);
/*
NamedCommands.registerCommand(
"Auto Intake",
Commands.parallel(
intake.intakeControl(
() -> IntakeConstants.kDownAngle,
() -> 1.0
),
indexer.advanceNote()
).until(() -> !indexer.getBeamBreak())
.withTimeout(1.0)
);*/
NamedCommands.registerCommand(
"Auto Intake",
intake.intakeControl(
() -> IntakeConstants.kDownAngle,
() -> 1.0
).alongWith(
indexer.advanceNote()
).until(() -> !indexer.getBeamBreak())
.andThen(
intake.stopAll()
)
.withTimeout(2.5)
);
//NamedCommands.registerCommand("Auto Intake", new PrintCommand("Intake Note"));
// An example Named Command, doesn't need to remain once we start actually adding real things
// ALL Named Commands need to be defined AFTER subsystem initialization and BEFORE auto/controller configuration
NamedCommands.registerCommand("Set Drivetrain X", drivetrain.setXCommand());
// TODO Specify a default auto string once we have one
autoChooser = AutoBuilder.buildAutoChooser();
@ -185,11 +97,18 @@ public class RobotContainer {
operator = new CommandXboxController(OIConstants.kSecondaryXboxUSB);
isTeleopTrigger = new Trigger(DriverStation::isTeleopEnabled);
isEnabledTrigger = new Trigger(DriverStation::isEnabled);
indexerBeamBreakWatcher = new Trigger(indexer::getBeamBreak);
setAmpAngle = false;
intakeDown = false;
Optional<DriverStation.Alliance> alliance = DriverStation.getAlliance();
if (alliance.isEmpty() || alliance.get() == DriverStation.Alliance.Red) {
ampTagID = 5;
sourceTagID = 9;
speakerTag = 4;
} else {
ampTagID = 6;
sourceTagID = 1;
speakerTag = 8;
}
configureBindings();
shuffleboardSetup();
@ -204,142 +123,17 @@ public class RobotContainer {
private void configureBindings() {
isTeleopTrigger.onTrue(new InstantCommand(() -> Shuffleboard.selectTab(kTeleopTabName)));
isEnabledTrigger.onTrue(
new InstantCommand(
() -> {
Optional<DriverStation.Alliance> alliance = DriverStation.getAlliance();
if (alliance.isEmpty() || alliance.get() == DriverStation.Alliance.Red) {
ampTagID = 5;
sourceTagID = 9;
speakerTag = 4;
invertXYDrive = true;
} else {
ampTagID = 6;
sourceTagID = 1;
speakerTag = 8;
invertXYDrive = false;
}
}
)
);
drivetrain.setDefaultCommand(
drivetrain.teleopCommand(
() -> { return driver.getLeftY(); /*(invertXYDrive ? -1 : 1);*/ },
() -> { return driver.getLeftX(); /*(invertXYDrive ? -1 : 1);*/ },
() -> { return driver.getRightX(); /*(invertXYDrive ? -1 : 1);*/ },
driver::getLeftY,
driver::getLeftX,
driver::getRightX,
OIConstants.kTeleopDriveDeadband
)
);
intake.setDefaultCommand(
intake.intakeControl(
() -> {
if (intakeDown && indexer.getBeamBreak()) {
return IntakeConstants.kDownAngle;
} else {
return IntakeConstants.kUpAngle;
}
},
() -> {
if(intakeDown && indexer.getBeamBreak()){
return 1.0;
}else if(operator.leftBumper().getAsBoolean()){
return -1.0;
}else{
return 0.0;
}
}
)
);
driver.leftTrigger().whileFalse(
new InstantCommand(
() -> {
intakeDown = false;
}
)
);
driver.leftTrigger().whileTrue(Commands.parallel(
new InstantCommand(
() -> {
intakeDown = true;
}
), indexer.advanceNote()
));
shooter.setDefaultCommand(
shooter.angleSpeedsSetpoints(
() -> {
if (setAmpAngle) {
return ShooterConstants.kShooterAmpAngle;
} else {
return ShooterConstants.kShooterLoadAngle;
}
},
() -> {
if(driver.getRightTriggerAxis() > 0.25){
return 1.0;
} else if(operator.getRightTriggerAxis() > 0.25){
return -1.0;
}else{
return 0.0;
}
}
)
);
driver.leftBumper().onTrue(
shooter.angleSpeedsSetpoints(
() -> ShooterConstants.kShooterLoadAngle,
() -> 1.0
).withTimeout(.5).andThen(
shooter.angleSpeedsSetpoints(
() -> ShooterConstants.kShooterLoadAngle,
() -> 1.0
).alongWith(
indexer.shootNote(() -> 1.0)
).withTimeout(2)
)
);
climber.setDefaultCommand(climber.stop());
indexer.setDefaultCommand(indexer.shootNote(
() -> {
if (driver.getRightTriggerAxis() > .25) {
return 1.0;
}else {
return 0.0;
}
}
));
indexerBeamBreakWatcher.onFalse(
new RunCommand(() -> {
driver.getHID().setRumble(RumbleType.kBothRumble, 1);
}).withTimeout(.5).andThen(
new InstantCommand(() -> {
driver.getHID().setRumble(RumbleType.kBothRumble, 0);
})
)
);
/*
driver.povCenter().onFalse(
drivetrain.driveCardinal(
driver::getLeftY,
driver::getLeftX,
driver.getHID()::getPOV,
OIConstants.kTeleopDriveDeadband).until(
() -> MathUtil.applyDeadband(driver.getRightX(), OIConstants.kTeleopDriveDeadband) != 0
)
);
// Lock on to the appropriate Amp AprilTag while still being able to strafe and drive forward and back
driver.leftBumper().onTrue(
driver.a().onTrue(
drivetrain.driveAprilTagLock(
driver::getLeftY,
driver::getLeftX,
@ -372,7 +166,18 @@ public class RobotContainer {
).until(
() -> MathUtil.applyDeadband(driver.getRightX(), OIConstants.kTeleopDriveDeadband) != 0
)
); */
);
driver.povCenter().onFalse(
drivetrain.driveCardinal(
driver::getLeftY,
driver::getLeftX,
driver.getHID()::getPOV,
OIConstants.kTeleopDriveDeadband
).until(
() -> MathUtil.applyDeadband(driver.getRightX(), OIConstants.kTeleopDriveDeadband) != 0
)
);
// This was originally a run while held, not sure that's really necessary, change it if need be
driver.y().onTrue(drivetrain.zeroHeadingCommand());
@ -380,8 +185,6 @@ public class RobotContainer {
// This was originally a run while held, not sure that's really necessary, change it if need be
driver.rightBumper().onTrue(drivetrain.setXCommand());
operator.rightTrigger().whileTrue(indexer.shootNote(() -> -1.0));
/*
* This has been added because interest has been expressed in trying field relative vs
* robot relative control. This should <i>default</i> to field relative, but give the option
@ -393,36 +196,48 @@ public class RobotContainer {
*/
driver.start().onTrue(drivetrain.toggleFieldRelativeControl());
operator.b().whileTrue(Commands.parallel(indexer.shootNote(() -> 1.0), shooter.ampHandoff(() -> driver.getRightTriggerAxis(), () -> {
if(operator.getRightTriggerAxis()>0.25){
return true;
}else{
return false;
}
})));
//intake.setDefaultCommand(intake.intakeUpCommand());
//Intake rollers intentionally disabled at the moment
intake.setDefaultCommand(
intake.manualPivot(
() -> { return operator.getRightY() / 2; },
() -> { return 0; }
)
);
//driver.leftBumper().toggleOnTrue(intake.intakeDownCommand());
// shooter.setDefaultCommand(shooter.angleSpeedsSetpoints(ShooterConstants.kShooterLoadAngle, 0.0, 0.0));
shooter.setDefaultCommand(
shooter.manualPivot(
() -> { return operator.getLeftY() / 2; },
() -> {
if (MathUtil.applyDeadband(driver.getLeftTriggerAxis(), OIConstants.kTeleopDriveDeadband) != 0) {
return driver.getLeftTriggerAxis();
} else {
return -operator.getLeftTriggerAxis();
}
}
)
);
operator.a().onTrue(new InstantCommand(() -> { setAmpAngle = true; }));
operator.a().onFalse(new InstantCommand(() -> { setAmpAngle = false; }));
//operator.a().whileTrue(shooter.angleSpeedsSetpoints(ShooterConstants.kShooterAmpAngle, 0, 0));
indexer.setDefaultCommand(
indexer.shootNote(
() -> {
if (MathUtil.applyDeadband(driver.getLeftTriggerAxis(), OIConstants.kTeleopDriveDeadband) != 0) {
return driver.getLeftTriggerAxis();
} else {
return -operator.getLeftTriggerAxis();
}
}
)
);
operator.y().toggleOnTrue(Commands.parallel(climber.setSpeedWithSupplier(operator::getRightTriggerAxis), shooter.climbState(), intake.climbingStateCommand()));
climber.setDefaultCommand(climber.stop());
driver.a().whileTrue(indexer.shootNote(() -> 1.0));
operator.back().toggleOnTrue(shooter.manualPivot(
() -> MathUtil.clamp(-operator.getLeftY(), -0.25, 0.25),
() -> MathUtil.clamp(driver.getRightTriggerAxis(), -1, 1)
));
driver.povDown().whileTrue(indexer.shootNote(() -> -1.0));
operator.leftTrigger().whileTrue(Commands.parallel( indexer.shootNote(() -> -1), intake.intakeControl(() -> IntakeConstants.kDownAngle, () -> -1.0)));
operator.start().toggleOnTrue(intake.manualPivot(() -> -operator.getRightY()*0.2, () -> driver.getLeftTriggerAxis()));
operator.rightBumper().whileTrue(
climber.setSpeedWithSupplier(
operator::getRightTriggerAxis
)
);
}
@ -432,8 +247,6 @@ public class RobotContainer {
.withPosition(0, 0)
.withSize(2, 1)
.withWidget(BuiltInWidgets.kComboBoxChooser);
//Always select the auto tab on startup
Shuffleboard.selectTab(kAutoTabName);
@ -443,13 +256,10 @@ public class RobotContainer {
.withPosition(0, 0)
.withSize(2, 1)
.withWidget(BuiltInWidgets.kBooleanBox);
teleopTab.addBoolean("indexer beam break", indexer::getBeamBreak);
teleopTab.addBoolean("shooter beam break", shooter::getBeamBreak);
teleopTab.addDouble("shooter angle", shooter::getShooterAngle);
teleopTab.addDouble("intake angle", intake::getIntakeDegrees);
//teleopTab.addDouble("intake pid", intake::getIntakePID);
teleopTab.addDouble("heading swerve", drivetrain::getHeading);
teleopTab.addDouble("steering encoder", drivetrain::getEncoderSteering);
teleopTab.addBoolean("indexer beam break", indexer.getBeamBreak());
teleopTab.addBoolean("shooter beam break", shooter.getBeamBreak());
teleopTab.addDouble("shooter angle", shooter.getShooterAngle());
teleopTab.addDouble("intake angle", intake.getIntakeAngle());
}
public Command getAutonomousCommand() {

View File

@ -8,14 +8,14 @@ import edu.wpi.first.math.trajectory.TrapezoidProfile;
import edu.wpi.first.math.util.Units;
public final class AutoConstants {
public static final double kMaxSpeedMetersPerSecond = 4; // max capable = 4.6
public static final double kMaxAccelerationMetersPerSecondSquared = 4; // max capable = 7.4
public static final double kMaxSpeedMetersPerSecond = 3.895; // max capable = 4.6
public static final double kMaxAccelerationMetersPerSecondSquared = 3; // max capable = 7.4
public static final double kMaxAngularSpeedRadiansPerSecond = Math.PI;
public static final double kMaxAngularSpeedRadiansPerSecondSquared = Math.PI;
public static final double kPXController = 5.5;//5;
public static final double kPYController = 5.5;//5;
public static final double kPThetaController = 5;//0.5; // needs to be separate from heading control
public static final double kPXController = 1.05;
public static final double kPYController = 1.05;
public static final double kPThetaController = 0.95; // needs to be separate from heading control
public static final double kPHeadingController = 0.02; // for heading control NOT PATHING
public static final double kDHeadingController = 0.0025;
@ -24,7 +24,7 @@ public final class AutoConstants {
new PIDConstants(kPXController),
new PIDConstants(kPThetaController),
kMaxSpeedMetersPerSecond,
Units.inchesToMeters(Math.sqrt(Math.pow(14-1.75, 2)+ Math.pow(14-1.75, 2))),
Units.inchesToMeters(34.65),
new ReplanningConfig()
);

View File

@ -7,12 +7,12 @@ import edu.wpi.first.math.util.Units;
public final class DrivetrainConstants {
// Driving Parameters - Note that these are not the maximum capable speeds of
// the robot, rather the allowed maximum speeds
public static final double kMaxSpeedMetersPerSecond = 5.2;
public static final double kMaxSpeedMetersPerSecond = 4.6;
public static final double kMaxAngularSpeed = 2 * Math.PI; // radians per second
public static final double kDirectionSlewRate = 4.8; // radians per second
public static final double kMagnitudeSlewRate = 6.4; // percent per second (1 = 100%)
public static final double kRotationalSlewRate = 8.0; // percent per second (1 = 100%)
public static final double kDirectionSlewRate = 2.4; // radians per second
public static final double kMagnitudeSlewRate = 3.2; // percent per second (1 = 100%)
public static final double kRotationalSlewRate = 4.0; // percent per second (1 = 100%)
// Chassis configuration
public static final double kTrackWidth = Units.inchesToMeters(28-1.75*2);
@ -26,34 +26,26 @@ public final class DrivetrainConstants {
new Translation2d(-kWheelBase / 2, -kTrackWidth / 2));
// Angular offsets of the modules relative to the chassis in radians
public static final double kFrontLeftChassisAngularOffset = 0.0;// Math.PI
public static final double kFrontRightChassisAngularOffset = Math.PI / 2;//-Math.PI / 2;
public static final double kBackLeftChassisAngularOffset = -Math.PI/2;//Math.PI / 2;
public static final double kBackRightChassisAngularOffset = Math.PI; //0;
/*
public static final double kFrontLeftChassisAngularOffset = -2*Math.PI;
public static final double kFrontRightChassisAngularOffset = -2*Math.PI;
public static final double kBackLeftChassisAngularOffset = -2*Math.PI;
public static final double kBackRightChassisAngularOffset = -2*Math.PI-(4/180.0);
*/
public static final double kFrontLeftChassisAngularOffset = -Math.PI / 2;
public static final double kFrontRightChassisAngularOffset = 0;
public static final double kBackLeftChassisAngularOffset = Math.PI;
public static final double kBackRightChassisAngularOffset = Math.PI / 2;
// SPARK MAX CAN IDs
public static final int kFrontLeftDrivingCanId = 1;//8
public static final int kRearLeftDrivingCanId = 6;//3
public static final int kFrontRightDrivingCanId = 3;//6
public static final int kRearRightDrivingCanId = 8;//1
public static final int kFrontLeftDrivingCanId = 8;
public static final int kRearLeftDrivingCanId = 3;
public static final int kFrontRightDrivingCanId = 6;
public static final int kRearRightDrivingCanId = 1;
public static final int kFrontLeftTurningCanId = 5;//4
public static final int kRearLeftTurningCanId = 2;//7
public static final int kFrontRightTurningCanId = 7;//2
public static final int kRearRightTurningCanId = 4;//5
public static final int kFrontLeftTurningCanId = 4;
public static final int kRearLeftTurningCanId = 7;
public static final int kFrontRightTurningCanId = 2;
public static final int kRearRightTurningCanId = 5;
public static final double kTurnToleranceDeg = 0;
public static final double kTurnRateToleranceDegPerS = 0;
public static final boolean kGyroReversed = true;
public static final double kRobotStartOffset = 0;
public static final double kRobotStartOffset = 90;
}

View File

@ -4,20 +4,19 @@ public class IntakeConstants {
public static final int kIntakePivotID = 10;
public static final int kIntakeRollerID = 12;
public static final double kIntakePivotConversionFactor = (20.0*(28.0/15.0));
public static final double kIntakePivotConversionFactor = 1/(20.0*(28.0/15.0));
public static final int kPivotCurrentLimit = 40;
public static final double kPIntake = 3;//4; //2.5;
public static final double kPIntake = 0;
public static final double kIIntake = 0;
public static final double kDIntake = 0.01;
public static final double kDIntake = 0;
public static final double kSFeedForward = 0;
public static final double kGFeedForward = 1;//1.11;
public static final double kVFeedForward = .5;//0.73;
public static final double kGFeedForward = 0;
public static final double kVFeedForward = 0;
public static final double kStartingAngle = Math.toRadians(95.0);
public static final double kStartingAngle = Math.toRadians(105.0);
public static final double kUpAngle = Math.toRadians(90.0);
public static final double kDownAngle = Math.toRadians(-34.0);
}

View File

@ -10,9 +10,10 @@ public class ShooterConstants {
public static final double kShooterI = 0.0;
public static final double kShooterD = 0.0;
public static final double kShooterFF = 0.0;
public static final double kSShooterFF = 0.0;
public static final double kVShooterFF = 0.0;
public static final double kShooterPivotP = 3.0;
public static final double kShooterPivotP = 0.0;
public static final double kShooterPivotI = 0.0;
public static final double kShooterPivotD = 0.0;
@ -22,8 +23,8 @@ public class ShooterConstants {
public static final double kPivotConversion = 1/(40.0*(28.0/15.0));
public static final double kSShooterPivotFF = 0.0;
public static final double kGShooterPivotFF = 0.33;
public static final double kVShooterPivotFF = 1.44;
public static final double kGShooterPivotFF = 0.0;
public static final double kVShooterPivotFF = 0.0;
public static final double kMaxPivotSpeed = 0.0;
public static final double kMaxPivotAcceleration = 0.0;

View File

@ -16,8 +16,8 @@ public class SwerveModuleConstants {
public static final double kDrivingMotorFreeSpeedRps = NeoMotorConstants.kFreeSpeedRpm / 60;
public static final double kWheelDiameterMeters = 0.0762;
public static final double kWheelCircumferenceMeters = kWheelDiameterMeters * Math.PI;
// 45 teeth on the wheel's bevel gear, 20 teeth on the first-stage spur gear, 15 teeth on the bevel pinion
public static final double kDrivingMotorReduction = (45.0 * 20) / (kDrivingMotorPinionTeeth * 15);
// 45 teeth on the wheel's bevel gear, 22 teeth on the first-stage spur gear, 15 teeth on the bevel pinion
public static final double kDrivingMotorReduction = (45.0 * 22) / (kDrivingMotorPinionTeeth * 15);
public static final double kDriveWheelFreeSpeedRps = (kDrivingMotorFreeSpeedRps * kWheelCircumferenceMeters)
/ kDrivingMotorReduction;
@ -49,6 +49,6 @@ public class SwerveModuleConstants {
public static final IdleMode kDrivingMotorIdleMode = IdleMode.kBrake;
public static final IdleMode kTurningMotorIdleMode = IdleMode.kBrake;
public static final int kDrivingMotorCurrentLimit = 70; // amps
public static final int kDrivingMotorCurrentLimit = 60; // amps
public static final int kTurningMotorCurrentLimit = 30; // amps
}

View File

@ -8,7 +8,6 @@ import com.ctre.phoenix.motorcontrol.can.VictorSPX;
import edu.wpi.first.wpilibj2.command.Command;
import edu.wpi.first.wpilibj2.command.SubsystemBase;
import frc.robot.constants.ClimberConstants;
import frc.robot.constants.ShooterConstants;
public class Climber extends SubsystemBase {
private VictorSPX motor1;
@ -16,25 +15,21 @@ public class Climber extends SubsystemBase {
private DoubleSupplier shooterAngle;
//TODO What tells the climber to stop climbing when it achieves the target height?
public Climber(DoubleSupplier shooterAngle) {
motor1 = new VictorSPX(ClimberConstants.kClimberMotor1CANID);
motor2 = new VictorSPX(ClimberConstants.kClimberMotor2CANID);
if(shooterAngle.getAsDouble() > Math.toRadians(-10.0)){
motor1 = new VictorSPX(ClimberConstants.kClimberMotor1CANID);
motor2 = new VictorSPX(ClimberConstants.kClimberMotor2CANID);
motor2.follow(motor1);
motor1.setInverted(true);
motor2.setInverted(true);
this.shooterAngle = shooterAngle;
motor2.follow(motor1);
}
}
public Command setSpeedWithSupplier(DoubleSupplier speed) {
return run(() -> {
if(shooterAngle.getAsDouble() > ShooterConstants.kShooterLoadAngle){
if(shooterAngle.getAsDouble() > Math.toRadians(-10.0)){
motor1.set(VictorSPXControlMode.PercentOutput, speed.getAsDouble());
}else{
motor1.set(VictorSPXControlMode.PercentOutput, 0.0);
}
});
}

View File

@ -20,10 +20,8 @@ import java.util.function.DoubleSupplier;
import com.kauailabs.navx.frc.AHRS;
import com.pathplanner.lib.auto.AutoBuilder;
import edu.wpi.first.wpilibj.ADXRS450_Gyro;
import edu.wpi.first.wpilibj.DriverStation;
import edu.wpi.first.wpilibj.SPI;
import edu.wpi.first.wpilibj.interfaces.Gyro;
import frc.robot.constants.AutoConstants;
import frc.robot.constants.DrivetrainConstants;
import frc.robot.utilities.MAXSwerveModule;
@ -45,7 +43,6 @@ public class Drivetrain extends SubsystemBase {
// The gyro sensor
private final AHRS m_gyro;
//private final ADXRS450_Gyro m_gyro;
private final SlewRateLimiter m_magLimiter;
private final SlewRateLimiter m_rotLimiter;
@ -66,8 +63,6 @@ public class Drivetrain extends SubsystemBase {
private double m_prevTime;
private double gyroOffset;
/** Creates a new DriveSubsystem. */
public Drivetrain(Pose2d initialPose, IAprilTagProvider aprilTagProvider, IVisualPoseProvider visualPoseProvider) {
m_frontLeft = new MAXSwerveModule(
@ -95,8 +90,6 @@ public class Drivetrain extends SubsystemBase {
// TODO The NavX is not centered in the robot, it's output probably needs to be translated
m_gyro = new AHRS(SPI.Port.kMXP);
// m_gyro = new ADXRS450_Gyro();
//m_gyro.calibrate();
m_magLimiter = new SlewRateLimiter(DrivetrainConstants.kMagnitudeSlewRate);
m_rotLimiter = new SlewRateLimiter(DrivetrainConstants.kRotationalSlewRate);
@ -139,9 +132,6 @@ public class Drivetrain extends SubsystemBase {
},
this
);
gyroOffset = DrivetrainConstants.kRobotStartOffset;
}
@Override
@ -166,14 +156,6 @@ public class Drivetrain extends SubsystemBase {
}
}
public double getRobotStartOffset() {
return gyroOffset;
}
public void setRobotStartOffset(double offset) {
gyroOffset = offset;
}
public boolean isFieldRelativeControl() {
return fieldRelativeControl;
}
@ -207,8 +189,6 @@ public class Drivetrain extends SubsystemBase {
* @param pose The pose to which to set the odometry.
*/
public void resetOdometry(Pose2d pose) {
m_gyro.setAngleAdjustment(pose.getRotation().getDegrees());
m_poseEstimator.resetPosition(
Rotation2d.fromDegrees(getGyroAngle()),
new SwerveModulePosition[] {
@ -295,7 +275,7 @@ public class Drivetrain extends SubsystemBase {
var swerveModuleStates = DrivetrainConstants.kDriveKinematics.toSwerveModuleStates(
fieldRelative.getAsBoolean()
? ChassisSpeeds.fromFieldRelativeSpeeds(xSpeedDelivered, ySpeedDelivered, rotDelivered, m_poseEstimator.getEstimatedPosition().getRotation())
? ChassisSpeeds.fromFieldRelativeSpeeds(xSpeedDelivered, ySpeedDelivered, rotDelivered, Rotation2d.fromDegrees(getGyroAngle()))
: new ChassisSpeeds(xSpeedDelivered, ySpeedDelivered, rotDelivered));
SwerveDriveKinematics.desaturateWheelSpeeds(
swerveModuleStates, DrivetrainConstants.kMaxSpeedMetersPerSecond);
@ -306,21 +286,12 @@ public class Drivetrain extends SubsystemBase {
}
public void driveWithChassisSpeeds(ChassisSpeeds speeds) {
//speeds.omegaRadiansPerSecond = -speeds.omegaRadiansPerSecond;
ChassisSpeeds discreteSpeeds = ChassisSpeeds.discretize(speeds, 0.2);
SwerveModuleState[] newStates = DrivetrainConstants.kDriveKinematics.toSwerveModuleStates(discreteSpeeds);
SwerveDriveKinematics.desaturateWheelSpeeds(newStates, DrivetrainConstants.kMaxSpeedMetersPerSecond);
setModuleStates(newStates);
/*
//speeds.omegaRadiansPerSecond = -speeds.omegaRadiansPerSecond;
SwerveModuleState[] states = DrivetrainConstants.kDriveKinematics.toSwerveModuleStates(speeds);
m_frontLeft.setDesiredState(states[0]);
m_frontRight.setDesiredState(states[1]);
m_rearLeft.setDesiredState(states[2]);
m_rearRight.setDesiredState(states[3]);
*/
}
public Command teleopCommand(DoubleSupplier xSpeed, DoubleSupplier ySpeed, DoubleSupplier rotation, double deadband) {
@ -330,7 +301,7 @@ public class Drivetrain extends SubsystemBase {
-MathUtil.applyDeadband(ySpeed.getAsDouble(), deadband),
-MathUtil.applyDeadband(rotation.getAsDouble(), deadband),
() -> fieldRelativeControl,
true
false
);
});
}
@ -435,25 +406,15 @@ public class Drivetrain extends SubsystemBase {
/** Zeroes the heading of the robot. */
public void zeroHeading() {
Pose2d tempPose = m_poseEstimator.getEstimatedPosition();
Rotation2d tempRotation = Rotation2d.fromDegrees(0);
resetOdometry(
new Pose2d(
tempPose.getX(),
tempPose.getY(),
tempRotation
)
);
m_gyro.reset();
}
public Command zeroHeadingCommand() {
return runOnce(this::zeroHeading);
}
public void offsetZero(Pose2d angle){
resetOdometry(angle);
public void offsetZero(double angle){
m_gyro.setAngleAdjustment(angle);
}
/**
@ -466,7 +427,7 @@ public class Drivetrain extends SubsystemBase {
}
public double getGyroAngle(){
return m_gyro.getAngle() * (DrivetrainConstants.kGyroReversed ? -1.0 : 1.0);
return m_gyro.getAngle() * (DrivetrainConstants.kGyroReversed ? -1.0 : 1.0) + DrivetrainConstants.kRobotStartOffset;
}
/**
@ -477,8 +438,4 @@ public class Drivetrain extends SubsystemBase {
public double getTurnRate() {
return m_gyro.getRate() * (DrivetrainConstants.kGyroReversed ? -1.0 : 1.0);
}
public double getEncoderSteering(){
return m_frontLeft.steeringEncoder();
}
}

View File

@ -2,6 +2,7 @@ package frc.robot.subsystems;
import com.revrobotics.CANSparkMax;
import java.util.function.BooleanSupplier;
import java.util.function.DoubleSupplier;
import com.revrobotics.CANSparkBase.IdleMode;
@ -30,23 +31,13 @@ public class Indexer extends SubsystemBase{
public Command autoIndexing(){
return run(() -> {
if(!indexerBeamBreak.get()){
indexerMotor.set(0.75);
indexerMotor.set(0.5);
}else if(indexerBeamBreak.get()){
indexerMotor.set(0.0);
}
});
}
public Command advanceNote(){
return run(() -> {
if(indexerBeamBreak.get()){
indexerMotor.set(1);
}else{
indexerMotor.set(0.0);
}
});
}
public Command shootNote(DoubleSupplier indexerSpeed){
return run(() -> {
@ -54,7 +45,7 @@ public class Indexer extends SubsystemBase{
});
}
public boolean getBeamBreak(){
return indexerBeamBreak.get();
public BooleanSupplier getBeamBreak(){
return indexerBeamBreak::get;
}
}

View File

@ -9,8 +9,6 @@ import com.revrobotics.CANSparkLowLevel.MotorType;
import edu.wpi.first.math.controller.ArmFeedforward;
import edu.wpi.first.math.controller.PIDController;
import edu.wpi.first.math.util.Units;
import edu.wpi.first.util.function.BooleanConsumer;
import edu.wpi.first.wpilibj2.command.Command;
import edu.wpi.first.wpilibj2.command.SubsystemBase;
import frc.robot.constants.IntakeConstants;
@ -25,22 +23,17 @@ public class Intake extends SubsystemBase{
private ArmFeedforward intakeFeedForward;
private double armOffset;
public Intake(){
armOffset = 0;
intakeRoller = new CANSparkMax(IntakeConstants.kIntakeRollerID, MotorType.kBrushless);
intakeRoller.setSmartCurrentLimit(60);
intakeRoller.setIdleMode(IdleMode.kBrake);
intakeRoller.setIdleMode(IdleMode.kCoast);
intakeRoller.burnFlash();
intakePivot = new CANSparkMax(IntakeConstants.kIntakePivotID, MotorType.kBrushless);
intakePivot.setIdleMode(IdleMode.kBrake);
intakePivot.setSmartCurrentLimit(IntakeConstants.kPivotCurrentLimit);
intakePivot.setInverted(true);
intakePivot.burnFlash();
intakeFeedForward = new ArmFeedforward(
@ -50,8 +43,8 @@ public class Intake extends SubsystemBase{
);
intakeEncoder = intakePivot.getEncoder();
intakeEncoder.setPosition(Units.radiansToRotations( IntakeConstants.kStartingAngle));
// intakeEncoder.setPositionConversionFactor(IntakeConstants.kIntakePivotConversionFactor);
intakeEncoder.setPosition(IntakeConstants.kStartingAngle);
intakeEncoder.setPositionConversionFactor(IntakeConstants.kIntakePivotConversionFactor);
intakeAnglePID = new PIDController(
IntakeConstants.kPIntake,
@ -59,64 +52,23 @@ public class Intake extends SubsystemBase{
IntakeConstants.kDIntake
);
armOffset = getIntakeAngle()-IntakeConstants.kStartingAngle;
}
/*
public Command autoIntaking(BooleanSupplier beamBreak){
return run(() -> {
intakeRoller.set(1.0);
intakePivot.setVoltage(
intakeAnglePID.calculate(
getIntakeAngle(),
IntakeConstants.kDownAngle
) + intakeFeedForward.calculate(
IntakeConstants.kDownAngle,
0.0
)
);
return isFinished(() -> {
if(!beamBreak.getAsBoolean()){
return true
}
});
});
}
*/
public Command intakeControl(DoubleSupplier pivotAngle, DoubleSupplier intakeSpeed) {
return run(() -> {
intakeRoller.set(intakeSpeed.getAsDouble());
intakePivot.setVoltage(
intakeAnglePID.calculate(
getIntakeAngle(),
pivotAngle.getAsDouble()
) + intakeFeedForward.calculate(
pivotAngle.getAsDouble(),
0.0
)
);
});
}
public Command intakeDownCommand() {
return run(() -> {
intakeRoller.set(0.0);
intakeRoller.set(1.0);
intakePivot.setVoltage(
intakeAnglePID.calculate(
getIntakeAngle(),
intakeEncoder.getPosition(),
IntakeConstants.kDownAngle
) + intakeFeedForward.calculate(
IntakeConstants.kDownAngle,
0.0
intakeEncoder.getVelocity()
)
);
});
}
public Command manualPivot(DoubleSupplier pivotPower, DoubleSupplier rollerSpinny){
return run(() ->{
@ -131,11 +83,11 @@ public class Intake extends SubsystemBase{
intakePivot.setVoltage(
intakeAnglePID.calculate(
getIntakeAngle(),
intakeEncoder.getPosition(),
IntakeConstants.kDownAngle
) + intakeFeedForward.calculate(
IntakeConstants.kDownAngle,
0.0
intakeEncoder.getVelocity()
)
);
});
@ -147,38 +99,17 @@ public class Intake extends SubsystemBase{
intakePivot.setVoltage(
intakeAnglePID.calculate(
getIntakeAngle(),
intakeEncoder.getPosition(),
IntakeConstants.kUpAngle
) + intakeFeedForward.calculate(
IntakeConstants.kUpAngle,
0.0
intakeEncoder.getVelocity()
)
);
});
}
public Command stopAll() {
return runOnce(() -> {
intakeRoller.set(0);
intakePivot.setVoltage(0);
});
}
public double getIntakeAngle(){
return Units.rotationsToRadians(intakeEncoder.getPosition()/IntakeConstants.kIntakePivotConversionFactor)-armOffset;
}
public double getIntakePID(){
return intakeAnglePID.calculate(
getIntakeAngle(),
IntakeConstants.kDownAngle
) + intakeFeedForward.calculate(
IntakeConstants.kDownAngle,
0.0
);
}
public double getIntakeDegrees(){
return Math.toDegrees(getIntakeAngle());
public DoubleSupplier getIntakeAngle(){
return intakeEncoder::getPosition;
}
}

View File

@ -4,12 +4,13 @@ import java.util.function.BooleanSupplier;
import java.util.function.DoubleSupplier;
import com.revrobotics.CANSparkMax;
import com.revrobotics.RelativeEncoder;
import com.revrobotics.CANSparkBase.IdleMode;
import com.revrobotics.CANSparkLowLevel.MotorType;
import edu.wpi.first.math.MathUtil;
import edu.wpi.first.math.controller.ArmFeedforward;
import edu.wpi.first.math.controller.PIDController;
import edu.wpi.first.math.controller.SimpleMotorFeedforward;
import edu.wpi.first.wpilibj.DigitalInput;
import edu.wpi.first.wpilibj.Encoder;
import edu.wpi.first.wpilibj2.command.Command;
@ -20,103 +21,103 @@ public class Shooter extends SubsystemBase{
private CANSparkMax topShooter;
private CANSparkMax bottomShooter;
private RelativeEncoder bottomEncoder;
private RelativeEncoder topEncoder;
private CANSparkMax shooterPivot;
private Encoder pivotEncoder;
private PIDController topShooterPID;
private SimpleMotorFeedforward topShooterFF;
private PIDController bottomShooterPID;
private SimpleMotorFeedforward bottomShooterFF;
private PIDController shooterPivotPID;
private ArmFeedforward shooterPivotFF;
private DigitalInput shooterBeamBreak;
private boolean indexerBeamBreak;
public Shooter(BooleanSupplier indexerBeamBreak){
public Shooter(){
topShooter = new CANSparkMax(ShooterConstants.kTopShooterID, MotorType.kBrushless);
topShooter.setInverted(true);
bottomShooter = new CANSparkMax(ShooterConstants.kBottomShooterID, MotorType.kBrushless);
bottomShooter.setInverted(true);
topShooter.setSmartCurrentLimit(40);
topShooter.burnFlash();
bottomShooter.setSmartCurrentLimit(40);
bottomShooter.burnFlash();
topEncoder = topShooter.getEncoder();
bottomEncoder = bottomShooter.getEncoder();
shooterPivot = new CANSparkMax(ShooterConstants.kShooterPivotID, MotorType.kBrushless);
shooterPivot.setInverted(true);
/*
topPID = topShooter.getPIDController();
topPID.setFeedbackDevice(topEncoder);
bottomPID = bottomShooter.getPIDController();
bottomPID.setFeedbackDevice(bottomEncoder);
*/
shooterPivot.setSmartCurrentLimit(50);
topShooter.setSmartCurrentLimit(40);
bottomShooter.setSmartCurrentLimit(40);
shooterPivot.burnFlash();
pivotEncoder = new Encoder(0, 1);
pivotEncoder.setDistancePerPulse(ShooterConstants.kPivotConversion);
shooterBeamBreak = new DigitalInput(ShooterConstants.kShooterBeamBreakChannel);
topShooter.setIdleMode(IdleMode.kCoast);
bottomShooter.setIdleMode(IdleMode.kCoast);
//TODO These can probably devolve into BangBang controllers and let the feed forwards maintain speed
topShooterPID = new PIDController(
ShooterConstants.kShooterP,
ShooterConstants.kShooterI,
ShooterConstants.kShooterD
);
bottomShooterPID = new PIDController(
ShooterConstants.kShooterP,
ShooterConstants.kShooterI,
ShooterConstants.kShooterD
);
bottomShooter.burnFlash();
shooterPivot.burnFlash();
topShooter.burnFlash();
topShooterFF = new SimpleMotorFeedforward(ShooterConstants.kSShooterFF, ShooterConstants.kVShooterFF);
topShooterFF = new SimpleMotorFeedforward(ShooterConstants.kSShooterFF, ShooterConstants.kVShooterFF);
shooterPivotPID = new PIDController(
ShooterConstants.kShooterPivotP,
ShooterConstants.kShooterPivotI,
ShooterConstants.kShooterPivotD
);
shooterPivotFF = new ArmFeedforward(ShooterConstants.kSShooterPivotFF, ShooterConstants.kGShooterPivotFF, ShooterConstants.kVShooterPivotFF);
shooterPivotFF = new ArmFeedforward(
ShooterConstants.kSShooterPivotFF,
ShooterConstants.kGShooterPivotFF,
ShooterConstants.kVShooterPivotFF
);
}
/*
public Command angleSpeedsSetpoints(double setpointAngle, double topRPM, double bottomRPM){
return run(()-> {
angleAndSpeedControl(setpointAngle, topRPM, bottomRPM);
});
}*/
public Command angleSpeedsSetpoints(DoubleSupplier setpointAngle, DoubleSupplier speed){
return run(()-> {
angleAndSpeedControl(setpointAngle.getAsDouble(), speed.getAsDouble(), speed.getAsDouble());
});
}
public Command angleSpeedsSetpoints(DoubleSupplier setpointAngle, double topRPM, double bottomRPM){
return run(()-> {
angleAndSpeedControl(setpointAngle.getAsDouble(), topRPM, bottomRPM);
});
}
private void angleAndSpeedControl(double setpointAngle, double topRPM, double bottomRPM){
shooterPivot.setIdleMode(IdleMode.kBrake);
shooterPivot.setVoltage(
shooterPivotPID.calculate(getShooterAngle(), setpointAngle) +
shooterPivotFF.calculate(setpointAngle, 0.0));
//topPID.setReference(topRPM, CANSparkMax.ControlType.kVelocity);
//bottomPID.setReference(bottomRPM, CANSparkMax.ControlType.kVelocity);
topShooter.set(topRPM);
bottomShooter.set(bottomRPM);
}
public Command ampHandoff(DoubleSupplier shootNoteSpeed, BooleanSupplier ampAngleOrNah){
return run(() -> {
shooterPivot.setIdleMode(IdleMode.kBrake);
shooterPivot.setVoltage(
shooterPivotPID.calculate(getShooterAngle(), ShooterConstants.kShooterLoadAngle) +
shooterPivotPID.calculate(pivotEncoder.getDistance(), setpointAngle) +
shooterPivotFF.calculate(setpointAngle, 0.0));
topShooter.setVoltage(topShooterPID.calculate(topEncoder.getVelocity(), topRPM)+topShooterFF.calculate(topRPM));
bottomShooter.setVoltage(bottomShooterPID.calculate(bottomEncoder.getVelocity(), bottomRPM)+bottomShooterFF.calculate(bottomRPM));
});
}
public Command recieveNote(){
return run(() -> {
shooterPivot.setIdleMode(IdleMode.kBrake);
shooterPivot.setVoltage(
shooterPivotPID.calculate(pivotEncoder.getDistance(), ShooterConstants.kShooterLoadAngle) +
shooterPivotFF.calculate(ShooterConstants.kShooterLoadAngle, 0.0));
if(shooterBeamBreak.get() || indexerBeamBreak){
angleAndSpeedControl(ShooterConstants.kShooterLoadAngle, 0.25, 0.25);
if(shooterBeamBreak.get()){
topShooter.set(0.25);
bottomShooter.set(0.25);
}else{
angleAndSpeedControl(ShooterConstants.kShooterLoadAngle, shootNoteSpeed.getAsDouble(), shootNoteSpeed.getAsDouble());
topShooter.set(0.);
bottomShooter.set(0.);
}
});
}
@ -128,36 +129,20 @@ public class Shooter extends SubsystemBase{
});
}
public double getShooterAngle(){
return pivotEncoder.getDistance() + ShooterConstants.kShooterLoadAngle;
public DoubleSupplier getShooterAngle(){
return () -> {return pivotEncoder.getDistance();};
}
public Command zeroEncoder(){
return run(() -> {
pivotEncoder.reset();
});
}
public Boolean getBeamBreak(){
return shooterBeamBreak.get();
public BooleanSupplier getBeamBreak(){
return shooterBeamBreak::get;
}
public Command manualPivot(DoubleSupplier pivotPower, DoubleSupplier spinny){
return run(() ->{
shooterPivot.setIdleMode(IdleMode.kBrake);
if(getShooterAngle() >= ShooterConstants.kShooterLoadAngle && getShooterAngle() <= ShooterConstants.kShooterAmpAngle){
shooterPivot.set(pivotPower.getAsDouble());
}else if(getShooterAngle() > ShooterConstants.kShooterAmpAngle){
shooterPivot.set(MathUtil.clamp(pivotPower.getAsDouble(), -1.0, 0.0));
}else if(getShooterAngle() < ShooterConstants.kShooterLoadAngle){
shooterPivot.set(MathUtil.clamp(pivotPower.getAsDouble(), 0.0, 1.0));
}
shooterPivot.set(pivotPower.getAsDouble());
topShooter.set(spinny.getAsDouble());
bottomShooter.set(spinny.getAsDouble());
});
}
}

View File

@ -6,7 +6,6 @@ import edu.wpi.first.math.kinematics.SwerveModuleState;
import com.revrobotics.CANSparkMax;
import com.revrobotics.CANSparkLowLevel.MotorType;
import com.revrobotics.CANSparkLowLevel.PeriodicFrame;
import com.revrobotics.SparkAbsoluteEncoder.Type;
import com.revrobotics.SparkPIDController;
import com.revrobotics.AbsoluteEncoder;
@ -37,13 +36,6 @@ public class MAXSwerveModule {
m_drivingSparkMax = new CANSparkMax(drivingCANId, MotorType.kBrushless);
m_turningSparkMax = new CANSparkMax(turningCANId, MotorType.kBrushless);
// The periodic frame update rate for the absolute encoders for position is available to be changed at Status 5
// The update rate for absolute encoder velocity is on Status 6.
// The default update rate for the absolute encoder on both of those status frames is only 200ms which might be causing the swerve jitter
// TODO: test if these changes break the swerve drive or fix the jitter.
m_turningSparkMax.setPeriodicFramePeriod(PeriodicFrame.kStatus5, 20);
m_turningSparkMax.setPeriodicFramePeriod(PeriodicFrame.kStatus6, 20);
// Factory reset, so we get the SPARKS MAX to a known state before configuring
// them. This is useful in case a SPARK MAX is swapped out.
m_drivingSparkMax.restoreFactoryDefaults();
@ -165,8 +157,4 @@ public class MAXSwerveModule {
public void resetEncoders() {
m_drivingEncoder.setPosition(0);
}
public double steeringEncoder(){
return m_turningEncoder.getPosition();
}
}

View File

@ -1,7 +1,7 @@
{
"fileName": "PathplannerLib.json",
"name": "PathplannerLib",
"version": "2024.2.7",
"version": "2024.1.2",
"uuid": "1b42324f-17c6-4875-8e77-1c312bc8c786",
"frcYear": "2024",
"mavenUrls": [
@ -12,7 +12,7 @@
{
"groupId": "com.pathplanner.lib",
"artifactId": "PathplannerLib-java",
"version": "2024.2.7"
"version": "2024.1.2"
}
],
"jniDependencies": [],
@ -20,7 +20,7 @@
{
"groupId": "com.pathplanner.lib",
"artifactId": "PathplannerLib-cpp",
"version": "2024.2.7",
"version": "2024.1.2",
"libName": "PathplannerLib",
"headerClassifier": "headers",
"sharedLibrary": false,

View File

@ -1,7 +1,7 @@
{
"fileName": "Phoenix5.json",
"name": "CTRE-Phoenix (v5)",
"version": "5.33.1",
"version": "5.33.0",
"frcYear": 2024,
"uuid": "ab676553-b602-441f-a38d-f1296eff6537",
"mavenUrls": [
@ -20,19 +20,19 @@
{
"groupId": "com.ctre.phoenix",
"artifactId": "api-java",
"version": "5.33.1"
"version": "5.33.0"
},
{
"groupId": "com.ctre.phoenix",
"artifactId": "wpiapi-java",
"version": "5.33.1"
"version": "5.33.0"
}
],
"jniDependencies": [
{
"groupId": "com.ctre.phoenix",
"artifactId": "cci",
"version": "5.33.1",
"version": "5.33.0",
"isJar": false,
"skipInvalidPlatforms": true,
"validPlatforms": [
@ -45,7 +45,7 @@
{
"groupId": "com.ctre.phoenix.sim",
"artifactId": "cci-sim",
"version": "5.33.1",
"version": "5.33.0",
"isJar": false,
"skipInvalidPlatforms": true,
"validPlatforms": [
@ -60,7 +60,7 @@
{
"groupId": "com.ctre.phoenix",
"artifactId": "wpiapi-cpp",
"version": "5.33.1",
"version": "5.33.0",
"libName": "CTRE_Phoenix_WPI",
"headerClassifier": "headers",
"sharedLibrary": true,
@ -75,7 +75,7 @@
{
"groupId": "com.ctre.phoenix",
"artifactId": "api-cpp",
"version": "5.33.1",
"version": "5.33.0",
"libName": "CTRE_Phoenix",
"headerClassifier": "headers",
"sharedLibrary": true,
@ -90,7 +90,7 @@
{
"groupId": "com.ctre.phoenix",
"artifactId": "cci",
"version": "5.33.1",
"version": "5.33.0",
"libName": "CTRE_PhoenixCCI",
"headerClassifier": "headers",
"sharedLibrary": true,
@ -105,7 +105,7 @@
{
"groupId": "com.ctre.phoenix.sim",
"artifactId": "wpiapi-cpp-sim",
"version": "5.33.1",
"version": "5.33.0",
"libName": "CTRE_Phoenix_WPISim",
"headerClassifier": "headers",
"sharedLibrary": true,
@ -120,7 +120,7 @@
{
"groupId": "com.ctre.phoenix.sim",
"artifactId": "api-cpp-sim",
"version": "5.33.1",
"version": "5.33.0",
"libName": "CTRE_PhoenixSim",
"headerClassifier": "headers",
"sharedLibrary": true,
@ -135,7 +135,7 @@
{
"groupId": "com.ctre.phoenix.sim",
"artifactId": "cci-sim",
"version": "5.33.1",
"version": "5.33.0",
"libName": "CTRE_PhoenixCCISim",
"headerClassifier": "headers",
"sharedLibrary": true,

View File

@ -1,7 +1,7 @@
{
"fileName": "REVLib.json",
"name": "REVLib",
"version": "2024.2.4",
"version": "2024.2.0",
"frcYear": "2024",
"uuid": "3f48eb8c-50fe-43a6-9cb7-44c86353c4cb",
"mavenUrls": [
@ -12,14 +12,14 @@
{
"groupId": "com.revrobotics.frc",
"artifactId": "REVLib-java",
"version": "2024.2.4"
"version": "2024.2.0"
}
],
"jniDependencies": [
{
"groupId": "com.revrobotics.frc",
"artifactId": "REVLib-driver",
"version": "2024.2.4",
"version": "2024.2.0",
"skipInvalidPlatforms": true,
"isJar": false,
"validPlatforms": [
@ -37,7 +37,7 @@
{
"groupId": "com.revrobotics.frc",
"artifactId": "REVLib-cpp",
"version": "2024.2.4",
"version": "2024.2.0",
"libName": "REVLib",
"headerClassifier": "headers",
"sharedLibrary": false,
@ -55,7 +55,7 @@
{
"groupId": "com.revrobotics.frc",
"artifactId": "REVLib-driver",
"version": "2024.2.4",
"version": "2024.2.0",
"libName": "REVLibDriver",
"headerClassifier": "headers",
"sharedLibrary": false,