diff --git a/src/main/deploy/choreo/AlphaAutos.chor b/src/main/deploy/choreo/AlphaAutos.chor new file mode 100644 index 00000000..2028a2e4 --- /dev/null +++ b/src/main/deploy/choreo/AlphaAutos.chor @@ -0,0 +1,84 @@ +{ + "name":"AlphaAutos", + "version":2, + "type":"Swerve", + "variables":{ + "expressions":{}, + "poses":{} + }, + "config":{ + "frontLeft":{ + "x":{ + "exp":"11 in", + "val":0.2794 + }, + "y":{ + "exp":"11 in", + "val":0.2794 + } + }, + "backLeft":{ + "x":{ + "exp":"-11 in", + "val":-0.2794 + }, + "y":{ + "exp":"11 in", + "val":0.2794 + } + }, + "mass":{ + "exp":"52.16 kg", + "val":52.16 + }, + "inertia":{ + "exp":"4.39 kg m ^ 2", + "val":4.39 + }, + "gearing":{ + "exp":"6.5", + "val":6.5 + }, + "radius":{ + "exp":"2 in", + "val":0.0508 + }, + "vmax":{ + "exp":"6000 RPM", + "val":628.3185307179587 + }, + "tmax":{ + "exp":"1.2 N * m", + "val":1.2 + }, + "cof":{ + "exp":"1.5", + "val":1.5 + }, + "bumper":{ + "front":{ + "exp":"16 in", + "val":0.4064 + }, + "side":{ + "exp":"16 in", + "val":0.4064 + }, + "back":{ + "exp":"16 in", + "val":0.4064 + } + }, + "differentialTrackWidth":{ + "exp":"22 in", + "val":0.5588 + } + }, + "generationFeatures":[], + "codegen":{ + "root":null, + "genVars":true, + "genTrajData":true, + "useChoreoLib":true + } +} diff --git a/src/main/deploy/choreo/ClimbToHub.traj b/src/main/deploy/choreo/ClimbToHub.traj new file mode 100644 index 00000000..ccfafa6b --- /dev/null +++ b/src/main/deploy/choreo/ClimbToHub.traj @@ -0,0 +1,68 @@ +{ + "name":"ClimbToHub", + "version":3, + "snapshot":{ + "waypoints":[ + {"x":1.6633899211883545, "y":3.7032699584960938, "heading":0.0, "intervals":16, "split":false, "fixTranslation":true, "fixHeading":true, "overrideIntervals":false}, + {"x":3.456470012664795, "y":3.995620012283325, "heading":0.0, "intervals":40, "split":false, "fixTranslation":true, "fixHeading":true, "overrideIntervals":false}], + "constraints":[], + "targetDt":0.05 + }, + "params":{ + "waypoints":[ + {"x":{"exp":"1.6633899211883545 m", "val":1.6633899211883545}, "y":{"exp":"3.7032699584960938 m", "val":3.7032699584960938}, "heading":{"exp":"0 deg", "val":0.0}, "intervals":16, "split":false, "fixTranslation":true, "fixHeading":true, "overrideIntervals":false}, + {"x":{"exp":"3.456470012664795 m", "val":3.456470012664795}, "y":{"exp":"3.995620012283325 m", "val":3.995620012283325}, "heading":{"exp":"0 deg", "val":0.0}, "intervals":40, "split":false, "fixTranslation":true, "fixHeading":true, "overrideIntervals":false}], + "constraints":[], + "targetDt":{ + "exp":"0.05 s", + "val":0.05 + } + }, + "trajectory":{ + "config":{ + "frontLeft":{ + "x":0.2794, + "y":0.2794 + }, + "backLeft":{ + "x":-0.2794, + "y":0.2794 + }, + "mass":52.16, + "inertia":4.39, + "gearing":6.5, + "radius":0.0508, + "vmax":628.3185307179587, + "tmax":1.2, + "cof":1.5, + "bumper":{ + "front":0.4064, + "side":0.4064, + "back":0.4064 + }, + "differentialTrackWidth":0.5588 + }, + "sampleType":"Swerve", + "waypoints":[0.0,0.37065], + "samples":[ + {"t":0.0, "x":1.66339, "y":3.70327, "heading":0.0, "vx":4.82993, "vy":0.78749, "omega":0.0, "ax":0.3564, "ay":0.05811, "alpha":0.0, "fx":[4.6474,4.6474,4.6474,4.6474], "fy":[0.75773,0.75773,0.75773,0.75773]}, + {"t":0.02317, "x":1.77537, "y":3.72153, "heading":0.0, "vx":4.83819, "vy":0.78884, "omega":0.0, "ax":0.00068, "ay":0.00011, "alpha":0.0, "fx":[0.00893,0.00893,0.00893,0.00893], "fy":[0.00146,0.00146,0.00146,0.00146]}, + {"t":0.04633, "x":1.88745, "y":3.7398, "heading":0.0, "vx":4.83821, "vy":0.78884, "omega":0.0, "ax":0.0, "ay":0.0, "alpha":0.0, "fx":[0.00002,0.00002,0.00002,0.00002], "fy":[0.0,0.0,0.0,0.0]}, + {"t":0.0695, "x":1.99953, "y":3.75808, "heading":0.0, "vx":4.83821, "vy":0.78884, "omega":0.0, "ax":0.0, "ay":0.0, "alpha":0.0, "fx":[0.0,0.0,0.0,0.0], "fy":[0.0,0.0,0.0,0.0]}, + {"t":0.09266, "x":2.11161, "y":3.77635, "heading":0.0, "vx":4.83821, "vy":0.78884, "omega":0.0, "ax":0.0, "ay":0.0, "alpha":0.0, "fx":[0.0,0.0,0.0,0.0], "fy":[0.0,0.0,0.0,0.0]}, + {"t":0.11583, "x":2.22369, "y":3.79462, "heading":0.0, "vx":4.83821, "vy":0.78884, "omega":0.0, "ax":0.0, "ay":0.0, "alpha":0.0, "fx":[0.0,0.0,0.0,0.0], "fy":[0.0,0.0,0.0,0.0]}, + {"t":0.13899, "x":2.33577, "y":3.8129, "heading":0.0, "vx":4.83821, "vy":0.78884, "omega":0.0, "ax":0.0, "ay":0.0, "alpha":0.0, "fx":[0.0,0.0,0.0,0.0], "fy":[0.0,0.0,0.0,0.0]}, + {"t":0.16216, "x":2.44785, "y":3.83117, "heading":0.0, "vx":4.83821, "vy":0.78884, "omega":0.0, "ax":0.0, "ay":0.0, "alpha":0.0, "fx":[0.0,0.0,0.0,0.0], "fy":[0.0,0.0,0.0,0.0]}, + {"t":0.18532, "x":2.55993, "y":3.84944, "heading":0.0, "vx":4.83821, "vy":0.78884, "omega":0.0, "ax":0.0, "ay":0.0, "alpha":0.0, "fx":[0.0,0.0,0.0,0.0], "fy":[0.0,0.0,0.0,0.0]}, + {"t":0.20849, "x":2.67201, "y":3.86772, "heading":0.0, "vx":4.83821, "vy":0.78884, "omega":0.0, "ax":0.0, "ay":0.0, "alpha":0.0, "fx":[0.0,0.0,0.0,0.0], "fy":[0.0,0.0,0.0,0.0]}, + {"t":0.23166, "x":2.78409, "y":3.88599, "heading":0.0, "vx":4.83821, "vy":0.78884, "omega":0.0, "ax":0.0, "ay":0.0, "alpha":0.0, "fx":[0.0,0.0,0.0,0.0], "fy":[0.0,0.0,0.0,0.0]}, + {"t":0.25482, "x":2.89617, "y":3.90427, "heading":0.0, "vx":4.83821, "vy":0.78884, "omega":0.0, "ax":0.0, "ay":0.0, "alpha":0.0, "fx":[0.0,0.0,0.0,0.0], "fy":[0.0,0.0,0.0,0.0]}, + {"t":0.27799, "x":3.00825, "y":3.92254, "heading":0.0, "vx":4.83821, "vy":0.78884, "omega":0.0, "ax":0.0, "ay":0.0, "alpha":0.0, "fx":[0.0,0.0,0.0,0.0], "fy":[0.0,0.0,0.0,0.0]}, + {"t":0.30115, "x":3.12033, "y":3.94081, "heading":0.0, "vx":4.83821, "vy":0.78884, "omega":0.0, "ax":0.0, "ay":0.0, "alpha":0.0, "fx":[-0.00002,-0.00002,-0.00002,-0.00002], "fy":[0.0,0.0,0.0,0.0]}, + {"t":0.32432, "x":3.23241, "y":3.95909, "heading":0.0, "vx":4.83821, "vy":0.78884, "omega":0.0, "ax":-0.00068, "ay":-0.00011, "alpha":0.0, "fx":[-0.00893,-0.00893,-0.00893,-0.00893], "fy":[-0.00146,-0.00146,-0.00146,-0.00146]}, + {"t":0.34748, "x":3.34449, "y":3.97736, "heading":0.0, "vx":4.83819, "vy":0.78884, "omega":0.0, "ax":-0.3564, "ay":-0.05811, "alpha":0.0, "fx":[-4.6474,-4.6474,-4.6474,-4.6474], "fy":[-0.75773,-0.75773,-0.75773,-0.75773]}, + {"t":0.37065, "x":3.45647, "y":3.99562, "heading":0.0, "vx":4.82993, "vy":0.78749, "omega":0.0, "ax":0.0, "ay":0.0, "alpha":0.0, "fx":[0.0,0.0,0.0,0.0], "fy":[0.0,0.0,0.0,0.0]}], + "splits":[0] + }, + "events":[] +} diff --git a/src/main/deploy/choreo/DepotIntake.traj b/src/main/deploy/choreo/DepotIntake.traj new file mode 100644 index 00000000..95f6dae1 --- /dev/null +++ b/src/main/deploy/choreo/DepotIntake.traj @@ -0,0 +1,82 @@ +{ + "name":"DepotIntake", + "version":3, + "snapshot":{ + "waypoints":[ + {"x":1.174944281578064, "y":5.828909397125244, "heading":0.0, "intervals":11, "split":false, "fixTranslation":true, "fixHeading":true, "overrideIntervals":false}, + {"x":0.4241056740283966, "y":5.942218780517578, "heading":0.0, "intervals":11, "split":false, "fixTranslation":true, "fixHeading":true, "overrideIntervals":false}, + {"x":1.174944281578064, "y":5.828909397125244, "heading":0.0, "intervals":40, "split":false, "fixTranslation":true, "fixHeading":true, "overrideIntervals":false}], + "constraints":[ + {"from":"first", "to":null, "data":{"type":"StopPoint", "props":{}}, "enabled":true}, + {"from":"last", "to":null, "data":{"type":"StopPoint", "props":{}}, "enabled":true}, + {"from":"first", "to":"last", "data":{"type":"KeepInRectangle", "props":{"x":0.0, "y":0.0, "w":16.541, "h":8.0692}}, "enabled":false}], + "targetDt":0.05 + }, + "params":{ + "waypoints":[ + {"x":{"exp":"1.174944281578064 m", "val":1.174944281578064}, "y":{"exp":"5.828909397125244 m", "val":5.828909397125244}, "heading":{"exp":"0 deg", "val":0.0}, "intervals":11, "split":false, "fixTranslation":true, "fixHeading":true, "overrideIntervals":false}, + {"x":{"exp":"0.4241056740283966 m", "val":0.4241056740283966}, "y":{"exp":"5.942218780517578 m", "val":5.942218780517578}, "heading":{"exp":"0 deg", "val":0.0}, "intervals":11, "split":false, "fixTranslation":true, "fixHeading":true, "overrideIntervals":false}, + {"x":{"exp":"1.174944281578064 m", "val":1.174944281578064}, "y":{"exp":"5.828909397125244 m", "val":5.828909397125244}, "heading":{"exp":"0 deg", "val":0.0}, "intervals":40, "split":false, "fixTranslation":true, "fixHeading":true, "overrideIntervals":false}], + "constraints":[ + {"from":"first", "to":null, "data":{"type":"StopPoint", "props":{}}, "enabled":true}, + {"from":"last", "to":null, "data":{"type":"StopPoint", "props":{}}, "enabled":true}, + {"from":"first", "to":"last", "data":{"type":"KeepInRectangle", "props":{"x":{"exp":"0 m", "val":0.0}, "y":{"exp":"0 m", "val":0.0}, "w":{"exp":"16.541 m", "val":16.541}, "h":{"exp":"8.0692 m", "val":8.0692}}}, "enabled":false}], + "targetDt":{ + "exp":"0.05 s", + "val":0.05 + } + }, + "trajectory":{ + "config":{ + "frontLeft":{ + "x":0.2794, + "y":0.2794 + }, + "backLeft":{ + "x":-0.2794, + "y":0.2794 + }, + "mass":52.16, + "inertia":4.39, + "gearing":6.5, + "radius":0.0508, + "vmax":628.3185307179587, + "tmax":1.2, + "cof":1.5, + "bumper":{ + "front":0.4064, + "side":0.4064, + "back":0.4064 + }, + "differentialTrackWidth":0.5588 + }, + "sampleType":"Swerve", + "waypoints":[0.0,0.5104,1.02081], + "samples":[ + {"t":0.0, "x":1.17494, "y":5.82891, "heading":0.0, "vx":0.0, "vy":0.0, "omega":0.0, "ax":-11.63203, "ay":1.75539, "alpha":0.0, "fx":[-151.68167,-151.68167,-151.68167,-151.68167], "fy":[22.89035,22.89035,22.89035,22.89035]}, + {"t":0.0464, "x":1.16242, "y":5.8308, "heading":0.0, "vx":-0.53972, "vy":0.08145, "omega":0.0, "ax":-11.6293, "ay":1.75498, "alpha":0.0, "fx":[-151.64605,-151.64605,-151.64605,-151.64605], "fy":[22.88497,22.88497,22.88497,22.88497]}, + {"t":0.0928, "x":1.12486, "y":5.83647, "heading":0.0, "vx":-1.07932, "vy":0.16288, "omega":0.0, "ax":-11.62475, "ay":1.7543, "alpha":0.0, "fx":[-151.58668,-151.58668,-151.58668,-151.58668], "fy":[22.87601,22.87601,22.87601,22.87601]}, + {"t":0.1392, "x":1.06227, "y":5.84591, "heading":0.0, "vx":-1.61871, "vy":0.24428, "omega":0.0, "ax":-11.61564, "ay":1.75292, "alpha":0.0, "fx":[-151.46801,-151.46801,-151.46801,-151.46801], "fy":[22.8581,22.8581,22.8581,22.8581]}, + {"t":0.1856, "x":0.97465, "y":5.85914, "heading":0.0, "vx":-2.15767, "vy":0.32562, "omega":0.0, "ax":-11.58839, "ay":1.74881, "alpha":0.0, "fx":[-151.11255,-151.11255,-151.11255,-151.11255], "fy":[22.80446,22.80446,22.80446,22.80446]}, + {"t":0.232, "x":0.86206, "y":5.87613, "heading":0.0, "vx":-2.69537, "vy":0.40676, "omega":0.0, "ax":-0.0012, "ay":0.00018, "alpha":0.0, "fx":[-0.01565,-0.01565,-0.01565,-0.01565], "fy":[0.00236,0.00236,0.00236,0.00236]}, + {"t":0.2784, "x":0.737, "y":5.895, "heading":0.0, "vx":-2.69543, "vy":0.40677, "omega":0.0, "ax":11.58839, "ay":-1.74881, "alpha":0.0, "fx":[151.11254,151.11254,151.11254,151.11254], "fy":[-22.80446,-22.80446,-22.80446,-22.80446]}, + {"t":0.3248, "x":0.62441, "y":5.91199, "heading":0.0, "vx":-2.15773, "vy":0.32562, "omega":0.0, "ax":11.61564, "ay":-1.75292, "alpha":0.0, "fx":[151.46801,151.46801,151.46801,151.46801], "fy":[-22.8581,-22.8581,-22.8581,-22.8581]}, + {"t":0.3712, "x":0.53679, "y":5.92521, "heading":0.0, "vx":-1.61876, "vy":0.24429, "omega":0.0, "ax":11.62475, "ay":-1.7543, "alpha":0.0, "fx":[151.58668,151.58668,151.58668,151.58668], "fy":[-22.87601,-22.87601,-22.87601,-22.87601]}, + {"t":0.4176, "x":0.47419, "y":5.93466, "heading":0.0, "vx":-1.07938, "vy":0.16289, "omega":0.0, "ax":11.6293, "ay":-1.75498, "alpha":0.0, "fx":[151.64604,151.64604,151.64604,151.64604], "fy":[-22.88497,-22.88497,-22.88497,-22.88497]}, + {"t":0.464, "x":0.43663, "y":5.94033, "heading":0.0, "vx":-0.53978, "vy":0.08146, "omega":0.0, "ax":11.63203, "ay":-1.75539, "alpha":0.0, "fx":[151.68167,151.68167,151.68167,151.68167], "fy":[-22.89035,-22.89035,-22.89035,-22.89035]}, + {"t":0.5104, "x":0.42411, "y":5.94222, "heading":0.0, "vx":-0.00006, "vy":0.00001, "omega":0.0, "ax":11.63203, "ay":-1.75539, "alpha":0.0, "fx":[151.68168,151.68168,151.68168,151.68168], "fy":[-22.89035,-22.89035,-22.89035,-22.89035]}, + {"t":0.5568, "x":0.43663, "y":5.94033, "heading":0.0, "vx":0.53968, "vy":-0.08144, "omega":0.0, "ax":11.6293, "ay":-1.75498, "alpha":0.0, "fx":[151.64605,151.64605,151.64605,151.64605], "fy":[-22.88497,-22.88497,-22.88497,-22.88497]}, + {"t":0.6032, "x":0.47419, "y":5.93466, "heading":0.0, "vx":1.07929, "vy":-0.16288, "omega":0.0, "ax":11.62475, "ay":-1.7543, "alpha":0.0, "fx":[151.58668,151.58668,151.58668,151.58668], "fy":[-22.87601,-22.87601,-22.87601,-22.87601]}, + {"t":0.6496, "x":0.53678, "y":5.92522, "heading":0.0, "vx":1.61868, "vy":-0.24428, "omega":0.0, "ax":11.61565, "ay":-1.75292, "alpha":0.0, "fx":[151.46802,151.46802,151.46802,151.46802], "fy":[-22.8581,-22.8581,-22.8581,-22.8581]}, + {"t":0.696, "x":0.62439, "y":5.91199, "heading":0.0, "vx":2.15766, "vy":-0.32561, "omega":0.0, "ax":11.58839, "ay":-1.74881, "alpha":0.0, "fx":[151.11256,151.11256,151.11256,151.11256], "fy":[-22.80446,-22.80446,-22.80446,-22.80446]}, + {"t":0.7424, "x":0.73698, "y":5.895, "heading":0.0, "vx":2.69537, "vy":-0.40676, "omega":0.0, "ax":0.0012, "ay":-0.00018, "alpha":0.0, "fx":[0.01565,0.01565,0.01565,0.01565], "fy":[-0.00236,-0.00236,-0.00236,-0.00236]}, + {"t":0.7888, "x":0.86205, "y":5.87613, "heading":0.0, "vx":2.69542, "vy":-0.40677, "omega":0.0, "ax":-11.58839, "ay":1.74881, "alpha":0.0, "fx":[-151.11256,-151.11256,-151.11256,-151.11256], "fy":[22.80446,22.80446,22.80446,22.80446]}, + {"t":0.8352, "x":0.97465, "y":5.85914, "heading":0.0, "vx":2.15771, "vy":-0.32562, "omega":0.0, "ax":-11.61565, "ay":1.75292, "alpha":0.0, "fx":[-151.46802,-151.46802,-151.46802,-151.46802], "fy":[22.8581,22.8581,22.8581,22.8581]}, + {"t":0.8816, "x":1.06226, "y":5.84591, "heading":0.0, "vx":1.61874, "vy":-0.24428, "omega":0.0, "ax":-11.62475, "ay":1.7543, "alpha":0.0, "fx":[-151.58668,-151.58668,-151.58668,-151.58668], "fy":[22.87601,22.87601,22.87601,22.87601]}, + {"t":0.92801, "x":1.12486, "y":5.83647, "heading":0.0, "vx":1.07934, "vy":-0.16288, "omega":0.0, "ax":-11.6293, "ay":1.75498, "alpha":0.0, "fx":[-151.64605,-151.64605,-151.64605,-151.64605], "fy":[22.88497,22.88497,22.88497,22.88497]}, + {"t":0.97441, "x":1.16242, "y":5.8308, "heading":0.0, "vx":0.53973, "vy":-0.08145, "omega":0.0, "ax":-11.63203, "ay":1.75539, "alpha":0.0, "fx":[-151.68168,-151.68168,-151.68168,-151.68168], "fy":[22.89035,22.89035,22.89035,22.89035]}, + {"t":1.02081, "x":1.17494, "y":5.82891, "heading":0.0, "vx":0.0, "vy":0.0, "omega":0.0, "ax":0.0, "ay":0.0, "alpha":0.0, "fx":[0.0,0.0,0.0,0.0], "fy":[0.0,0.0,0.0,0.0]}], + "splits":[0] + }, + "events":[] +} diff --git a/src/main/deploy/choreo/DepotToHub.traj b/src/main/deploy/choreo/DepotToHub.traj new file mode 100644 index 00000000..34f9102d --- /dev/null +++ b/src/main/deploy/choreo/DepotToHub.traj @@ -0,0 +1,79 @@ +{ + "name":"DepotToHub", + "version":3, + "snapshot":{ + "waypoints":[ + {"x":1.174944281578064, "y":5.828909397125244, "heading":0.0, "intervals":21, "split":false, "fixTranslation":true, "fixHeading":true, "overrideIntervals":false}, + {"x":3.456470012664795, "y":3.995620012283325, "heading":0.0, "intervals":25, "split":false, "fixTranslation":true, "fixHeading":true, "overrideIntervals":false}], + "constraints":[ + {"from":"first", "to":null, "data":{"type":"StopPoint", "props":{}}, "enabled":true}, + {"from":"last", "to":null, "data":{"type":"StopPoint", "props":{}}, "enabled":true}, + {"from":"first", "to":"last", "data":{"type":"KeepInRectangle", "props":{"x":0.0, "y":0.0, "w":16.541, "h":8.0692}}, "enabled":false}], + "targetDt":0.05 + }, + "params":{ + "waypoints":[ + {"x":{"exp":"1.174944281578064 m", "val":1.174944281578064}, "y":{"exp":"5.828909397125244 m", "val":5.828909397125244}, "heading":{"exp":"0 deg", "val":0.0}, "intervals":21, "split":false, "fixTranslation":true, "fixHeading":true, "overrideIntervals":false}, + {"x":{"exp":"3.456470012664795 m", "val":3.456470012664795}, "y":{"exp":"3.995620012283325 m", "val":3.995620012283325}, "heading":{"exp":"0 deg", "val":0.0}, "intervals":25, "split":false, "fixTranslation":true, "fixHeading":true, "overrideIntervals":false}], + "constraints":[ + {"from":"first", "to":null, "data":{"type":"StopPoint", "props":{}}, "enabled":true}, + {"from":"last", "to":null, "data":{"type":"StopPoint", "props":{}}, "enabled":true}, + {"from":"first", "to":"last", "data":{"type":"KeepInRectangle", "props":{"x":{"exp":"0 m", "val":0.0}, "y":{"exp":"0 m", "val":0.0}, "w":{"exp":"16.541 m", "val":16.541}, "h":{"exp":"8.0692 m", "val":8.0692}}}, "enabled":false}], + "targetDt":{ + "exp":"0.05 s", + "val":0.05 + } + }, + "trajectory":{ + "config":{ + "frontLeft":{ + "x":0.2794, + "y":0.2794 + }, + "backLeft":{ + "x":-0.2794, + "y":0.2794 + }, + "mass":52.16, + "inertia":4.39, + "gearing":6.5, + "radius":0.0508, + "vmax":628.3185307179587, + "tmax":1.2, + "cof":1.5, + "bumper":{ + "front":0.4064, + "side":0.4064, + "back":0.4064 + }, + "differentialTrackWidth":0.5588 + }, + "sampleType":"Swerve", + "waypoints":[0.0,1.01517], + "samples":[ + {"t":0.0, "x":1.17494, "y":5.82891, "heading":0.0, "vx":0.0, "vy":0.0, "omega":0.0, "ax":9.17065, "ay":-7.36895, "alpha":0.0, "fx":[119.5853,119.5853,119.5853,119.5853], "fy":[-96.09116,-96.09116,-96.09116,-96.09116]}, + {"t":0.04834, "x":1.18566, "y":5.8203, "heading":0.0, "vx":0.44332, "vy":-0.35622, "omega":0.0, "ax":9.1695, "ay":-7.36803, "alpha":0.0, "fx":[119.57028,119.57028,119.57028,119.57028], "fy":[-96.0791,-96.0791,-96.0791,-96.0791]}, + {"t":0.09668, "x":1.2178, "y":5.79447, "heading":0.0, "vx":0.88659, "vy":-0.7124, "omega":0.0, "ax":9.16797, "ay":-7.3668, "alpha":0.0, "fx":[119.55027,119.55027,119.55027,119.55027], "fy":[-96.06301,-96.06301,-96.06301,-96.06301]}, + {"t":0.14502, "x":1.27137, "y":5.75142, "heading":0.0, "vx":1.32978, "vy":-1.06852, "omega":0.0, "ax":9.16582, "ay":-7.36507, "alpha":0.0, "fx":[119.52225,119.52225,119.52225,119.52225], "fy":[-96.0405,-96.0405,-96.0405,-96.0405]}, + {"t":0.19336, "x":1.34637, "y":5.69116, "heading":0.0, "vx":1.77286, "vy":-1.42456, "omega":0.0, "ax":9.1626, "ay":-7.36248, "alpha":0.0, "fx":[119.48026,119.48026,119.48026,119.48026], "fy":[-96.00676,-96.00676,-96.00676,-96.00676]}, + {"t":0.24171, "x":1.44278, "y":5.6137, "heading":0.0, "vx":2.21579, "vy":-1.78047, "omega":0.0, "ax":9.15724, "ay":-7.35817, "alpha":0.0, "fx":[119.41036,119.41036,119.41036,119.41036], "fy":[-95.95059,-95.95059,-95.95059,-95.95059]}, + {"t":0.29005, "x":1.56059, "y":5.51903, "heading":0.0, "vx":2.65846, "vy":-2.13617, "omega":0.0, "ax":9.14655, "ay":-7.34958, "alpha":0.0, "fx":[119.27095,119.27095,119.27095,119.27095], "fy":[-95.83857,-95.83857,-95.83857,-95.83857]}, + {"t":0.33839, "x":1.69979, "y":5.40718, "heading":0.0, "vx":3.10062, "vy":-2.49146, "omega":0.0, "ax":9.11476, "ay":-7.32405, "alpha":0.0, "fx":[118.85651,118.85651,118.85651,118.85651], "fy":[-95.50555,-95.50555,-95.50555,-95.50555]}, + {"t":0.38673, "x":1.86033, "y":5.27818, "heading":0.0, "vx":3.54124, "vy":-2.84551, "omega":0.0, "ax":5.86418, "ay":-4.71208, "alpha":0.0, "fx":[76.46886,76.46886,76.46886,76.46886], "fy":[-61.44552,-61.44552,-61.44552,-61.44552]}, + {"t":0.43507, "x":2.03837, "y":5.13512, "heading":0.0, "vx":3.82472, "vy":-3.0733, "omega":0.0, "ax":0.00099, "ay":-0.0008, "alpha":0.0, "fx":[0.01294,0.01294,0.01294,0.01294], "fy":[-0.01039,-0.01039,-0.01039,-0.01039]}, + {"t":0.48341, "x":2.22326, "y":4.98655, "heading":0.0, "vx":3.82477, "vy":-3.07334, "omega":0.0, "ax":0.0, "ay":0.0, "alpha":0.0, "fx":[0.0,0.0,0.0,0.0], "fy":[0.0,0.0,0.0,0.0]}, + {"t":0.53175, "x":2.40815, "y":4.83798, "heading":0.0, "vx":3.82477, "vy":-3.07334, "omega":0.0, "ax":-0.00099, "ay":0.0008, "alpha":0.0, "fx":[-0.01294,-0.01294,-0.01294,-0.01294], "fy":[0.01039,0.01039,0.01039,0.01039]}, + {"t":0.58009, "x":2.59305, "y":4.68941, "heading":0.0, "vx":3.82472, "vy":-3.0733, "omega":0.0, "ax":-5.86418, "ay":4.71208, "alpha":0.0, "fx":[-76.46886,-76.46886,-76.46886,-76.46886], "fy":[61.44552,61.44552,61.44552,61.44552]}, + {"t":0.62844, "x":2.77109, "y":4.54635, "heading":0.0, "vx":3.54124, "vy":-2.84551, "omega":0.0, "ax":-9.11476, "ay":7.32405, "alpha":0.0, "fx":[-118.85651,-118.85651,-118.85651,-118.85651], "fy":[95.50555,95.50555,95.50555,95.50555]}, + {"t":0.67678, "x":2.93162, "y":4.41735, "heading":0.0, "vx":3.10062, "vy":-2.49146, "omega":0.0, "ax":-9.14655, "ay":7.34958, "alpha":0.0, "fx":[-119.27095,-119.27095,-119.27095,-119.27095], "fy":[95.83857,95.83857,95.83857,95.83857]}, + {"t":0.72512, "x":3.07082, "y":4.3055, "heading":0.0, "vx":2.65846, "vy":-2.13617, "omega":0.0, "ax":-9.15724, "ay":7.35817, "alpha":0.0, "fx":[-119.41036,-119.41036,-119.41036,-119.41036], "fy":[95.95059,95.95059,95.95059,95.95059]}, + {"t":0.77346, "x":3.18864, "y":4.21083, "heading":0.0, "vx":2.21579, "vy":-1.78047, "omega":0.0, "ax":-9.1626, "ay":7.36248, "alpha":0.0, "fx":[-119.48026,-119.48026,-119.48026,-119.48026], "fy":[96.00676,96.00676,96.00676,96.00676]}, + {"t":0.8218, "x":3.28505, "y":4.13336, "heading":0.0, "vx":1.77286, "vy":-1.42456, "omega":0.0, "ax":-9.16582, "ay":7.36507, "alpha":0.0, "fx":[-119.52225,-119.52225,-119.52225,-119.52225], "fy":[96.0405,96.0405,96.0405,96.0405]}, + {"t":0.87014, "x":3.36004, "y":4.07311, "heading":0.0, "vx":1.32978, "vy":-1.06852, "omega":0.0, "ax":-9.16797, "ay":7.3668, "alpha":0.0, "fx":[-119.55027,-119.55027,-119.55027,-119.55027], "fy":[96.06301,96.06301,96.06301,96.06301]}, + {"t":0.91848, "x":3.41361, "y":4.03006, "heading":0.0, "vx":0.88659, "vy":-0.7124, "omega":0.0, "ax":-9.1695, "ay":7.36803, "alpha":0.0, "fx":[-119.57028,-119.57028,-119.57028,-119.57028], "fy":[96.0791,96.0791,96.0791,96.0791]}, + {"t":0.96682, "x":3.44575, "y":4.00423, "heading":0.0, "vx":0.44332, "vy":-0.35622, "omega":0.0, "ax":-9.17065, "ay":7.36895, "alpha":0.0, "fx":[-119.5853,-119.5853,-119.5853,-119.5853], "fy":[96.09116,96.09116,96.09116,96.09116]}, + {"t":1.01517, "x":3.45647, "y":3.99562, "heading":0.0, "vx":0.0, "vy":0.0, "omega":0.0, "ax":0.0, "ay":0.0, "alpha":0.0, "fx":[0.0,0.0,0.0,0.0], "fy":[0.0,0.0,0.0,0.0]}], + "splits":[0] + }, + "events":[] +} diff --git a/src/main/deploy/choreo/HubToClimb.traj b/src/main/deploy/choreo/HubToClimb.traj new file mode 100644 index 00000000..4aa67ff5 --- /dev/null +++ b/src/main/deploy/choreo/HubToClimb.traj @@ -0,0 +1,68 @@ +{ + "name":"HubToClimb", + "version":3, + "snapshot":{ + "waypoints":[ + {"x":3.456470012664795, "y":3.995620012283325, "heading":0.0, "intervals":16, "split":false, "fixTranslation":true, "fixHeading":true, "overrideIntervals":false}, + {"x":1.6633899211883545, "y":3.7032699584960938, "heading":0.0, "intervals":18, "split":false, "fixTranslation":true, "fixHeading":true, "overrideIntervals":false}], + "constraints":[], + "targetDt":0.05 + }, + "params":{ + "waypoints":[ + {"x":{"exp":"3.456470012664795 m", "val":3.456470012664795}, "y":{"exp":"3.995620012283325 m", "val":3.995620012283325}, "heading":{"exp":"0 deg", "val":0.0}, "intervals":16, "split":false, "fixTranslation":true, "fixHeading":true, "overrideIntervals":false}, + {"x":{"exp":"1.6633899211883545 m", "val":1.6633899211883545}, "y":{"exp":"3.7032699584960938 m", "val":3.7032699584960938}, "heading":{"exp":"0 deg", "val":0.0}, "intervals":18, "split":false, "fixTranslation":true, "fixHeading":true, "overrideIntervals":false}], + "constraints":[], + "targetDt":{ + "exp":"0.05 s", + "val":0.05 + } + }, + "trajectory":{ + "config":{ + "frontLeft":{ + "x":0.2794, + "y":0.2794 + }, + "backLeft":{ + "x":-0.2794, + "y":0.2794 + }, + "mass":52.16, + "inertia":4.39, + "gearing":6.5, + "radius":0.0508, + "vmax":628.3185307179587, + "tmax":1.2, + "cof":1.5, + "bumper":{ + "front":0.4064, + "side":0.4064, + "back":0.4064 + }, + "differentialTrackWidth":0.5588 + }, + "sampleType":"Swerve", + "waypoints":[0.0,0.37065], + "samples":[ + {"t":0.0, "x":3.45647, "y":3.99562, "heading":0.0, "vx":-4.82993, "vy":-0.78749, "omega":0.0, "ax":-0.3564, "ay":-0.05811, "alpha":0.0, "fx":[-4.6474,-4.6474,-4.6474,-4.6474], "fy":[-0.75773,-0.75773,-0.75773,-0.75773]}, + {"t":0.02317, "x":3.34449, "y":3.97736, "heading":0.0, "vx":-4.83819, "vy":-0.78884, "omega":0.0, "ax":-0.00068, "ay":-0.00011, "alpha":0.0, "fx":[-0.00893,-0.00893,-0.00893,-0.00893], "fy":[-0.00146,-0.00146,-0.00146,-0.00146]}, + {"t":0.04633, "x":3.23241, "y":3.95909, "heading":0.0, "vx":-4.83821, "vy":-0.78884, "omega":0.0, "ax":0.0, "ay":0.0, "alpha":0.0, "fx":[-0.00002,-0.00002,-0.00002,-0.00002], "fy":[0.0,0.0,0.0,0.0]}, + {"t":0.0695, "x":3.12033, "y":3.94081, "heading":0.0, "vx":-4.83821, "vy":-0.78884, "omega":0.0, "ax":0.0, "ay":0.0, "alpha":0.0, "fx":[0.0,0.0,0.0,0.0], "fy":[0.0,0.0,0.0,0.0]}, + {"t":0.09266, "x":3.00825, "y":3.92254, "heading":0.0, "vx":-4.83821, "vy":-0.78884, "omega":0.0, "ax":0.0, "ay":0.0, "alpha":0.0, "fx":[0.0,0.0,0.0,0.0], "fy":[0.0,0.0,0.0,0.0]}, + {"t":0.11583, "x":2.89617, "y":3.90427, "heading":0.0, "vx":-4.83821, "vy":-0.78884, "omega":0.0, "ax":0.0, "ay":0.0, "alpha":0.0, "fx":[0.0,0.0,0.0,0.0], "fy":[0.0,0.0,0.0,0.0]}, + {"t":0.13899, "x":2.78409, "y":3.88599, "heading":0.0, "vx":-4.83821, "vy":-0.78884, "omega":0.0, "ax":0.0, "ay":0.0, "alpha":0.0, "fx":[0.0,0.0,0.0,0.0], "fy":[0.0,0.0,0.0,0.0]}, + {"t":0.16216, "x":2.67201, "y":3.86772, "heading":0.0, "vx":-4.83821, "vy":-0.78884, "omega":0.0, "ax":0.0, "ay":0.0, "alpha":0.0, "fx":[0.0,0.0,0.0,0.0], "fy":[0.0,0.0,0.0,0.0]}, + {"t":0.18532, "x":2.55993, "y":3.84944, "heading":0.0, "vx":-4.83821, "vy":-0.78884, "omega":0.0, "ax":0.0, "ay":0.0, "alpha":0.0, "fx":[0.0,0.0,0.0,0.0], "fy":[0.0,0.0,0.0,0.0]}, + {"t":0.20849, "x":2.44785, "y":3.83117, "heading":0.0, "vx":-4.83821, "vy":-0.78884, "omega":0.0, "ax":0.0, "ay":0.0, "alpha":0.0, "fx":[0.0,0.0,0.0,0.0], "fy":[0.0,0.0,0.0,0.0]}, + {"t":0.23166, "x":2.33577, "y":3.8129, "heading":0.0, "vx":-4.83821, "vy":-0.78884, "omega":0.0, "ax":0.0, "ay":0.0, "alpha":0.0, "fx":[0.0,0.0,0.0,0.0], "fy":[0.0,0.0,0.0,0.0]}, + {"t":0.25482, "x":2.22369, "y":3.79462, "heading":0.0, "vx":-4.83821, "vy":-0.78884, "omega":0.0, "ax":0.0, "ay":0.0, "alpha":0.0, "fx":[0.0,0.0,0.0,0.0], "fy":[0.0,0.0,0.0,0.0]}, + {"t":0.27799, "x":2.11161, "y":3.77635, "heading":0.0, "vx":-4.83821, "vy":-0.78884, "omega":0.0, "ax":0.0, "ay":0.0, "alpha":0.0, "fx":[0.0,0.0,0.0,0.0], "fy":[0.0,0.0,0.0,0.0]}, + {"t":0.30115, "x":1.99953, "y":3.75808, "heading":0.0, "vx":-4.83821, "vy":-0.78884, "omega":0.0, "ax":0.0, "ay":0.0, "alpha":0.0, "fx":[0.00002,0.00002,0.00002,0.00002], "fy":[0.0,0.0,0.0,0.0]}, + {"t":0.32432, "x":1.88745, "y":3.7398, "heading":0.0, "vx":-4.83821, "vy":-0.78884, "omega":0.0, "ax":0.00068, "ay":0.00011, "alpha":0.0, "fx":[0.00893,0.00893,0.00893,0.00893], "fy":[0.00146,0.00146,0.00146,0.00146]}, + {"t":0.34748, "x":1.77537, "y":3.72153, "heading":0.0, "vx":-4.83819, "vy":-0.78884, "omega":0.0, "ax":0.3564, "ay":0.05811, "alpha":0.0, "fx":[4.6474,4.6474,4.6474,4.6474], "fy":[0.75773,0.75773,0.75773,0.75773]}, + {"t":0.37065, "x":1.66339, "y":3.70327, "heading":0.0, "vx":-4.82993, "vy":-0.78749, "omega":0.0, "ax":0.0, "ay":0.0, "alpha":0.0, "fx":[0.0,0.0,0.0,0.0], "fy":[0.0,0.0,0.0,0.0]}], + "splits":[0] + }, + "events":[] +} diff --git a/src/main/deploy/choreo/HubToDepot.traj b/src/main/deploy/choreo/HubToDepot.traj new file mode 100644 index 00000000..a3c07847 --- /dev/null +++ b/src/main/deploy/choreo/HubToDepot.traj @@ -0,0 +1,79 @@ +{ + "name":"HubToDepot", + "version":3, + "snapshot":{ + "waypoints":[ + {"x":3.456470012664795, "y":3.995620012283325, "heading":0.0, "intervals":21, "split":false, "fixTranslation":true, "fixHeading":true, "overrideIntervals":false}, + {"x":1.174944281578064, "y":5.828909397125244, "heading":0.0, "intervals":40, "split":false, "fixTranslation":true, "fixHeading":true, "overrideIntervals":false}], + "constraints":[ + {"from":"first", "to":null, "data":{"type":"StopPoint", "props":{}}, "enabled":true}, + {"from":"last", "to":null, "data":{"type":"StopPoint", "props":{}}, "enabled":true}, + {"from":"first", "to":"last", "data":{"type":"KeepInRectangle", "props":{"x":0.0, "y":0.0, "w":16.541, "h":8.0692}}, "enabled":false}], + "targetDt":0.05 + }, + "params":{ + "waypoints":[ + {"x":{"exp":"3.456470012664795 m", "val":3.456470012664795}, "y":{"exp":"3.995620012283325 m", "val":3.995620012283325}, "heading":{"exp":"0 deg", "val":0.0}, "intervals":21, "split":false, "fixTranslation":true, "fixHeading":true, "overrideIntervals":false}, + {"x":{"exp":"1.174944281578064 m", "val":1.174944281578064}, "y":{"exp":"5.828909397125244 m", "val":5.828909397125244}, "heading":{"exp":"0 deg", "val":0.0}, "intervals":40, "split":false, "fixTranslation":true, "fixHeading":true, "overrideIntervals":false}], + "constraints":[ + {"from":"first", "to":null, "data":{"type":"StopPoint", "props":{}}, "enabled":true}, + {"from":"last", "to":null, "data":{"type":"StopPoint", "props":{}}, "enabled":true}, + {"from":"first", "to":"last", "data":{"type":"KeepInRectangle", "props":{"x":{"exp":"0 m", "val":0.0}, "y":{"exp":"0 m", "val":0.0}, "w":{"exp":"16.541 m", "val":16.541}, "h":{"exp":"8.0692 m", "val":8.0692}}}, "enabled":false}], + "targetDt":{ + "exp":"0.05 s", + "val":0.05 + } + }, + "trajectory":{ + "config":{ + "frontLeft":{ + "x":0.2794, + "y":0.2794 + }, + "backLeft":{ + "x":-0.2794, + "y":0.2794 + }, + "mass":52.16, + "inertia":4.39, + "gearing":6.5, + "radius":0.0508, + "vmax":628.3185307179587, + "tmax":1.2, + "cof":1.5, + "bumper":{ + "front":0.4064, + "side":0.4064, + "back":0.4064 + }, + "differentialTrackWidth":0.5588 + }, + "sampleType":"Swerve", + "waypoints":[0.0,1.01517], + "samples":[ + {"t":0.0, "x":3.45647, "y":3.99562, "heading":0.0, "vx":0.0, "vy":0.0, "omega":0.0, "ax":-9.17065, "ay":7.36895, "alpha":0.0, "fx":[-119.5853,-119.5853,-119.5853,-119.5853], "fy":[96.09116,96.09116,96.09116,96.09116]}, + {"t":0.04834, "x":3.44575, "y":4.00423, "heading":0.0, "vx":-0.44332, "vy":0.35622, "omega":0.0, "ax":-9.1695, "ay":7.36803, "alpha":0.0, "fx":[-119.57028,-119.57028,-119.57028,-119.57028], "fy":[96.0791,96.0791,96.0791,96.0791]}, + {"t":0.09668, "x":3.41361, "y":4.03006, "heading":0.0, "vx":-0.88659, "vy":0.7124, "omega":0.0, "ax":-9.16797, "ay":7.3668, "alpha":0.0, "fx":[-119.55027,-119.55027,-119.55027,-119.55027], "fy":[96.06301,96.06301,96.06301,96.06301]}, + {"t":0.14502, "x":3.36004, "y":4.07311, "heading":0.0, "vx":-1.32978, "vy":1.06852, "omega":0.0, "ax":-9.16582, "ay":7.36507, "alpha":0.0, "fx":[-119.52225,-119.52225,-119.52225,-119.52225], "fy":[96.0405,96.0405,96.0405,96.0405]}, + {"t":0.19336, "x":3.28505, "y":4.13336, "heading":0.0, "vx":-1.77286, "vy":1.42456, "omega":0.0, "ax":-9.1626, "ay":7.36248, "alpha":0.0, "fx":[-119.48026,-119.48026,-119.48026,-119.48026], "fy":[96.00676,96.00676,96.00676,96.00676]}, + {"t":0.24171, "x":3.18864, "y":4.21083, "heading":0.0, "vx":-2.21579, "vy":1.78047, "omega":0.0, "ax":-9.15724, "ay":7.35817, "alpha":0.0, "fx":[-119.41036,-119.41036,-119.41036,-119.41036], "fy":[95.95059,95.95059,95.95059,95.95059]}, + {"t":0.29005, "x":3.07082, "y":4.3055, "heading":0.0, "vx":-2.65846, "vy":2.13617, "omega":0.0, "ax":-9.14655, "ay":7.34958, "alpha":0.0, "fx":[-119.27095,-119.27095,-119.27095,-119.27095], "fy":[95.83857,95.83857,95.83857,95.83857]}, + {"t":0.33839, "x":2.93162, "y":4.41735, "heading":0.0, "vx":-3.10062, "vy":2.49146, "omega":0.0, "ax":-9.11476, "ay":7.32405, "alpha":0.0, "fx":[-118.85651,-118.85651,-118.85651,-118.85651], "fy":[95.50555,95.50555,95.50555,95.50555]}, + {"t":0.38673, "x":2.77109, "y":4.54635, "heading":0.0, "vx":-3.54124, "vy":2.84551, "omega":0.0, "ax":-5.86418, "ay":4.71208, "alpha":0.0, "fx":[-76.46886,-76.46886,-76.46886,-76.46886], "fy":[61.44552,61.44552,61.44552,61.44552]}, + {"t":0.43507, "x":2.59305, "y":4.68941, "heading":0.0, "vx":-3.82472, "vy":3.0733, "omega":0.0, "ax":-0.00099, "ay":0.0008, "alpha":0.0, "fx":[-0.01293,-0.01293,-0.01293,-0.01293], "fy":[0.01039,0.01039,0.01039,0.01039]}, + {"t":0.48341, "x":2.40815, "y":4.83798, "heading":0.0, "vx":-3.82477, "vy":3.07334, "omega":0.0, "ax":0.0, "ay":0.0, "alpha":0.0, "fx":[0.0,0.0,0.0,0.0], "fy":[0.0,0.0,0.0,0.0]}, + {"t":0.53175, "x":2.22326, "y":4.98655, "heading":0.0, "vx":-3.82477, "vy":3.07334, "omega":0.0, "ax":0.00099, "ay":-0.0008, "alpha":0.0, "fx":[0.01294,0.01294,0.01294,0.01294], "fy":[-0.01039,-0.01039,-0.01039,-0.01039]}, + {"t":0.58009, "x":2.03837, "y":5.13512, "heading":0.0, "vx":-3.82472, "vy":3.0733, "omega":0.0, "ax":5.86418, "ay":-4.71208, "alpha":0.0, "fx":[76.46886,76.46886,76.46886,76.46886], "fy":[-61.44552,-61.44552,-61.44552,-61.44552]}, + {"t":0.62844, "x":1.86033, "y":5.27818, "heading":0.0, "vx":-3.54124, "vy":2.84551, "omega":0.0, "ax":9.11476, "ay":-7.32405, "alpha":0.0, "fx":[118.85651,118.85651,118.85651,118.85651], "fy":[-95.50555,-95.50555,-95.50555,-95.50555]}, + {"t":0.67678, "x":1.69979, "y":5.40718, "heading":0.0, "vx":-3.10062, "vy":2.49146, "omega":0.0, "ax":9.14655, "ay":-7.34958, "alpha":0.0, "fx":[119.27095,119.27095,119.27095,119.27095], "fy":[-95.83857,-95.83857,-95.83857,-95.83857]}, + {"t":0.72512, "x":1.56059, "y":5.51903, "heading":0.0, "vx":-2.65846, "vy":2.13617, "omega":0.0, "ax":9.15724, "ay":-7.35817, "alpha":0.0, "fx":[119.41036,119.41036,119.41036,119.41036], "fy":[-95.95059,-95.95059,-95.95059,-95.95059]}, + {"t":0.77346, "x":1.44278, "y":5.6137, "heading":0.0, "vx":-2.21579, "vy":1.78047, "omega":0.0, "ax":9.1626, "ay":-7.36248, "alpha":0.0, "fx":[119.48026,119.48026,119.48026,119.48026], "fy":[-96.00676,-96.00676,-96.00676,-96.00676]}, + {"t":0.8218, "x":1.34637, "y":5.69116, "heading":0.0, "vx":-1.77286, "vy":1.42456, "omega":0.0, "ax":9.16582, "ay":-7.36507, "alpha":0.0, "fx":[119.52225,119.52225,119.52225,119.52225], "fy":[-96.0405,-96.0405,-96.0405,-96.0405]}, + {"t":0.87014, "x":1.27137, "y":5.75142, "heading":0.0, "vx":-1.32978, "vy":1.06852, "omega":0.0, "ax":9.16797, "ay":-7.3668, "alpha":0.0, "fx":[119.55027,119.55027,119.55027,119.55027], "fy":[-96.06301,-96.06301,-96.06301,-96.06301]}, + {"t":0.91848, "x":1.2178, "y":5.79447, "heading":0.0, "vx":-0.88659, "vy":0.7124, "omega":0.0, "ax":9.1695, "ay":-7.36803, "alpha":0.0, "fx":[119.57028,119.57028,119.57028,119.57028], "fy":[-96.0791,-96.0791,-96.0791,-96.0791]}, + {"t":0.96682, "x":1.18566, "y":5.8203, "heading":0.0, "vx":-0.44332, "vy":0.35622, "omega":0.0, "ax":9.17065, "ay":-7.36895, "alpha":0.0, "fx":[119.5853,119.5853,119.5853,119.5853], "fy":[-96.09116,-96.09116,-96.09116,-96.09116]}, + {"t":1.01517, "x":1.17494, "y":5.82891, "heading":0.0, "vx":0.0, "vy":0.0, "omega":0.0, "ax":0.0, "ay":0.0, "alpha":0.0, "fx":[0.0,0.0,0.0,0.0], "fy":[0.0,0.0,0.0,0.0]}], + "splits":[0] + }, + "events":[] +} diff --git a/src/main/deploy/choreo/LeftStartToHub.traj b/src/main/deploy/choreo/LeftStartToHub.traj new file mode 100644 index 00000000..ce05e744 --- /dev/null +++ b/src/main/deploy/choreo/LeftStartToHub.traj @@ -0,0 +1,80 @@ +{ + "name":"LeftStartToHub", + "version":3, + "snapshot":{ + "waypoints":[ + {"x":3.5853428840637207, "y":7.289757251739502, "heading":0.0, "intervals":22, "split":false, "fixTranslation":true, "fixHeading":true, "overrideIntervals":false}, + {"x":3.456470012664795, "y":3.995620012283325, "heading":0.0, "intervals":25, "split":false, "fixTranslation":true, "fixHeading":true, "overrideIntervals":false}], + "constraints":[ + {"from":"first", "to":null, "data":{"type":"StopPoint", "props":{}}, "enabled":true}, + {"from":"last", "to":null, "data":{"type":"StopPoint", "props":{}}, "enabled":true}, + {"from":"first", "to":"last", "data":{"type":"KeepInRectangle", "props":{"x":0.0, "y":0.0, "w":16.541, "h":8.0692}}, "enabled":false}], + "targetDt":0.05 + }, + "params":{ + "waypoints":[ + {"x":{"exp":"3.5853428840637207 m", "val":3.5853428840637207}, "y":{"exp":"7.289757251739502 m", "val":7.289757251739502}, "heading":{"exp":"0 deg", "val":0.0}, "intervals":22, "split":false, "fixTranslation":true, "fixHeading":true, "overrideIntervals":false}, + {"x":{"exp":"3.456470012664795 m", "val":3.456470012664795}, "y":{"exp":"3.995620012283325 m", "val":3.995620012283325}, "heading":{"exp":"0 deg", "val":0.0}, "intervals":25, "split":false, "fixTranslation":true, "fixHeading":true, "overrideIntervals":false}], + "constraints":[ + {"from":"first", "to":null, "data":{"type":"StopPoint", "props":{}}, "enabled":true}, + {"from":"last", "to":null, "data":{"type":"StopPoint", "props":{}}, "enabled":true}, + {"from":"first", "to":"last", "data":{"type":"KeepInRectangle", "props":{"x":{"exp":"0 m", "val":0.0}, "y":{"exp":"0 m", "val":0.0}, "w":{"exp":"16.541 m", "val":16.541}, "h":{"exp":"8.0692 m", "val":8.0692}}}, "enabled":false}], + "targetDt":{ + "exp":"0.05 s", + "val":0.05 + } + }, + "trajectory":{ + "config":{ + "frontLeft":{ + "x":0.2794, + "y":0.2794 + }, + "backLeft":{ + "x":-0.2794, + "y":0.2794 + }, + "mass":52.16, + "inertia":4.39, + "gearing":6.5, + "radius":0.0508, + "vmax":628.3185307179587, + "tmax":1.2, + "cof":1.5, + "bumper":{ + "front":0.4064, + "side":0.4064, + "back":0.4064 + }, + "differentialTrackWidth":0.5588 + }, + "sampleType":"Swerve", + "waypoints":[0.0,1.09065], + "samples":[ + {"t":0.0, "x":3.58534, "y":7.28976, "heading":0.0, "vx":0.0, "vy":0.0, "omega":0.0, "ax":-0.45991, "ay":-11.75576, "alpha":0.0, "fx":[-5.9972,-5.9972,-5.9972,-5.9972], "fy":[-153.29514,-153.29514,-153.29514,-153.29514]}, + {"t":0.04958, "x":3.58478, "y":7.27531, "heading":0.0, "vx":-0.0228, "vy":-0.58279, "omega":0.0, "ax":-0.45985, "ay":-11.75433, "alpha":0.0, "fx":[-5.99646,-5.99646,-5.99646,-5.99646], "fy":[-153.27642,-153.27642,-153.27642,-153.27642]}, + {"t":0.09915, "x":3.58308, "y":7.23197, "heading":0.0, "vx":-0.0456, "vy":-1.16552, "omega":0.0, "ax":-0.45978, "ay":-11.75241, "alpha":0.0, "fx":[-5.99549,-5.99549,-5.99549,-5.99549], "fy":[-153.25145,-153.25145,-153.25145,-153.25145]}, + {"t":0.14873, "x":3.58026, "y":7.15975, "heading":0.0, "vx":-0.06839, "vy":-1.74814, "omega":0.0, "ax":-0.45967, "ay":-11.74973, "alpha":0.0, "fx":[-5.99412,-5.99412,-5.99412,-5.99412], "fy":[-153.21648,-153.21648,-153.21648,-153.21648]}, + {"t":0.1983, "x":3.5763, "y":7.05865, "heading":0.0, "vx":-0.09118, "vy":-2.33064, "omega":0.0, "ax":-0.45951, "ay":-11.7457, "alpha":0.0, "fx":[-5.99206,-5.99206,-5.99206,-5.99206], "fy":[-153.16399,-153.16399,-153.16399,-153.16399]}, + {"t":0.24788, "x":3.57122, "y":6.92867, "heading":0.0, "vx":-0.11396, "vy":-2.91293, "omega":0.0, "ax":-0.45925, "ay":-11.73899, "alpha":0.0, "fx":[-5.98864,-5.98864,-5.98864,-5.98864], "fy":[-153.07647,-153.07647,-153.07647,-153.07647]}, + {"t":0.29745, "x":3.565, "y":6.76984, "heading":0.0, "vx":-0.13673, "vy":-3.4949, "omega":0.0, "ax":-0.45873, "ay":-11.72556, "alpha":0.0, "fx":[-5.98179,-5.98179,-5.98179,-5.98179], "fy":[-152.90133,-152.90133,-152.90133,-152.90133]}, + {"t":0.34703, "x":3.55766, "y":6.58217, "heading":0.0, "vx":-0.15947, "vy":-4.07619, "omega":0.0, "ax":-0.45715, "ay":-11.68531, "alpha":0.0, "fx":[-5.96125,-5.96125,-5.96125,-5.96125], "fy":[-152.3764,-152.3764,-152.3764,-152.3764]}, + {"t":0.3966, "x":3.54919, "y":6.36573, "heading":0.0, "vx":-0.18213, "vy":-4.6555, "omega":0.0, "ax":-0.19516, "ay":-4.98849, "alpha":0.0, "fx":[-2.54488,-2.54488,-2.54488,-2.54488], "fy":[-65.04992,-65.04992,-65.04992,-65.04992]}, + {"t":0.44618, "x":3.53992, "y":6.12881, "heading":0.0, "vx":-0.19181, "vy":-4.9028, "omega":0.0, "ax":-0.00002, "ay":-0.00057, "alpha":0.0, "fx":[-0.00029,-0.00029,-0.00029,-0.00029], "fy":[-0.00739,-0.00739,-0.00739,-0.00739]}, + {"t":0.49575, "x":3.53042, "y":5.88575, "heading":0.0, "vx":-0.19181, "vy":-4.90283, "omega":0.0, "ax":0.0, "ay":0.0, "alpha":0.0, "fx":[0.0,0.0,0.0,0.0], "fy":[0.0,0.0,0.0,0.0]}, + {"t":0.54533, "x":3.52091, "y":5.64269, "heading":0.0, "vx":-0.19181, "vy":-4.90283, "omega":0.0, "ax":0.0, "ay":0.0, "alpha":0.0, "fx":[0.0,0.0,0.0,0.0], "fy":[0.0,0.0,0.0,0.0]}, + {"t":0.5949, "x":3.5114, "y":5.39963, "heading":0.0, "vx":-0.19181, "vy":-4.90283, "omega":0.0, "ax":0.00002, "ay":0.00057, "alpha":0.0, "fx":[0.00029,0.00029,0.00029,0.00029], "fy":[0.00739,0.00739,0.00739,0.00739]}, + {"t":0.64448, "x":3.50189, "y":5.15657, "heading":0.0, "vx":-0.19181, "vy":-4.9028, "omega":0.0, "ax":0.19516, "ay":4.98849, "alpha":0.0, "fx":[2.54488,2.54488,2.54488,2.54488], "fy":[65.04992,65.04992,65.04992,65.04992]}, + {"t":0.69405, "x":3.49262, "y":4.91965, "heading":0.0, "vx":-0.18213, "vy":-4.6555, "omega":0.0, "ax":0.45715, "ay":11.68531, "alpha":0.0, "fx":[5.96125,5.96125,5.96125,5.96125], "fy":[152.3764,152.3764,152.3764,152.3764]}, + {"t":0.74363, "x":3.48415, "y":4.70321, "heading":0.0, "vx":-0.15947, "vy":-4.07619, "omega":0.0, "ax":0.45873, "ay":11.72556, "alpha":0.0, "fx":[5.98179,5.98179,5.98179,5.98179], "fy":[152.90133,152.90133,152.90133,152.90133]}, + {"t":0.7932, "x":3.47681, "y":4.51554, "heading":0.0, "vx":-0.13673, "vy":-3.4949, "omega":0.0, "ax":0.45925, "ay":11.73899, "alpha":0.0, "fx":[5.98864,5.98864,5.98864,5.98864], "fy":[153.07647,153.07647,153.07647,153.07647]}, + {"t":0.84278, "x":3.4706, "y":4.3567, "heading":0.0, "vx":-0.11396, "vy":-2.91293, "omega":0.0, "ax":0.45951, "ay":11.7457, "alpha":0.0, "fx":[5.99206,5.99206,5.99206,5.99206], "fy":[153.16399,153.16399,153.16399,153.16399]}, + {"t":0.89235, "x":3.46551, "y":4.22673, "heading":0.0, "vx":-0.09118, "vy":-2.33064, "omega":0.0, "ax":0.45967, "ay":11.74973, "alpha":0.0, "fx":[5.99412,5.99412,5.99412,5.99412], "fy":[153.21648,153.21648,153.21648,153.21648]}, + {"t":0.94193, "x":3.46156, "y":4.12563, "heading":0.0, "vx":-0.06839, "vy":-1.74814, "omega":0.0, "ax":0.45978, "ay":11.75241, "alpha":0.0, "fx":[5.99549,5.99549,5.99549,5.99549], "fy":[153.25145,153.25145,153.25145,153.25145]}, + {"t":0.9915, "x":3.45873, "y":4.0534, "heading":0.0, "vx":-0.0456, "vy":-1.16552, "omega":0.0, "ax":0.45985, "ay":11.75433, "alpha":0.0, "fx":[5.99646,5.99646,5.99646,5.99646], "fy":[153.27642,153.27642,153.27642,153.27642]}, + {"t":1.04108, "x":3.45704, "y":4.01007, "heading":0.0, "vx":-0.0228, "vy":-0.58279, "omega":0.0, "ax":0.45991, "ay":11.75576, "alpha":0.0, "fx":[5.9972,5.9972,5.9972,5.9972], "fy":[153.29514,153.29514,153.29514,153.29514]}, + {"t":1.09065, "x":3.45647, "y":3.99562, "heading":0.0, "vx":0.0, "vy":0.0, "omega":0.0, "ax":0.0, "ay":0.0, "alpha":0.0, "fx":[0.0,0.0,0.0,0.0], "fy":[0.0,0.0,0.0,0.0]}], + "splits":[0] + }, + "events":[] +} diff --git a/src/main/deploy/choreo/RightStartToHub.traj b/src/main/deploy/choreo/RightStartToHub.traj new file mode 100644 index 00000000..22fb4f79 --- /dev/null +++ b/src/main/deploy/choreo/RightStartToHub.traj @@ -0,0 +1,81 @@ +{ + "name":"RightStartToHub", + "version":3, + "snapshot":{ + "waypoints":[ + {"x":3.603603839874267, "y":0.5698571801185608, "heading":0.0, "intervals":23, "split":false, "fixTranslation":true, "fixHeading":true, "overrideIntervals":false}, + {"x":3.456470012664795, "y":3.995620012283325, "heading":0.0, "intervals":25, "split":false, "fixTranslation":true, "fixHeading":true, "overrideIntervals":false}], + "constraints":[ + {"from":"first", "to":null, "data":{"type":"StopPoint", "props":{}}, "enabled":true}, + {"from":"last", "to":null, "data":{"type":"StopPoint", "props":{}}, "enabled":true}, + {"from":"first", "to":"last", "data":{"type":"KeepInRectangle", "props":{"x":0.0, "y":0.0, "w":16.541, "h":8.0692}}, "enabled":false}], + "targetDt":0.05 + }, + "params":{ + "waypoints":[ + {"x":{"exp":"3.6036038398742676 m", "val":3.603603839874267}, "y":{"exp":"0.5698571801185608 m", "val":0.5698571801185608}, "heading":{"exp":"0 deg", "val":0.0}, "intervals":23, "split":false, "fixTranslation":true, "fixHeading":true, "overrideIntervals":false}, + {"x":{"exp":"3.456470012664795 m", "val":3.456470012664795}, "y":{"exp":"3.995620012283325 m", "val":3.995620012283325}, "heading":{"exp":"0 deg", "val":0.0}, "intervals":25, "split":false, "fixTranslation":true, "fixHeading":true, "overrideIntervals":false}], + "constraints":[ + {"from":"first", "to":null, "data":{"type":"StopPoint", "props":{}}, "enabled":true}, + {"from":"last", "to":null, "data":{"type":"StopPoint", "props":{}}, "enabled":true}, + {"from":"first", "to":"last", "data":{"type":"KeepInRectangle", "props":{"x":{"exp":"0 m", "val":0.0}, "y":{"exp":"0 m", "val":0.0}, "w":{"exp":"16.541 m", "val":16.541}, "h":{"exp":"8.0692 m", "val":8.0692}}}, "enabled":false}], + "targetDt":{ + "exp":"0.05 s", + "val":0.05 + } + }, + "trajectory":{ + "config":{ + "frontLeft":{ + "x":0.2794, + "y":0.2794 + }, + "backLeft":{ + "x":-0.2794, + "y":0.2794 + }, + "mass":52.16, + "inertia":4.39, + "gearing":6.5, + "radius":0.0508, + "vmax":628.3185307179587, + "tmax":1.2, + "cof":1.5, + "bumper":{ + "front":0.4064, + "side":0.4064, + "back":0.4064 + }, + "differentialTrackWidth":0.5588 + }, + "sampleType":"Swerve", + "waypoints":[0.0,1.11756], + "samples":[ + {"t":0.0, "x":3.6036, "y":0.56986, "heading":0.0, "vx":0.0, "vy":0.0, "omega":0.0, "ax":-0.50481, "ay":11.75367, "alpha":0.0, "fx":[-6.58273,-6.58273,-6.58273,-6.58273], "fy":[153.26784,153.26784,153.26784,153.26784]}, + {"t":0.04859, "x":3.60301, "y":0.58373, "heading":0.0, "vx":-0.02453, "vy":0.57111, "omega":0.0, "ax":-0.50475, "ay":11.7522, "alpha":0.0, "fx":[-6.58191,-6.58191,-6.58191,-6.58191], "fy":[153.24868,153.24868,153.24868,153.24868]}, + {"t":0.09718, "x":3.60122, "y":0.62536, "heading":0.0, "vx":-0.04905, "vy":1.14214, "omega":0.0, "ax":-0.50466, "ay":11.75024, "alpha":0.0, "fx":[-6.58081,-6.58081,-6.58081,-6.58081], "fy":[153.22314,153.22314,153.22314,153.22314]}, + {"t":0.14577, "x":3.59824, "y":0.69472, "heading":0.0, "vx":-0.07358, "vy":1.71308, "omega":0.0, "ax":-0.50455, "ay":11.7475, "alpha":0.0, "fx":[-6.57928,-6.57928,-6.57928,-6.57928], "fy":[153.18739,153.18739,153.18739,153.18739]}, + {"t":0.19436, "x":3.59407, "y":0.79183, "heading":0.0, "vx":-0.09809, "vy":2.28389, "omega":0.0, "ax":-0.50437, "ay":11.74339, "alpha":0.0, "fx":[-6.57698,-6.57698,-6.57698,-6.57698], "fy":[153.13378,153.13378,153.13378,153.13378]}, + {"t":0.24295, "x":3.58871, "y":0.91666, "heading":0.0, "vx":-0.1226, "vy":2.8545, "omega":0.0, "ax":-0.50408, "ay":11.73654, "alpha":0.0, "fx":[-6.57314,-6.57314,-6.57314,-6.57314], "fy":[153.04451,153.04451,153.04451,153.04451]}, + {"t":0.29154, "x":3.58216, "y":1.06922, "heading":0.0, "vx":-0.14709, "vy":3.42477, "omega":0.0, "ax":-0.50349, "ay":11.72288, "alpha":0.0, "fx":[-6.56549,-6.56549,-6.56549,-6.56549], "fy":[152.86633,152.86633,152.86633,152.86633]}, + {"t":0.34013, "x":3.57442, "y":1.24947, "heading":0.0, "vx":-0.17156, "vy":3.99438, "omega":0.0, "ax":-0.50174, "ay":11.68218, "alpha":0.0, "fx":[-6.5427,-6.5427,-6.5427,-6.5427], "fy":[152.33563,152.33563,152.33563,152.33563]}, + {"t":0.38872, "x":3.56549, "y":1.45734, "heading":0.0, "vx":-0.19594, "vy":4.56202, "omega":0.0, "ax":-0.3005, "ay":6.99668, "alpha":0.0, "fx":[-3.91855,-3.91855,-3.91855,-3.91855], "fy":[91.23672,91.23672,91.23672,91.23672]}, + {"t":0.43731, "x":3.55561, "y":1.68727, "heading":0.0, "vx":-0.21054, "vy":4.90198, "omega":0.0, "ax":-0.00005, "ay":0.00107, "alpha":0.0, "fx":[-0.0006,-0.0006,-0.0006,-0.0006], "fy":[0.01395,0.01395,0.01395,0.01395]}, + {"t":0.4859, "x":3.54538, "y":1.92546, "heading":0.0, "vx":-0.21054, "vy":4.90204, "omega":0.0, "ax":0.0, "ay":0.0, "alpha":0.0, "fx":[0.0,0.0,0.0,0.0], "fy":[0.0,0.0,0.0,0.0]}, + {"t":0.53449, "x":3.53515, "y":2.16364, "heading":0.0, "vx":-0.21054, "vy":4.90204, "omega":0.0, "ax":0.0, "ay":0.0, "alpha":0.0, "fx":[0.0,0.0,0.0,0.0], "fy":[0.0,0.0,0.0,0.0]}, + {"t":0.58308, "x":3.52492, "y":2.40183, "heading":0.0, "vx":-0.21054, "vy":4.90204, "omega":0.0, "ax":0.0, "ay":0.0, "alpha":0.0, "fx":[0.0,0.0,0.0,0.0], "fy":[0.0,0.0,0.0,0.0]}, + {"t":0.63167, "x":3.51469, "y":2.64002, "heading":0.0, "vx":-0.21054, "vy":4.90204, "omega":0.0, "ax":0.00005, "ay":-0.00107, "alpha":0.0, "fx":[0.0006,0.0006,0.0006,0.0006], "fy":[-0.01395,-0.01395,-0.01395,-0.01395]}, + {"t":0.68026, "x":3.50446, "y":2.87821, "heading":0.0, "vx":-0.21054, "vy":4.90198, "omega":0.0, "ax":0.3005, "ay":-6.99668, "alpha":0.0, "fx":[3.91854,3.91854,3.91854,3.91854], "fy":[-91.23672,-91.23672,-91.23672,-91.23672]}, + {"t":0.72885, "x":3.49459, "y":3.10813, "heading":0.0, "vx":-0.19594, "vy":4.56202, "omega":0.0, "ax":0.50174, "ay":-11.68218, "alpha":0.0, "fx":[6.5427,6.5427,6.5427,6.5427], "fy":[-152.33563,-152.33563,-152.33563,-152.33563]}, + {"t":0.77744, "x":3.48566, "y":3.31601, "heading":0.0, "vx":-0.17156, "vy":3.99438, "omega":0.0, "ax":0.50349, "ay":-11.72288, "alpha":0.0, "fx":[6.56549,6.56549,6.56549,6.56549], "fy":[-152.86633,-152.86633,-152.86633,-152.86633]}, + {"t":0.82602, "x":3.47792, "y":3.49626, "heading":0.0, "vx":-0.14709, "vy":3.42477, "omega":0.0, "ax":0.50408, "ay":-11.73654, "alpha":0.0, "fx":[6.57314,6.57314,6.57314,6.57314], "fy":[-153.04451,-153.04451,-153.04451,-153.04451]}, + {"t":0.87461, "x":3.47137, "y":3.64881, "heading":0.0, "vx":-0.1226, "vy":2.8545, "omega":0.0, "ax":0.50437, "ay":-11.74339, "alpha":0.0, "fx":[6.57698,6.57698,6.57698,6.57698], "fy":[-153.13378,-153.13378,-153.13378,-153.13378]}, + {"t":0.9232, "x":3.466, "y":3.77365, "heading":0.0, "vx":-0.09809, "vy":2.28389, "omega":0.0, "ax":0.50455, "ay":-11.7475, "alpha":0.0, "fx":[6.57928,6.57928,6.57928,6.57928], "fy":[-153.18739,-153.18739,-153.18739,-153.18739]}, + {"t":0.97179, "x":3.46183, "y":3.87075, "heading":0.0, "vx":-0.07358, "vy":1.71308, "omega":0.0, "ax":0.50466, "ay":-11.75024, "alpha":0.0, "fx":[6.58081,6.58081,6.58081,6.58081], "fy":[-153.22314,-153.22314,-153.22314,-153.22314]}, + {"t":1.02038, "x":3.45885, "y":3.94012, "heading":0.0, "vx":-0.04905, "vy":1.14214, "omega":0.0, "ax":0.50475, "ay":-11.7522, "alpha":0.0, "fx":[6.58191,6.58191,6.58191,6.58191], "fy":[-153.24868,-153.24868,-153.24868,-153.24868]}, + {"t":1.06897, "x":3.45707, "y":3.98175, "heading":0.0, "vx":-0.02453, "vy":0.57111, "omega":0.0, "ax":0.50481, "ay":-11.75367, "alpha":0.0, "fx":[6.58273,6.58273,6.58273,6.58273], "fy":[-153.26784,-153.26784,-153.26784,-153.26784]}, + {"t":1.11756, "x":3.45647, "y":3.99562, "heading":0.0, "vx":0.0, "vy":0.0, "omega":0.0, "ax":0.0, "ay":0.0, "alpha":0.0, "fx":[0.0,0.0,0.0,0.0], "fy":[0.0,0.0,0.0,0.0]}], + "splits":[0] + }, + "events":[] +} diff --git a/src/main/java/org/team5924/frc2026/Robot.java b/src/main/java/org/team5924/frc2026/Robot.java index d6c7908f..fd366544 100644 --- a/src/main/java/org/team5924/frc2026/Robot.java +++ b/src/main/java/org/team5924/frc2026/Robot.java @@ -65,7 +65,6 @@ public Robot() { case 1 -> "Uncommitted changes"; default -> "Unknown"; }); - // Set up data receivers & replay source switch (Constants.currentMode) { case REAL: diff --git a/src/main/java/org/team5924/frc2026/RobotContainer.java b/src/main/java/org/team5924/frc2026/RobotContainer.java index e1767dce..c880ecd7 100644 --- a/src/main/java/org/team5924/frc2026/RobotContainer.java +++ b/src/main/java/org/team5924/frc2026/RobotContainer.java @@ -16,7 +16,7 @@ package org.team5924.frc2026; -import com.pathplanner.lib.auto.AutoBuilder; +import choreo.auto.AutoFactory; import com.pathplanner.lib.auto.NamedCommands; import edu.wpi.first.math.geometry.Pose2d; import edu.wpi.first.math.geometry.Rotation2d; @@ -29,6 +29,7 @@ import org.ironmaple.simulation.drivesims.SwerveDriveSimulation; import org.littletonrobotics.junction.Logger; import org.littletonrobotics.junction.networktables.LoggedDashboardChooser; +import org.team5924.frc2026.commands.AutoBuilder; import org.team5924.frc2026.commands.drive.DriveCommands; import org.team5924.frc2026.commands.intakePivot.IntakePivotCommands; import org.team5924.frc2026.generated.TunerConstants; @@ -104,101 +105,107 @@ public class RobotContainer { // Dashboard inputs private final LoggedDashboardChooser autoChooser; - /** The container for the robot. Contains subsystems, OI devices, and commands. */ - public RobotContainer() { - switch (Constants.currentMode) { - case REAL: - // Real robot, instantiate hardware IO implementations - drive = - new Drive( - new GyroIOPigeon2(), - new ModuleIOTalonFX(TunerConstants.FrontLeft), - new ModuleIOTalonFX(TunerConstants.FrontRight), - new ModuleIOTalonFX(TunerConstants.BackLeft), - new ModuleIOTalonFX(TunerConstants.BackRight), - (pose) -> {}); - - intake = new Intake(new IntakeIOKrakenFOC()); - intakePivot = new IntakePivot(new IntakePivotIOTalonFX()); - hopper = new Hopper(new HopperKrakenFOC()); - - shooterHoodRight = new ShooterHood(new ShooterHoodIOTalonFX(true), true); - shooterRollerRight = - new ShooterRoller( - new ShooterRollerIOKrakenFOC(true), - new BeamBreakIOHardware(Constants.ShooterRollerLeaderLeft.BEAM_BREAK_PORT), - true); - turretRight = new Turret(new TurretIOTalonFX(true), true); - - shooterHoodLeft = new ShooterHood(new ShooterHoodIOTalonFX(false), false); - shooterRollerLeft = - new ShooterRoller( - new ShooterRollerIOKrakenFOC(false), - new BeamBreakIOHardware(Constants.ShooterRollerLeaderLeft.BEAM_BREAK_PORT), - false); - turretLeft = new Turret(new TurretIOTalonFX(false), false); - break; - - case SIM: - // Sim robot, instantiate physics sim IO implementations - driveSimulation = - new SwerveDriveSimulation(Drive.mapleSimConfig, new Pose2d(3, 3, new Rotation2d())); - SimulatedArena.getInstance().addDriveTrainSimulation(driveSimulation); - drive = - new Drive( - new GyroIOSim(driveSimulation.getGyroSimulation()), - new ModuleIOTalonFXSim(TunerConstants.FrontLeft, driveSimulation.getModules()[0]), - new ModuleIOTalonFXSim(TunerConstants.FrontRight, driveSimulation.getModules()[1]), - new ModuleIOTalonFXSim(TunerConstants.BackLeft, driveSimulation.getModules()[2]), - new ModuleIOTalonFXSim(TunerConstants.BackRight, driveSimulation.getModules()[3]), - driveSimulation::setSimulationWorldPose); - - intake = new Intake(new IntakeIOSim()); - intakePivot = new IntakePivot(new IntakePivotIOSim()); - hopper = new Hopper(new HopperIO() {}); // TODO: Hopper sim implementation - - shooterHoodRight = new ShooterHood(new ShooterHoodIOSim(true), true); - shooterRollerRight = - new ShooterRoller(new ShooterRollerIOSim(true), new BeamBreakIO() {}, true); - turretRight = new Turret(new TurretIOSim(true), true); - - shooterHoodLeft = new ShooterHood(new ShooterHoodIOSim(false), false); - shooterRollerLeft = - new ShooterRoller(new ShooterRollerIOSim(false), new BeamBreakIO() {}, false); - turretLeft = new Turret(new TurretIOSim(false), false); - break; - - default: - // Replayed robot, disable IO implementations - drive = - new Drive( - new GyroIO() {}, - new ModuleIO() {}, - new ModuleIO() {}, - new ModuleIO() {}, - new ModuleIO() {}, - (pose) -> {}); - - intake = new Intake(new IntakeIO() {}); - intakePivot = new IntakePivot(new IntakePivotIO() {}); - hopper = new Hopper(new HopperIO() {}); // TODO: Add replay IO implementation - - shooterHoodRight = new ShooterHood(new ShooterHoodIO() {}, true); - shooterRollerRight = - new ShooterRoller(new ShooterRollerIO() {}, new BeamBreakIO() {}, true); - turretRight = new Turret(new TurretIO() {}, true); - - shooterHoodLeft = new ShooterHood(new ShooterHoodIO() {}, false); - shooterRollerLeft = - new ShooterRoller(new ShooterRollerIO() {}, new BeamBreakIO() {}, false); - turretLeft = new Turret(new TurretIO() {}, false); - break; - } - - superShooterRight = new SuperShooter(shooterRollerRight, shooterHoodRight, turretRight); - superShooterLeft = new SuperShooter(shooterRollerLeft, shooterHoodLeft, turretLeft); - - // Auto commands + public static AutoFactory autoFactory; + + /** The container for the robot. Contains subsystems, OI devices, and commands. */ + public RobotContainer() { + switch (Constants.currentMode) { + case REAL: + // Real robot, instantiate hardware IO implementations + drive = + new Drive( + new GyroIOPigeon2(), + new ModuleIOTalonFX(TunerConstants.FrontLeft), + new ModuleIOTalonFX(TunerConstants.FrontRight), + new ModuleIOTalonFX(TunerConstants.BackLeft), + new ModuleIOTalonFX(TunerConstants.BackRight), + (pose) -> {}); + + intake = new Intake(new IntakeIOKrakenFOC()); + intakePivot = new IntakePivot(new IntakePivotIOTalonFX()); + hopper = new Hopper(new HopperKrakenFOC()); + + shooterHoodRight = new ShooterHood(new ShooterHoodIOTalonFX(true), true); + shooterRollerRight = + new ShooterRoller( + new ShooterRollerIOKrakenFOC(true), + new BeamBreakIOHardware(Constants.ShooterRollerLeaderLeft.BEAM_BREAK_PORT), + true); + turretRight = new Turret(new TurretIOTalonFX(true), true); + + shooterHoodLeft = new ShooterHood(new ShooterHoodIOTalonFX(false), false); + shooterRollerLeft = + new ShooterRoller( + new ShooterRollerIOKrakenFOC(false), + new BeamBreakIOHardware(Constants.ShooterRollerLeaderLeft.BEAM_BREAK_PORT), + false); + turretLeft = new Turret(new TurretIOTalonFX(false), false); + break; + + case SIM: + // Sim robot, instantiate physics sim IO implementations + driveSimulation = + new SwerveDriveSimulation(Drive.mapleSimConfig, new Pose2d(3, 3, new Rotation2d())); + SimulatedArena.getInstance().addDriveTrainSimulation(driveSimulation); + drive = + new Drive( + new GyroIOSim(driveSimulation.getGyroSimulation()), + new ModuleIOTalonFXSim(TunerConstants.FrontLeft, driveSimulation.getModules()[0]), + new ModuleIOTalonFXSim(TunerConstants.FrontRight, driveSimulation.getModules()[1]), + new ModuleIOTalonFXSim(TunerConstants.BackLeft, driveSimulation.getModules()[2]), + new ModuleIOTalonFXSim(TunerConstants.BackRight, driveSimulation.getModules()[3]), + driveSimulation::setSimulationWorldPose); + + intake = new Intake(new IntakeIO() {}); + intakePivot = new IntakePivot(new IntakePivotIOSim()); + hopper = new Hopper(new HopperIO() {}); // TODO: Hopper sim implementation + + shooterHoodRight = new ShooterHood(new ShooterHoodIOSim(true), true); + shooterRollerRight = + new ShooterRoller(new ShooterRollerIOSim(true), new BeamBreakIO() {}, true); + turretRight = new Turret(new TurretIOSim(true), true); + + shooterHoodLeft = new ShooterHood(new ShooterHoodIOSim(false), false); + shooterRollerLeft = + new ShooterRoller(new ShooterRollerIOSim(false), new BeamBreakIO() {}, false); + turretLeft = new Turret(new TurretIOSim(false), false); + break; + + default: + // Replayed robot, disable IO implementations + drive = + new Drive( + new GyroIO() {}, + new ModuleIO() {}, + new ModuleIO() {}, + new ModuleIO() {}, + new ModuleIO() {}, + (pose) -> {}); + + intake = new Intake(new IntakeIO() {}); + intakePivot = new IntakePivot(new IntakePivotIO() {}); + hopper = new Hopper(new HopperIO() {}); // TODO: Add replay IO implementation + + shooterHoodRight = new ShooterHood(new ShooterHoodIO() {}, true); + shooterRollerRight = + new ShooterRoller(new ShooterRollerIO() {}, new BeamBreakIO() {}, true); + turretRight = new Turret(new TurretIO() {}, true); + + shooterHoodLeft = new ShooterHood(new ShooterHoodIO() {}, false); + shooterRollerLeft = + new ShooterRoller(new ShooterRollerIO() {}, new BeamBreakIO() {}, false); + turretLeft = new Turret(new TurretIO() {}, false); + break; + } + + superShooterRight = new SuperShooter(shooterRollerRight, shooterHoodRight, turretRight); + superShooterLeft = new SuperShooter(shooterRollerLeft, shooterHoodLeft, turretLeft); + + autoFactory = + new AutoFactory(drive::getPose, drive::setPose, drive::followChoreoTrajectory, true, drive); + + // *** OUTDATED AUTO COMMANDS *** Auto commands + /* NamedCommands.registerCommand( "Run Shooter", Commands.runOnce( @@ -221,9 +228,20 @@ public RobotContainer() { () -> { // intake.setGoalState(IntakeState.INTAKE); })); + */ // Set up auto routines - autoChooser = new LoggedDashboardChooser<>("Auto Choices", AutoBuilder.buildAutoChooser()); + autoChooser = new LoggedDashboardChooser<>("Auto Choices"); + LoggedDashboardChooser startingPosition = + new LoggedDashboardChooser<>("Starting Position?"); + startingPosition.addDefaultOption("Middle", "Mid"); + startingPosition.addOption("Right", "Right"); + startingPosition.addOption("Left", "Left"); + AutoBuilder.setStartingPosition(startingPosition::get); + var autoBuilder = new AutoBuilder(drive, superShooterLeft, superShooterRight, intake); + + autoChooser.addDefaultOption("Score and Climb Auto", autoBuilder.scoreAndClimbAuto()); + autoChooser.addOption("Score, Depot, and Climb Auto", autoBuilder.scorePickupAndClimbAuto()); // // Set up SysId routines // autoChooser.addOption( diff --git a/src/main/java/org/team5924/frc2026/commands/AutoBuilder.java b/src/main/java/org/team5924/frc2026/commands/AutoBuilder.java index 134a36c4..3402e881 100644 --- a/src/main/java/org/team5924/frc2026/commands/AutoBuilder.java +++ b/src/main/java/org/team5924/frc2026/commands/AutoBuilder.java @@ -16,43 +16,98 @@ package org.team5924.frc2026.commands; -import edu.wpi.first.math.geometry.Pose2d; -import edu.wpi.first.math.geometry.Rotation2d; -import edu.wpi.first.math.geometry.Translation2d; import edu.wpi.first.wpilibj2.command.Command; import edu.wpi.first.wpilibj2.command.Commands; +import java.util.Set; +import java.util.function.Supplier; import lombok.RequiredArgsConstructor; -import org.team5924.frc2026.RobotState; -import org.team5924.frc2026.commands.drive.DriveToPose; +import org.team5924.frc2026.RobotContainer; import org.team5924.frc2026.subsystems.SuperShooter; +import org.team5924.frc2026.subsystems.SuperShooter.ShooterState; import org.team5924.frc2026.subsystems.drive.Drive; import org.team5924.frc2026.subsystems.rollers.intake.Intake; -import org.team5924.frc2026.util.AllianceFlipUtil; +import org.team5924.frc2026.subsystems.rollers.intake.Intake.IntakeState; @RequiredArgsConstructor public class AutoBuilder { - private final Drive drive; - private final SuperShooter shooter; + private final SuperShooter superShooterLeft; + private final SuperShooter superShooterRight; // private final Climb climb; private final Intake intake; - public Command basicDriveAuto() { - return Commands.runOnce( - () -> - RobotState.getInstance() - .resetPose( - AllianceFlipUtil.apply( - new Pose2d( - RobotState.getInstance().getEstimatedPose().getTranslation(), - Rotation2d.kPi)))) - .andThen( - new DriveToPose( - drive, - () -> RobotState.getInstance().getEstimatedPose(), - () -> RobotState.getInstance().getEstimatedPose(), - () -> - new Translation2d((AllianceFlipUtil.shouldFlip() ? -1.0 : 1.0) * -1.0, 0.0)) - .withTimeout(0.6)); + // Left, Mid, Right 1-5 + private static Supplier startingPositionSupplier; + + public static void setStartingPosition(Supplier supplier) { + if (supplier == null) + throw new IllegalArgumentException("startingPositionSupplier can't be null"); + startingPositionSupplier = supplier; + } + + public Command scoreAndClimbAuto() { + if (startingPositionSupplier == null) { + throw new IllegalStateException( + "starting position must be set before building auto commands"); + } + return Commands.defer(() -> Commands.sequence( + startToHub(startingPositionSupplier.get()), + shootersOn(1.0), // TODO: Edit timout + shootersOff(), + RobotContainer.autoFactory.trajectoryCmd("HubToClimb") + // Commands.run(() -> climb.setGoalState(ClimbState.L1_CLIMB), climb) + ), Set.of(drive, superShooterLeft, superShooterRight)); + } + + public Command scorePickupAndClimbAuto() { + if (startingPositionSupplier == null) { + throw new IllegalStateException( + "starting position must be set before building auto commands"); + } + return Commands.defer(() -> Commands.sequence( + startToHub(startingPositionSupplier.get()), + shootersOn(1.0), // TODO: edit timeouts + shootersOff(), + RobotContainer.autoFactory.trajectoryCmd("HubToDepot"), + intakeSequence(), + RobotContainer.autoFactory.trajectoryCmd("DepotToHub"), + shootersOn(1.0), + shootersOff(), + RobotContainer.autoFactory.trajectoryCmd("HubToClimb") + // Commands.run(() -> climb.setGoalState(ClimbState.L1_CLIMB), climb) + ), Set.of(drive, superShooterLeft, superShooterRight, intake)); + } + + private Command startToHub(String startingPosition) { + if ("Mid".equals(startingPosition)) { + return Commands.none(); + } else { + return Commands.sequence( + RobotContainer.autoFactory.resetOdometry(startingPosition + "StartToHub"), + RobotContainer.autoFactory.trajectoryCmd(startingPosition + "StartToHub")); + } + } + + private Command shootersOn(double timeout) { + return Commands.parallel( + Commands.run(() -> superShooterLeft.setGoalState(ShooterState.AUTO_SHOOTING), superShooterLeft), + Commands.run(() -> superShooterRight.setGoalState(ShooterState.AUTO_SHOOTING), superShooterRight) + ).withTimeout(timeout); + } + + private Command shootersOff() { + return Commands.parallel( + Commands.runOnce(() -> superShooterLeft.setGoalState(ShooterState.OFF), superShooterLeft), + Commands.runOnce(() -> superShooterRight.setGoalState(ShooterState.OFF), superShooterRight) + ); + } + + private Command intakeSequence() { + return Commands.sequence( + Commands.deadline( + RobotContainer.autoFactory.trajectoryCmd("DepotIntake"), + Commands.run(() -> intake.setGoalState(IntakeState.INTAKE), intake) + ), + Commands.runOnce(() -> intake.setGoalState(IntakeState.OFF), intake)); } } diff --git a/src/main/java/org/team5924/frc2026/commands/climb/AutoClimbCommands.java b/src/main/java/org/team5924/frc2026/commands/climb/AutoClimbCommands.java deleted file mode 100644 index 60ae3e8c..00000000 --- a/src/main/java/org/team5924/frc2026/commands/climb/AutoClimbCommands.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * AutoClimbCommands.java - */ - -/* - * Copyright (C) 2025-2026 Team 5924 - Golden Gate Robotics and/or its affiliates. - * - * This file, and the associated project, are offered under the GNU General - * Public License v3.0. A copy of this license can be found in LICENSE.md - * at the root of this project. - * - * If this file has been separated from the original project, you should have - * received a copy of the GNU General Public License along with it. - * If you did not, see . - */ - -package org.team5924.frc2026.commands.climb; - -import edu.wpi.first.wpilibj2.command.Command; -import java.util.function.BooleanSupplier; -import org.team5924.frc2026.subsystems.drive.Drive; - -public class AutoClimbCommands { - // TODO Make and auto climb program - // public static Command autoClimb( - // Drive drive, - // SuperShooter shooter, - // DoubleSupplier driverX, - // DoubleSupplier driverY, - // DoubleSupplier driverOmega, - // Command joystickDrive, - // Supplier controllerRumble, - // BooleanSupplier trigger, - // BooleanSupplier disableReefAutoAlign, - // BooleanSupplier manualEject) { - // } - private AutoClimbCommands() {} - - public static Command autoClimb(Drive drive, /*Climb climb, */ BooleanSupplier s) { - // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'autoClimb'"); - } -} diff --git a/src/main/java/org/team5924/frc2026/commands/shooter/AutoScoreCommands.java b/src/main/java/org/team5924/frc2026/commands/shooter/AutoScoreCommands.java deleted file mode 100644 index 6dc3e691..00000000 --- a/src/main/java/org/team5924/frc2026/commands/shooter/AutoScoreCommands.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * AutoScoreCommands.java - */ - -/* - * Copyright (C) 2025-2026 Team 5924 - Golden Gate Robotics and/or its affiliates. - * - * This file, and the associated project, are offered under the GNU General - * Public License v3.0. A copy of this license can be found in LICENSE.md - * at the root of this project. - * - * If this file has been separated from the original project, you should have - * received a copy of the GNU General Public License along with it. - * If you did not, see . - */ - -package org.team5924.frc2026.commands.shooter; - -import edu.wpi.first.wpilibj2.command.Command; -import org.team5924.frc2026.subsystems.SuperShooter; -import org.team5924.frc2026.subsystems.drive.Drive; - -public class AutoScoreCommands { - // TODO Make and auto score program - // public static Command autoScore( - // Drive drive, - // SuperShooter shooter, - // DoubleSupplier driverX, - // DoubleSupplier driverY, - // DoubleSupplier driverOmega, - // Command joystickDrive, - // Supplier controllerRumble, - // BooleanSupplier trigger, - // BooleanSupplier disableReefAutoAlign, - // BooleanSupplier manualEject) { - // } - private AutoScoreCommands() {} - - public static Command autoScore(Drive drive, SuperShooter shooter) { - // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'autoScore'"); - } -} diff --git a/src/main/java/org/team5924/frc2026/subsystems/drive/Drive.java b/src/main/java/org/team5924/frc2026/subsystems/drive/Drive.java index 743bb44a..0b7933f2 100644 --- a/src/main/java/org/team5924/frc2026/subsystems/drive/Drive.java +++ b/src/main/java/org/team5924/frc2026/subsystems/drive/Drive.java @@ -22,6 +22,7 @@ import static edu.wpi.first.units.Units.MetersPerSecond; import static edu.wpi.first.units.Units.Volts; +import choreo.trajectory.SwerveSample; import com.pathplanner.lib.auto.AutoBuilder; import com.pathplanner.lib.config.ModuleConfig; import com.pathplanner.lib.config.PIDConstants; @@ -34,6 +35,7 @@ import edu.wpi.first.hal.FRCNetComm.tResourceType; import edu.wpi.first.hal.HAL; import edu.wpi.first.math.Matrix; +import edu.wpi.first.math.controller.PIDController; import edu.wpi.first.math.estimator.SwerveDrivePoseEstimator; import edu.wpi.first.math.geometry.Pose2d; import edu.wpi.first.math.geometry.Rotation2d; @@ -72,6 +74,7 @@ import org.team5924.frc2026.util.Elastic.Notification; import org.team5924.frc2026.util.Elastic.Notification.NotificationLevel; import org.team5924.frc2026.util.LocalADStarAK; +import org.team5924.frc2026.util.LoggedTunableNumber; public class Drive extends SubsystemBase { // TunerConstants doesn't include these constants, so they are declared locally @@ -86,7 +89,8 @@ public class Drive extends SubsystemBase { Math.hypot(TunerConstants.BackRight.LocationX, TunerConstants.BackRight.LocationY))); // PathPlanner config constants - private static final double ROBOT_MASS_KG = 52.16; // TODO: update + private static final double ROBOT_MASS_KG = + 52.16; // TODO: update, when updating also update choreo private static final double ROBOT_MOI = 4.39; private static final double WHEEL_COF = 1.2; private static final RobotConfig PP_CONFIG = @@ -103,6 +107,33 @@ public class Drive extends SubsystemBase { 1), getModuleTranslations()); + private final LoggedTunableNumber xControllerKp = + new LoggedTunableNumber("Drive/xControllerKp", 10.0); + private final LoggedTunableNumber xControllerKi = + new LoggedTunableNumber("Drive/xControllerKi", 0.0); + private final LoggedTunableNumber xControllerKd = + new LoggedTunableNumber("Drive/xControllerKd", 0.0); + private final LoggedTunableNumber yControllerKp = + new LoggedTunableNumber("Drive/yControllerKp", 10.0); + private final LoggedTunableNumber yControllerKi = + new LoggedTunableNumber("Drive/yControllerKi", 0.0); + private final LoggedTunableNumber yControllerKd = + new LoggedTunableNumber("Drive/yControllerKd", 0.0); + private final LoggedTunableNumber headingControllerKp = + new LoggedTunableNumber("Drive/headingControllerKp", 7.5); + private final LoggedTunableNumber headingControllerKi = + new LoggedTunableNumber("Drive/headingControllerKi", 0.0); + private final LoggedTunableNumber headingControllerKd = + new LoggedTunableNumber("Drive/headingControllerKd", 0.0); + + private final PIDController xController = + new PIDController(xControllerKp.get(), xControllerKi.get(), xControllerKd.get()); + private final PIDController yController = + new PIDController(yControllerKp.get(), yControllerKi.get(), yControllerKd.get()); + private final PIDController headingController = + new PIDController( + headingControllerKp.get(), headingControllerKi.get(), headingControllerKd.get()); + public static final DriveTrainSimulationConfig mapleSimConfig = DriveTrainSimulationConfig.Default() .withRobotMass(Kilograms.of(ROBOT_MASS_KG)) @@ -239,6 +270,7 @@ public void initSendable(SendableBuilder builder) { builder.addDoubleProperty("Robot Angle", () -> getRotation().getRadians(), null); } }); + headingController.enableContinuousInput(-Math.PI, Math.PI); } @Override @@ -311,6 +343,40 @@ public void periodic() { Elastic.sendNotification(gyroDisconnectedNotification); } wasGyroConnected = gyroInputs.connected; + + LoggedTunableNumber.ifChanged( + hashCode(), + gains -> { + xController.setPID(gains[0], gains[1], gains[2]); + yController.setPID(gains[3], gains[4], gains[5]); + headingController.setPID(gains[6], gains[7], gains[8]); + }, + xControllerKp, + xControllerKi, + xControllerKd, + yControllerKp, + yControllerKi, + yControllerKd, + headingControllerKp, + headingControllerKi, + headingControllerKd); + } + + public void followChoreoTrajectory(SwerveSample sample) { + // Get the current pose of the robot + Pose2d pose = getPose(); + + // Generate the next speeds for the robot + ChassisSpeeds speeds = + ChassisSpeeds.fromFieldRelativeSpeeds( + sample.vx + xController.calculate(pose.getX(), sample.x), + sample.vy + yController.calculate(pose.getY(), sample.y), + sample.omega + + headingController.calculate(pose.getRotation().getRadians(), sample.heading), + pose.getRotation()); + + // Apply the generated speeds + runVelocity(speeds); } /** diff --git a/vendordeps/ChoreoLib2026.json b/vendordeps/ChoreoLib2026.json new file mode 100644 index 00000000..322c9e20 --- /dev/null +++ b/vendordeps/ChoreoLib2026.json @@ -0,0 +1,44 @@ +{ + "fileName": "ChoreoLib2026.json", + "name": "ChoreoLib", + "version": "2026.0.1", + "uuid": "b5e23f0a-dac9-4ad2-8dd6-02767c520aca", + "frcYear": "2026", + "mavenUrls": [ + "https://frcmaven.wpi.edu/artifactory/sleipnirgroup-mvn-release/", + "https://repo1.maven.org/maven2" + ], + "jsonUrl": "https://choreo.autos/lib/ChoreoLib2026.json", + "javaDependencies": [ + { + "groupId": "choreo", + "artifactId": "ChoreoLib-java", + "version": "2026.0.1" + }, + { + "groupId": "com.google.code.gson", + "artifactId": "gson", + "version": "2.11.0" + } + ], + "jniDependencies": [], + "cppDependencies": [ + { + "groupId": "choreo", + "artifactId": "ChoreoLib-cpp", + "version": "2026.0.1", + "libName": "ChoreoLib", + "headerClassifier": "headers", + "sharedLibrary": false, + "skipInvalidPlatforms": true, + "binaryPlatforms": [ + "windowsx86-64", + "linuxx86-64", + "osxuniversal", + "linuxathena", + "linuxarm32", + "linuxarm64" + ] + } + ] +} \ No newline at end of file