diff --git a/.DataLogTool/datalogtool.json b/.DataLogTool/datalogtool.json new file mode 100644 index 00000000..179565f9 --- /dev/null +++ b/.DataLogTool/datalogtool.json @@ -0,0 +1,5 @@ +{ + "download": { + "serverTeam": "2539" + } +} diff --git a/.SysId/sysid.json b/.SysId/sysid.json new file mode 100644 index 00000000..d8d25891 --- /dev/null +++ b/.SysId/sysid.json @@ -0,0 +1,9 @@ +{ + "SysId": { + "Data Selector": { + "window": { + "visible": false + } + } + } +} diff --git a/.gitignore b/.gitignore index f5c63e05..964130d8 100644 --- a/.gitignore +++ b/.gitignore @@ -184,3 +184,6 @@ ctre_sim/ # clangd /.cache compile_commands.json + +# paths +src/main/deploy/pathplanner/paths \ No newline at end of file diff --git a/build.gradle b/build.gradle index c4a681a8..7c48ce54 100644 --- a/build.gradle +++ b/build.gradle @@ -28,12 +28,34 @@ deploy { // getTargetTypeClass is a shortcut to get the class type using a string frcJava(getArtifactTypeClass('FRCJavaArtifact')) { + + // Advantage Kit suggestions + jvmArgs.add("-XX:+UnlockExperimentalVMOptions") + jvmArgs.add("-XX:GCTimeRatio=5") + jvmArgs.add("-XX:+UseSerialGC") + jvmArgs.add("-XX:MaxGCPauseMillis=50") + + // The options below may improve performance, but should only be enabled on the RIO 2 + + final MAX_JAVA_HEAP_SIZE_MB = 100; + jvmArgs.add("-Xmx" + MAX_JAVA_HEAP_SIZE_MB + "M") + jvmArgs.add("-Xms" + MAX_JAVA_HEAP_SIZE_MB + "M") + jvmArgs.add("-XX:+AlwaysPreTouch") + + // Enable VisualVM connection + jvmArgs.add("-Dcom.sun.management.jmxremote=true") + jvmArgs.add("-Dcom.sun.management.jmxremote.port=1198") + jvmArgs.add("-Dcom.sun.management.jmxremote.local.only=false") + jvmArgs.add("-Dcom.sun.management.jmxremote.ssl=false") + jvmArgs.add("-Dcom.sun.management.jmxremote.authenticate=false") + jvmArgs.add("-Djava.rmi.server.hostname=10.25.39.2") // Replace TE.AM with team number } // Static files artifact frcStaticFileDeploy(getArtifactTypeClass('FileTreeArtifact')) { files = project.fileTree('src/main/deploy') directory = '/home/lvuser/deploy' + deleteOldFiles = true } } } @@ -54,7 +76,12 @@ task(replayWatch, type: JavaExec) { classpath = sourceSets.main.runtimeClasspath } +def simGUI +task(generateTrajectories, type: JavaExec) { + mainClass = "frc.robot.auto.AutoGenerators" + classpath = sourceSets.main.runtimeClasspath +} // Defining my dependencies. In this case, WPILib (+ friends), and vendor libraries. // Also defines JUnit 5. @@ -90,7 +117,7 @@ test { } // Simulation configuration (e.g. environment variables). -wpi.sim.addGui().defaultEnabled = true +simGUI = wpi.sim.addGui().defaultEnabled = false wpi.sim.addDriverstation() // Setting up my Jar File. In this case, adding all libraries into the main jar ('fat jar') diff --git a/src/main/deploy/choreo/QuarterSprint.traj b/src/main/deploy/choreo/QuarterSprint.traj index d694a584..a48284b7 100644 --- a/src/main/deploy/choreo/QuarterSprint.traj +++ b/src/main/deploy/choreo/QuarterSprint.traj @@ -3,8 +3,8 @@ "version":"v2025.0.0", "snapshot":{ "waypoints":[ - {"x":0.0, "y":0.0, "heading":0.0, "intervals":28, "split":false, "fixTranslation":true, "fixHeading":true, "overrideIntervals":false}, - {"x":3.255356550216675, "y":1.1777058839797974, "heading":0.0, "intervals":16, "split":false, "fixTranslation":true, "fixHeading":false, "overrideIntervals":false}, + {"x":0.0, "y":0.0, "heading":0.0, "intervals":26, "split":false, "fixTranslation":true, "fixHeading":true, "overrideIntervals":false}, + {"x":3.255356550216675, "y":1.1777058839797974, "heading":0.0, "intervals":15, "split":false, "fixTranslation":true, "fixHeading":false, "overrideIntervals":false}, {"x":4.409422397613525, "y":1.5689146518707275, "heading":0.0, "intervals":40, "split":false, "fixTranslation":true, "fixHeading":true, "overrideIntervals":false}], "constraints":[ {"from":"first", "to":null, "data":{"type":"StopPoint", "props":{}}, "enabled":true}, @@ -13,8 +13,8 @@ }, "params":{ "waypoints":[ - {"x":{"exp":"0 m", "val":0.0}, "y":{"exp":"0 m", "val":0.0}, "heading":{"exp":"0 deg", "val":0.0}, "intervals":28, "split":false, "fixTranslation":true, "fixHeading":true, "overrideIntervals":false}, - {"x":{"exp":"3.255356550216675 m", "val":3.255356550216675}, "y":{"exp":"1.1777058839797974 m", "val":1.1777058839797974}, "heading":{"exp":"0 deg", "val":0.0}, "intervals":16, "split":false, "fixTranslation":true, "fixHeading":false, "overrideIntervals":false}, + {"x":{"exp":"0 m", "val":0.0}, "y":{"exp":"0 m", "val":0.0}, "heading":{"exp":"0 deg", "val":0.0}, "intervals":26, "split":false, "fixTranslation":true, "fixHeading":true, "overrideIntervals":false}, + {"x":{"exp":"3.255356550216675 m", "val":3.255356550216675}, "y":{"exp":"1.1777058839797974 m", "val":1.1777058839797974}, "heading":{"exp":"0 deg", "val":0.0}, "intervals":15, "split":false, "fixTranslation":true, "fixHeading":false, "overrideIntervals":false}, {"x":{"exp":"4.409422397613525 m", "val":4.409422397613525}, "y":{"exp":"1.5689146518707275 m", "val":1.5689146518707275}, "heading":{"exp":"0 rad", "val":0.0}, "intervals":40, "split":false, "fixTranslation":true, "fixHeading":true, "overrideIntervals":false}], "constraints":[ {"from":"first", "to":null, "data":{"type":"StopPoint", "props":{}}, "enabled":true}, @@ -25,53 +25,50 @@ } }, "trajectory":{ - "waypoints":[0.0,1.167238832817363,1.7203497483025445], + "waypoints":[0.0,1.1022718075082387,1.618775614723818], "samples":[ - {"t":0.0, "x":0.0, "y":0.0, "heading":0.0, "vx":0.0, "vy":0.0, "omega":0.0, "ax":7.843324654423512, "ay":2.8403284449533, "alpha":0.0, "fx":[145.27405924923227,145.27405924923227,145.27405924923227,145.27405924923227], "fy":[52.60856345742503,52.60856345742502,52.608563457425014,52.60856345742502]}, - {"t":0.04168710117204868, "x":0.006815121280357164, "y":0.0024679818420480447, "heading":0.0, "vx":0.3269654683941767, "vy":0.1184050592466159, "omega":0.0, "ax":7.842445124066024, "ay":2.8400099377936616, "alpha":0.0, "fx":[145.2577685879509,145.2577685879509,145.2577685879509,145.2577685879509], "fy":[52.6026640678142,52.60266406781419,52.60266406781419,52.6026640678142]}, - {"t":0.08337420234409736, "x":0.02725972089116675, "y":0.009871650615029334, "heading":0.0, "vx":0.6538942717173568, "vy":0.23679684085304392, "omega":0.0, "ax":7.841345579725829, "ay":2.8396117562622702, "alpha":0.0, "fx":[145.2374028276818,145.2374028276818,145.2374028276818,145.2374028276818], "fy":[52.59528894948978,52.59528894948976,52.59528894948976,52.59528894948976]}, - {"t":0.12506130351614603, "x":0.06133207920017044, "y":0.022210383582973225, "heading":0.0, "vx":0.980777238224384, "vy":0.35517202342568804, "omega":0.0, "ax":7.839931702097867, "ay":2.8390997442054275, "alpha":0.0, "fx":[145.2112149862567,145.2112149862567,145.2112149862567,145.2112149862567], "fy":[52.58580546217293,52.58580546217292,52.58580546217293,52.58580546217293]}, - {"t":0.1667484046881947, "x":0.10903001227691798, "y":0.0394833898721103, "heading":0.0, "vx":1.3076012642716897, "vy":0.4735258616999172, "omega":0.0, "ax":7.838046309070132, "ay":2.838416980758959, "alpha":0.0, "fx":[145.17629373659696,145.17629373659696,145.17629373659696,145.17629373659696], "fy":[52.57315931761744,52.57315931761742,52.573159317617424,52.57315931761744]}, - {"t":0.2084355058602434, "x":0.17035065336137825, "y":0.06168963133341607, "heading":0.0, "vx":1.6343466937490991, "vy":0.5918512375452769, "omega":0.0, "ax":7.835406546233246, "ay":2.8374610349450604, "alpha":0.0, "fx":[145.12740004933218,145.12740004933218,145.12740004933218,145.12740004933218], "fy":[52.55545328925241,52.5554532892524,52.5554532892524,52.555453289252405]}, - {"t":0.25012260703229205, "x":0.24529007051302404, "y":0.08882768408061294, "heading":0.0, "vx":1.960982079166057, "vy":0.7101367627807775, "omega":0.0, "ax":7.831447024288082, "ay":2.8360271605175185, "alpha":0.0, "fx":[145.05406178386383,145.05406178386383,145.05406178386383,145.05406178386383], "fy":[52.52889506710548,52.52889506710547,52.528895067105466,52.52889506710548]}, - {"t":0.2918097082043407, "x":0.3338425295657846, "y":0.12089547158165456, "heading":0.0, "vx":2.287452403591094, "vy":0.8283625139479492, "omega":0.0, "ax":7.824850128661498, "ay":2.8336382054692546, "alpha":0.0, "fx":[144.9318740830683,144.9318740830683,144.9318740830683,144.9318740830683], "fy":[52.48464684170153,52.484646841701526,52.48464684170152,52.48464684170153]}, - {"t":0.33349680937638937, "x":0.4359988579724038, "y":0.15788967215249483, "heading":0.0, "vx":2.613647722560724, "vy":0.9464886765043286, "omega":0.0, "ax":7.811674842078864, "ay":2.828866996529874, "alpha":0.0, "fx":[144.68784142498473,144.68784142498473,144.68784142498473,144.68784142498473], "fy":[52.396274509726325,52.39627450972631,52.396274509726304,52.39627450972631]}, - {"t":0.375183910548438, "x":0.5517418755413542, "y":0.19980406427511452, "heading":0.0, "vx":2.9392938020256127, "vy":1.064415941190939, "omega":0.0, "ax":7.772412877764403, "ay":2.8146489350179333, "alpha":0.0, "fx":[143.96063132195226,143.96063132195226,143.96063132195226,143.96063132195223], "fy":[52.132927574402146,52.13292757440215,52.132927574402146,52.13292757440215]}, - {"t":0.4168710117204867, "x":0.6810260191676814, "y":0.24662214803558455, "heading":0.0, "vx":3.2633031640119112, "vy":1.1817504961088303, "omega":0.0, "ax":4.11867595535417, "ay":1.4915093883392592, "alpha":0.0, "fx":[76.28611604506992,76.28611604506993,76.28611604506995,76.28611604506995], "fy":[27.625736890819766,27.62573689081975,27.62573689081975,27.62573689081976]}, - {"t":0.45855811289253534, "x":0.8206424155214849, "y":0.29718188377646043, "heading":0.0, "vx":3.434998825257645, "vy":1.24392719887959, "omega":0.0, "ax":0.001163608544372028, "ay":0.0004214105896075762, "alpha":0.0, "fx":[0.021552357458913044,0.02155235745891302,0.021552357458804364,0.021552357458804364], "fy":[0.007805366940657207,0.007805366940765848,0.007805366940765848,0.0078053669406572]}, - {"t":0.500245214064584, "x":0.9638385701437197, "y":0.3490379689335207, "heading":0.0, "vx":3.435047332724759, "vy":1.2439447662654737, "omega":0.0, "ax":2.419596442938799e-7, "ay":6.530547040715496e-8, "alpha":0.0, "fx":[4.4815765329430725e-6,4.4815765329430725e-6,4.481576530217332e-6,4.481576530217332e-6], "fy":[1.209587921699512e-6,1.2095879244243015e-6,1.2095879244243015e-6,1.209587921699512e-6]}, - {"t":0.5419323152366327, "x":1.1070357360440353, "y":0.4008944203140134, "heading":0.0, "vx":3.435047342811355, "vy":1.2439447689878695, "omega":0.0, "ax":-1.848202319580021e-9, "ay":5.251587359248084e-9, "alpha":0.0, "fx":[-3.4232406028753224e-8,-3.4232406028753224e-8,-3.4232400697769265e-8,-3.4232400697769265e-8], "fy":[9.726990373340697e-8,9.726989840257505e-8,9.726989840257505e-8,9.726990373340613e-8]}, - {"t":0.5836194164086813, "x":1.2502329021529828, "y":0.4527508717558056, "heading":0.0, "vx":3.4350473427343085, "vy":1.2439447692067929, "omega":0.0, "ax":-2.5433841203915605e-10, "ay":7.02457953621633e-10, "alpha":0.0, "fx":[-4.710856811743995e-9,-4.710856811743995e-9,-4.710855497764548e-9,-4.710855497764548e-9], "fy":[1.3010926998210282e-8,1.3010925684196636e-8,1.3010925684196636e-8,1.3010926998210282e-8]}, - {"t":0.62530651758073, "x":1.3934300682601073, "y":0.5046073232027715, "heading":0.0, "vx":3.435047342723706, "vy":1.2439447692360763, "omega":0.0, "ax":1.2509313593169655e-10, "ay":-3.4553939047662395e-10, "alpha":0.0, "fx":[2.3169738963337735e-9,2.3169738963337735e-9,2.3169762311219915e-9,2.3169762311219915e-9], "fy":[-6.400079422996369e-9,-6.400081757813889e-9,-6.400081757813889e-9,-6.400079422996369e-9]}, - {"t":0.6669936187527786, "x":1.5366272343671143, "y":0.5564637746500617, "heading":0.0, "vx":3.4350473427289208, "vy":1.243944769221672, "omega":0.0, "ax":3.2839828924789705e-10, "ay":-9.067542350380939e-10, "alpha":0.0, "fx":[6.082591521344399e-9,6.082591521344399e-9,6.082594550562097e-9,6.082594550562097e-9], "fy":[-1.6794900238971255e-8,-1.6794903268073518e-8,-1.6794903268073518e-8,-1.6794900238971255e-8]}, - {"t":0.7086807199248273, "x":1.679824400474523, "y":0.608320226096242, "heading":0.0, "vx":3.4350473427426103, "vy":1.243944769183872, "omega":0.0, "ax":1.709704005108549e-9, "ay":-4.721304929512053e-9, "alpha":0.0, "fx":[3.166713599760507e-8,3.166713599760507e-8,3.166713916763461e-8,3.166713916763461e-8], "fy":[-8.74480083193618e-8,-8.744801148948405e-8,-8.744801148948405e-8,-8.74480083193618e-8]}, - {"t":0.7503678210968759, "x":1.823021566583697, "y":0.6601766775375526, "heading":0.0, "vx":3.435047342813883, "vy":1.2439447689870542, "omega":0.0, "ax":1.1513392709648542e-8, "ay":-3.1793082707172943e-8, "alpha":0.0, "fx":[2.132510588375459e-7,2.132510588375459e-7,2.1325106053573229e-7,2.1325106053573229e-7], "fy":[-5.888714770059387e-7,-5.888714787039937e-7,-5.888714787039937e-7,-5.888714770059387e-7]}, - {"t":0.7920549222689246, "x":1.966218732704358, "y":0.7120331289471263, "heading":0.0, "vx":3.435047343293843, "vy":1.2439447676616928, "omega":0.0, "ax":7.590857586873053e-8, "ay":-2.0961523706577566e-7, "alpha":0.0, "fx":[1.4059786392022851e-6,1.4059786392022851e-6,1.4059786452789668e-6,1.4059786452789668e-6], "fy":[-3.882493417893814e-6,-3.882493423970774e-6,-3.882493423970774e-6,-3.882493417893814e-6]}, - {"t":0.8337420234409733, "x":2.109415898900989, "y":0.763889580146949, "heading":0.0, "vx":3.435047346458252, "vy":1.2439447589234414, "omega":0.0, "ax":5.011430372535647e-7, "ay":-1.3838636719124269e-6, "alpha":0.0, "fx":[9.282171333707528e-6,9.282171333707528e-6,9.282171338163714e-6,9.282171338163714e-6], "fy":[-0.000025631922928838947,-0.000025631922933295007,-0.000025631922933295007,-0.000025631922928838947]}, - {"t":0.8754291246130219, "x":2.252613065599016, "y":0.8157460299621533, "heading":0.0, "vx":3.435047367349452, "vy":1.2439447012341764, "omega":0.0, "ax":3.304475231669559e-6, "ay":-9.125028714152548e-6, "alpha":0.0, "fx":[0.00006120549024009215,0.00006120549024009215,0.00006120549024187499,0.00006120549024187499], "fy":[-0.00016901378184264206,-0.00016901378184442493,-0.00016901378184442493,-0.00016901378184264206]}, - {"t":0.9171162257850706, "x":2.3958102356037783, "y":0.8676024706461424, "heading":0.0, "vx":3.4350475051034457, "vy":1.2439443208381813, "omega":0.0, "ax":0.00002177211736237517, "ay":-0.00006012193801745443, "alpha":0.0, "fx":[0.00040326315778356866,0.00040326315778356866,0.00040326315778808615,0.00040326315778808615], "fy":[-0.0011135785359564123,-0.0011135785359609296,-0.0011135785359609296,-0.0011135785359564123]}, - {"t":0.9588033269571192, "x":2.539007427397767, "y":0.9194588511609274, "heading":0.0, "vx":3.435048412719905, "vy":1.2439418145288683, "omega":0.0, "ax":0.00014341586187092628, "ay":-0.0003960347328959736, "alpha":0.0, "fx":[0.002656348593573672,0.002656348593573672,0.0026563485935729206,0.0026563485935729206], "fy":[-0.007335355322699598,-0.007335355322698847,-0.007335355322698847,-0.007335355322699598]}, - {"t":1.000490428129168, "x":2.682204762724788, "y":0.971314835317904, "heading":0.0, "vx":3.435054391311448, "vy":1.2439253049888903, "omega":0.0, "ax":0.0009446479606479784, "ay":-0.0026087412084742187, "alpha":0.0, "fx":[0.01749676952711678,0.01749676952711678,0.017496769527125918,0.017496769527125918], "fy":[-0.048319104663354526,-0.04831910466336366,-0.04831910466336366,-0.048319104663354526]}, - {"t":1.0421775293012168, "x":2.8254030434782944, "y":1.0231682086034168, "heading":0.0, "vx":3.4350937709465557, "vy":1.243816554130201, "omega":0.0, "ax":0.006220886048813942, "ay":-0.017186104788871382, "alpha":0.0, "fx":[0.11522325139612848,0.11522325139612848,0.11522325139613518,0.11522325139613518], "fy":[-0.31832103289947233,-0.318321032899479,-0.318321032899479,-0.31832103289947233]}, - {"t":1.0838646304732655, "x":2.9686075504159115, "y":1.075004382004684, "heading":0.0, "vx":3.4353531016526526, "vy":1.243100115241114, "omega":0.0, "ax":0.04088306912899751, "ay":-0.11323172749352084, "alpha":0.0, "fx":[0.7572362064072937,0.7572362064072937,0.757236206407294,0.757236206407294], "fy":[-2.0972780566349947,-2.097278056634995,-2.097278056634995,-2.0972780566349947]}, - {"t":1.1255517316453143, "x":3.1118529863194224, "y":1.126727234412214, "heading":0.0, "vx":3.437057398291657, "vy":1.2383798127612058, "omega":0.0, "ax":0.25618892328299037, "ay":-0.7432496529845579, "alpha":0.0, "fx":[4.745131237047545,4.745131237047545,4.74513123704755,4.74513123704755], "fy":[-13.766470072579978,-13.766470072579985,-13.766470072579985,-13.766470072579978]}, - {"t":1.167238832817363, "x":3.255356550216675, "y":1.1777058839797974, "heading":0.0, "vx":3.447737171855713, "vy":1.2073958892811485, "omega":0.0, "ax":0.2823829412414288, "ay":-0.8499454091256985, "alpha":0.0, "fx":[5.2302968376737455,5.2302968376737455,5.230296837673745,5.230296837673745], "fy":[-15.742688867826184,-15.742688867826182,-15.742688867826182,-15.742688867826184]}, - {"t":1.201808265035187, "x":3.3747115969359243, "y":1.2189370125550096, "heading":0.0, "vx":3.457498989802428, "vy":1.1780137590715278, "omega":0.0, "ax":0.06468951865712697, "ay":-0.19047330926538183, "alpha":0.0, "fx":[1.1981792645673013,1.1981792645673013,1.1981792645673095,1.1981792645673095], "fy":[-3.5279466342133987,-3.5279466342134076,-3.5279466342134076,-3.5279466342133987]}, - {"t":1.2363776972530107, "x":3.4942740273708215, "y":1.2595464672016805, "heading":0.0, "vx":3.4597352697328496, "vy":1.1714292049175727, "omega":0.0, "ax":0.010091996376742442, "ay":-0.04521699320873902, "alpha":0.0, "fx":[0.18692395689002472,0.18692395689002472,0.18692395689002217,0.1869239568900222], "fy":[-0.8375091482122654,-0.837509148212263,-0.837509148212263,-0.8375091482122654]}, - {"t":1.2709471294708343, "x":3.6138811414676377, "y":1.300015091513686, "heading":0.0, "vx":3.460084144317538, "vy":1.169866079135749, "omega":0.0, "ax":-5.5158394174879035, "ay":-1.8739779591343015, "alpha":0.0, "fx":[-102.1643776907109,-102.16437769071092,-102.164377690711,-102.16437769071098], "fy":[-34.70981975908564,-34.709819759085455,-34.70981975908542,-34.7098197590856]}, - {"t":1.3055165616886584, "x":3.730198445828517, "y":1.3393369530418986, "heading":0.0, "vx":3.2694047074502883, "vy":1.1050837250997607, "omega":0.0, "ax":-7.798982128601342, "ay":-2.6365038674192856, "alpha":0.0, "fx":[-144.45274698595404,-144.45274698595404,-144.45274698595404,-144.452746985954], "fy":[-48.83332463234001,-48.83332463234001,-48.83332463234001,-48.83332463234001]}, - {"t":1.3400859939064822, "x":3.8385598404456966, "y":1.3759636987408497, "heading":0.0, "vx":2.999798323387585, "vy":1.0139412833629793, "omega":0.0, "ax":-7.853807076209527, "ay":-2.654776635403731, "alpha":0.0, "fx":[-145.46821466555284,-145.46821466555284,-145.46821466555284,-145.46821466555284], "fy":[-49.171772840947895,-49.1717728409479,-49.17177284094791,-49.1717728409479]}, - {"t":1.374655426124306, "x":3.93756833628613, "y":1.409428783582123, "heading":0.0, "vx":2.728296672014694, "vy":0.9221671624119272, "omega":0.0, "ax":-7.872545015993208, "ay":-2.661021583699936, "alpha":0.0, "fx":[-145.81527878622617,-145.81527878622617,-145.81527878622617,-145.81527878622617], "fy":[-49.287441773290205,-49.28744177329021,-49.28744177329022,-49.287441773290205]}, - {"t":1.4092248583421298, "x":4.0271799778456945, "y":1.4397175576707033, "heading":0.0, "vx":2.4561472607025494, "vy":0.830177157144046, "omega":0.0, "ax":-7.881991054915628, "ay":-2.6641697046973754, "alpha":0.0, "fx":[-145.99023831914724,-145.99023831914724,-145.99023831914724,-145.99023831914727], "fy":[-49.34575127040476,-49.34575127040477,-49.34575127040478,-49.34575127040476]}, - {"t":1.4437942905599537, "x":4.107377924553981, "y":1.466824408433353, "heading":0.0, "vx":2.18367130518815, "vy":0.7380783231207303, "omega":0.0, "ax":-7.887680756603811, "ay":-2.6660659265819793, "alpha":0.0, "fx":[-146.09562297381578,-146.0956229738158,-146.09562297381578,-146.09562297381578], "fy":[-49.38087309215141,-49.38087309215142,-49.38087309215142,-49.38087309215141]}, - {"t":1.4783637227777775, "x":4.178153132460479, "y":1.4907463217600367, "heading":0.0, "vx":1.9109986599169009, "vy":0.6459139377835048, "omega":0.0, "ax":-7.89148220995767, "ay":-2.667332844588643, "alpha":0.0, "fx":[-146.16603349283594,-146.16603349283594,-146.16603349283594,-146.16603349283594], "fy":[-49.404338947470826,-49.40433894747085,-49.40433894747085,-49.40433894747084]}, - {"t":1.512933154995601, "x":4.23949993038356, "y":1.511481407602395, "heading":0.0, "vx":1.638194600561606, "vy":0.5537057558101224, "omega":0.0, "ax":-7.894201248874816, "ay":-2.668239023583038, "alpha":0.0, "fx":[-146.21639553165932,-146.21639553165932,-146.21639553165932,-146.21639553165932], "fy":[-49.42112319480503,-49.421123194805034,-49.42112319480505,-49.42112319480503]}, - {"t":1.5475025872134252, "x":4.29141442218014, "y":1.529028367485593, "heading":0.0, "vx":1.3652965455747674, "vy":0.46146624774341594, "omega":0.0, "ax":-7.896242393798908, "ay":-2.668919279632094, "alpha":0.0, "fx":[-146.25420161794338,-146.25420161794335,-146.25420161794335,-146.25420161794338], "fy":[-49.43372289734563,-49.433722897345646,-49.43372289734565,-49.43372289734564]}, - {"t":1.582072019431249, "x":4.3338937635318135, "y":1.5433862534782723, "heading":0.0, "vx":1.0923279293668289, "vy":0.36920322361133096, "omega":0.0, "ax":-7.897830973424849, "ay":-2.6694487086207266, "alpha":0.0, "fx":[-146.28362528977505,-146.28362528977505,-146.28362528977505,-146.28362528977505], "fy":[-49.44352898107308,-49.4435289810731,-49.4435289810731,-49.44352898107309]}, - {"t":1.6166414516490728, "x":4.366935785595301, "y":1.5545543427661028, "heading":0.0, "vx":0.8193043968631883, "vy":0.2769218974197093, "omega":0.0, "ax":-7.899102437558736, "ay":-2.669872452180924, "alpha":0.0, "fx":[-146.3071753484629,-146.3071753484629,-146.3071753484629,-146.3071753484629], "fy":[-49.45137755929507,-49.45137755929508,-49.45137755929508,-49.45137755929507]}, - {"t":1.6512108838668966, "x":4.390538779429227, "y":1.5625320658068087, "heading":0.0, "vx":0.5462369105663543, "vy":0.18462592265380565, "omega":0.0, "ax":-7.900143100164455, "ay":-2.6702192763008914, "alpha":0.0, "fx":[-146.32645050124603,-146.32645050124603,-146.32645050124603,-146.32645050124603], "fy":[-49.45780143564509,-49.4578014356451,-49.4578014356451,-49.457801435645095]}, - {"t":1.6857803160847205, "x":4.404701363485043, "y":1.567318962168469, "heading":0.0, "vx":0.2731334491541101, "vy":0.09231795837499523, "omega":0.0, "ax":-7.901010564277751, "ay":-2.670508378422148, "alpha":0.0, "fx":[-146.34251767155249,-146.34251767155249,-146.34251767155249,-146.34251767155249], "fy":[-49.46315618513505,-49.46315618513506,-49.46315618513507,-49.463156185135055]}, - {"t":1.7203497483025445, "x":4.409422397613525, "y":1.5689146518707275, "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]}], + {"t":0.0, "x":0.0, "y":0.0, "heading":0.0, "vx":0.0, "vy":0.0, "omega":0.0, "ax":9.108197617845692, "ay":3.29837559810871, "alpha":0.0, "fx":[67.13539533848844,67.13539533848844,67.13539533848844,67.13539533848844], "fy":[24.311917576314823,24.31191757631483,24.311917576314833,24.31191757631483]}, + {"t":0.04239506951954766, "x":0.008185272695128447, "y":0.002964154364479288, "heading":0.0, "vx":0.3861426712063464, "vy":0.13983486278339835, "omega":0.0, "ax":9.10707228612989, "ay":3.297968078768274, "alpha":0.0, "fx":[67.12710065793833,67.12710065793833,67.12710065793833,67.12710065793833], "fy":[24.308913801783785,24.308913801783785,24.30891380178379,24.30891380178379]}, + {"t":0.08479013903909532, "x":0.03274007947758071, "y":0.011856251232120578, "heading":0.0, "vx":0.7722376338963689, "vy":0.27965244875602835, "omega":0.0, "ax":9.105624562021053, "ay":3.2974438106207846, "alpha":0.0, "fx":[67.1164296630318,67.1164296630318,67.1164296630318,67.11642966303178], "fy":[24.305049486271336,24.305049486271336,24.30504948627134,24.305049486271336]}, + {"t":0.127185208558643, "x":0.07366210801680888, "y":0.02667545323256806, "heading":0.0, "vx":1.158271220222152, "vy":0.4194478083440986, "omega":0.0, "ax":9.103692816315515, "ay":3.2967442624566705, "alpha":0.0, "fx":[67.10219100494861,67.10219100494861,67.10219100494861,67.10219100494862], "fy":[24.29989320348888,24.29989320348888,24.29989320348888,24.29989320348888]}, + {"t":0.16958027807819065, "x":0.13094832128143227, "y":0.04742066055764419, "heading":0.0, "vx":1.5442229100544551, "vy":0.5592135105391192, "omega":0.0, "ax":9.100985791921442, "ay":3.2957639605775237, "alpha":0.0, "fx":[67.08223786377708,67.08223786377708,67.08223786377707,67.08223786377707], "fy":[24.292667519882865,24.29266751988287,24.29266751988287,24.29266751988287]}, + {"t":0.2119753475977383, "x":0.204594550543472, "y":0.07409036357489109, "heading":0.0, "vx":1.9300598353993803, "vy":0.6989376527678229, "omega":0.0, "ax":9.096920177061838, "ay":3.2942916687519577, "alpha":0.0, "fx":[67.05227072073237,67.05227072073237,67.05227072073237,67.05227072073237], "fy":[24.281815439382395,24.2818154393824,24.2818154393824,24.2818154393824]}, + {"t":0.254370417117286, "x":0.29459470942871063, "y":0.10668235820958072, "heading":0.0, "vx":2.3157243987196927, "vy":0.8385993770822289, "omega":0.0, "ax":9.090132600341976, "ay":3.2918336657027742, "alpha":0.0, "fx":[67.00224033430491,67.00224033430491,67.00224033430491,67.00224033430493], "fy":[24.26369780366852,24.263697803668524,24.263697803668528,24.263697803668524]}, + {"t":0.29676548663683366, "x":0.4009390444890546, "y":0.1451931124198371, "heading":0.0, "vx":2.701101202253098, "vy":0.9781568941864854, "omega":0.0, "ax":9.076524566074887, "ay":3.2869057523827, "alpha":0.0, "fx":[66.90193720094835,66.90193720094835,66.90193720094835,66.90193720094837], "fy":[24.22737476558591,24.22737476558591,24.22737476558592,24.22737476558591]}, + {"t":0.3391605561563813, "x":0.523609226781202, "y":0.18961598869711188, "heading":0.0, "vx":3.0859010922277244, "vy":1.1175054920629512, "omega":0.0, "ax":9.035574473136966, "ay":3.272076387282609, "alpha":0.0, "fx":[66.6000991432026,66.6000991432026,66.60009914320258,66.60009914320258], "fy":[24.118069354089045,24.118069354089045,24.118069354089048,24.118069354089045]}, + {"t":0.38155562567592893, "x":0.662556226500615, "y":0.23993323174904024, "heading":0.0, "vx":3.468964900165416, "vy":1.256225397975068, "omega":0.0, "ax":3.1118141239839905, "ay":1.1268894498054602, "alpha":0.0, "fx":[22.936796081832313,22.93679608183231,22.93679608183228,22.936796081832284], "fy":[8.306162414310368,8.306162414310405,8.306162414310407,8.30616241431037]}, + {"t":0.42395069519547657, "x":0.8124197315894669, "y":0.2942036976518456, "heading":0.0, "vx":3.600890476283628, "vy":1.3039999545404153, "omega":0.0, "ax":0.0005521937567037274, "ay":0.00019996377321074263, "alpha":0.0, "fx":[0.004070151715538162,0.004070151715538162,0.004070151715541373,0.004070151715541373], "fy":[0.0014739081793296452,0.0014739081793264373,0.0014739081793264373,0.0014739081793296452]}, + {"t":0.4663457647150242, "x":0.9650802299042822, "y":0.34948704607970743, "heading":0.0, "vx":3.6009138865763313, "vy":1.304008432018482, "omega":0.0, "ax":8.604967419602076e-8, "ay":3.0949442147876014e-8, "alpha":0.0, "fx":[6.342614792447683e-7,6.342614792447683e-7,6.342614795850109e-7,6.342614795850109e-7], "fy":[2.2812450089832497e-7,2.281245005577436e-7,2.281245005577436e-7,2.2812450089832497e-7]}, + {"t":0.5087408342345718, "x":1.1177412245369198, "y":0.4047705742370239, "heading":0.0, "vx":3.600913890224413, "vy":1.3040084333305857, "omega":0.0, "ax":-3.480107434189082e-10, "ay":1.0028767861934552e-9, "alpha":0.0, "fx":[-2.565145685544336e-9,-2.565145685544336e-9,-2.5651423971406443e-9,-2.5651423971406443e-9], "fy":[7.392082080467651e-9,7.392078792051757e-9,7.392078792051757e-9,7.392082080467651e-9]}, + {"t":0.5511359037541195, "x":1.2704022192465758, "y":0.4600541024230525, "heading":0.0, "vx":3.600913890209659, "vy":1.3040084333731026, "omega":0.0, "ax":4.9802829298301824e-11, "ay":-1.3759118784996058e-10, "alpha":0.0, "fx":[3.670897439832608e-10,3.670897439832608e-10,3.670912156766162e-10,3.670912156766162e-10], "fy":[-1.0141668502089812e-9,-1.0141683219031575e-9,-1.0141683219031575e-9,-1.0141668502089812e-9]}, + {"t":0.5935309732736671, "x":1.4230632139559634, "y":0.5153376306098576, "heading":0.0, "vx":3.6009138902117708, "vy":1.3040084333672692, "omega":0.0, "ax":8.047624207112823e-11, "ay":-2.2220813949584478e-10, "alpha":0.0, "fx":[5.931792903537506e-10,5.931792903537506e-10,5.931815164673618e-10,5.931815164673618e-10], "fy":[-1.6378675521913943e-9,-1.637869778306208e-9,-1.637869778306208e-9,-1.6378675521913943e-9]}, + {"t":0.6359260427932147, "x":1.5757242086654688, "y":0.5706211587963432, "heading":0.0, "vx":3.6009138902151823, "vy":1.304008433357849, "omega":0.0, "ax":2.596566859823617e-10, "ay":-7.17038593742268e-10, "alpha":0.0, "fx":[1.9138947516212527e-9,1.9138947516212527e-9,1.913899724765284e-9,1.913899724765284e-9], "fy":[-5.285200084074288e-9,-5.285205057229e-9,-5.285205057229e-9,-5.285200084074288e-9]}, + {"t":0.6783211123127624, "x":1.728385203375279, "y":0.6259046869819831, "heading":0.0, "vx":3.600913890226191, "vy":1.3040084333274502, "omega":0.0, "ax":2.237247056477475e-9, "ay":-6.177954599264279e-9, "alpha":0.0, "fx":[1.6490467793075794e-8,1.6490467793075794e-8,1.6490473538101353e-8,1.6490473538101353e-8], "fy":[-4.553693449759672e-8,-4.553694024264676e-8,-4.553694024264676e-8,-4.553693449759672e-8]}, + {"t":0.72071618183231, "x":1.881046198087334, "y":0.6811882151614242, "heading":0.0, "vx":3.600913890321039, "vy":1.3040084330655353, "omega":0.0, "ax":1.7629279651212487e-8, "ay":-4.8681817538088383e-8, "alpha":0.0, "fx":[1.299432314481046e-7,1.299432314481046e-7,1.299432375494487e-7,1.299432375494487e-7], "fy":[-3.588276380856998e-7,-3.588276441870964e-7,-3.588276441870964e-7,-3.588276380856998e-7]}, + {"t":0.7631112513518576, "x":2.0337071928172414, "y":0.7364717432915673, "heading":0.0, "vx":3.600913891068433, "vy":1.3040084310016664, "omega":0.0, "ax":1.4058087188616305e-7, "ay":-3.882027845519308e-7, "alpha":0.0, "fx":[1.0362041726017117e-6,1.0362041726017117e-6,1.036204180209938e-6,1.036204180209938e-6], "fy":[-2.861394588834249e-6,-2.8613945964422475e-6,-2.8613945964422475e-6,-2.861394588834249e-6]}, + {"t":0.8055063208714053, "x":2.1863681876893284, "y":0.7917552710290915, "heading":0.0, "vx":3.600913897028369, "vy":1.3040084145437822, "omega":0.0, "ax":1.1189706023741229e-6, "ay":-3.089947039198511e-6, "alpha":0.0, "fx":[8.24779356767241e-6,8.24779356767241e-6,8.247793575791786e-6,8.247793575791786e-6], "fy":[-0.00002277561650706395,-0.000022775616515183453,-0.000022775616515183453,-0.00002277561650706395]}, + {"t":0.8479013903909529, "x":2.339029183693338, "y":0.8470387956409102, "heading":0.0, "vx":3.6009139444672056, "vy":1.3040082835452629, "omega":0.0, "ax":8.901508731491126e-6, "ay":-0.00002458081138711725, "alpha":0.0, "fx":[0.00006561191717901036,0.00006561191717901029,0.00006561191718900509,0.00006561191718900509], "fy":[-0.0001811821130161071,-0.0001811821130261019,-0.0001811821130261019,-0.0001811821130161071]}, + {"t":0.8902964599105005, "x":2.491690188702461, "y":0.9023222953858157, "heading":0.0, "vx":3.600914321847287, "vy":1.3040072414400552, "omega":0.0, "ax":0.00007079323498554107, "ay":-0.0001954907089718764, "alpha":0.0, "fx":[0.0005218081575978922,0.0005218081575978922,0.0005218081576065087,0.0005218081576065087], "fy":[-0.001440937777423114,-0.0014409377774317303,-0.0014409377774317303,-0.001440937777423114]}, + {"t":0.9326915294300482, "x":2.644351265330935, "y":0.957605597358838, "heading":0.0, "vx":3.6009173231314056, "vy":1.303998953597858, "omega":0.0, "ax":0.0005629704572611743, "ay":-0.0015546551367257462, "alpha":0.0, "fx":[0.00414958543917011,0.00414958543917011,0.004149585439174953,0.004149585439174953], "fy":[-0.011459170254999342,-0.011459170255004187,-0.011459170255004187,-0.011459170254999342]}, + {"t":0.9750865989495958, "x":2.7970129115044364, "y":1.012887326526613, "heading":0.0, "vx":3.6009411903030784, "vy":1.3039330438852574, "omega":0.0, "ax":0.004476194047278219, "ay":-0.012364299423174196, "alpha":0.0, "fx":[0.03299347133038088,0.03299347133038088,0.03299347133037576,0.03299347133037576], "fy":[-0.09113571802964485,-0.0911357180296397,-0.0911357180296397,-0.09113571802964485]}, + {"t":1.0174816684691437, "x":2.949679086228738, "y":1.0681565471341326, "heading":0.0, "vx":3.601130958860896, "vy":1.3034088585516517, "omega":0.0, "ax":0.035530001498553475, "ay":-0.09834801419748594, "alpha":0.0, "fx":[0.26188723576977524,0.26188723576977524,0.2618872357697784,0.2618872357697784], "fy":[-0.7249110187252571,-0.7249110187252602,-0.7249110187252602,-0.7249110187252571]}, + {"t":1.059876737988691, "x":3.1023812133591893, "y":1.1233262738005143, "heading":0.0, "vx":3.6026372557444564, "vy":1.2992393876526398, "omega":0.0, "ax":0.26848530472727106, "ay":-0.7808575264888022, "alpha":0.0, "fx":[1.9789718923229955,1.9789718923229955,1.9789718923229944,1.9789718923229944], "fy":[-5.755604011176396,-5.755604011176396,-5.755604011176396,-5.755604011176396]}, + {"t":1.1022718075082387, "x":3.255356550216675, "y":1.1777058839797974, "heading":0.0, "vx":3.614019708903346, "vy":1.266134878532285, "omega":0.0, "ax":0.3092347706721262, "ay":-0.9347822612585428, "alpha":0.0, "fx":[2.2793311533781138,2.2793311533781138,2.2793311533781133,2.2793311533781133], "fy":[-6.8901641464211005,-6.890164146421101,-6.890164146421101,-6.8901641464211005]}, + {"t":1.136705394655944, "x":3.3799835383094576, "y":1.2207492771194417, "heading":0.0, "vx":3.6246677713283857, "vy":1.23394697207511, "omega":0.0, "ax":0.06291383276612923, "ay":-0.1853524392543606, "alpha":0.0, "fx":[0.4637300607902981,0.4637300607902981,0.46373006079029894,0.46373006079029894], "fy":[-1.3662098483583294,-1.3662098483583305,-1.3662098483583305,-1.3662098483583294]}, + {"t":1.1711389818036493, "x":3.5048311494775386, "y":1.263128614126412, "heading":0.0, "vx":3.626834120271734, "vy":1.227564622705005, "omega":0.0, "ax":0.010242148373029822, "ay":-0.03771090849838883, "alpha":0.0, "fx":[0.07549360575927012,0.07549360575927012,0.0754936057591927,0.0754936057591927], "fy":[-0.2779624308603954,-0.27796243086031797,-0.27796243086031797,-0.2779624308603954]}, + {"t":1.2055725689513546, "x":3.629722130142071, "y":1.3053757111590447, "heading":0.0, "vx":3.627186794180316, "vy":1.2262661008508065, "omega":0.0, "ax":-4.661696203496171, "ay":-1.5839781307611185, "alpha":0.0, "fx":[-34.360784723912275,-34.360784723912275,-34.360784723912225,-34.36078472391224], "fy":[-11.67530640835168,-11.675306408351744,-11.675306408351748,-11.67530640835169]}, + {"t":1.2400061560990598, "x":3.751855561567465, "y":1.346661412610141, "heading":0.0, "vx":3.466667871701104, "vy":1.171724051845184, "omega":0.0, "ax":-9.063900684039051, "ay":-3.063788372506164, "alpha":0.0, "fx":[-66.8088881316658,-66.8088881316658,-66.8088881316658,-66.8088881316658], "fy":[-22.5828042222821,-22.582804222282096,-22.582804222282093,-22.582804222282096]}, + {"t":1.2744397432467651, "x":3.8658519655589823, "y":1.385191750935447, "heading":0.0, "vx":3.154565257599099, "vy":1.0662268279183669, "omega":0.0, "ax":-9.124733050122712, "ay":-3.084201821183855, "alpha":0.0, "fx":[-67.25727595961547,-67.25727595961547,-67.25727595961547,-67.25727595961547], "fy":[-22.733269221472895,-22.73326922147289,-22.73326922147289,-22.733269221472895]}, + {"t":1.3088733303944704, "x":3.969065493374526, "y":1.4200773395803523, "heading":0.0, "vx":2.840367966918151, "vy":0.9600266957275212, "omega":0.0, "ax":-9.145170402159732, "ay":-3.091059827016774, "alpha":0.0, "fx":[-67.40791714750415,-67.40791714750415,-67.40791714750415,-67.40791714750415], "fy":[-22.78381873216034,-22.783818732160334,-22.783818732160334,-22.78381873216034]}, + {"t":1.3433069175421757, "x":4.061447965402582, "y":1.4513020110458732, "heading":0.0, "vx":2.5254669448947684, "vy":0.8535904177951681, "omega":0.0, "ax":-9.15540382900067, "ay":-3.0944937625605062, "alpha":0.0, "fx":[-67.4833464679317,-67.4833464679317,-67.4833464679317,-67.4833464679317], "fy":[-22.80912984528811,-22.809129845288105,-22.809129845288105,-22.809129845288105]}, + {"t":1.377740504689881, "x":4.142981198902448, "y":1.4788596638990594, "heading":0.0, "vx":2.2102135492764385, "vy":0.7470358971440103, "omega":0.0, "ax":-9.161545306133153, "ay":-3.0965545971819894, "alpha":0.0, "fx":[-67.5286145344088,-67.5286145344088,-67.5286145344088,-67.5286145344088], "fy":[-22.82432000176533,-22.82432000176533,-22.82432000176533,-22.82432000176533]}, + {"t":1.4121740918375862, "x":4.213655486242183, "y":1.502747040642539, "heading":0.0, "vx":1.894748680570052, "vy":0.6404104145643167, "omega":0.0, "ax":-9.165639179825943, "ay":-3.0979283370372155, "alpha":0.0, "fx":[-67.55878996980923,-67.55878996980923,-67.55878996980923,-67.55878996980924], "fy":[-22.83444566791163,-22.834445667911627,-22.834445667911627,-22.83444566791163]}, + {"t":1.4466076789852915, "x":4.273464759537719, "y":1.5229621051370612, "heading":0.0, "vx":1.5791428451070928, "vy":0.5337376291935998, "omega":0.0, "ax":-9.168562754201346, "ay":-3.0989093713134035, "alpha":0.0, "fx":[-67.58033927404365,-67.58033927404365,-67.58033927404365,-67.58033927404365], "fy":[-22.841676749925423,-22.84167674992542,-22.841676749925416,-22.841676749925423]}, + {"t":1.4810412661329968, "x":4.322404858593497, "y":1.5395034613878265, "heading":0.0, "vx":1.263436340491095, "vy":0.427031063293639, "omega":0.0, "ax":-9.170754915712577, "ay":-3.099644972922595, "alpha":0.0, "fx":[-67.59649742474228,-67.5964974247423,-67.59649742474228,-67.59649742474228], "fy":[-22.847098778181373,-22.84709877818137,-22.847098778181365,-22.847098778181373]}, + {"t":1.515474853280702, "x":4.360472750617299, "y":1.5523700917113636, "heading":0.0, "vx":0.9476543518906592, "vy":0.32029916799156205, "omega":0.0, "ax":-9.172459535786228, "ay":-3.1002169753531352, "alpha":0.0, "fx":[-67.6090619679536,-67.6090619679536,-67.6090619679536,-67.6090619679536], "fy":[-22.85131493717573,-22.85131493717573,-22.85131493717573,-22.85131493717573]}, + {"t":1.5499084404284074, "x":4.387666125456874, "y":1.5615612209129703, "heading":0.0, "vx":0.6318136671063632, "vy":0.2135475765939444, "omega":0.0, "ax":-9.173822940056388, "ay":-3.1006744795963845, "alpha":0.0, "fx":[-67.61911145178385,-67.61911145178384,-67.61911145178385,-67.61911145178385], "fy":[-22.854687144227917,-22.85468714422791,-22.85468714422791,-22.854687144227917]}, + {"t":1.5843420275761126, "x":4.4039831642770535, "y":1.5670762386640549, "heading":0.0, "vx":0.3159260354223132, "vy":0.10678023168409637, "omega":0.0, "ax":-9.17493823885167, "ay":-3.1010487297200524, "alpha":0.0, "fx":[-67.62733218092077,-67.62733218092077,-67.62733218092077,-67.62733218092077], "fy":[-22.857445695487133,-22.85744569548713,-22.85744569548713,-22.857445695487133]}, + {"t":1.618775614723818, "x":4.409422397613525, "y":1.5689146518707275, "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/Spinny Path.traj b/src/main/deploy/choreo/Spinny Path.traj index ae95877b..8b137891 100644 --- a/src/main/deploy/choreo/Spinny Path.traj +++ b/src/main/deploy/choreo/Spinny Path.traj @@ -1,218 +1 @@ -{ - "name":"Spinny Path", - "version":"v2025.0.0", - "snapshot":{ - "waypoints":[ - {"x":0.0, "y":0.0, "heading":-0.9248073966706848, "intervals":41, "split":false, "fixTranslation":true, "fixHeading":true, "overrideIntervals":false}, - {"x":2.328159809112549, "y":1.8797401189804075, "heading":1.9215241981719864, "intervals":34, "split":false, "fixTranslation":true, "fixHeading":true, "overrideIntervals":false}, - {"x":4.332931041717529, "y":1.074251651763916, "heading":0.0, "intervals":20, "split":false, "fixTranslation":true, "fixHeading":true, "overrideIntervals":false}, - {"x":4.744625091552734, "y":2.9537248611450195, "heading":0.0, "intervals":36, "split":false, "fixTranslation":true, "fixHeading":true, "overrideIntervals":false}, - {"x":7.268489360809326, "y":1.4322465658187866, "heading":1.518213955083539, "intervals":47, "split":false, "fixTranslation":true, "fixHeading":true, "overrideIntervals":false}, - {"x":3.079949140548706, "y":3.2222208976745605, "heading":-0.6528468928411459, "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}], - "targetDt":0.05 - }, - "params":{ - "waypoints":[ - {"x":{"exp":"0 m", "val":0.0}, "y":{"exp":"0 m", "val":0.0}, "heading":{"exp":"-0.9248073966706849 rad", "val":-0.9248073966706848}, "intervals":41, "split":false, "fixTranslation":true, "fixHeading":true, "overrideIntervals":false}, - {"x":{"exp":"2.328159809112549 m", "val":2.328159809112549}, "y":{"exp":"1.8797401189804077 m", "val":1.8797401189804075}, "heading":{"exp":"1.9215241981719866 rad", "val":1.9215241981719864}, "intervals":34, "split":false, "fixTranslation":true, "fixHeading":true, "overrideIntervals":false}, - {"x":{"exp":"4.332931041717529 m", "val":4.332931041717529}, "y":{"exp":"1.074251651763916 m", "val":1.074251651763916}, "heading":{"exp":"0 deg", "val":0.0}, "intervals":20, "split":false, "fixTranslation":true, "fixHeading":true, "overrideIntervals":false}, - {"x":{"exp":"4.744625091552734 m", "val":4.744625091552734}, "y":{"exp":"2.9537248611450195 m", "val":2.9537248611450195}, "heading":{"exp":"0 deg", "val":0.0}, "intervals":36, "split":false, "fixTranslation":true, "fixHeading":true, "overrideIntervals":false}, - {"x":{"exp":"7.268489360809326 m", "val":7.268489360809326}, "y":{"exp":"1.4322465658187866 m", "val":1.4322465658187866}, "heading":{"exp":"1.518213955083539 rad", "val":1.518213955083539}, "intervals":47, "split":false, "fixTranslation":true, "fixHeading":true, "overrideIntervals":false}, - {"x":{"exp":"3.079949140548706 m", "val":3.079949140548706}, "y":{"exp":"3.2222208976745605 m", "val":3.2222208976745605}, "heading":{"exp":"-0.6528468928411459 rad", "val":-0.6528468928411459}, "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}], - "targetDt":{ - "exp":"0.05 s", - "val":0.05 - } - }, - "trajectory":{ - "waypoints":[0.0,1.274332519365592,2.145764484380599,2.8603893732440677,4.0683088596114905,5.82457766792859], - "samples":[ - {"t":0.0, "x":0.0, "y":0.0, "heading":-0.9248073966706848, "vx":0.0, "vy":0.0, "omega":0.0, "ax":2.61494475406612, "ay":2.3465933231554645, "alpha":31.936123944941997, "fx":[56.60683718958124,-97.76177325099464,85.40470354906616,149.48625945159793], "fy":[143.77038361918605,119.47764418412524,-128.43495089265798,39.04132921528879]}, - {"t":0.03108128096013637, "x":0.0012630784940898632, "y":0.0011334585773789872, "heading":-0.9248073966706848, "vx":0.08127583259636373, "vy":0.07293512637617505, "omega":0.992615641110481, "ax":2.71156436391712, "ay":2.424331901997177, "alpha":31.53965135871509, "fx":[57.221629290072386,-95.051468775932,89.52713352097282,149.19708655877835], "fy":[143.50076220953565,121.58300894334975,-125.50096568217796,40.03109648445932]}, - {"t":0.06216256192027274, "x":0.005098983471466473, "y":0.0045713838321102575, "heading":-0.8939556310439041, "vx":0.16555472643276517, "vy":0.14828646736277107, "omega":1.9729084063754516, "ax":2.8158834186037365, "ay":2.600207032314328, "alpha":30.911418558866348, "fx":[55.45545380423329,-94.4167231015018,99.57158489372452,148.01285512105758], "fy":[144.15569571942876,121.97686123890392,-117.57708779374948,44.08866944552068]}, - {"t":0.0932438428804091, "x":0.011604772931280328, "y":0.010436277022125653, "heading":-0.8326351105567338, "vx":0.25307599011737714, "vy":0.22910423268865507, "omega":2.93367489147995, "ax":2.9257231401209327, "ay":2.8999964788161257, "alpha":29.945412739827542, "fx":[51.65209724386083,-94.68796188765675,114.11498748235093,145.6818531667247], "fy":[145.5065973858768,121.59499291203548,-103.36755159978462,51.120900424401384]}, - {"t":0.12432512384054548, "x":0.020883890490896537, "y":0.01895789508455227, "heading":-0.7414527370089479, "vx":0.3440112130470483, "vy":0.3192398380301452, "omega":3.864416678313778, "ax":3.0566932132599707, "ay":3.374303775660916, "alpha":28.34950792767227, "fx":[46.604998417871634,-92.74509972523856,130.857870091323,141.74651800004858], "fy":[147.10969031391647,122.7575153894838,-80.86883300709705,60.99704543486274]}, - {"t":0.15540640480068185, "x":0.03305265282289954, "y":0.03051014456074607, "heading":-0.6213417164832403, "vx":0.4390171536173234, "vy":0.42411752172631106, "omega":4.745555699295373, "ax":3.34996895176321, "ay":4.170165518307748, "alpha":24.95656276780108, "fx":[42.69933787566303,-76.62534286631481,146.6840113223019,135.43449336658256], "fy":[148.1128451689905,132.7257390233066,-45.53635824121819,73.6569969693055]}, - {"t":0.18648768576081823, "x":0.04831598041755226, "y":0.04570654632724656, "heading":-0.4738437664814644, "vx":0.5431384798148092, "vy":0.5537316078511069, "omega":5.521237638480677, "ax":4.583978603188131, "ay":5.463060371833101, "alpha":14.701358158047416, "fx":[50.16749073506415,12.603283349794232,151.98826509026122,124.85876757788262], "fy":[145.26881477099843,151.5167208508188,18.18249489128435,89.77918631526924]}, - {"t":0.2175689667209546, "x":0.06741158726565581, "y":0.06555601788872888, "heading":-0.3022366281921667, "vx":0.685614406695753, "vy":0.7235305221702385, "omega":5.978174681886542, "ax":5.450866136186103, "ay":5.684392994824518, "alpha":-7.436625354716101, "fx":[139.96268668383203,115.68024424460958,66.13752600325016,82.06331336606418], "fy":[58.54351561735051,99.54964953405208,137.16836283962016,125.88378020953608]}, - {"t":0.24865024768109095, "x":0.0913542550553758, "y":0.0907899659633194, "heading":-0.11642730127567716, "vx":0.8550343085506462, "vy":0.9002087379302103, "omega":5.747034839841336, "ax":5.490431632038189, "ay":3.5232505481351675, "alpha":-15.536354088472544, "fx":[151.28350403200548,121.18998717468952,25.61401226728378,108.68759528046652], "fy":[-14.281576494319111,92.92417959907344,149.7031531834838,32.68483032200015]}, - {"t":0.27973152864122736, "x":0.12058182145990332, "y":0.12047141776523272, "heading":0.06219790326912379, "vx":1.0256839566984457, "vy":1.0097158781097535, "omega":5.264145053321358, "ax":6.120428062638702, "ay":3.4551193454050613, "alpha":-13.843519055787391, "fx":[151.68515623707574,116.9291765727012,40.71004296849621,144.12589852650294], "fy":[8.21567242930358,97.80255021349426,145.54940466258526,4.41525475698705]}, - {"t":0.3108128096013637, "x":0.15541770029838264, "y":0.15352358281938197, "heading":0.22581427468631704, "vx":1.2159147009096218, "vy":1.1171054132350908, "omega":4.833870748071429, "ax":6.084372044593575, "ay":3.9244979382199303, "alpha":-12.611293956049456, "fx":[149.14366729715036,109.704602167424,46.29266021310698,145.6380263621674], "fy":[27.393860858530527,105.29722434059316,143.03370806426202,15.033409983452517]}, - {"t":0.34189409056150005, "x":0.19614877845849743, "y":0.19014027284910487, "heading":0.37605716953210966, "vx":1.4050247778936342, "vy":1.2390838362803804, "omega":4.441895577352586, "ax":5.671226337412209, "ay":4.580274581103092, "alpha":-12.046451540539776, "fx":[143.73538210602905,97.17068323859712,36.85222649846992,142.4115250430996], "fy":[46.63796373681232,116.27747837443964,144.78030354485742,31.64763750865655]}, - {"t":0.3729753715216364, "x":0.2425580811693879, "y":0.23086496372651777, "heading":0.5141169739673925, "vx":1.581293757075268, "vy":1.3814446374102165, "omega":4.0674764324484025, "ax":4.634735992804347, "ay":5.512481317869242, "alpha":-12.11275394400287, "fx":[133.03891938772287,74.57498657375842,5.806020279533956,129.95839399387313], "fy":[69.68718973979932,131.0822163895278,148.22295043796166,59.41635931100763]}, - {"t":0.4040566524817727, "x":0.2939454008575595, "y":0.27646468796834106, "heading":0.6405393517630545, "vx":1.7253472886436767, "vy":1.5527796180384132, "omega":3.69099652391385, "ax":2.1333997862254153, "ay":6.731460799903517, "alpha":-11.811031882134875, "fx":[109.6223003009751,32.9699293380477,-52.579636082810985,68.04672980565675], "fy":[100.27626117376036,146.3204321452922,138.13787078905426,113.98590363514492]}, - {"t":0.4351379334419091, "x":0.3486018858824787, "y":0.3279785180236365, "heading":0.7552602517457077, "vx":1.791656086799643, "vy":1.7620020424323588, "omega":3.3238945235560875, "ax":-2.2204149368633157, "ay":7.1583328811997555, "alpha":-8.659059045260324, "fx":[26.099788557938847,-28.143511686120068,-89.95318520285721,-72.50919351129092], "fy":[144.24448629800048,146.55370416381766,117.88518590593704,121.66319013457236]}, - {"t":0.46621921440204545, "x":0.40321634058719225, "y":0.3862014380735969, "heading":0.8585711513142131, "vx":1.7226427462989105, "vy":1.984492197919111, "omega":3.0547598765199417, "ax":-3.032110305458699, "ay":6.4310373817846305, "alpha":-9.458529744394642, "fx":[11.28868938652241,-44.4528318105778,-103.39997800898422,-88.07886787778445], "fy":[140.07497498822872,138.41514274112146,100.02461439603502,97.9479654162744]}, - {"t":0.4973004953621818, "x":0.455293704723153, "y":0.4509883366935764, "heading":0.953517001302081, "vx":1.6284008739928235, "vy":2.1843770776474987, "omega":2.760776656064605, "ax":-1.4326079755168093, "ay":5.44543837651613, "alpha":-11.666488233889586, "fx":[42.16897991725105,-28.424615696527844,-89.73959120009731,-30.14383271071527], "fy":[115.6424961139572,128.736407000429,87.13648528177094,71.9262500431698]}, - {"t":0.5283817763223182, "x":0.5052145071826025, "y":0.5215118464188895, "heading":1.039325476217411, "vx":1.58387358300005, "vy":2.3536282777791055, "omega":2.398167257448964, "ax":2.269669688027097, "ay":3.007737334372825, "alpha":-13.320056095289385, "fx":[87.63596202504766,25.50012731515714,-19.950631928849003,74.96983043519573], "fy":[62.296891612243726,102.51761589086108,58.97012456558958,-0.947388439680514]}, - {"t":0.5594630572824546, "x":0.5555396297125089, "y":0.5961184345460125, "heading":1.113863586535582, "vx":1.6544178242603274, "vy":2.4471126069230387, "omega":1.9841628515464944, "ax":3.703152739103408, "ay":1.4255557062560082, "alpha":-11.35521564157955, "fx":[101.33094742603546,53.277258926812586,29.498321952910924,90.25265182893426], "fy":[37.0318574101259,78.88642679635217,14.69676627528839,-24.998479316671336]}, - {"t":0.590544338242591, "x":0.6087497629276724, "y":0.6728664052353985, "heading":1.175533909595164, "vx":1.7695165549827003, "vy":2.491420704353506, "omega":1.6312282038276251, "ax":3.896159992141631, "ay":1.1739221873302377, "alpha":-10.159951320505243, "fx":[99.985711854448,56.659303080007035,40.63754682429565,91.37613973903848], "fy":[34.49139160707217,70.53247552639154,5.140353621838153,-23.190673740379225]}, - {"t":0.6216256192027274, "x":0.6656305390754733, "y":0.7508699835693429, "heading":1.2262345717084293, "vx":1.8906141983640976, "vy":2.527907709683255, "omega":1.3154439022936917, "ax":3.625762093442329, "ay":1.222840463963638, "alpha":-9.12888081370638, "fx":[92.35605649387558,51.383630465310745,38.980846859654235,85.90492816011466], "fy":[35.804203547703686,64.94292863559316,6.075733403703749,-16.225061292862584]}, - {"t":0.6527069001628638, "x":0.726144576693044, "y":0.8300312534207032, "heading":1.2671202532229178, "vx":2.0033075286849917, "vy":2.565915157713134, "omega":1.031706592871281, "ax":3.074089263164675, "ay":1.1941698253949276, "alpha":-7.743471792720209, "fx":[79.36100008369509,42.365802596172834,32.19239088375082,73.83393176572568], "fy":[34.63673208621656,55.666303539649235,7.302930551734037,-9.132312153740443]}, - {"t":0.6837881811230002, "x":0.7898947966999739, "y":0.9103599948646288, "heading":1.2991870157043752, "vx":2.098854160769952, "vy":2.60303148557035, "omega":0.7910295704748541, "ax":2.289388489061926, "ay":0.9676584009352184, "alpha":-5.786731160778284, "fx":[60.43711024918737,30.888698828878,23.11291496295215,55.177490336602425], "fy":[28.466447085109,40.95855783201607,6.275331314269324,-4.008460622905941]}, - {"t":0.7148694620831366, "x":0.8562356998912759, "y":0.9917329490921544, "heading":1.32377322803208, "vx":2.170011287625394, "vy":2.633107548203259, "omega":0.6111705534259088, "ax":1.3776279085802832, "ay":0.5706771328774257, "alpha":-3.430241181559895, "fx":[36.959512456551806,18.38770830401306,13.760773293462034,32.95770243686911], "fy":[17.511007897213595,23.15713780987517,3.3544391825610664,-1.742257469027119]}, - {"t":0.745950743043273, "x":0.924347856391902, "y":1.073848954784328, "heading":1.342769191717672, "vx":2.212829727710496, "vy":2.650844924507742, "omega":0.504554263500837, "ax":0.5329836166622817, "ay":0.11610786495979011, "alpha":-1.1558895142125978, "fx":[13.851495102810738,7.3838433299427395,5.8808502159557285,12.371501542565914], "fy":[4.642233559376165,6.183133551333243,-0.35588572705041194,-1.867281884518065]}, - {"t":0.7770320240034094, "x":0.9933828822282184, "y":1.1562966934354766, "heading":1.3584513845411763, "vx":2.2293955412471287, "vy":2.654453705680241, "omega":0.4686277367507111, "ax":-0.18709599586369813, "ay":-0.4254383889702408, "alpha":1.0303549990264171, "fx":[-6.996159407249158,-1.1778768325885356,0.07812676850110015,-5.7656586702130745], "fy":[-10.148256659621346,-11.4126035419527,-5.611872663562658,-4.347146496890497]}, - {"t":0.8081133049635458, "x":1.0625849797453486, "y":1.2385950183248848, "heading":1.3730169348928378, "vx":2.2235803580331743, "vy":2.6412305355814296, "omega":0.5006524899641289, "ax":-0.7996690669768187, "ay":-1.3189610007625985, "alpha":3.654572897679105, "fx":[-26.925323802163817,-6.295493117672556,-2.17736460753113,-23.84770030681104], "fy":[-32.175469041181344,-36.91624086166934,-16.640662233441166,-11.986810488207524]}, - {"t":0.8391945859236822, "x":1.131310447028631, "y":1.320050758165094, "heading":1.3885778555968045, "vx":2.198725619087336, "vy":2.600235538141264, "omega":0.6142412969861969, "ax":-0.9026734404418012, "ay":-2.8702408512251765, "alpha":6.583924784572488, "fx":[-38.36433091585496,-0.0221044438800936,8.574206398089922,-37.06504089380705], "fy":[-65.38875182015592,-73.70817739025836,-41.52478005213204,-32.02869492302454]}, - {"t":0.8702758668838186, "x":1.1992136437046912, "y":1.399483017104426, "heading":1.407669261925751, "vx":2.170669372269709, "vy":2.511024775821072, "omega":0.8188781130359066, "ax":0.2709409799623827, "ay":-4.879125781262469, "alpha":8.018072722684376, "fx":[-26.097690706459066,25.521477594695657,45.68299050354959,-25.033302068333175], "fy":[-104.03712663978467,-107.11740499442853,-76.76678050456053,-73.56335874340006]}, - {"t":0.901357147843955, "x":1.266811699064296, "y":1.4751721536236144, "heading":1.4331210426291263, "vx":2.179090564991534, "vy":2.359375296573808, "omega":1.0680900840884664, "ax":2.146311032123311, "ay":-6.212011968013895, "alpha":6.633008015776154, "fx":[5.041245203118744,53.87641283675888,80.55065680214155,19.54757690593271], "fy":[-129.8197166492294,-121.62223131112108,-95.77809077893428,-113.0155039469286]}, - {"t":0.9324384288040914, "x":1.3355773427740592, "y":1.545504015368865, "heading":1.4663186506234156, "vx":2.2458006612087997, "vy":2.1662980072682387, "omega":1.2742524698376398, "ax":3.3246678537408414, "ay":-6.689209711129916, "alpha":4.610279500650575, "fx":[33.27492234849207,69.33690241809556,91.61416337130046,52.092003810063375], "fy":[-137.6906359449735,-125.3813027450953,-106.3061728726492,-126.21205751547508]}, - {"t":0.9635197097642278, "x":1.4069855951896884, "y":1.609604290146492, "heading":1.505924049652587, "vx":2.3491355968700525, "vy":1.9583888008353376, "omega":1.417545862302117, "ax":3.8780233275296423, "ay":-6.850622362483448, "alpha":3.042964953773428, "fx":[52.25072473752846,76.491205813637,91.94683800582722,66.62622373302342], "fy":[-137.54784275447446,-126.53724239395538,-114.24671302155814,-129.21711142168567]}, - {"t":0.9946009907243644, "x":1.4818729132018356, "y":1.667164514439559, "heading":1.549983190872678, "vx":2.4696695294829643, "vy":1.7454626824351964, "omega":1.5121251109821972, "ax":4.147318616848652, "ay":-6.918015783128629, "alpha":1.8063072654830812, "fx":[65.05901877075648,79.70545248726128,88.78188002361641,73.7201904034488], "fy":[-135.0117304946406,-127.2628360939382,-120.48963646387786,-129.7777502879771]}, - {"t":1.0256822716845009, "x":1.5606366560608358, "y":1.7180741696497956, "heading":1.596981976293993, "vx":2.598573504644442, "vy":1.5304418901931178, "omega":1.5682674546010125, "ax":4.281847793214306, "ay":-6.954894066224649, "alpha":0.7261759256117325, "fx":[74.5739318325862,80.62158073623958,84.08755631994893,77.95047041488671], "fy":[-131.7207606205126,-128.20728772059522,-125.78278094642326,-129.56336229092068]}, - {"t":1.056763552644637, "x":1.6434718802767785, "y":1.762282890144662, "heading":1.645725737671085, "vx":2.7316588189338753, "vy":1.314274873672804, "omega":1.5908379325714377, "ax":4.3372814874967185, "ay":-6.982989892057038, "alpha":-0.3198231325608295, "fx":[82.41843356307945,79.65381894821562,78.26363984804875,81.0046184863131], "fy":[-128.02057399632838,-129.72697994526055,-130.62997566360698,-128.9782255175259]}, - {"t":1.0878448336047737, "x":1.730470342287897, "y":1.799759291934288, "heading":1.6951710184153803, "vx":2.8664670834499586, "vy":1.097234602895987, "omega":1.5808974199307635, "ax":4.3293981487286795, "ay":-7.0124339682499635, "alpha":-1.4322307135571557, "fx":[89.50990957897346,76.5122639054745,71.18173633952966,83.5525402190327], "fy":[-123.86451405103604,-132.1827113647682,-135.33750856353802,-128.15247386036094]}, - {"t":1.11892611456491, "x":1.8216550100101, "y":1.8304755819218437, "heading":1.744307335293403, "vx":3.001030323698889, "vy":0.8792791725144059, "omega":1.536381854722957, "ax":4.112561927526401, "ay":-7.107023584235657, "alpha":-3.310753949701349, "fx":[97.87874523265616,64.95073582289828,56.7584408939565,85.10356613706504], "fy":[-117.82451562135954,-138.5410192928283,-142.48398949900744,-127.69563889565602]}, - {"t":1.1500073955250465, "x":1.9169173387245215, "y":1.8543718489796168, "heading":1.7920600513821026, "vx":3.128854016434297, "vy":0.6583837757024621, "omega":1.4334793810224082, "ax":3.0100993664929763, "ay":-7.300903858155857, "alpha":-8.444398465982367, "fx":[110.87266011096996,8.93346377253813,20.192278454371976,83.01383952685154], "fy":[-105.98246082736782,-152.88181437404322,-152.49063090276434,-129.5544589388758]}, - {"t":1.181088676485183, "x":2.0156200767581685, "y":1.871308755512178, "heading":1.8366144267742224, "vx":3.2224117605621942, "vy":0.43146233162417624, "omega":1.1710166597618656, "ax":2.9718531108853363, "ay":-7.345202336479128, "alpha":-8.312034676441762, "fx":[108.40716476772478,6.6933143897726985,21.58486757388951,83.4933065478858], "fy":[-108.8767613657585,-153.37315668220617,-152.49332151150313,-129.4481111455978]}, - {"t":1.212169957445319, "x":2.117212235501475, "y":1.881171255701002, "heading":1.8730111245852816, "vx":3.3147807620738767, "vy":0.20316403409501832, "omega":0.912667974632983, "ax":2.816104838266677, "ay":-7.397942615843062, "alpha":-8.509642063391329, "fx":[105.86681081548794,-0.2105050397135023,20.037428398320323,82.94584108340685], "fy":[-111.57576061053328,-153.75400836015268,-152.83412370272353,-129.93487984917124]}, - {"t":1.2432512384054557, "x":2.2216001111328074, "y":1.8839124775929423, "heading":1.901378014328168, "vx":3.402308907765242, "vy":-0.02677349887496609, "omega":0.6481773987905225, "ax":1.6802075312570928, "ay":-6.915206690758728, "alpha":-15.32503410327211, "fx":[122.34332004360006,-73.72806082130236,-7.148517634368029,83.01647398784581], "fy":[-93.09015403586778,-135.09807559828715,-154.11925800139332,-130.02634566938443]}, - {"t":1.274332519365592, "x":2.328159809112549, "y":1.8797401189804075, "heading":1.9215241981719864, "vx":3.454531910115582, "vy":-0.241706980927853, "omega":0.1718557081030505, "ax":0.8617497127299344, "ay":-7.780160162023584, "alpha":-9.331416192605046, "fx":[68.28771610166133,-55.411877319031525,-9.938686596996696,60.90816053110227], "fy":[-137.53686995986527,-143.49743987065642,-153.82794493245478,-141.55425132102678]}, - {"t":1.299962871277798, "x":2.4169837257908022, "y":1.870989632279908, "heading":1.925928920448789, "vx":3.476618858513092, "vy":-0.4411152238138438, "omega":-0.06731177275267514, "ax":-0.0006615206803847518, "ay":-8.1294542928111, "alpha":-5.511055041856251, "fx":[24.010238319994187,-43.839961107652854,-14.76855342643372,34.54926546992404], "fy":[-151.64834128964443,-147.36129698375132,-153.28542041884634,-149.9999509535466]}, - {"t":1.325593223190004, "x":2.5060904733177014, "y":1.857013513873711, "heading":1.9242036960253035, "vx":3.476601903505257, "vy":-0.6494759981927869, "omega":-0.2085620528829885, "ax":-1.1130723455094236, "ay":-8.21237207363081, "alpha":-1.2432437309966848, "fx":[-17.502795184150305,-30.323310149790935,-23.40079370461927,-11.23840489554164], "fy":[-152.60027335057256,-150.62765819281162,-151.93421259683305,-153.2760780509421]}, - {"t":1.35122357510221, "x":2.5948314066371267, "y":1.837669800531012, "heading":1.9188581772143805, "vx":3.4480734675861053, "vy":-0.8599619844739181, "omega":-0.24042682722107764, "ax":-1.798811768276911, "ay":-8.082381987634676, "alpha":1.0507758458671457, "fx":[-35.06467368124526,-25.28507131808867,-31.42218652116713,-41.49843476759873], "fy":[-149.48670862308776,-151.40246710327975,-150.16418561082102,-147.7541553626893]}, - {"t":1.3768539270144162, "x":2.6826159098688516, "y":1.8129739535020553, "heading":1.912695953023569, "vx":3.40196928894135, "vy":-1.0671162791058708, "omega":-0.21349507251065664, "ax":-2.1277245849838295, "ay":-7.982457503169781, "alpha":1.4762084184285182, "fx":[-41.44945342682681,-28.18243875559588,-37.158979392723424,-50.847987477135845], "fy":[-147.6409016406559,-150.65884660011608,-148.55469114428942,-144.54987210978146]}, - {"t":1.4024842789266223, "x":2.7691107129058063, "y":1.7830014899448725, "heading":1.9072239991835989, "vx":3.347434959055962, "vy":-1.2717094740363422, "omega":-0.17565933125057254, "ax":-2.503643242685177, "ay":-7.851255790517122, "alpha":1.6524782893763714, "fx":[-48.14414241380318,-33.8726451896119,-44.46014253970982,-59.01299042093447], "fy":[-145.29949196224786,-149.1597956995059,-146.15463230480353,-141.0699190412752]}, - {"t":1.4281146308388284, "x":2.854084308585428, "y":1.7478283249853162, "heading":1.902721788706984, "vx":3.2832657016833244, "vy":-1.472939922900042, "omega":-0.1333057311665758, "ax":-2.962968683434141, "ay":-7.665168608527423, "alpha":1.5948273728211886, "fx":[-55.97673060751553,-42.94907450104666,-53.799414373521216,-66.79520433618522], "fy":[-142.021125191918,-146.33694783241978,-142.46881616960155,-137.07012267464032]}, - {"t":1.4537449827510345, "x":2.9372623547446643, "y":1.707558674530851, "heading":1.8993051159052703, "vx":3.2073237716220615, "vy":-1.6694008918029948, "omega":-0.09242974436194965, "ax":-3.5117126091958384, "ay":-7.397502458150651, "alpha":1.2660263903182452, "fx":[-65.31122372175037,-55.8157356524793,-64.8977334099518,-74.15107100591983], "fy":[-137.27514799604694,-141.2232476234553,-137.05558616451978,-132.51218033544336]}, - {"t":1.4793753346632406, "x":3.018313743470242, "y":1.6623415772528318, "heading":1.8969361090301189, "vx":3.1173173416338407, "vy":-1.8590014830768056, "omega":-0.05998104244795302, "ax":-4.100864765282983, "ay":-7.034503354410177, "alpha":0.7384534418828331, "fx":[-75.7205139107988,-70.83977569825643,-76.27140152724216,-80.99317759398822], "fy":[-130.66024163327492,-133.20258814818988,-130.0014550829096,-127.30799965716676]}, - {"t":1.5050056865754466, "x":3.096864724294479, "y":1.6123841798647789, "heading":1.8953987738041167, "vx":3.012210734555272, "vy":-2.0392982795779324, "omega":-0.04105422086171618, "ax":-4.633604121701762, "ay":-6.597215824621809, "alpha":0.20195672377041532, "fx":[-85.66266819806494,-84.5257847459608,-85.99274649326001,-87.11326273135433], "fy":[-122.37867824801786,-123.0903872448322,-122.01171951365674,-121.29374100807378]}, - {"t":1.5306360384876527, "x":3.1725468035700453, "y":1.5579493424892596, "heading":1.8943465396759491, "vx":2.893449830294207, "vy":-2.2083872428037643, "omega":-0.03587799896044424, "ax":-5.238597709542871, "ay":-5.930580691640379, "alpha":-0.8700085746886945, "fx":[-98.20191857193146,-101.88158548602593,-96.04169221168934,-91.99203083496548], "fy":[-108.42149528081812,-105.61257834180864,-111.25855816068662,-114.09223049893896]}, - {"t":1.5562663903998588, "x":3.2449862844130153, "y":1.4993996567707095, "heading":1.8934269739366871, "vx":2.7591827274721465, "vy":-2.3603901129742417, "omega":-0.058176624896352315, "ax":-6.716375116434224, "ay":-3.1031898495727934, "alpha":-7.270022592033032, "fx":[-137.51416148796088,-141.75693117755998,-119.1558076537716,-99.17589930708635], "fy":[-18.09604170030804,-29.963319794638483,-82.99805326329958,-98.85171481690304]}, - {"t":1.581896742312065, "x":3.3134990651327665, "y":1.4378827616394934, "heading":1.8919358865675295, "vx":2.587039669663553, "vy":-2.4399259608691786, "omega":-0.2445098623398476, "ax":-6.168090158963229, "ay":1.9055470696688623, "alpha":-14.3223215461077, "fx":[-69.14459251762754,-136.41496778931312,-140.7821368081128,-110.63976658221418], "fy":[128.00415887991613,58.45800306022216,-40.06700332576324,-5.216987316748402]}, - {"t":1.607527094224271, "x":3.377779846991374, "y":1.3759724917913407, "heading":1.8856690127497544, "vx":2.4289493482631106, "vy":-2.3910861188882926, "omega":-0.6115960037663597, "ax":-4.198228828507449, "ay":5.04151511103512, "alpha":-15.878128438938658, "fx":[-36.9154002119136,-120.11875566205865,-147.98322152431984,-6.0210000481677035], "fy":[145.11660164321458,90.84187683184524,2.0416496135202458,135.5156434577899]}, - {"t":1.633157446136477, "x":3.438655733946586, "y":1.3163440364080217, "heading":1.8699935919451232, "vx":2.321347265980496, "vy":-2.2618703124217574, "omega":-1.0185580233635652, "ax":-3.4961324771678566, "ay":5.8480485902483625, "alpha":-15.556822050475562, "fx":[-23.63822092091336,-108.4156440013182,-145.56802149987257,18.60042345369196], "fy":[149.5106914664936,106.15498639838796,33.56419141283679,144.04035467660233]}, - {"t":1.6587877980486831, "x":3.497004350457367, "y":1.260292339562762, "heading":1.843887591363314, "vx":2.231740160258991, "vy":-2.1119827690540114, "omega":-1.4172848471528212, "ax":-3.0260095954402404, "ay":6.2949037823213585, "alpha":-15.001339124912194, "fx":[-14.314844819820026,-99.54943318185848,-140.372168519876,30.045447614578], "fy":[151.53698029013083,115.40173853172072,54.08995245838453,145.3481601443887]}, - {"t":1.6844181499608892, "x":3.5532107206867876, "y":1.2082290861269358, "heading":1.80756208197095, "vx":2.1541824694381453, "vy":-1.9506421698596377, "omega":-1.8017744480786664, "ax":-2.6540357537746204, "ay":6.5916732370249465, "alpha":-14.484029486785316, "fx":[-6.672512060272723,-92.0578153189212,-134.85183748466957,36.94996393820945], "fy":[152.57518762019308,122.01475945492616,68.41434328317692,145.35959642640802]}, - {"t":1.710048501873095, "x":3.6075514375937545, "y":1.160398525170313, "heading":1.761381968800273, "vx":2.0861585990813247, "vy":-1.7816952651044176, "omega":-2.1730052209317443, "ax":-2.328950703200746, "ay":6.794999698693534, "alpha":-14.133714388114385, "fx":[0.4443690369698921,-85.32017167747685,-130.01631026878704,42.344813210557184], "fy":[153.05901648718825,127.19187414652016,78.3632057551686,144.81384128792948]}, - {"t":1.7356788537853014, "x":3.660255455378152, "y":1.116964916932154, "heading":1.7056870802807311, "vx":2.0264667729721095, "vy":-1.607537031583568, "omega":-2.5352572945257266, "ax":-2.022465447726874, "ay":6.924190942046057, "alpha":-14.03894402952646, "fx":[7.757864586716288,-79.04757815920158,-126.46388771129376,47.91318119259042], "fy":[153.10382000005623,131.4521599313291,84.79804512369628,143.6454334592266]}, - {"t":1.7613092056975077, "x":3.711530218024561, "y":1.078037479336417, "heading":1.6407075436340497, "vx":1.974630271816592, "vy":-1.4300675810316177, "omega":-2.8950803704782544, "ax":-1.7127460252062274, "ay":6.984419256506546, "alpha":-14.269276092052632, "fx":[15.812738866519927,-73.04931855561775,-124.53291664246107,54.87556881607991], "fy":[152.66290530098289,135.08185873997792,88.23039836261385,141.48649147248227]}, - {"t":1.7869395576097136, "x":3.761578122562256, "y":1.0436784286517589, "heading":1.5665056149245715, "vx":1.9307319884543244, "vy":-1.251054457584966, "omega":-3.260806938249992, "ax":-1.3777914700438385, "ay":6.971559759711456, "alpha":-14.88473522473283, "fx":[25.057682033399196,-67.12986041966154,-124.31779153290262,64.31215548655709], "fy":[151.5609085322573,138.2794027086967,89.03039781920823,137.63821041734013]}, - {"t":1.8125699095219197, "x":3.810610916974641, "y":1.013903323520165, "heading":1.482929985579461, "vx":1.895418708215465, "vy":-1.0723709275665865, "omega":-3.642307940179904, "ax":-0.9928780580608912, "ay":6.871719745523754, "alpha":-15.93817155055072, "fx":[35.8232131909039,-61.04611573595078,-125.62158427358874,77.28413725302032], "fy":[149.4960034779548,141.20014077423613,87.60487216801289,130.81095608616008]}, - {"t":1.8382002614341255, "x":3.85886504727264, "y":0.9886751469454356, "heading":1.3895763513000277, "vx":1.8699708941814568, "vy":-0.8962463322467573, "omega":-4.050808885857631, "ax":-0.6158556517085702, "ay":6.748984522449473, "alpha":-16.866220143624798, "fx":[46.66802582634991,-54.53825501285697,-126.6583534842998,88.90106914702233], "fy":[146.5604800176244,143.9418910881319,86.48013916156279,123.03625503191738]}, - {"t":1.863830613346332, "x":3.906590776967108, "y":0.9679207924283424, "heading":1.2857526940264052, "vx":1.854186297101045, "vy":-0.7232674838863452, "omega":-4.483096043567474, "ax":-2.0942043634081964, "ay":7.714369906952109, "alpha":-7.142643002219327, "fx":[9.887737745074675,-50.58545019925583,-94.7755693345062,-19.682131087499094], "fy":[153.46456411963226,145.37885772860486,120.9194819445846,151.77933387344615]}, - {"t":1.889460965258538, "x":3.953426367206626, "y":0.9519170347086626, "heading":1.170849364773552, "vx":1.8005111022908151, "vy":-0.5255454683902301, "omega":-4.666164497297611, "ax":-2.732262444216831, "ay":7.817900690224327, "alpha":-2.0284850248858803, "fx":[-35.018384544066215,-51.475868504794214,-66.07408220074815,-49.859524717527954], "fy":[149.80703212566223,145.05351099395313,138.92447852490707,145.42760469281754]}, - {"t":1.915091317170744, "x":3.99867666837154, "y":0.9410149672860236, "heading":1.051253926627572, "vx":1.7304822543290337, "vy":-0.3251699224851017, "omega":-4.718155282334076, "ax":-2.420658625211065, "ay":7.939075352558145, "alpha":-1.424781085780901, "fx":[-33.67436867886564,-44.602690909531646,-55.821189618435085,-45.24350701780501], "fy":[150.2224442691845,147.3993249190551,143.47726357563238,147.0911819564558]}, - {"t":1.94072166908295, "x":4.0422344541210835, "y":0.9352883963425054, "heading":0.9303259463649156, "vx":1.668439921905557, "vy":-0.12168862734151474, "omega":-4.754672922960496, "ax":-1.8979127589915756, "ay":8.066784622056403, "alpha":-2.233454261166587, "fx":[-17.239081564870702,-33.91798784330351,-52.46871007148061,-36.98678100851305], "fy":[153.0623167019891,150.31946179945527,144.83151153799935,149.43864903947107]}, - {"t":1.966352020995156, "x":4.0843737728416105, "y":0.9348190696645688, "heading":0.8084620061220005, "vx":1.619795749993937, "vy":0.08506590132176327, "omega":-4.811917141654012, "ax":-2.148918387592569, "ay":8.03783668727108, "alpha":0.10443353678360956, "fx":[-40.59890414690157,-39.99648856664844,-39.00302843473926,-39.610644351668974], "fy":[148.66351617497915,148.82287558580686,149.0886693288377,148.932183396916]}, - {"t":1.9919823729073625, "x":4.125183879643949, "y":0.9396394261503048, "heading":0.6851308764090314, "vx":1.5647182154893289, "vy":0.29107848422936183, "omega":-4.809240473354812, "ax":-2.4913676717985167, "ay":7.896938626114446, "alpha":2.718139096317511, "fx":[-64.17607188452983,-55.77925019397579,-25.631232638209543,-38.99389335149331], "fy":[140.20918887612325,143.64550738130953,151.99820846508382,149.21548420905052]}, - {"t":2.0176127248195685, "x":4.164469849829125, "y":0.9496936786136748, "heading":0.561868350646523, "vx":1.500863585318439, "vy":0.4934798002457684, "omega":-4.739573611769869, "ax":-2.7521001642848315, "ay":7.707341587897527, "alpha":4.986820248346361, "fx":[-77.87134715500524,-75.80249578169996,-15.039419116739122,-35.18433491809028], "fy":[133.1842135182037,134.17391109347017,153.42883002197138,150.23456893050667]}, - {"t":2.043243076731774, "x":4.202033563837085, "y":0.9648732734706212, "heading":0.4403914110630556, "vx":1.430326289610179, "vy":0.6910216774511634, "omega":-4.611759653881836, "ax":-2.9331822191279753, "ay":7.494703144197883, "alpha":7.088731513992878, "fx":[-84.745639452214,-95.7452354909787,-7.142591859665599,-29.680137447895124], "fy":[128.99451174368374,120.80098721372026,154.00413963001284,151.4679279599158]}, - {"t":2.0688734286439807, "x":4.23772990437958, "y":0.9850460934725932, "heading":0.32219038819955037, "vx":1.3551477971113033, "vy":0.8831135565144727, "omega":-4.4300729705670525, "ax":-3.0305561776910173, "ay":7.291155465028726, "alpha":8.91054154257219, "fx":[-87.43815217272065,-111.82071320548869,-1.995125496382259,-23.273855218180476], "fy":[127.24277358674392,106.17651958020475,154.14951080256265,152.61832212353684]}, - {"t":2.094503780556187, "x":4.271467410499076, "y":1.010075439178796, "heading":0.20864605896716457, "vx":1.2774735757873723, "vy":1.0699884369297636, "omega":-4.201692655102596, "ax":-3.0606553762131674, "ay":7.127812959956922, "alpha":10.253479386599953, "fx":[-87.59476537541843,-122.89862184062244,0.1611099465366113,-16.425558243376855], "fy":[127.1791584145615,93.23198121986806,154.1427324761083,153.5315344667506]}, - {"t":2.120134132468393, "x":4.30320421268495, "y":1.0398408027677033, "heading":0.10095519758995342, "vx":1.1990279014130434, "vy":1.252676791457843, "omega":-3.938892370099488, "ax":-3.058776634002924, "ay":7.015526247270848, "alpha":11.05135780775224, "fx":[-86.20433592670832,-129.86363052797154,-1.1288759855157344,-9.421800819812969], "fy":[128.15957008645807,83.36176495147672,154.10625379325094,154.1387197766167]}, - {"t":2.145764484380599, "x":4.332931041717529, "y":1.074251651763916, "heading":0.0, "vx":1.1206303798627153, "vy":1.4324871980247134, "omega":-3.655642180379092, "ax":-3.2204980421739333, "ay":7.10923120764891, "alpha":9.601584925395285, "fx":[-81.74816617986342,-126.48079516906496,-21.08032586282212,-9.29097173683182], "fy":[131.11011350941567,88.59524384337587,152.8025310325489,154.2008333269519]}, - {"t":2.1814957288237724, "x":4.3709167196747645, "y":1.1299744573349877, "heading":-0.13062064434390053, "vx":1.0055579770890373, "vy":1.6865088761082532, "omega":-3.3125656023679046, "ax":-3.2704644227733644, "ay":7.119547401698124, "alpha":9.145099577158916, "fx":[-76.3598296554389,-126.2093558920318,-36.384307225784,-3.3486753811783103], "fy":[134.29979926050132,88.95879992285855,149.80149066964148,154.41293804400925]}, - {"t":2.217226973266946, "x":4.404758820895408, "y":1.194780359034597, "heading":-0.24898273561615591, "vx":0.8887002133562203, "vy":1.9408991646430889, "omega":-2.9857998139192783, "ax":-3.351640960152188, "ay":7.091987939097884, "alpha":8.931497969548408, "fx":[-71.29530850575634,-125.7547738945313,-53.52384895575542,2.25755590028775], "fy":[137.0297735086844,89.56497246070201,144.44463912702895,154.3918173354687]}, - {"t":2.2529582177101193, "x":4.434373628866375, "y":1.2686583494340589, "heading":-0.3556690786256872, "vx":0.7689419109232702, "vy":2.1943047192830325, "omega":-2.6666662767256373, "ax":-3.4519916027808897, "ay":7.01623273522901, "alpha":9.08948371508152, "fx":[-66.57061696035838,-125.35228441034482,-71.58804162102902,7.759789124901695], "fy":[139.351927700799,90.07527628913992,136.23378947180296,154.15765742590494]}, - {"t":2.2886894621532927, "x":4.459645263730987, "y":1.3515424764883814, "heading":-0.45095238320773784, "vx":0.6455979551485245, "vy":2.4450034462156953, "omega":-2.341887712239816, "ax":-3.560910789867332, "ay":6.881603083717162, "alpha":9.704702966359122, "fx":[-62.20379806531772,-125.2292127567288,-89.87914121926829,13.491393441623938], "fy":[141.30754131331784,90.16874737702156,124.6850640179142,153.68285655818346]}, - {"t":2.324420706596466, "x":4.4804401358093235, "y":1.4432984387288386, "heading":-0.5346309455122427, "vx":0.5183621812754413, "vy":2.6908916881608884, "omega":-1.9951265983004487, "ax":-3.6723471620400887, "ay":6.668180740167427, "alpha":10.865586002136563, "fx":[-58.22564204694464,-125.64888728004868,-108.16811797350228,19.965790759269503], "fy":[142.92212564153647,89.46189682833364,108.79295279941208,152.8551994082421]}, - {"t":2.3601519510396396, "x":4.496617578725014, "y":1.5437040533654895, "heading":-0.6059193016911929, "vx":0.38714464714839303, "vy":2.9291540841790713, "omega":-1.6068856888397844, "ax":-3.7761980525600705, "ay":6.344279060265404, "alpha":12.683308141715097, "fx":[-54.68811519268061,-126.76773989078144,-125.97230754165024,27.657201307041817], "fy":[144.19677621614008,87.66019746365305,86.73227262058356,151.44570071656656]}, - {"t":2.395883195482813, "x":4.508040161504111, "y":1.6524163137432175, "heading":-0.6633353270313643, "vx":0.2522163914665339, "vy":3.1558430700971205, "omega":-1.1536953052800716, "ax":-3.80470972354755, "ay":6.09643135135969, "alpha":14.106888725976653, "fx":[-51.8262941243796,-126.67246038361714,-135.5449381366594,32.16035864646523], "fy":[145.01478773122983,87.36327003741164,69.1540452361997,150.14030295469547]}, - {"t":2.4316144399259865, "x":4.514623389060778, "y":1.769070237399189, "heading":-0.704558295997268, "vx":0.11626937829913792, "vy":3.3736761489435794, "omega":-0.6496386158795535, "ax":-3.822262047268331, "ay":6.007832650679503, "alpha":14.300234434681888, "fx":[-50.97207714450283,-125.19094505963058,-136.34578763768647,29.325059283803817], "fy":[144.60079298652204,88.16167562192422,62.84879477619367,149.49704203890306]}, - {"t":2.46734568436916, "x":4.516337855941212, "y":1.8934510500956212, "heading":-0.7277706921809851, "vx":-0.02030480123767103, "vy":3.5883434859586867, "omega":-0.13867344369925017, "ax":-5.499654518074204, "ay":0.8224472907679969, "alpha":5.8910613795736895, "fx":[-99.8380722825798,-115.94710185794906,-104.12994770262917,-87.54328209192357], "fy":[47.564539289177056,11.198042454137752,-20.019460971978887,22.190354107083433]}, - {"t":2.5030769288123333, "x":4.512101575635969, "y":2.0221920465433305, "heading":-0.7327256668955797, "vx":-0.21681430117598316, "vy":3.617730551146744, "omega":0.07182151048403536, "ax":4.6503957837606364, "ay":-5.50289511868467, "alpha":13.479635849003978, "fx":[143.06674761220236,5.245984529709185,65.96018464441674,130.2656060409297], "fy":[-41.56319048763457,-150.17068945918115,-137.2977323488335,-78.6668812574605]}, - {"t":2.538808173255507, "x":4.507323161748245, "y":2.1479452280342697, "heading":-0.7301593949481967, "vx":-0.05064987266892914, "vy":3.421105260515876, "omega":0.5534656740097591, "ax":4.76046973129027, "ay":-5.580252382849856, "alpha":13.266480704630418, "fx":[145.5498713388629,8.229460444291195,67.49969313016481,131.4146565385146], "fy":[-43.83218730402072,-152.36561898279152,-137.925670339587,-79.30626191418071]}, - {"t":2.57453941769868, "x":4.508552276579104, "y":2.266623361348054, "heading":-0.7103833776592483, "vx":0.11944763496413129, "vy":3.2217158985696672, "omega":1.0274935389675512, "ax":4.845626401188626, "ay":-5.583517227635886, "alpha":13.051345444843744, "fx":[146.1304439950679,10.808887915629256,69.5857085867429,132.4777283138228], "fy":[-45.08486443750705,-152.9466405897429,-137.31945898308769,-78.32066035074986]}, - {"t":2.6102706621418537, "x":4.5159135477240655, "y":2.378174980481467, "heading":-0.6736697548546176, "vx":0.2925878963852964, "vy":3.02220987965634, "omega":1.4938343533695602, "ax":4.932331111120588, "ay":-5.524454806509006, "alpha":13.042394245725612, "fx":[146.80255283639113,12.0342999275174,72.33690814286817,134.25278645392535], "fy":[-44.32616134512369,-153.22274504933395,-136.10638076939566,-75.64052054078591]}, - {"t":2.646001906585027, "x":4.529516684770761, "y":2.4826357044263796, "heading":-0.6202931944167599, "vx":0.468826224991415, "vy":2.8248142345497027, "omega":1.9598553302878192, "ax":5.025273526981095, "ay":-5.382815606258374, "alpha":13.383668968583056, "fx":[148.22375211253078,11.310756939771048,75.7747035535243,137.0032524611492], "fy":[-40.15740461112511,-153.49815634709125,-134.35495035966085,-70.7915313185931]}, - {"t":2.6817331510282005, "x":4.54947636742275, "y":2.5801336532534025, "heading":-0.5502651245369896, "vx":0.6483855017777844, "vy":2.6324795343299563, "omega":2.4380704777507742, "ax":5.12838652131716, "ay":-5.343403621999283, "alpha":13.012339533346877, "fx":[147.38916861990143,13.519456799771667,79.97830518985343,139.0649699818192], "fy":[-43.60524177009096,-153.47620832204578,-131.9830138189358,-66.81762363561026]}, - {"t":2.717464395471374, "x":4.575917749791013, "y":2.670784402962292, "heading":-0.4631498323267922, "vx":0.8316291341700432, "vy":2.4415530733537625, "omega":2.90301756239436, "ax":5.015837100190315, "ay":-6.181944184010393, "alpha":7.953021820592874, "fx":[120.91080275996606,37.34236516433263,83.3258186620604,130.03435249254093], "fy":[-95.35727778755648,-149.62501861377157,-129.9381597821367,-83.0874245214973]}, - {"t":2.7531956399145474, "x":4.608834808029518, "y":2.7540778211031687, "heading":-0.359421402182054, "vx":1.0108512356840813, "vy":2.2206645145808332, "omega":3.187188929127856, "ax":4.832443542636976, "ay":-6.590353549949038, "alpha":5.19889720722066, "fx":[100.5013253248108,52.58870051002267,85.43894867037136,119.49710268168344], "fy":[-116.92461419057886,-145.06788485265736,-128.5914766427424,-97.68213812264564]}, - {"t":2.788926884357721, "x":4.6480386237076825, "y":2.829217903579405, "heading":-0.24553917546881068, "vx":1.1835204571638775, "vy":1.9851829809206687, "omega":3.372951996073988, "ax":4.698549216068677, "ay":-6.794872933609915, "alpha":3.52436281057651, "fx":[89.65545130233298,62.378801307857934,86.49013418321549,109.58172752668966], "fy":[-125.57266048311688,-141.1999223954885,-127.91451182332558,-108.73145120336042]}, - {"t":2.8246581288008943, "x":4.69332665264157, "y":2.8958133806337436, "heading":-0.12501940320200147, "vx":1.351405467731508, "vy":1.7423937151695503, "omega":3.498881865165127, "ax":4.716829825158124, "ay":-6.8087114066837175, "alpha":3.011756736533981, "fx":[86.57255890988066,66.86497850934803,88.90795197957647,107.11499868750984], "fy":[-127.78579983291289,-139.17703612052333,-126.27761528966153,-111.20335945528542]}, - {"t":2.8603893732440677, "x":4.744625091552734, "y":2.9537248611450195, "heading":0.0, "vx":1.5199436672110835, "vy":1.499109983554312, "omega":3.6064956813215967, "ax":4.898096586319709, "ay":-6.670624318418758, "alpha":3.184890349279245, "fx":[87.47094941946855,70.07647572918601,94.1334516040538,111.20930313454625], "fy":[-127.14475355386249,-137.57472185337923,-122.41542911672472,-107.07830997904252]}, - {"t":2.8939426923098295, "x":4.7983814467148935, "y":3.000269998191379, "heading":0.1210099003046749, "vx":1.6842910647867866, "vy":1.2752883974305789, "omega":3.713359323400428, "ax":4.754676761860143, "ay":-6.816861909248109, "alpha":1.9451056495547896, "fx":[84.00927319792407,75.88341004044597,91.75785377962356,100.6139549147006], "fy":[-129.44296325908203,-134.4190131886291,-124.1478690792403,-117.0378196054224]}, - {"t":2.9274960113755912, "x":4.8575714697178025, "y":3.0392228591607657, "heading":0.2456054304885502, "vx":1.8438262512320425, "vy":1.04656005476234, "omega":3.778624073876556, "ax":4.446463608029986, "ay":-7.044738598204686, "alpha":-0.22349529347184036, "fx":[83.04843830207658,83.73611489571373,81.65514136615519,80.9899012277801], "fy":[-130.054714476616,-129.6063463769145,-130.92514384504946,-131.34438856520882]}, - {"t":2.961049330441353, "x":4.921940930662816, "y":3.0703728504074466, "heading":0.3723908096688983, "vx":1.99301986338657, "vy":0.8101856928418918, "omega":3.7711250649849983, "ax":3.970483839424016, "ay":-7.253739544500005, "alpha":-3.1878362275691887, "fx":[85.84252151384581,92.7790666542044,57.94757243618249,57.596046091013775], "fy":[-128.2153198800168,-123.1754824381463,-142.88759008665,-143.13666296810314]}, - {"t":2.9946026495071147, "x":4.991048397465091, "y":3.0934740480014393, "heading":0.498924572211231, "vx":2.1262427744962142, "vy":0.5667986554853507, "omega":3.664162578911976, "ax":3.2696605725855457, "ay":-7.305548765915491, "alpha":-7.594477800088942, "fx":[92.305105130567,103.72434371412294,10.299591235137568,35.91357242189037], "fy":[-123.62075259911958,-113.8612549101276,-153.71998299629547,-150.05150646360414]}, - {"t":3.0281559685728765, "x":5.0642314328563, "y":3.1083796386104794, "heading":0.6218693883302885, "vx":2.235950738924918, "vy":0.3216732467921071, "omega":3.409342642147748, "ax":3.198252049193764, "ay":-7.2209383448264095, "alpha":-8.723504643032067, "fx":[98.28865258355096,105.01858245087791,-3.357950182325261,37.00281296856395], "fy":[-118.84587648685844,-112.4236417067532,-153.96522309001568,-149.75013880787165]}, - {"t":3.0617092876386383, "x":5.141055337823748, "y":3.1151080864434912, "heading":0.7362641498067787, "vx":2.343262710384242, "vy":0.07938679855395397, "omega":3.11664010748844, "ax":3.398344754151246, "ay":-7.176534669863545, "alpha":-8.141067215918298, "fx":[102.638997597065,101.58732414589372,2.5274431622366604,45.02280124036205], "fy":[-114.99454158945964,-115.32479793032404,-153.90774486137016,-147.4680162396964]}, - {"t":3.0952626067044, "x":5.22159255031597, "y":3.113732015162034, "heading":0.8408377697464879, "vx":2.457288456215736, "vy":-0.16140975901047783, "omega":2.8434802816569222, "ax":3.5228462847163535, "ay":-7.107968440869209, "alpha":-8.082710221981111, "fx":[107.27745031973876,99.49829470216258,3.4489709429037454,50.77591957726009], "fy":[-110.52371118824004,-116.81141675617582,-153.78172708411338,-145.49831081858875]}, - {"t":3.1288159257701618, "x":5.3060257885213264, "y":3.1043150169496125, "heading":0.9362459708941244, "vx":2.575491641626457, "vy":-0.39990569201632664, "omega":2.572278526662697, "ax":3.580507860107907, "ay":-7.010659919170706, "alpha":-8.540931825723753, "fx":[112.80947855858196,98.39531432590034,-0.7399810885242931,54.80785454371665], "fy":[-104.64432826766334,-117.18928331314716,-153.6628022690971,-143.9093582416116]}, - {"t":3.1623692448359235, "x":5.3944575943492685, "y":3.086950464795099, "heading":1.0225544530252453, "vx":2.695629564274125, "vy":-0.6351366011458079, "omega":2.28570191599527, "ax":3.5813658554865935, "ay":-6.8601852635791705, "alpha":-9.539122589037984, "fx":[119.78009439352051,98.10095421854425,-10.232449930529055,57.687634819755054], "fy":[-96.227303919384,-116.32087821255224,-153.09657494051245,-142.61264873560486]}, - {"t":3.1959225639016853, "x":5.486920909204123, "y":3.061777838973578, "heading":1.099247338701857, "vx":2.815796275514491, "vy":-0.8653185861449159, "omega":1.965632692157864, "ax":3.5533410085510484, "ay":-6.58675517960232, "alpha":-11.17517816520536, "fx":[128.58793866722246,99.50085039154165,-24.908897490068146,60.080037072834095], "fy":[-83.44912330635286,-112.12484201275076,-151.05707715407124,-141.36847527320174]}, - {"t":3.229475882967447, "x":5.5834004405225715, "y":3.02903576080846, "heading":1.165200839587922, "vx":2.9350226601238596, "vy":-1.0863260842941704, "omega":1.590668373563996, "ax":3.6007159509997666, "ay":-5.586740320416283, "alpha":-15.547462553690789, "fx":[139.6979714731587,113.45463263093735,-48.19363537343859,61.81087464701321], "fy":[-61.688254572323,-67.243390024878,-144.76578754925717,-140.21298471254323]}, - {"t":3.263029202033209, "x":5.683907080717386, "y":2.989441068516602, "heading":1.218573043053931, "vx":3.055838631292932, "vy":-1.2737797648026534, "omega":1.0689994018370277, "ax":2.2606721738274844, "ay":-6.207355409004068, "alpha":-15.054590012424065, "fx":[138.87334538962014,14.546525154039488,-47.94244997779518,62.011259448666216], "fy":[-60.91068812015513,-115.65119696932692,-143.95216262040543,-139.3764998324059]}, - {"t":3.2965825210989705, "x":5.787713170200733, "y":2.943207331013168, "heading":1.254441521064877, "vx":3.1316916860444546, "vy":-1.482057141395548, "omega":0.5638679397459349, "ax":1.6792370428129857, "ay":-6.642922938133879, "alpha":-13.414645791774843, "fx":[125.70824582524324,-16.190570883180154,-40.679961004659845,55.57360009052524], "fy":[-78.85842750318807,-129.81923517594498,-143.620627615818,-139.86258434551172]}, - {"t":3.3301358401647323, "x":5.89373708426503, "y":2.889740009784006, "heading":1.273361161958126, "vx":3.1880356623290047, "vy":-1.704949254268021, "omega":0.11376204934033708, "ax":-2.6273369939725044, "ay":-6.5885404377470485, "alpha":-2.957868469218913, "fx":[-33.99524254045209,-63.7233999071991,-60.90104882831652,-36.0344519334672], "fy":[-125.1755633474765,-113.55655530255775,-120.01416672346812,-129.38549857830088]}, - {"t":3.363689159230494, "x":5.999227300911123, "y":2.8288245309696336, "heading":1.2771782562972172, "vx":3.099879785876966, "vy":-1.92601665375342, "omega":0.014515744838078944, "ax":-2.741448222226635, "ay":-4.221185732792391, "alpha":-0.05166427126689179, "fx":[-50.59656538665018,-50.95332707356742,-50.957295733722646,-50.60122769438669], "fy":[-78.16173774208806,-77.99316472840884,-78.20806883850918,-78.3762372621166]}, - {"t":3.397242478296256, "x":6.101695360657754, "y":2.7618241209814394, "heading":1.2776653077152464, "vx":3.007895098974331, "vy":-2.067651445481644, "omega":0.012782237059960865, "ax":-1.0539108404645654, "ay":-1.508207863886111, "alpha":-0.006369558510458602, "fx":[-19.49779338278803,-19.53408149238116,-19.5432776786638,-19.50699379450573], "fy":[-27.923988084614713,-27.911928657832387,-27.946064207513945,-27.958123269633138]}, - {"t":3.4307957973620176, "x":6.202026964927894, "y":2.6915985630890806, "heading":1.2780941941936934, "vx":2.972532892277359, "vy":-2.118256825156106, "omega":0.012568517230951409, "ax":-0.2795172225327576, "ay":-0.3909209612425543, "alpha":-0.0014788364776403531, "fx":[-5.171901398827093,-5.1800952145675865,-5.182534657960501,-5.174340711651767], "fy":[-7.237803261909068,-7.235314590693535,-7.24347278799693,-7.245961535938826]}, - {"t":3.4643491164277793, "x":6.301607965726625, "y":2.6203039616327297, "heading":1.2785159096625272, "vx":2.9631541617253414, "vy":-2.1313735208981712, "omega":0.012518897358771052, "ax":-0.12298698764606109, "ay":-0.17083959941302926, "alpha":-0.0006522029069925894, "fx":[-2.275619571912934,-2.2792275318110304,-2.2803103925019848,-2.276702444495424], "fy":[-3.1630325093160376,-3.161944977599971,-3.165549611297269,-3.1666371430992335]}, - {"t":3.497902435493541, "x":6.400962391829802, "y":2.5486931380728928, "heading":1.2789359602199577, "vx":2.959027540087916, "vy":-2.1371057564863434, "omega":0.012497013786537113, "ax":-0.26679420467003845, "ay":-0.3681524765693957, "alpha":-0.0012382043973247982, "fx":[-4.937112554658493,-4.943971585930342,-4.9460120358563096,-4.939152859148665], "fy":[-6.81653927091807,-6.814465273854979,-6.821301055441527,-6.8233750838588065]}, - {"t":3.531455754559303, "x":6.50009740518462, "y":2.4767789090767067, "heading":1.2793552765109064, "vx":2.9500757090137264, "vy":-2.149458493997527, "omega":0.012455467919325044, "ax":-1.0348579214164928, "ay":-1.3976103523904273, "alpha":-0.00374283149044808, "fx":[-19.154312747205513,-19.175532818024777,-19.18096359921115,-19.15974451746368], "fy":[-25.879942440360228,-25.8729532799337,-25.893135420974797,-25.900124646633248]}, - {"t":3.5650090736250646, "x":6.598499702143617, "y":2.4038707099175394, "heading":1.2797731988001169, "vx":2.915352790988708, "vy":-2.1963529600808944, "omega":0.01232988350011666, "ax":-3.0384696524925188, "ay":-3.835350344976729, "alpha":0.01786773672352331, "fx":[-56.336210503773465,-56.21974874794978,-56.220825733682915,-56.33735462845957], "fy":[-71.04880050138041,-71.1090948055014,-71.02793911044958,-70.96760194130445]}, - {"t":3.5985623926908263, "x":6.69460907164593, "y":2.3280168111933293, "heading":1.28018690731524, "vx":2.8134020492669927, "vy":-2.3250416939348777, "omega":0.012929405371384064, "ax":-5.462965244044519, "ay":-4.456341545236848, "alpha":2.879371629009164, "fx":[-106.18241889983298,-89.21512957503927,-96.1734106005086,-113.1692099253894], "fy":[-82.22546033966404,-97.67641942685631,-84.09175056443954,-66.16780207254757]}, - {"t":3.632115711756588, "x":6.785932876240491, "y":2.2474954145445194, "heading":1.2806207317789966, "vx":2.6301014333884005, "vy":-2.474566743668219, "omega":0.10954188034843036, "ax":-6.900957172424228, "ay":1.150281140226301, "alpha":14.080394285741171, "fx":[-150.0334147957685,-126.84131999469426,-101.99415406794016,-132.40922613216327], "fy":[-14.949572838644448,-74.79106597132245,103.30957399037962,71.65309393667344]}, - {"t":3.66566903082235, "x":6.870296872995726, "y":2.165112994803766, "heading":1.284296225441391, "vx":2.398551415522894, "vy":-2.4359709935548777, "omega":0.5819858423896308, "ax":-6.909959530489561, "ay":1.7537891330583049, "alpha":14.348063910904823, "fx":[-152.56747522289422,-136.87926447078084,-92.79753594518128,-129.7008060560542], "fy":[-5.935366341062626,-62.85625090778813,118.23228367626815,80.49406286260628]}, - {"t":3.699222349888112, "x":6.9468865305809615, "y":2.0843653128406463, "heading":1.3038237821028462, "vx":2.166699338664878, "vy":-2.3771255471993067, "omega":1.06341100876816, "ax":-7.021945478505975, "ay":1.8819675127258533, "alpha":13.7262292697608, "fx":[-153.2955199745253,-141.42116529276566,-95.00716354725884,-130.51804779700086], "fy":[-4.0325630296085855,-55.59265564791237,118.5585471402362,80.49788062011775]}, - {"t":3.732775668953874, "x":7.015633743153021, "y":2.005664244140928, "heading":1.3395047509780875, "vx":1.9310897615621845, "vy":-2.313979290773418, "omega":1.5239715590262404, "ax":-7.671022832951256, "ay":3.077977703745456, "alpha":1.8871252468188904, "fx":[-146.39195288136358,-145.69430854953214,-137.04294999396896,-139.201528222828], "fy":[46.319203121570744,47.93283033569447,68.94171040694681,64.8474682508813]}, - {"t":3.766328988019635, "x":7.076110098581814, "y":1.9297551911492865, "heading":1.3906390549452414, "vx":1.6737014848874283, "vy":-2.2107029228023465, "omega":1.5872908745498089, "ax":-7.346868476996101, "ay":3.6379519235619817, "alpha":-4.3417304908895895, "fx":[-119.79172675285392,-131.1918321711922,-147.7455089407688,-145.58572385887217], "fy":[96.43205871140172,80.64016835551517,43.262236542627555,49.19411850331566]}, - {"t":3.799882307085397, "x":7.128132693614161, "y":1.857626619633832, "heading":1.443897932109183, "vx":1.427189662744592, "vy":-2.0886375611651697, "omega":1.4416114060914444, "ax":-7.031251158181464, "ay":3.785766710532496, "alpha":-7.606138453456483, "fx":[-95.451441342445,-125.91973327865948,-151.07006761640744,-148.49009356983626], "fy":[120.85463039800824,89.03878656617333,30.722767493544655,39.86369959220532]}, - {"t":3.833435626151158, "x":7.172061663793413, "y":1.7896769529518228, "heading":1.4922687795866103, "vx":1.1912678492026234, "vy":-1.9616125228181345, "omega":1.1864002157042604, "ax":-6.825431192783397, "ay":3.8007101021514766, "alpha":-9.400092878742283, "fx":[-79.2046493479112,-124.11355417269816,-152.62663271309228,-149.7377099772347], "fy":[132.25207233604866,91.7304546353492,22.492239642836388,35.11224343396437]}, - {"t":3.86698894521692, "x":7.2081905327422655, "y":1.725997809734393, "heading":1.5320764445638235, "vx":0.96225197862976, "vy":-1.8340860840841824, "omega":0.8709959000960267, "ax":-6.695325339438347, "ay":3.781896604687387, "alpha":-10.428455062849698, "fx":[-68.7681454695101,-123.57789807425792,-153.46773751086985,-150.22948269367038], "fy":[138.0818601600317,92.56365017637248,16.433395663124724,33.1142496485502]}, - {"t":3.900542264282682, "x":7.236708397340166, "y":1.6665870114501595, "heading":1.561301247904716, "vx":0.7376015912665065, "vy":-1.707190900633386, "omega":0.5210866200092735, "ax":-6.60740875625219, "ay":3.756330304935653, "alpha":-11.082078218092624, "fx":[-61.69662132485632,-123.4316451601566,-153.9396873090171,-150.46174613918228], "fy":[141.45997628422498,92.83314323763284,11.828404072921868,32.177476037292955]}, - {"t":3.934095583348444, "x":7.25773798516594, "y":1.6114195761516343, "heading":1.5787854335267866, "vx":0.5159010970700695, "vy":-1.5811535513954902, "omega":0.14924611364588466, "ax":-6.541803811610952, "ay":3.723840378010785, "alpha":-11.5844500595804, "fx":[-56.407100394512184,-123.2637324491396,-154.20177259985692,-150.79655535112346], "fy":[143.7046911358959,93.10883965603688,8.382776168609766,30.69557896552042]}, - {"t":3.9676489024142056, "x":7.271365715423531, "y":1.560462823256721, "heading":1.5837931359972717, "vx":0.2964018665134716, "vy":-1.4562063470421278, "omega":-0.23945063540459777, "ax":-6.487263815297803, "ay":3.67408709659405, "alpha":-12.079319036519513, "fx":[-51.92745681589806,-122.85393521973468,-154.34265742259163,-151.50435208955918], "fy":[145.42199078813758,93.68818291021472,5.962726251880053,27.13286486222757]}, - {"t":4.001202221479967, "x":7.277659219215249, "y":1.5136704570263442, "heading":1.575758772427042, "vx":0.07873263385501435, "vy":-1.33292853041471, "omega":-0.6447518811340652, "ax":-6.434776377623956, "ay":3.593930448368266, "alpha":-12.681973998992936, "fx":[-47.63404343426946,-122.06232614615055,-154.4152058815621,-152.62813680342157], "fy":[146.9127221154244,94.74742494144688,4.510355735888688,20.09661626594814]}, - {"t":4.034755540545729, "x":7.276678743633322, "y":1.4709693495229228, "heading":1.554125206841101, "vx":-0.1371754710602281, "vy":-1.2123402353804538, "omega":-1.070274201105968, "ax":-6.371664821060285, "ay":3.4734610569007227, "alpha":-13.505220074273751, "fx":[-43.09140101345796,-120.77744818492523,-154.44859611816705,-153.7464579461641], "fy":[148.32980943517063,96.40369814731014,4.016170613056991,8.59210458812297]}, - {"t":4.0683088596114905, "x":7.268489360809326, "y":1.4322465658187866, "heading":1.518213955083539, "vx":-0.3509659737813528, "vy":-1.0957940882757662, "omega":-1.523419159311404, "ax":-6.461540091086138, "ay":3.883406970082723, "alpha":-11.632812262190573, "fx":[-53.890750579366696,-119.87214499143074,-153.75981145919653,-151.19987523839586], "fy":[144.7656084419889,97.53492055864476,15.20979037322697,30.203536225628103]}, - {"t":4.105676281065046, "x":7.250863464996902, "y":1.394010813834245, "heading":1.4612877093071288, "vx":-0.5924170656040127, "vy":-0.950681183349011, "omega":-1.9581073578027657, "ax":-6.4550930320533375, "ay":4.047679703930173, "alpha":-11.11002519312468, "fx":[-57.27703222553978,-117.64362219297564,-152.7830852951606,-150.54119284509164], "fy":[143.42641419063838,100.1833813773486,22.9134808714518,33.36121746533985]}, - {"t":4.143043702518601, "x":7.224219665568147, "y":1.361312245922145, "heading":1.3881182864168051, "vx":-0.833627247454658, "vy":-0.7994298299432502, "omega":-2.373260351553873, "ax":-6.449641612731394, "ay":4.249069633169608, "alpha":-10.342348187914205, "fx":[-62.37256021852997,-114.99672849298774,-151.05428210214154,-149.41747699038422], "fy":[141.240550875396,103.1739649848983,32.29461122677965,38.09594389519592]}, - {"t":4.180411123972156, "x":7.188566269589614, "y":1.3344061538926946, "heading":1.2994356666412787, "vx":-1.07463372382198, "vy":-0.6406530541750977, "omega":-2.759727235111077, "ax":-6.451082309277316, "ay":4.495784677464602, "alpha":-9.122717422328533, "fx":[-70.37604282619202,-112.2431829637369,-148.13713116282804,-147.1914291769808], "fy":[137.3682455700923,106.112275395601,43.65362549824331,45.94954872006081]}, - {"t":4.217778545425712, "x":7.143906077195911, "y":1.3136053876521192, "heading":1.1963117759500284, "vx":-1.3156940353043205, "vy":-0.4726571733678417, "omega":-3.1006196618329187, "ax":-6.458230784194185, "ay":4.7855745999169805, "alpha":-7.206800833809193, "fx":[-82.41363651496223,-110.04870993311552,-143.25674134267683,-142.75831454862407], "fy":[130.4241368973623,108.3115722573578,57.557136658204875,58.260805145724234]}, - {"t":4.255145966879267, "x":7.090233091753115, "y":1.2992845146309324, "heading":1.080449614279137, "vx":-1.5570214668616296, "vy":-0.29383259039531445, "omega":-3.369919225921701, "ax":-6.438956935354182, "ay":5.108214930950736, "alpha":-4.364201248243356, "fx":[-98.34669631154836,-109.90044838468908,-134.7334490044231,-134.06884772586002], "fy":[118.77799664159014,108.33869491916994,75.21836998856658,76.12236625495143]}, - {"t":4.292513388332822, "x":7.027555778737657, "y":1.2918711104167506, "heading":0.9545244222996824, "vx":-1.7976286843863023, "vy":-0.10295177019513437, "omega":-3.5329981732729423, "ax":-6.285032535177734, "ay":5.455025094615546, "alpha":-0.30541932651532394, "fx":[-115.13318730013896,-115.3974319991289,-117.66095210831227,-117.45391905866778], "fy":[102.4993919094443,102.21911190493032,99.60359047435496,99.829804921147]}, - {"t":4.329880809786378, "x":6.9559950586015855, "y":1.2918325599681433, "heading":0.8225053905643512, "vx":-2.032484143977596, "vy":0.1008884515550852, "omega":-3.5444109059669016, "ax":-5.692282597004465, "ay":5.706552905249304, "alpha":6.729205837530634, "fx":[-127.91162140649593,-135.01151943036675,-71.14102868181776,-87.66566352818636], "fy":[85.96920498122499,73.66827153809304,136.3870782003351,126.76253692445736]}, - {"t":4.367248231239933, "x":6.876072231063786, "y":1.299586600177593, "heading":0.6900598944365083, "vx":-2.2451900668126004, "vy":0.31412761901254643, "omega":-3.292957835388169, "ax":-4.95611904979827, "ay":5.38588255395952, "alpha":13.770668903879116, "fx":[-131.27243747442566,-151.10200250150692,-19.15695003460647,-65.65755815091512], "fy":[80.64818342680672,26.877237907533967,152.1437273250065,139.3601179984057]}, - {"t":4.404615652693488, "x":6.788715093144682, "y":1.3150849583441977, "heading":0.5670105511727714, "vx":-2.4303874561204064, "vy":0.5153841623057027, "omega":-2.77838344675955, "ax":-4.924353858341569, "ay":5.28566293529217, "alpha":14.24622874608167, "fx":[-129.72938028004185,-152.50986568987733,-22.23863331214536,-60.357649374745606], "fy":[82.89830774476499,16.030282427899287,151.11408185289727,141.56152352436473]}, - {"t":4.441983074147044, "x":6.694459783579768, "y":1.33803378504559, "heading":0.4631895259581257, "vx":-2.6143978621314967, "vy":0.7128957568702015, "omega":-2.2460386130809615, "ax":-4.856584644772627, "ay":5.227953420070565, "alpha":14.50899397463917, "fx":[-127.93339230433462,-152.8797876324374,-24.55884380939072,-54.44261941575168], "fy":[85.32984522826465,8.60535162249159,149.7109759664422,143.68244016898956]}, - {"t":4.479350495600599, "x":6.593375793517588, "y":1.3683228201471025, "heading":0.3792608545021705, "vx":-2.7958759073775807, "vy":0.9082508956575344, "omega":-1.703874920363525, "ax":-4.754056630122171, "ay":5.195005543452506, "alpha":14.682903017629416, "fx":[-125.84836477138,-152.63572391572885,-25.55615275422748,-48.178306171154986], "fy":[87.8492831738258,3.951460012990966,147.60965447998095,145.47717303651157]}, - {"t":4.516717917054154, "x":6.485582018027435, "y":1.4058887700942972, "heading":0.3155914422488036, "vx":-2.9735227450894244, "vy":1.10237485725328, "omega":-1.1552126951420876, "ax":-4.616164686114123, "ay":5.181282233221137, "alpha":14.744776353630858, "fx":[-123.09035769065338,-151.67878767039943,-25.133920175730672,-42.099343728039685], "fy":[90.59602134600156,3.008612157211674,143.77362078447482,146.49258380719948]}, - {"t":4.55408533850771, "x":6.3712463092108536, "y":1.45069905083368, "heading":0.27242412260093174, "vx":-3.14601691641447, "vy":1.2959860141318724, "omega":-0.6042384228975468, "ax":-4.306801580766409, "ay":5.2545776979641845, "alpha":14.427978439165372, "fx":[-116.57776107705833,-147.6249329355731,-19.53979883446594,-35.3398226687243], "fy":[95.4103455284091,12.712117660726102,135.6396179527836,145.53907134485166]}, - {"t":4.591452759961265, "x":6.2506809235892264, "y":1.5027952533853313, "heading":0.24984529079408752, "vx":-3.3069509861998063, "vy":1.4923360335321527, "omega":-0.06510207183844517, "ax":1.816439548542836, "ay":5.103326037481856, "alpha":1.4229749461155377, "fx":[26.30405326172024,30.963717168084106,41.12631808849419,36.182284754143105], "fy":[97.82344111782464,91.97225999360394,91.1701436220644,97.12937473146278]}, - {"t":4.62882018141482, "x":6.128376861598748, "y":1.5621229516884685, "heading":0.2474125942382007, "vx":-3.2390753240445007, "vy":1.6830341683896397, "omega":-0.011929167309095705, "ax":0.8229375059503028, "ay":1.5538705347520223, "alpha":0.005138842056199034, "fx":[15.223582200019411,15.232096924849886,15.261315236298408,15.25279957967833], "fy":[28.79193246561996,28.763613682188687,28.76964854969429,28.79796548120489]}, - {"t":4.6661876028683755, "x":6.0079155126169645, "y":1.6260984522842798, "heading":0.2469668320157718, "vx":-3.208324271429718, "vy":1.74109830354598, "omega":-0.01173714203219846, "ax":0.16878545878781046, "ay":0.3097786908784233, "alpha":0.0001433909156293047, "fx":[3.125740818172151,3.125944610114372,3.1267477798678542,3.126543862516921], "fy":[5.7380211439745645,5.7372187182162735,5.737420736051176,5.7382230515586095]}, - {"t":4.703555024321931, "x":5.888146547015964, "y":1.691375082124157, "heading":0.2465282452827944, "vx":-3.202017194055962, "vy":1.7526739344453646, "omega":-0.011731783883421528, "ax":0.032567241137538734, "ay":0.05945753063826744, "alpha":0.000013148250286241277, "fx":[0.6031634876863003,0.6031842635991637,0.6032573759134046,0.6032366341991012], "fy":[1.1012987328875623,1.1012256644988585,1.1012460004928866,1.10131913204865]}, - {"t":4.740922445775486, "x":5.768518158237381, "y":1.756909498697275, "heading":0.24608985877002057, "vx":-3.200800240230796, "vy":1.7548957090513124, "omega":-0.011731292567211704, "ax":0.006247654840502031, "ay":0.011393573698263475, "alpha":-2.8352150931717143e-6, "fx":[0.11572936449836144,0.11572441590521829,0.11570876104566163,0.11571371037387304], "fy":[0.21102639630211517,0.2110420322840128,0.2110371473605103,0.21102151221030613]}, - {"t":4.7782898672290415, "x":5.648916868547817, "y":1.8224933808256925, "heading":0.24565149061646657, "vx":-3.200566781479275, "vy":1.7553214575215574, "omega":-0.011731398511889002, "ax":0.0011926390316037774, "ay":0.0021733108091722022, "alpha":-5.669520924309185e-6, "fx":[0.022109589199610657,0.022102501440570074,0.022070530275453904,0.022077619657826033], "fy":[0.04024162879659523,0.04027360299162392,0.04026649525649086,0.04023452418524009]}, - {"t":4.815657288682597, "x":5.529320773389394, "y":1.8880867348385932, "heading":0.2452131185040332, "vx":-3.200522215633939, "vy":1.7554026685425133, "omega":-0.01173161036726682, "ax":0.00022256114669677555, "ay":0.0004042945264455335, "alpha":-6.26651583976102e-6, "fx":[0.00414444476794744,0.004135064926216411,0.004100110101237862,0.004109490441068992], "fy":[0.007475555100700875,0.007510508413405623,0.007501130989055209,0.007466178372134979]}, - {"t":4.853024710136152, "x":5.40972566627009, "y":1.9536818884378295, "heading":0.24477473847511064, "vx":-3.2005138990977713, "vy":1.7554177759864744, "omega":-0.01173184453080525, "ax":0.00003643117703265576, "ay":0.00006487120348163833, "alpha":-6.440815714156409e-6, "fx":[0.0006971605696193064,0.0006885888855595293,0.0006523958792794989,0.0006609677095370649], "fy":[0.001187734145681543,0.0012239271449618848,0.0012153545549300644,0.0011791618779741276]}, - {"t":4.890392131589707, "x":5.290130739969408, "y":2.019277369590794, "heading":0.2443363496961005, "vx":-3.200512537758625, "vy":1.755420200056075, "omega":-0.011732085207480546, "ax":7.18100251005679e-7, "ay":-2.685378701389337e-7, "alpha":-6.53351132683341e-6, "fx":[0.000036276586174122584,0.000026858065644613388,-9.675313679063575e-6,-2.567267431636664e-7], "fy":[-0.00001853124304833315,0.000018002033108182494,8.583488349666628e-6,-0.000027949712132369292]}, - {"t":4.927759553043263, "x":5.170535839604947, "y":2.0848728958468916, "heading":0.24389795192362348, "vx":-3.2005125109250705, "vy":1.7554201900215072, "omega":-0.011732329347951868, "ax":-6.164962868431584e-6, "ay":-0.00001283748962545532, "alpha":-6.610414384609127e-6, "fx":[-0.00009112788914317204,-0.0001001597167838576,-0.00013724699767811197,-0.0001282151653912176], "fy":[-0.000251803700119578,-0.00021471642953460135,-0.0002237482766246212,-0.00026083552509193294]}, - {"t":4.965126974496818, "x":5.050940935437689, "y":2.150468412952857, "heading":0.24345954502824663, "vx":-3.2005127412938363, "vy":1.755419710317622, "omega":-0.01173257636209216, "ax":-7.671394463821203e-6, "ay":-0.00001560229558458838, "alpha":-6.684352570299578e-6, "fx":[-0.00011866749453851136,-0.0001280787911223555,-0.00016551164418602003,-0.00015610034318869822], "fy":[-0.0003029964911471771,-0.00026556364386270227,-0.00027497494798821623,-0.00031240779227288803]}, - {"t":5.002494395950373, "x":4.931346021610413, "y":2.216063910203243, "heading":0.24302112890258837, "vx":-3.200513027954066, "vy":1.7554191273000672, "omega":-0.011732826139111798, "ax":-8.954964108981332e-6, "ay":-0.000017960734279577124, "alpha":-6.758200621410441e-6, "fx":[-0.00014224728580193932,-0.00015159155310347908,-0.000189480403712383,-0.00018013613828840754], "fy":[-0.00034694101462716024,-0.000309052160259585,-0.0003183964245622906,-0.0003562852818562739]}, - {"t":5.039861817403929, "x":4.811751096175242, "y":2.2816593840211925, "heading":0.24258270344340688, "vx":-3.2005133625779845, "vy":1.7554184561537398, "omega":-0.011733078675642683, "ax":-0.000014409942088126525, "ay":-0.00002792572300796501, "alpha":-6.834531242534963e-6, "fx":[-0.00024299833213491004,-0.00025249950406328584,-0.00029080356343064075,-0.0002813023897962811], "fy":[-0.0005316416866602249,-0.0004933376250510023,-0.0005028387943814397,-0.0005411428601214445]}, - {"t":5.077229238857484, "x":4.692156154427581, "y":2.347254825802958, "heading":0.2421442685475864, "vx":-3.2005139010403636, "vy":1.7554174126414788, "omega":-0.011733334064452063, "ax":-0.000042630309461396, "ay":-0.00007940344030139071, "alpha":-6.9244655756964895e-6, "fx":[-0.0007653918569458197,-0.0007749903931106799,-0.0008138053315549951,-0.0008042067857644123], "fy":[-0.0014853187165105872,-0.001446503774435124,-0.0014561023208512654,-0.0014949172732524583]}, - {"t":5.114596660311039, "x":4.572561172856577, "y":2.412850192651569, "heading":0.2417058241085447, "vx":-3.2005154940251037, "vy":1.75541444553966, "omega":-0.01173359281387557, "ax":-0.00018969706785474324, "ay":-0.0003475999111829642, "alpha":-7.086150142273416e-6, "fx":[-0.003488792080715394,-0.003498628168870745,-0.0035383461198062027,-0.003528509993829872], "fy":[-0.006453186448769712,-0.006413468497520176,-0.006423304645443552,-0.006463022627990007]}, - {"t":5.151964081764595, "x":4.452966029083408, "y":2.4784452613826273, "heading":0.24126737000070417, "vx":-3.200522582515387, "vy":1.7554014566272818, "omega":-0.01173385760503442, "ax":-0.0009561868856391266, "ay":-0.0017453758867997033, "alpha":-7.627007116423956e-6, "fx":[-0.01768379130368863,-0.017694468531702433,-0.017737195680280385,-0.017726518467560168], "fy":[-0.03234387730410676,-0.03230115002215552,-0.03231182692272805,-0.03235455445222606]}, - {"t":5.18933150321815, "x":4.333370085297496, "y":2.544038868877322, "heading":0.24082890599830084, "vx":-3.200558312753731, "vy":1.7553362364309248, "omega":-0.01173414260662377, "ax":-0.004950444268990937, "ay":-0.00903061090084748, "alpha":-0.000010219840608132186, "fx":[-0.0916561556371454,-0.09167097575240164,-0.09172810127394464,-0.0917132823375088], "fy":[-0.16728612998145562,-0.16722900254367518,-0.16724381973757357,-0.16730094815928373]}, - {"t":5.226698924671705, "x":4.213770017725617, "y":2.6096249529865263, "heading":0.240390431346123, "vx":-3.200743298091113, "vy":1.7549987857874096, "omega":-0.011734524495714962, "ax":-0.025746674788414435, "ay":-0.047009318773848105, "alpha":-0.0000382486822040882, "fx":[-0.476745491018338,-0.4768003703771007,-0.4770142861777429,-0.476959494150867], "fy":[-0.8707862602965197,-0.8705722572527136,-0.8706269556255983,-0.8708409361420264]}, - {"t":5.264066346125261, "x":4.0941485185888435, "y":2.675171912141134, "heading":0.23995194242373455, "vx":-3.201705384938959, "vy":1.7532421687605428, "omega":-0.011735953750342924, "ax":-0.12987119778514536, "ay":-0.24693479984308017, "alpha":-0.01031023401757914, "fx":[-2.3694479043472025,-2.3836507261022852,-2.441504259104389,-2.427294411951972], "fy":[-4.59558473794509,-4.537777916983644,-4.551866595824805,-4.609676200020582]}, - {"t":5.301433767578816, "x":3.974418372952441, "y":2.740513650654651, "heading":0.23951340009378608, "vx":-3.2065583367212747, "vy":1.744014852023257, "omega":-0.012121220610162587, "ax":1.6437830122034809, "ay":-2.281058702390669, "alpha":-6.014408348538771, "fx":[49.7356781712727,47.0736245212436,8.718702037404553,16.25659107821063], "fy":[-52.37658013361987,-20.64937262040061,-32.31505122397859,-63.65807316472081]}, - {"t":5.338801189032371, "x":3.855745183157075, "y":2.8040904399334474, "heading":0.2390604613347146, "vx":-3.1451344041260723, "vy":1.658777570130725, "omega":-0.23686415216379245, "ax":5.472591317324825, "ay":-3.3922232584374035, "alpha":-15.283101129499093, "fx":[129.21249964259698,147.4513526938969,86.11025442643074,42.679238755037005], "fy":[-78.8723234777264,27.77085251684086,-56.360566805154065,-143.8609990050707]}, - {"t":5.3761686104859265, "x":3.742040376158498, "y":2.8637063588040443, "heading":0.23020945873357113, "vx":-2.9406377779285284, "vy":1.5320189339681416, "omega":-0.8079542331870923, "ax":5.722408318277059, "ay":-3.123904531667302, "alpha":-15.587975802852236, "fx":[130.59225018114924,149.12685700338017,104.07158268910234,40.17109761087896], "fy":[-79.79720038230697,31.376465026820178,-36.05160913895938,-146.97149444772094]}, - {"t":5.413536031939482, "x":3.636151493537136, "y":2.918772964258161, "heading":0.20001829238688495, "vx":-2.726806134570139, "vy":1.4152866767526584, "omega":-1.390436694620094, "ax":6.096469361924584, "ay":-2.534723962911, "alpha":-15.89275969541156, "fx":[130.27668906859574,150.3269596326502,131.30374379670084,39.767829588321696], "fy":[-81.34770494262887,29.455758123789675,11.950994031812323,-147.8516761771233]}, - {"t":5.450903453393037, "x":3.538514103294413, "y":2.9698889297987447, "heading":0.14806125841452752, "vx":-2.498996794544415, "vy":1.320570578162137, "omega":-1.984308144218615, "ax":6.252797529760823, "ay":-2.3097028187030553, "alpha":-16.252908021589146, "fx":[129.31428306377757,151.65138348517456,140.86413774834708,41.42745908762059], "fy":[-83.36653336978503,24.340833700038303,35.660807748512696,-147.7563705108379]}, - {"t":5.4882708748465925, "x":3.449498503072345, "y":3.0176227001978804, "heading":0.07391277969578833, "vx":-2.2653458739860928, "vy":1.2342629395031954, "omega":-2.5916374081072067, "ax":6.848205195336759, "ay":-3.5023461048490683, "alpha":-10.007074106778155, "fx":[129.35735573520037,153.6728268847407,148.08115671082967,76.25848718133908], "fy":[-83.52138983845369,-6.50680438333014,-36.07593116027931,-133.37769283399464]}, - {"t":5.525638296300148, "x":3.3696295263338047, "y":3.0612987183556752, "heading":-0.022930027587753393, "vx":-2.0094461042515173, "vy":1.1033892965270824, "omega":-2.965575963772147, "ax":7.302154835571898, "ay":-3.970396680995632, "alpha":-0.4712415550213595, "fx":[134.7358164235324,136.96804860435196,135.82516573354883,133.47301669641752], "fy":[-74.56080133146558,-70.35312529662203,-72.48835891990711,-76.75646375360964]}, - {"t":5.563005717753703, "x":3.2996397945717657, "y":3.099757550769326, "heading":-0.1337459544785607, "vx":-1.7365834069915853, "vy":0.9550258104105216, "omega":-2.983185045565059, "ax":7.210549402861435, "ay":-3.920969381426579, "alpha":4.458422772512945, "fx":[143.1002486216435,114.86504788598594,129.25913249373264,146.99075515783585], "fy":[-56.96464639825013,-102.75027801724522,-84.16264871186914,-46.6192064037679]}, - {"t":5.600373139207258, "x":3.239782282776558, "y":3.1327069305358624, "heading":-0.24521988735013384, "vx":-1.4671437685431807, "vy":0.8085092950282684, "omega":-2.816585282806439, "ax":7.036148197276106, "ay":-3.7887107227685313, "alpha":7.738587648810003, "fx":[150.483137135577,97.11950887336224,123.38880980137934,150.3026918294735], "fy":[-33.116881133807496,-119.7718958933218,-92.7522128195254,-35.05701018182025]}, - {"t":5.637740560660814, "x":3.189871275196825, "y":3.160273703904155, "heading":-0.3504684166726434, "vx":-1.204221053445891, "vy":0.6669349446849725, "omega":-2.527414216678078, "ax":6.833708590022874, "ay":-3.6545058324721658, "alpha":10.3698946799327, "fx":[153.87668279045982,83.53698940082884,117.75739815911444,151.1247316672115], "fy":[-9.478163950845476,-129.6727667696579,-99.90379358608084,-31.700303809613555]}, - {"t":5.675107982114369, "x":3.14964367586193, "y":3.182643905623263, "heading":-0.4449113688949604, "vx":-0.948862984471725, "vy":0.5303754850385091, "omega":-2.139917991744052, "ax":6.621818671060781, "ay":-3.5711647722915054, "alpha":12.423310447367514, "fx":[153.98178852794302,73.03761124841228,112.44506864785237,151.13283327734342], "fy":[9.12670514692552,-135.90136250439684,-105.90605963424564,-31.899738657816055]}, - {"t":5.712475403567924, "x":3.118810215602641, "y":3.199969418029303, "heading":-0.5248745863685061, "vx":-0.7014226954011753, "vy":0.39693026591220254, "omega":-1.675690914408913, "ax":6.423579138950662, "ay":-3.540514525575618, "alpha":13.927643594465623, "fx":[152.7378412786661,64.70178947901204,107.6386232054974,150.83187728340107], "fy":[22.05215489683893,-140.0872092600377,-110.82635145898074,-33.448234348666894]}, - {"t":5.74984282502148, "x":3.097084557582978, "y":3.2123298255316888, "heading":-0.5874908349931175, "vx":-0.46139010647574, "vy":0.26463036747258395, "omega":-1.155250786359606, "ax":6.249280000617938, "ay":-3.5391205083329673, "alpha":15.026186896941727, "fx":[151.2728789590749,57.72719732012664,103.53369776826204,150.46288263831818], "fy":[30.79012001543203,-143.12218280237434,-114.69823706732036,-35.17606036711017]}, - {"t":5.787210246475035, "x":3.084206609425048, "y":3.219747500220814, "heading":-0.630659578011568, "vx":-0.22787062691137508, "vy":0.13238255986278505, "omega":-0.5937609277416939, "ax":6.098109477385264, "ay":-3.5427266510033584, "alpha":15.889801989138874, "fx":[149.9083966215956,51.39756607829539,100.30400047501894,150.1867717856094], "fy":[37.02742947375418,-145.53388063021984,-117.554357681073,-36.41272328199813]}, - {"t":5.82457766792859, "x":3.079949140548706, "y":3.2222208976745605, "heading":-0.6528468928411459, "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":[] -} \ No newline at end of file + diff --git a/src/main/deploy/choreo/autos.chor b/src/main/deploy/choreo/autos.chor index 3eca6f9a..bf7c8396 100644 --- a/src/main/deploy/choreo/autos.chor +++ b/src/main/deploy/choreo/autos.chor @@ -1,6 +1,6 @@ { "name":"autos", - "version":"v2025.0.0", + "version":1, "type":"Swerve", "variables":{ "expressions":{}, @@ -28,41 +28,45 @@ } }, "mass":{ - "exp":"74.088 kg", - "val":74.088 + "exp":"44 kg", + "val":44.0 }, "inertia":{ - "exp":"6.883 kg m ^ 2", - "val":6.883 + "exp":"4 kg m ^ 2", + "val":4.0 }, "gearing":{ - "exp":"6.75", - "val":6.75 + "exp":"6.746", + "val":6.746 }, "radius":{ - "exp":"2 in", - "val":0.0508 + "exp":"0.049 m", + "val":0.049 }, "vmax":{ - "exp":"485.89966375522135 rad / s", - "val":485.8996637552213 + "exp":"4600 rpm", + "val":481.71087355043494 }, "tmax":{ - "exp":"1.163975155279503 N m", - "val":1.163975155279503 + "exp":"0.2 N * m", + "val":0.2 + }, + "cof":{ + "exp":"1", + "val":1.0 }, "bumper":{ "front":{ - "exp":"0.457 m", - "val":0.457 + "exp":"0.921 / 2 m", + "val":0.4605 }, "side":{ - "exp":"0.457 m", - "val":0.457 + "exp":"0.921 / 2 m", + "val":0.4605 }, "back":{ - "exp":"0.457 m", - "val":0.457 + "exp":"0.921 / 2 m", + "val":0.4605 } }, "differentialTrackWidth":{ @@ -71,4 +75,4 @@ } }, "generationFeatures":[] -} \ No newline at end of file +} diff --git a/src/main/deploy/choreo/help.traj b/src/main/deploy/choreo/help.traj new file mode 100644 index 00000000..e77bb389 --- /dev/null +++ b/src/main/deploy/choreo/help.traj @@ -0,0 +1,192 @@ +{ + "name":"help", + "version":1, + "snapshot":{ + "waypoints":[ + {"x":7.161558628082275, "y":0.48480305075645447, "heading":1.5707963267948966, "intervals":82, "split":false, "fixTranslation":true, "fixHeading":true, "overrideIntervals":false}, + {"x":2.1434834003448486, "y":3.201723337173462, "heading":0.0, "intervals":59, "split":false, "fixTranslation":true, "fixHeading":false, "overrideIntervals":false}, + {"x":1.5868909358978271, "y":4.786334037780762, "heading":2.5013294842182, "intervals":49, "split":false, "fixTranslation":true, "fixHeading":false, "overrideIntervals":false}, + {"x":3.728291749954224, "y":5.420264720916748, "heading":2.0943951023931953, "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":17.548, "h":8.052}}, "enabled":false}], + "targetDt":0.05 + }, + "params":{ + "waypoints":[ + {"x":{"exp":"7.161558628082275 m", "val":7.161558628082275}, "y":{"exp":"0.48480305075645447 m", "val":0.48480305075645447}, "heading":{"exp":"90 deg", "val":1.5707963267948966}, "intervals":82, "split":false, "fixTranslation":true, "fixHeading":true, "overrideIntervals":false}, + {"x":{"exp":"2.1434834003448486 m", "val":2.1434834003448486}, "y":{"exp":"3.201723337173462 m", "val":3.201723337173462}, "heading":{"exp":"0 deg", "val":0.0}, "intervals":59, "split":false, "fixTranslation":true, "fixHeading":false, "overrideIntervals":false}, + {"x":{"exp":"1.5868909358978271 m", "val":1.5868909358978271}, "y":{"exp":"4.786334037780762 m", "val":4.786334037780762}, "heading":{"exp":"2.5013294842182 rad", "val":2.5013294842182}, "intervals":49, "split":false, "fixTranslation":true, "fixHeading":false, "overrideIntervals":false}, + {"x":{"exp":"3.7282917499542236 m", "val":3.728291749954224}, "y":{"exp":"5.420264720916748 m", "val":5.420264720916748}, "heading":{"exp":"120 deg", "val":2.0943951023931953}, "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":"17.548 m", "val":17.548}, "h":{"exp":"8.052 m", "val":8.052}}}, "enabled":false}], + "targetDt":{ + "exp":"0.05 s", + "val":0.05 + } + }, + "trajectory":{ + "sampleType":"Swerve", + "waypoints":[0.0,2.40495,3.32701,5.05303], + "samples":[ + {"t":0.0, "x":7.16156, "y":0.4848, "heading":1.5708, "vx":0.0, "vy":0.0, "omega":0.0, "ax":-2.33809, "ay":0.8857, "alpha":0.05909, "fx":[-25.80873,-25.76025,-25.62754,-25.67929], "fy":[9.5048,9.63419,9.98229,9.84958]}, + {"t":0.03537, "x":7.1601, "y":0.48536, "heading":1.5708, "vx":-0.08269, "vy":0.03132, "omega":0.00209, "ax":-2.33801, "ay":0.88569, "alpha":0.05886, "fx":[-25.80754,-25.75923,-25.62704,-25.6786], "fy":[9.50562,9.63452,9.98128,9.84909]}, + {"t":0.07073, "x":7.15571, "y":0.48702, "heading":1.57087, "vx":-0.16538, "vy":0.06265, "omega":0.00417, "ax":-2.33793, "ay":0.88569, "alpha":0.05863, "fx":[-25.8063,-25.75815,-25.62651,-25.67787], "fy":[9.50648,9.63488,9.98023,9.84855]}, + {"t":0.1061, "x":7.1484, "y":0.48979, "heading":1.57102, "vx":-0.24806, "vy":0.09397, "omega":0.00624, "ax":-2.33784, "ay":0.88568, "alpha":0.05838, "fx":[-25.80498,-25.75701,-25.62594,-25.67711], "fy":[9.50738,9.63529,9.97912,9.84797]}, + {"t":0.14147, "x":7.13816, "y":0.49367, "heading":1.57124, "vx":-0.33075, "vy":0.1253, "omega":0.00831, "ax":-2.33775, "ay":0.88567, "alpha":0.05811, "fx":[-25.8036,-25.75579,-25.62534,-25.67632], "fy":[9.50832,9.63573,9.97796,9.84734]}, + {"t":0.17683, "x":7.125, "y":0.49865, "heading":1.57153, "vx":-0.41343, "vy":0.15662, "omega":0.01036, "ax":-2.33766, "ay":0.88566, "alpha":0.05783, "fx":[-25.80214,-25.7545,-25.62471,-25.67548], "fy":[9.50931,9.63621,9.97674,9.84666]}, + {"t":0.2122, "x":7.10892, "y":0.50474, "heading":1.5719, "vx":-0.4961, "vy":0.18794, "omega":0.01241, "ax":-2.33755, "ay":0.88565, "alpha":0.05754, "fx":[-25.80058,-25.75312,-25.62403,-25.67459], "fy":[9.51035,9.63673,9.97544,9.84593]}, + {"t":0.24757, "x":7.08991, "y":0.51194, "heading":1.57234, "vx":-0.57877, "vy":0.21926, "omega":0.01445, "ax":-2.33744, "ay":0.88564, "alpha":0.05722, "fx":[-25.79894,-25.75166,-25.62331,-25.67366], "fy":[9.51146,9.63729,9.97408,9.84514]}, + {"t":0.28293, "x":7.06798, "y":0.52025, "heading":1.57285, "vx":-0.66144, "vy":0.25059, "omega":0.01647, "ax":-2.33733, "ay":0.88562, "alpha":0.05689, "fx":[-25.79719,-25.7501,-25.62254,-25.67266], "fy":[9.51263,9.6379,9.97262,9.84429]}, + {"t":0.3183, "x":7.04313, "y":0.52967, "heading":1.57343, "vx":-0.7441, "vy":0.28191, "omega":0.01848, "ax":-2.33721, "ay":0.88561, "alpha":0.05653, "fx":[-25.79532,-25.74843,-25.62171,-25.6716], "fy":[9.51388,9.63856,9.97108,9.84338]}, + {"t":0.35367, "x":7.01535, "y":0.54019, "heading":1.57408, "vx":-0.82676, "vy":0.31323, "omega":0.02048, "ax":-2.33707, "ay":0.8856, "alpha":0.05615, "fx":[-25.79333,-25.74664,-25.62083,-25.67047], "fy":[9.5152,9.63927,9.96943,9.8424]}, + {"t":0.38904, "x":6.98465, "y":0.55183, "heading":1.57481, "vx":-0.90942, "vy":0.34455, "omega":0.02247, "ax":-2.33693, "ay":0.88558, "alpha":0.05574, "fx":[-25.79119,-25.74472,-25.61988,-25.66927], "fy":[9.51663,9.64003,9.96767,9.84134]}, + {"t":0.4244, "x":6.95102, "y":0.56457, "heading":1.5756, "vx":-0.99207, "vy":0.37587, "omega":0.02444, "ax":-2.33678, "ay":0.88557, "alpha":0.0553, "fx":[-25.7889,-25.74266,-25.61887,-25.66797], "fy":[9.51815,9.64084,9.96577,9.84021]}, + {"t":0.45977, "x":6.91447, "y":0.57841, "heading":1.57647, "vx":-1.07471, "vy":0.40719, "omega":0.02639, "ax":-2.33662, "ay":0.88555, "alpha":0.05483, "fx":[-25.78642,-25.74045,-25.61777,-25.66657], "fy":[9.5198,9.64172,9.96373,9.83899]}, + {"t":0.49514, "x":6.875, "y":0.59337, "heading":1.5774, "vx":-1.15735, "vy":0.43851, "omega":0.02833, "ax":-2.33644, "ay":0.88553, "alpha":0.05432, "fx":[-25.78375,-25.73806,-25.61659,-25.66505], "fy":[9.52157,9.64266,9.96153,9.83768]}, + {"t":0.5305, "x":6.83261, "y":0.60943, "heading":1.5784, "vx":-1.23999, "vy":0.46983, "omega":0.03025, "ax":-2.33625, "ay":0.88551, "alpha":0.05377, "fx":[-25.78086,-25.73547,-25.61531,-25.66341], "fy":[9.5235,9.64368,9.95914,9.83626]}, + {"t":0.56587, "x":6.78729, "y":0.6266, "heading":1.57947, "vx":-1.32261, "vy":0.50115, "omega":0.03216, "ax":-2.33604, "ay":0.88549, "alpha":0.05317, "fx":[-25.77771,-25.73266,-25.61392,-25.66162], "fy":[9.52559,9.64477,9.95654,9.83474]}, + {"t":0.60124, "x":6.73906, "y":0.64488, "heading":1.58061, "vx":-1.40523, "vy":0.53246, "omega":0.03404, "ax":-2.33582, "ay":0.88547, "alpha":0.05252, "fx":[-25.77428,-25.72961,-25.61241,-25.65967], "fy":[9.52788,9.64595,9.9537,9.83308]}, + {"t":0.6366, "x":6.6879, "y":0.66426, "heading":1.58181, "vx":-1.48784, "vy":0.56378, "omega":0.03589, "ax":-2.33557, "ay":0.88544, "alpha":0.0518, "fx":[-25.77051,-25.72627,-25.61075,-25.65752], "fy":[9.5304,9.64723,9.95059,9.83129]}, + {"t":0.67197, "x":6.63382, "y":0.68476, "heading":1.58308, "vx":-1.57044, "vy":0.59509, "omega":0.03773, "ax":-2.3353, "ay":0.88542, "alpha":0.05101, "fx":[-25.76637,-25.7226,-25.60893,-25.65514], "fy":[9.53317,9.64861,9.94716,9.82933]}, + {"t":0.70734, "x":6.57681, "y":0.70636, "heading":1.58442, "vx":-1.65303, "vy":0.62641, "omega":0.03953, "ax":-2.33499, "ay":0.88538, "alpha":0.05015, "fx":[-25.76178,-25.71855,-25.60692,-25.65251], "fy":[9.53624,9.65011,9.94337,9.82719]}, + {"t":0.7427, "x":6.51689, "y":0.72906, "heading":1.58582, "vx":-1.73562, "vy":0.65772, "omega":0.0413, "ax":-2.33466, "ay":0.88535, "alpha":0.04918, "fx":[-25.75669,-25.71407,-25.60469,-25.64957], "fy":[9.53965,9.65174,9.93914,9.82485]}, + {"t":0.77807, "x":6.45405, "y":0.75288, "heading":1.58728, "vx":-1.81818, "vy":0.68903, "omega":0.04304, "ax":-2.33429, "ay":0.88531, "alpha":0.04811, "fx":[-25.75098,-25.70908,-25.6022,-25.64627], "fy":[9.54349,9.65354,9.93441,9.82226]}, + {"t":0.81344, "x":6.38829, "y":0.7778, "heading":1.5888, "vx":-1.90074, "vy":0.72035, "omega":0.04474, "ax":-2.33386, "ay":0.88527, "alpha":0.0469, "fx":[-25.74456,-25.70348,-25.5994,-25.64255], "fy":[9.5478,9.65551,9.92908,9.81939]}, + {"t":0.8488, "x":6.3196, "y":0.80383, "heading":1.59038, "vx":-1.98328, "vy":0.75165, "omega":0.0464, "ax":-2.33339, "ay":0.88522, "alpha":0.04553, "fx":[-25.73728,-25.69716,-25.59624,-25.6383], "fy":[9.55271,9.6577,9.92303,9.81618]}, + {"t":0.88417, "x":6.248, "y":0.83097, "heading":1.59202, "vx":-2.06581, "vy":0.78296, "omega":0.04801, "ax":-2.33284, "ay":0.88516, "alpha":0.04397, "fx":[-25.72895,-25.68996,-25.59263,-25.63343], "fy":[9.55833,9.66014,9.91612,9.81257]}, + {"t":0.91954, "x":6.17348, "y":0.85921, "heading":1.59372, "vx":-2.14831, "vy":0.81427, "omega":0.04957, "ax":-2.33221, "ay":0.8851, "alpha":0.04217, "fx":[-25.71933,-25.68168,-25.58846,-25.62778], "fy":[9.56482,9.66289,9.90812,9.80847]}, + {"t":0.95491, "x":6.09604, "y":0.88857, "heading":1.59547, "vx":-2.2308, "vy":0.84557, "omega":0.05106, "ax":-2.33148, "ay":0.88502, "alpha":0.04008, "fx":[-25.7081,-25.67206,-25.58361,-25.62116], "fy":[9.57239,9.66601,9.8988,9.80377]}, + {"t":0.99027, "x":6.01569, "y":0.91902, "heading":1.59728, "vx":-2.31325, "vy":0.87687, "omega":0.05248, "ax":-2.33061, "ay":0.88493, "alpha":0.03761, "fx":[-25.69483,-25.66073,-25.57787,-25.6133], "fy":[9.58135,9.6696,9.88779,9.79829]}, + {"t":1.02564, "x":5.93242, "y":0.95059, "heading":1.59914, "vx":-2.39568, "vy":0.90817, "omega":0.05381, "ax":-2.32957, "ay":0.88482, "alpha":0.03466, "fx":[-25.6789,-25.6472,-25.57099,-25.60382], "fy":[9.59209,9.67379,9.87459,9.79183]}, + {"t":1.06101, "x":5.84623, "y":0.98326, "heading":1.60104, "vx":-2.47807, "vy":0.93946, "omega":0.05503, "ax":-2.32829, "ay":0.88469, "alpha":0.03107, "fx":[-25.65943,-25.63074,-25.56258,-25.59217], "fy":[9.60518,9.67877,9.85849,9.78406]}, + {"t":1.09637, "x":5.75714, "y":1.01704, "heading":1.60298, "vx":-2.56041, "vy":0.97075, "omega":0.05613, "ax":-2.3267, "ay":0.88453, "alpha":0.02661, "fx":[-25.63511,-25.61027,-25.55205,-25.57755], "fy":[9.62148,9.68481,9.83846,9.77452]}, + {"t":1.13174, "x":5.66513, "y":1.05193, "heading":1.60497, "vx":-2.6427, "vy":1.00203, "omega":0.05707, "ax":-2.32466, "ay":0.88432, "alpha":0.02092, "fx":[-25.60388,-25.5841,-25.53849,-25.55867], "fy":[9.6423,9.69232,9.81285,9.76246]}, + {"t":1.16711, "x":5.57021, "y":1.08792, "heading":1.60699, "vx":-2.72492, "vy":1.03331, "omega":0.05781, "ax":-2.32194, "ay":0.88403, "alpha":0.0134, "fx":[-25.56232,-25.54946,-25.52036,-25.53339], "fy":[9.66979,9.70199,9.77902,9.74667]}, + {"t":1.20247, "x":5.47239, "y":1.12502, "heading":1.60903, "vx":-2.80704, "vy":1.06457, "omega":0.05829, "ax":-2.31815, "ay":0.88364, "alpha":0.00302, "fx":[-25.50436,-25.50141,-25.49488,-25.49784], "fy":[9.7077,9.71499,9.73231,9.72501]}, + {"t":1.23784, "x":5.37166, "y":1.16322, "heading":1.61109, "vx":-2.88902, "vy":1.09583, "omega":0.05839, "ax":-2.31248, "ay":0.88304, "alpha":-0.01223, "fx":[-25.41798,-25.43024,-25.45646,-25.44434], "fy":[9.76319,9.73353,9.66375,9.69329]}, + {"t":1.27321, "x":5.26804, "y":1.20253, "heading":1.61316, "vx":-2.97081, "vy":1.12706, "omega":0.05796, "ax":-2.30311, "ay":0.88204, "alpha":-0.03683, "fx":[-25.27571,-25.31401,-25.392,-25.35495], "fy":[9.85194,9.76231,9.55357,9.6421]}, + {"t":1.30857, "x":5.16153, "y":1.24294, "heading":1.61521, "vx":-3.05226, "vy":1.15825, "omega":0.05666, "ax":-2.28471, "ay":0.88005, "alpha":-0.08306, "fx":[-24.99832,-25.09023,-25.26228,-25.17654], "fy":[10.01588,9.81332,9.34802,9.54509]}, + {"t":1.34394, "x":5.05215, "y":1.28445, "heading":1.61721, "vx":-3.13306, "vy":1.18938, "omega":0.05372, "ax":-2.23285, "ay":0.87419, "alpha":-0.2014, "fx":[-24.22756,-24.48436,-24.87808,-24.65539], "fy":[10.41522,9.92742,8.8321,9.28953]}, + {"t":1.37931, "x":4.93995, "y":1.32707, "heading":1.61911, "vx":-3.21203, "vy":1.22029, "omega":0.0466, "ax":-1.48281, "ay":0.75216, "alpha":-1.30442, "fx":[-13.87098,-17.34108,-18.58035,-15.45137], "fy":[12.03015,9.96521,4.81368,6.28606]}, + {"t":1.41467, "x":4.82542, "y":1.37069, "heading":1.62076, "vx":-3.26448, "vy":1.24689, "omega":0.00046, "ax":0.13101, "ay":0.37941, "alpha":-0.00996, "fx":[1.45699,1.42298,1.42521,1.45923], "fy":[4.19038,4.18928,4.15655,4.15766]}, + {"t":1.45004, "x":4.71005, "y":1.41503, "heading":1.62078, "vx":-3.25984, "vy":1.26031, "omega":0.00011, "ax":0.2102, "ay":0.53909, "alpha":-0.00002, "fx":[2.31225,2.31216,2.31217,2.31225], "fy":[5.93006,5.93006,5.92999,5.92999]}, + {"t":1.48541, "x":4.59489, "y":1.45994, "heading":1.62078, "vx":-3.25241, "vy":1.27938, "omega":0.00011, "ax":0.31837, "ay":0.79901, "alpha":0.0, "fx":[3.50211,3.50212,3.50212,3.50211], "fy":[8.78906,8.78906,8.78906,8.78907]}, + {"t":1.52077, "x":4.48006, "y":1.50569, "heading":1.62079, "vx":-3.24115, "vy":1.30764, "omega":0.00011, "ax":0.46051, "ay":1.12129, "alpha":0.00001, "fx":[5.0656,5.06562,5.06562,5.06559], "fy":[12.3342,12.3342,12.33422,12.33422]}, + {"t":1.55614, "x":4.36572, "y":1.55264, "heading":1.62079, "vx":-3.22486, "vy":1.34729, "omega":0.00011, "ax":0.6113, "ay":1.43094, "alpha":0.00001, "fx":[6.72426,6.7243,6.72429,6.72425], "fy":[15.74037,15.74036,15.74039,15.7404]}, + {"t":1.59151, "x":4.25205, "y":1.60118, "heading":1.62079, "vx":-3.20324, "vy":1.3979, "omega":0.00011, "ax":0.74767, "ay":1.67018, "alpha":0.00002, "fx":[8.22431,8.22438,8.22436,8.22429], "fy":[18.37201,18.37199,18.37203,18.37205]}, + {"t":1.62688, "x":4.13923, "y":1.65166, "heading":1.6208, "vx":-3.1768, "vy":1.45697, "omega":0.00011, "ax":0.86283, "ay":1.83065, "alpha":0.00002, "fx":[9.4911,9.49121,9.49117,9.49106], "fy":[20.13715,20.13711,20.13716,20.13719]}, + {"t":1.66224, "x":4.02742, "y":1.70434, "heading":1.6208, "vx":-3.14628, "vy":1.52172, "omega":0.00011, "ax":0.95994, "ay":1.92956, "alpha":0.00003, "fx":[10.5593,10.55945,10.55938,10.55924], "fy":[21.22518,21.22513,21.22519,21.22524]}, + {"t":1.69761, "x":3.91674, "y":1.75936, "heading":1.62081, "vx":-3.11233, "vy":1.58996, "omega":0.00011, "ax":1.04406, "ay":1.98625, "alpha":0.00004, "fx":[11.48457,11.48475,11.48466,11.48447], "fy":[21.84875,21.84866,21.84874,21.84882]}, + {"t":1.73298, "x":3.80732, "y":1.81684, "heading":1.62081, "vx":-3.07541, "vy":1.66021, "omega":0.00012, "ax":1.11923, "ay":2.01497, "alpha":0.00005, "fx":[12.31148,12.3117,12.31158,12.31135], "fy":[22.16468,22.16457,22.16466,22.16477]}, + {"t":1.76834, "x":3.69925, "y":1.87681, "heading":1.62081, "vx":-3.03582, "vy":1.73147, "omega":0.00012, "ax":1.1882, "ay":2.02503, "alpha":0.00006, "fx":[13.07019,13.07047,13.0703,13.07002], "fy":[22.2753,22.27515,22.27527,22.27542]}, + {"t":1.80371, "x":3.59263, "y":1.93932, "heading":1.62082, "vx":-2.9938, "vy":1.80309, "omega":0.00012, "ax":1.25276, "ay":2.02228, "alpha":0.00013, "fx":[13.78028,13.78088,13.78049,13.77989], "fy":[22.24509,22.24474,22.24502,22.24537]}, + {"t":1.83908, "x":3.48753, "y":2.00435, "heading":1.62082, "vx":-2.94949, "vy":1.87461, "omega":0.00012, "ax":1.31443, "ay":2.01017, "alpha":0.00131, "fx":[14.45782,14.46364,14.45964,14.45382], "fy":[22.1122,22.10864,22.11159,22.11515]}, + {"t":1.87444, "x":3.38404, "y":2.07191, "heading":1.62083, "vx":-2.90301, "vy":1.9457, "omega":0.00017, "ax":1.38013, "ay":1.98675, "alpha":0.01943, "fx":[15.17038,15.25384,15.19255,15.10906], "fy":[21.85838,21.80344,21.85033,21.90497]}, + {"t":1.90981, "x":3.28223, "y":2.14196, "heading":1.62083, "vx":-2.8542, "vy":2.01597, "omega":0.00086, "ax":1.51919, "ay":1.89865, "alpha":0.22242, "fx":[16.64798,17.50592,16.78182,15.90876], "fy":[20.90955,20.23541,20.87768,21.51814]}, + {"t":1.94518, "x":3.18224, "y":2.21445, "heading":1.62086, "vx":-2.80047, "vy":2.08312, "omega":0.00872, "ax":1.92331, "ay":1.48832, "alpha":0.84237, "fx":[21.66948,23.3701,20.95664,18.62951], "fy":[15.75447,13.35819,16.98637,19.38687]}, + {"t":1.98054, "x":3.0844, "y":2.28905, "heading":1.62117, "vx":-2.73245, "vy":2.13575, "omega":0.03852, "ax":2.27902, "ay":0.88741, "alpha":0.83855, "fx":[25.78918,26.22784,24.65265,23.607], "fy":[7.91383,6.73389,11.25855,13.13968]}, + {"t":2.01591, "x":2.98918, "y":2.36514, "heading":1.62253, "vx":-2.65184, "vy":2.16714, "omega":0.06817, "ax":2.42108, "ay":0.44169, "alpha":0.66337, "fx":[26.97752,27.05941,26.38746,26.1033], "fy":[2.83097,2.62385,6.56707,7.4124]}, + {"t":2.05128, "x":2.89691, "y":2.44206, "heading":1.62494, "vx":-2.56622, "vy":2.18276, "omega":0.09163, "ax":2.46664, "ay":0.15082, "alpha":0.52063, "fx":[27.21933,27.25683,27.06134,26.99483], "fy":[-0.156,0.03712,3.26059,3.49455]}, + {"t":2.08664, "x":2.8077, "y":2.51936, "heading":1.62819, "vx":-2.47898, "vy":2.18809, "omega":0.11005, "ax":2.47749, "ay":-0.0434, "alpha":0.41825, "fx":[27.20502,27.25267,27.28723,27.26478], "fy":[-2.03283,-1.68962,0.94031,0.87235]}, + {"t":2.12201, "x":2.72157, "y":2.59671, "heading":1.63208, "vx":-2.39136, "vy":2.18656, "omega":0.12484, "ax":2.47588, "ay":-0.17936, "alpha":0.3441, "fx":[27.12288,27.18434,27.32757,27.3039], "fy":[-3.29999,-2.90853,-0.7363,-0.94696]}, + {"t":2.15738, "x":2.63854, "y":2.67393, "heading":1.63649, "vx":-2.3038, "vy":2.18022, "omega":0.13701, "ax":2.46988, "ay":-0.27883, "alpha":0.2887, "fx":[27.02797,27.09882,27.29086,27.25703], "fy":[-4.20627,-3.80926,-1.98925,-2.26393]}, + {"t":2.19275, "x":2.55861, "y":2.75087, "heading":1.64134, "vx":-2.21644, "vy":2.17035, "omega":0.14722, "ax":2.46258, "ay":-0.35437, "alpha":0.24602, "fx":[26.93706,27.01292,27.22345,27.18003], "fy":[-4.88404,-4.49969,-2.95475,-3.25393]}, + {"t":2.22811, "x":2.48176, "y":2.8274, "heading":1.64655, "vx":-2.12935, "vy":2.15782, "omega":0.15592, "ax":2.45519, "ay":-0.41351, "alpha":0.21226, "fx":[26.85483,26.93251,27.14581,27.0954], "fy":[-5.4089,-5.04474,-3.71859,-4.02199]}, + {"t":2.26348, "x":2.40799, "y":2.90346, "heading":1.65206, "vx":-2.04252, "vy":2.1432, "omega":0.16343, "ax":2.4482, "ay":-0.46096, "alpha":0.18494, "fx":[26.7819,26.8593,27.06716,27.01232], "fy":[-5.8268,-5.48546,-4.33652,-4.63361]}, + {"t":2.29885, "x":2.33728, "y":2.97897, "heading":1.65784, "vx":-1.95593, "vy":2.12689, "omega":0.16997, "ax":2.44175, "ay":-0.49985, "alpha":0.16241, "fx":[26.71759,26.79334,26.99157,26.93434], "fy":[-6.1671,-5.84895,-4.84591,-5.13129]}, + {"t":2.33421, "x":2.26964, "y":3.05388, "heading":1.66385, "vx":-1.86958, "vy":2.10922, "omega":0.17571, "ax":2.43587, "ay":-0.53226, "alpha":0.14353, "fx":[26.66086,26.73413,26.92071,26.86263], "fy":[-6.44941,-6.15377,-5.27263,-5.54367]}, + {"t":2.36958, "x":2.20504, "y":3.12814, "heading":1.67007, "vx":-1.78343, "vy":2.09039, "omega":0.18079, "ax":2.43054, "ay":-0.55968, "alpha":0.12748, "fx":[26.61066,26.68093,26.85509,26.79726], "fy":[-6.68728,-6.41302,-5.63503,-5.89062]}, + {"t":2.40495, "x":2.14348, "y":3.20172, "heading":1.67646, "vx":-1.69747, "vy":2.0706, "omega":0.1853, "ax":2.42095, "ay":-0.58375, "alpha":0.11706, "fx":[26.50953,26.5801,26.74606,26.68627], "fy":[-6.91002,-6.64847,-5.93993,-6.1864]}, + {"t":2.428, "x":2.105, "y":3.2493, "heading":1.68073, "vx":-1.64166, "vy":2.05714, "omega":0.188, "ax":2.41558, "ay":-0.60791, "alpha":0.10925, "fx":[26.45335,26.52358,26.68448,26.6239], "fy":[-7.14492,-6.89258,-6.23551,-6.47519]}, + {"t":2.45105, "x":2.0678, "y":3.29656, "heading":1.68506, "vx":-1.58598, "vy":2.04313, "omega":0.19051, "ax":2.41041, "ay":-0.6301, "alpha":0.10205, "fx":[26.39995,26.46948,26.62484,26.56392], "fy":[-7.36019,-7.11725,-6.50738,-6.73969]}, + {"t":2.4741, "x":2.03188, "y":3.34349, "heading":1.68946, "vx":-1.53041, "vy":2.0286, "omega":0.19287, "ax":2.40547, "ay":-0.65054, "alpha":0.09538, "fx":[26.34921,26.41776,26.56726,26.50637], "fy":[-7.55816,-7.32468,-6.75821,-6.98275]}, + {"t":2.49715, "x":1.99724, "y":3.39008, "heading":1.6939, "vx":-1.47496, "vy":2.01361, "omega":0.19507, "ax":2.40074, "ay":-0.66942, "alpha":0.0892, "fx":[26.30101,26.36833,26.51177,26.45127], "fy":[-7.74078,-7.51675,-6.99029,-7.2068]}, + {"t":2.5202, "x":1.96388, "y":3.43632, "heading":1.6984, "vx":-1.41962, "vy":1.99818, "omega":0.19712, "ax":2.39621, "ay":-0.68692, "alpha":0.08345, "fx":[26.25522,26.32111,26.45838,26.39854], "fy":[-7.90976,-7.69509,-7.20559,-7.41392]}, + {"t":2.54325, "x":1.93179, "y":3.48219, "heading":1.70294, "vx":-1.36439, "vy":1.98234, "omega":0.19904, "ax":2.39188, "ay":-0.70317, "alpha":0.07809, "fx":[26.2117,26.276,26.40707,26.34814], "fy":[-8.06653,-7.8611,-7.40583,-7.60592]}, + {"t":2.56631, "x":1.90097, "y":3.5277, "heading":1.70753, "vx":-1.30925, "vy":1.96613, "omega":0.20085, "ax":2.38775, "ay":-0.7183, "alpha":0.07309, "fx":[26.17032,26.23289,26.35779,26.29997], "fy":[-8.21236,-8.01602,-7.59252,-7.78436]}, + {"t":2.58936, "x":1.87143, "y":3.57283, "heading":1.71216, "vx":-1.25421, "vy":1.94957, "omega":0.20253, "ax":2.3838, "ay":-0.73243, "alpha":0.0684, "fx":[26.13095,26.19168,26.31047,26.25393], "fy":[-8.34833,-8.16091,-7.76694,-7.95057]}, + {"t":2.61241, "x":1.84315, "y":3.61758, "heading":1.71683, "vx":-1.19926, "vy":1.93269, "omega":0.20411, "ax":2.38002, "ay":-0.74564, "alpha":0.06401, "fx":[26.09348,26.15228,26.26504,26.20994], "fy":[-8.4754,-8.29672,-7.93025,-8.10576]}, + {"t":2.63546, "x":1.81614, "y":3.66193, "heading":1.72153, "vx":-1.1444, "vy":1.9155, "omega":0.20558, "ax":2.3764, "ay":-0.75802, "alpha":0.05988, "fx":[26.05778,26.11458,26.22144,26.1679], "fy":[-8.5944,-8.42426,-8.08347,-8.25094]}, + {"t":2.65851, "x":1.79039, "y":3.70589, "heading":1.72627, "vx":-1.08962, "vy":1.89803, "omega":0.20696, "ax":2.37294, "ay":-0.76966, "alpha":0.05599, "fx":[26.02375,26.0785,26.17958,26.1277], "fy":[-8.70607,-8.54427,-8.22748,-8.38705]}, + {"t":2.68156, "x":1.7659, "y":3.74943, "heading":1.73104, "vx":-1.03492, "vy":1.88029, "omega":0.20825, "ax":2.36963, "ay":-0.7806, "alpha":0.05232, "fx":[25.99128,26.04393,26.13938,26.08925], "fy":[-8.81106,-8.6574,-8.36309,-8.51487]}, + {"t":2.70462, "x":1.74267, "y":3.79257, "heading":1.73584, "vx":-0.98029, "vy":1.86229, "omega":0.20946, "ax":2.36646, "ay":-0.79092, "alpha":0.04886, "fx":[25.96028,26.0108,26.10077,26.05245], "fy":[-8.90994,-8.76423,-8.49099,-8.63514]}, + {"t":2.72767, "x":1.72071, "y":3.83529, "heading":1.74067, "vx":-0.92574, "vy":1.84406, "omega":0.21059, "ax":2.36342, "ay":-0.80065, "alpha":0.04558, "fx":[25.93066,25.97902,26.06367,26.01723], "fy":[-9.00322,-8.86526,-8.61181,-8.74847]}, + {"t":2.75072, "x":1.69999, "y":3.87759, "heading":1.74553, "vx":-0.87126, "vy":1.82561, "omega":0.21164, "ax":2.36051, "ay":-0.80986, "alpha":0.04248, "fx":[25.90234,25.94853,26.02801,25.98349], "fy":[-9.09136,-8.96096,-8.72612,-8.85545]}, + {"t":2.77377, "x":1.68054, "y":3.91945, "heading":1.75041, "vx":-0.81685, "vy":1.80694, "omega":0.21261, "ax":2.35771, "ay":-0.81858, "alpha":0.03953, "fx":[25.87523,25.91924,25.99372,25.95116], "fy":[-9.17477,-9.05174,-8.83443,-8.95657]}, + {"t":2.79682, "x":1.66233, "y":3.96089, "heading":1.75531, "vx":-0.7625, "vy":1.78807, "omega":0.21353, "ax":2.35503, "ay":-0.82685, "alpha":0.03673, "fx":[25.84928,25.8911,25.96073,25.92016], "fy":[-9.25382,-9.13798,-8.93719,-9.0523]}, + {"t":2.81987, "x":1.64538, "y":4.00189, "heading":1.76023, "vx":-0.70821, "vy":1.76901, "omega":0.21437, "ax":2.35245, "ay":-0.8347, "alpha":0.03407, "fx":[25.8244,25.86403,25.92897,25.89042], "fy":[-9.32884,-9.22001,-9.03481,-9.14304]}, + {"t":2.84292, "x":1.62968, "y":4.04244, "heading":1.76517, "vx":-0.65399, "vy":1.74977, "omega":0.21516, "ax":2.34997, "ay":-0.84216, "alpha":0.03154, "fx":[25.80054,25.83799,25.89839,25.86187], "fy":[-9.40012,-9.29813,-9.12766,-9.22917]}, + {"t":2.86598, "x":1.61523, "y":4.08255, "heading":1.77013, "vx":-0.59982, "vy":1.73035, "omega":0.21589, "ax":2.34759, "ay":-0.84926, "alpha":0.02913, "fx":[25.77763,25.81291,25.86893,25.83444], "fy":[-9.46794,-9.37262,-9.21608,-9.31101]}, + {"t":2.88903, "x":1.60203, "y":4.12221, "heading":1.77511, "vx":-0.5457, "vy":1.71078, "omega":0.21656, "ax":2.3453, "ay":-0.85603, "alpha":0.02682, "fx":[25.75564,25.78875,25.84053,25.80809], "fy":[-9.53253,-9.44373,-9.30039,-9.38887]}, + {"t":2.91208, "x":1.59007, "y":4.16142, "heading":1.7801, "vx":-0.49164, "vy":1.69104, "omega":0.21718, "ax":2.34309, "ay":-0.86249, "alpha":0.02462, "fx":[25.7345,25.76545,25.81315,25.78275], "fy":[-9.59413,-9.51169,-9.38084,-9.46303]}, + {"t":2.93513, "x":1.57936, "y":4.20018, "heading":1.7851, "vx":-0.43763, "vy":1.67116, "omega":0.21774, "ax":2.34096, "ay":-0.86866, "alpha":0.02252, "fx":[25.71416,25.74298,25.78672,25.75837], "fy":[-9.65293,-9.57671,-9.45771,-9.53373]}, + {"t":2.95818, "x":1.5699, "y":4.23847, "heading":1.79012, "vx":-0.38366, "vy":1.65114, "omega":0.21826, "ax":2.33891, "ay":-0.87456, "alpha":0.02051, "fx":[25.69459,25.72128,25.76121,25.73491], "fy":[-9.70912,-9.63897,-9.53122,-9.60121]}, + {"t":2.98123, "x":1.56167, "y":4.2763, "heading":1.79515, "vx":-0.32975, "vy":1.63098, "omega":0.21873, "ax":2.33693, "ay":-0.8802, "alpha":0.01858, "fx":[25.67575,25.70033,25.73658,25.71231], "fy":[-9.76286,-9.69866,-9.60159,-9.66568]}, + {"t":3.00428, "x":1.55469, "y":4.31366, "heading":1.8002, "vx":-0.27588, "vy":1.61069, "omega":0.21916, "ax":2.33502, "ay":-0.8856, "alpha":0.01673, "fx":[25.65759,25.68008,25.71277,25.69054], "fy":[-9.81432,-9.75592,-9.66901,-9.72732]}, + {"t":3.02734, "x":1.54895, "y":4.35055, "heading":1.80525, "vx":-0.22205, "vy":1.59027, "omega":0.21955, "ax":2.33318, "ay":-0.89078, "alpha":0.01495, "fx":[25.64008,25.66049,25.68976,25.66955], "fy":[-9.86363,-9.81091,-9.73366,-9.78631]}, + {"t":3.05039, "x":1.54446, "y":4.38697, "heading":1.81031, "vx":-0.16827, "vy":1.56974, "omega":0.21989, "ax":2.3314, "ay":-0.89575, "alpha":0.01325, "fx":[25.62318,25.64154,25.6675,25.6493], "fy":[-9.91092,-9.86377,-9.79571,-9.84281]}, + {"t":3.07344, "x":1.5412, "y":4.42292, "heading":1.81538, "vx":-0.11453, "vy":1.54909, "omega":0.2202, "ax":2.32968, "ay":-0.90053, "alpha":0.01161, "fx":[25.60687,25.6232,25.64596,25.62976], "fy":[-9.95632,-9.91461,-9.8553,-9.89698]}, + {"t":3.09649, "x":1.53918, "y":4.45839, "heading":1.82045, "vx":-0.06083, "vy":1.52833, "omega":0.22047, "ax":2.32801, "ay":-0.90511, "alpha":0.01003, "fx":[25.59112,25.60543,25.62512,25.6109], "fy":[-9.99994,-9.96356,-9.91259,-9.94895]}, + {"t":3.11954, "x":1.53839, "y":4.49338, "heading":1.82554, "vx":-0.00716, "vy":1.50747, "omega":0.2207, "ax":2.3264, "ay":-0.90953, "alpha":0.00852, "fx":[25.5759,25.58821,25.60493,25.59268], "fy":[-10.04187,-10.01071,-9.9677,-9.99884]}, + {"t":3.14259, "x":1.53884, "y":4.52789, "heading":1.83062, "vx":0.04647, "vy":1.4865, "omega":0.22089, "ax":2.32484, "ay":-0.91377, "alpha":0.00705, "fx":[25.56118,25.57152,25.58536,25.57507], "fy":[-10.08221,-10.05618,-10.02074,-10.04677]}, + {"t":3.16564, "x":1.54053, "y":4.56191, "heading":1.83572, "vx":0.10006, "vy":1.46544, "omega":0.22106, "ax":2.32333, "ay":-0.91786, "alpha":0.00565, "fx":[25.54694,25.55532,25.5664,25.55805], "fy":[-10.12106,-10.10004,-10.07184,-10.09285]}, + {"t":3.1887, "x":1.54346, "y":4.59545, "heading":1.84081, "vx":0.15361, "vy":1.44428, "omega":0.22119, "ax":2.32187, "ay":-0.9218, "alpha":0.00429, "fx":[25.53316,25.5396,25.54802,25.54158], "fy":[-10.15849,-10.14239,-10.1211,-10.13719]}, + {"t":3.21175, "x":1.54762, "y":4.6285, "heading":1.84591, "vx":0.20714, "vy":1.42303, "omega":0.22129, "ax":2.32045, "ay":-0.9256, "alpha":0.00298, "fx":[25.51981,25.52434,25.53018,25.52565], "fy":[-10.19458,-10.18331,-10.1686,-10.17987]}, + {"t":3.2348, "x":1.55301, "y":4.66105, "heading":1.85101, "vx":0.26063, "vy":1.4017, "omega":0.22135, "ax":2.31908, "ay":-0.92927, "alpha":0.00171, "fx":[25.50688,25.50952,25.51287,25.51024], "fy":[-10.2294,-10.22286,-10.21445,-10.22099]}, + {"t":3.25785, "x":1.55963, "y":4.69312, "heading":1.85611, "vx":0.31408, "vy":1.38028, "omega":0.22139, "ax":2.31775, "ay":-0.93281, "alpha":0.00049, "fx":[25.49435,25.49511,25.49607,25.4953], "fy":[-10.26301,-10.26112,-10.25873,-10.26062]}, + {"t":3.2809, "x":1.56749, "y":4.72469, "heading":1.86122, "vx":0.36751, "vy":1.35877, "omega":0.2214, "ax":2.31645, "ay":-0.93623, "alpha":-0.00069, "fx":[25.48219,25.4811,25.47975,25.48084], "fy":[-10.29548,-10.29816,-10.30152,-10.29883]}, + {"t":3.30395, "x":1.57657, "y":4.75576, "heading":1.86632, "vx":0.42091, "vy":1.33719, "omega":0.22139, "ax":2.3152, "ay":-0.93953, "alpha":-0.00183, "fx":[25.4704,25.46747,25.4639,25.46682], "fy":[-10.32686,-10.33402,-10.34288,-10.33571]}, + {"t":3.32701, "x":1.58689, "y":4.78633, "heading":1.87142, "vx":0.47428, "vy":1.31553, "omega":0.22135, "ax":2.31369, "ay":-0.94795, "alpha":-0.00383, "fx":[25.45748,25.45128,25.44378,25.45], "fy":[-10.41072,-10.42582,-10.44415,-10.42905]}, + {"t":3.36536, "x":1.60678, "y":4.8361, "heading":1.87991, "vx":0.56302, "vy":1.27917, "omega":0.2212, "ax":2.30814, "ay":-0.96105, "alpha":-0.00607, "fx":[25.40052,25.39038,25.37845,25.38863], "fy":[-10.54507,-10.56938,-10.59806,-10.57375]}, + {"t":3.40372, "x":1.63008, "y":4.88445, "heading":1.8884, "vx":0.65155, "vy":1.24231, "omega":0.22097, "ax":2.30193, "ay":-0.97544, "alpha":-0.00855, "fx":[25.33698,25.32225,25.30543,25.32023], "fy":[-10.69265,-10.72736,-10.76709,-10.73239]}, + {"t":3.44207, "x":1.65676, "y":4.93139, "heading":1.89687, "vx":0.73985, "vy":1.2049, "omega":0.22064, "ax":2.29496, "ay":-0.99132, "alpha":-0.01128, "fx":[25.26568,25.24558,25.22332,25.24352], "fy":[-10.85549,-10.90197,-10.95355,-10.90709]}, + {"t":3.48043, "x":1.68683, "y":4.97687, "heading":1.90534, "vx":0.82787, "vy":1.16687, "omega":0.22021, "ax":2.28707, "ay":-1.00892, "alpha":-0.01433, "fx":[25.18514,25.15871,25.13036,25.15695], "fy":[-11.03607,-11.09594,-11.16023,-11.10041]}, + {"t":3.51879, "x":1.72026, "y":5.02089, "heading":1.91378, "vx":0.9156, "vy":1.12818, "omega":0.21966, "ax":2.27809, "ay":-1.02855, "alpha":-0.01773, "fx":[25.09349,25.05956,25.02435,25.05851], "fy":[-11.23744,-11.31259,-11.39056,-11.3155]}, + {"t":3.55714, "x":1.75706, "y":5.0634, "heading":1.92221, "vx":1.00297, "vy":1.08872, "omega":0.21898, "ax":2.26777, "ay":-1.05055, "alpha":-0.02156, "fx":[24.98832,24.94542,24.90244,24.94569], "fy":[-11.46334,-11.55604,-11.64874,-11.5562]}, + {"t":3.5955, "x":1.7972, "y":5.10439, "heading":1.93061, "vx":1.08996, "vy":1.04843, "omega":0.21815, "ax":2.2558, "ay":-1.07539, "alpha":-0.0259, "fx":[24.86654,24.81277,24.76093,24.81517], "fy":[-11.71849,-11.83144,-11.94003,-11.82735]}, + {"t":3.63385, "x":1.84066, "y":5.14381, "heading":1.93897, "vx":1.17648, "vy":1.00718, "omega":0.21716, "ax":2.24178, "ay":-1.10364, "alpha":-0.03087, "fx":[24.72399,24.65695,24.59493,24.66261], "fy":[-12.00885,-12.14535,-12.27105,-12.13501]}, + {"t":3.67221, "x":1.88744, "y":5.18163, "heading":1.9473, "vx":1.26247, "vy":0.96485, "omega":0.21597, "ax":2.22515, "ay":-1.13603, "alpha":-0.03659, "fx":[24.55512,24.47163,24.39784,24.48217], "fy":[-12.34211,-12.50615,-12.65027,-12.48696]}, + {"t":3.71057, "x":1.9375, "y":5.2178, "heading":1.95559, "vx":1.34782, "vy":0.92128, "omega":0.21457, "ax":2.20515, "ay":-1.17352, "alpha":-0.04327, "fx":[24.35227,24.24808,24.16057,24.26582], "fy":[-12.72826,-12.92482,-13.08864,-12.89326]}, + {"t":3.74892, "x":1.99082, "y":5.25228, "heading":1.96382, "vx":1.4324, "vy":0.87626, "omega":0.21291, "ax":2.18071, "ay":-1.21736, "alpha":-0.05113, "fx":[24.10459,23.97388,23.8703,24.00233], "fy":[-13.18055,-13.41584,-13.60052,-13.3671]}, + {"t":3.78728, "x":2.04736, "y":5.28499, "heading":1.97198, "vx":1.51604, "vy":0.82957, "omega":0.21095, "ax":2.15026, "ay":-1.26924, "alpha":-0.06053, "fx":[23.79638,23.63098,23.50849,23.67545], "fy":[-13.71687,-13.9987,-14.20502,-13.92613]}, + {"t":3.82564, "x":2.10709, "y":5.31588, "heading":1.98008, "vx":1.59852, "vy":0.78089, "omega":0.20863, "ax":2.11147, "ay":-1.33145, "alpha":-0.07193, "fx":[23.40408,23.19218,23.04752,23.26108], "fy":[-14.36174,-14.70005,-14.92787,-14.59423]}, + {"t":3.86399, "x":2.16996, "y":5.34485, "heading":1.98808, "vx":1.6795, "vy":0.72982, "omega":0.20587, "ax":2.06075, "ay":-1.40715, "alpha":-0.08603, "fx":[22.89103,22.61501,22.44473,22.72215], "fy":[-15.14943,-15.55678,-15.80412,-15.40421]}, + {"t":3.90235, "x":2.23589, "y":5.37181, "heading":1.99597, "vx":1.75855, "vy":0.67585, "omega":0.20257, "ax":1.99226, "ay":-1.50072, "alpha":-0.1038, "fx":[22.19774,21.83036,21.63182,21.99935], "fy":[-16.12847,-16.62037,-16.88149,-16.40154]}, + {"t":3.9407, "x":2.30481, "y":5.39663, "heading":2.00374, "vx":1.83496, "vy":0.61828, "omega":0.19859, "ax":1.89618, "ay":-1.61822, "alpha":-0.12673, "fx":[21.2228,20.72046,20.49485,20.99365], "fy":[-17.36774,-17.96181,-18.22356,-17.64875]}, + {"t":3.97906, "x":2.37659, "y":5.41915, "heading":2.01136, "vx":1.90769, "vy":0.55621, "omega":0.19373, "ax":1.75517, "ay":-1.7675, "alpha":-0.15703, "fx":[19.78408,19.07511,18.83628,19.53205], "fy":[-18.96181,-19.67243,-19.90777,-19.22783]}, + {"t":4.01742, "x":2.45105, "y":5.43919, "heading":2.01879, "vx":1.97501, "vy":0.48842, "omega":0.1877, "ax":1.5375, "ay":-1.95652, "alpha":-0.19782, "fx":[17.53826,16.50584,16.30508,17.3006], "fy":[-21.02159,-21.83942,-21.99889,-21.22683]}, + {"t":4.05577, "x":2.52794, "y":5.45648, "heading":2.02599, "vx":2.03399, "vy":0.41338, "omega":0.18011, "ax":1.18542, "ay":-2.18389, "alpha":-0.25244, "fx":[13.82766,12.30735,12.29544,13.72801], "fy":[-23.58666,-24.41383,-24.43275,-23.65805]}, + {"t":4.09413, "x":2.60682, "y":5.47073, "heading":2.0329, "vx":2.07945, "vy":0.32961, "omega":0.17043, "ax":0.61014, "ay":-2.40443, "alpha":-0.31935, "fx":[7.53525,5.4484,5.96401,7.8985], "fy":[-26.23636,-26.752,-26.65893,-26.14766]}, + {"t":4.13248, "x":2.68703, "y":5.4816, "heading":2.03944, "vx":2.10286, "vy":0.23738, "omega":0.15818, "ax":-0.23606, "ay":-2.46585, "alpha":-0.37772, "fx":[-2.18309,-4.3417,-2.96624,-0.89574], "fy":[-27.1726,-26.92654,-27.13116,-27.2669]}, + {"t":4.17084, "x":2.76752, "y":5.48889, "heading":2.0455, "vx":2.0938, "vy":0.1428, "omega":0.14369, "ax":-1.15461, "ay":-2.19156, "alpha":-0.39107, "fx":[-13.008,-14.27228,-12.45685,-11.06549], "fy":[-23.95773,-23.25206,-24.28701,-24.93168]}, + {"t":4.2092, "x":2.84698, "y":5.49276, "heading":2.05102, "vx":2.04952, "vy":0.05874, "omega":0.12869, "ax":-1.81376, "ay":-1.69211, "alpha":-0.35677, "fx":[-20.54564,-20.91382,-19.43569,-18.91049], "fy":[-17.97579,-17.57596,-19.20428,-19.69681]}, + {"t":4.24755, "x":2.92426, "y":5.49377, "heading":2.05595, "vx":1.97995, "vy":-0.00616, "omega":0.11501, "ax":-2.16705, "ay":-1.21546, "alpha":-0.30682, "fx":[-24.33609,-24.33775,-23.37773,-23.29881], "fy":[-12.46607,-12.49293,-14.20911,-14.31206]}, + {"t":4.28591, "x":2.9986, "y":5.49264, "heading":2.06036, "vx":1.89683, "vy":-0.05278, "omega":0.10324, "ax":-2.33818, "ay":-0.85047, "alpha":-0.2625, "fx":[-26.05884,-25.97468,-25.39226,-25.45425], "fy":[-8.39765,-8.68432,-10.25996,-10.07883]}, + {"t":4.32427, "x":3.06964, "y":5.48999, "heading":2.06432, "vx":1.80714, "vy":-0.0854, "omega":0.09317, "ax":-2.42094, "ay":-0.58497, "alpha":-0.22791, "fx":[-26.84472,-26.76315,-26.4146,-26.49881], "fy":[-5.51224,-5.92651,-7.31904,-6.98074]}, + {"t":4.36262, "x":3.13717, "y":5.48628, "heading":2.0679, "vx":1.71429, "vy":-0.10784, "omega":0.08443, "ax":-2.46175, "ay":-0.39037, "alpha":-0.20148, "fx":[-27.20873,-27.1502,-26.94369,-27.01446], "fy":[-3.43198,-3.90246,-5.12927,-4.71256]}, + {"t":4.40098, "x":3.20112, "y":5.48186, "heading":2.07113, "vx":1.61986, "vy":-0.12281, "omega":0.0767, "ax":-2.48196, "ay":-0.24428, "alpha":-0.18109, "fx":[-27.37414,-27.3396,-27.22131,-27.27118], "fy":[-1.88702,-2.37811,-3.46775,-3.01528]}, + {"t":4.43933, "x":3.26142, "y":5.47697, "heading":2.07408, "vx":1.52466, "vy":-0.13218, "omega":0.06976, "ax":-2.49159, "ay":-0.13167, "alpha":-0.16506, "fx":[-27.44152,-27.42731,-27.36562,-27.3956], "fy":[-0.70487,-1.19906,-2.17764,-1.71183]}, + {"t":4.47769, "x":3.31807, "y":5.4718, "heading":2.07675, "vx":1.4291, "vy":-0.13723, "omega":0.06343, "ax":-2.49559, "ay":-0.04273, "alpha":-0.1522, "fx":[-27.45877,-27.46078,-27.43659,-27.44975], "fy":[0.22402,-0.26474,-1.15336,-0.68592]}, + {"t":4.51605, "x":3.37105, "y":5.46651, "heading":2.07919, "vx":1.33337, "vy":-0.13887, "omega":0.05759, "ax":-2.4965, "ay":0.02904, "alpha":-0.1417, "fx":[-27.44991,-27.46463,-27.46602,-27.46551], "fy":[0.97079,0.49144,-0.32365,0.13932]}, + {"t":4.5544, "x":3.42036, "y":5.4612, "heading":2.08139, "vx":1.23762, "vy":-0.13775, "omega":0.05215, "ax":-2.49571, "ay":0.08804, "alpha":-0.13299, "fx":[-27.42752,-27.4522,-27.47147,-27.45998], "fy":[1.58295,1.11469,0.36035,0.81578]}, + {"t":4.59276, "x":3.46599, "y":5.45598, "heading":2.08339, "vx":1.14189, "vy":-0.13438, "omega":0.04705, "ax":-2.49398, "ay":0.13732, "alpha":-0.12566, "fx":[-27.39844,-27.43092,-27.46296,-27.44267], "fy":[2.09316,1.63648,0.93293,1.37941]}, + {"t":4.63112, "x":3.50795, "y":5.45093, "heading":2.0852, "vx":1.04623, "vy":-0.12911, "omega":0.04223, "ax":-2.49175, "ay":0.17905, "alpha":-0.1194, "fx":[-27.36642,-27.40508,-27.4464,-27.41903], "fy":[2.52452,2.07929,1.41868,1.85568]}, + {"t":4.66947, "x":3.54625, "y":5.44611, "heading":2.08682, "vx":0.95066, "vy":-0.12224, "omega":0.03765, "ax":-2.48928, "ay":0.21482, "alpha":-0.11402, "fx":[-27.3336,-27.37717,-27.42533,-27.39223], "fy":[2.89373,2.45951,1.83557,2.26308]}, + {"t":4.70783, "x":3.58088, "y":5.44158, "heading":2.08826, "vx":0.85518, "vy":-0.114, "omega":0.03328, "ax":-2.48673, "ay":0.24579, "alpha":-0.10933, "fx":[-27.30115,-27.34866,-27.40193,-27.36417], "fy":[3.21316,2.78936,2.19705,2.6153]}, + {"t":4.74618, "x":3.61186, "y":5.43739, "heading":2.08954, "vx":0.7598, "vy":-0.10458, "omega":0.02909, "ax":-2.48417, "ay":0.27287, "alpha":-0.10521, "fx":[-27.26973,-27.32042,-27.37754,-27.33596], "fy":[3.49212,3.07813,2.51332,2.92269]}, + {"t":4.78454, "x":3.63917, "y":5.43358, "heading":2.09066, "vx":0.66452, "vy":-0.09411, "omega":0.02505, "ax":-2.48168, "ay":0.29673, "alpha":-0.10157, "fx":[-27.23967,-27.29294,-27.35298,-27.30826], "fy":[3.73777,3.33296,2.79225,3.19318]}, + {"t":4.8229, "x":3.66283, "y":5.43018, "heading":2.09162, "vx":0.56933, "vy":-0.08273, "omega":0.02116, "ax":-2.47927, "ay":0.31791, "alpha":-0.09833, "fx":[-27.21113,-27.2665,-27.32876,-27.28145], "fy":[3.9557,3.55947,3.04,3.43297]}, + {"t":4.86125, "x":3.68285, "y":5.42725, "heading":2.09243, "vx":0.47423, "vy":-0.07053, "omega":0.01738, "ax":-2.47696, "ay":0.33684, "alpha":-0.09542, "fx":[-27.18415,-27.24123,-27.3052,-27.25572], "fy":[4.1503,3.76208,3.26149,3.64693]}, + {"t":4.89961, "x":3.69922, "y":5.42479, "heading":2.09309, "vx":0.37923, "vy":-0.05761, "omega":0.01372, "ax":-2.47476, "ay":0.35384, "alpha":-0.0928, "fx":[-27.1587,-27.21719,-27.28246,-27.23118], "fy":[4.32511,3.94438,3.46063,3.839]}, + {"t":4.93796, "x":3.71194, "y":5.42284, "heading":2.09362, "vx":0.2843, "vy":-0.04404, "omega":0.01016, "ax":-2.47267, "ay":0.36921, "alpha":-0.09043, "fx":[-27.13473,-27.19438,-27.26065,-27.20785], "fy":[4.48298,4.10925,3.64063,4.01232]}, + {"t":4.97632, "x":3.72103, "y":5.42142, "heading":2.09401, "vx":0.18946, "vy":-0.02988, "omega":0.0067, "ax":-2.47069, "ay":0.38316, "alpha":-0.08828, "fx":[-27.11217,-27.17277,-27.23979,-27.18573], "fy":[4.62624,4.25908,3.80408,4.16949]}, + {"t":5.01468, "x":3.72648, "y":5.42056, "heading":2.09427, "vx":0.09469, "vy":-0.01518, "omega":0.00331, "ax":-2.46882, "ay":0.39587, "alpha":-0.08631, "fx":[-27.09093,-27.15232,-27.2199,-27.16477], "fy":[4.75683,4.39583,3.95316,4.31265]}, + {"t":5.05303, "x":3.72829, "y":5.42026, "heading":2.0944, "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/pathplanner/autos/Test 1M.auto b/src/main/deploy/pathplanner/autos/Center Auto.auto similarity index 61% rename from src/main/deploy/pathplanner/autos/Test 1M.auto rename to src/main/deploy/pathplanner/autos/Center Auto.auto index ae5c9873..4ca87020 100644 --- a/src/main/deploy/pathplanner/autos/Test 1M.auto +++ b/src/main/deploy/pathplanner/autos/Center Auto.auto @@ -7,7 +7,13 @@ { "type": "path", "data": { - "pathName": "1M" + "pathName": "CenterLeftStart-H" + } + }, + { + "type": "path", + "data": { + "pathName": "H-SourceLeft" } } ] diff --git a/src/main/deploy/pathplanner/autos/Test Half Field.auto b/src/main/deploy/pathplanner/autos/Fun Auto.auto similarity index 75% rename from src/main/deploy/pathplanner/autos/Test Half Field.auto rename to src/main/deploy/pathplanner/autos/Fun Auto.auto index 5581ca3c..6b6d0e16 100644 --- a/src/main/deploy/pathplanner/autos/Test Half Field.auto +++ b/src/main/deploy/pathplanner/autos/Fun Auto.auto @@ -7,13 +7,13 @@ { "type": "path", "data": { - "pathName": "Half-Field Sprint" + "pathName": "SourceRight-D" } }, { - "type": "named", + "type": "path", "data": { - "name": "height L4" + "pathName": null } } ] diff --git a/src/main/deploy/pathplanner/autos/Screaming Internally.auto b/src/main/deploy/pathplanner/autos/Screaming Internally.auto new file mode 100644 index 00000000..8bf2ae94 --- /dev/null +++ b/src/main/deploy/pathplanner/autos/Screaming Internally.auto @@ -0,0 +1,127 @@ +{ + "version": "2025.0", + "command": { + "type": "sequential", + "data": { + "commands": [ + { + "type": "path", + "data": { + "pathName": "RStart-E" + } + }, + { + "type": "named", + "data": { + "name": "location E" + } + }, + { + "type": "named", + "data": { + "name": "height L1" + } + }, + { + "type": "named", + "data": { + "name": "place" + } + }, + { + "type": "path", + "data": { + "pathName": "E-CS2" + } + }, + { + "type": "path", + "data": { + "pathName": "CS2-D" + } + }, + { + "type": "named", + "data": { + "name": "location D" + } + }, + { + "type": "named", + "data": { + "name": "height L1" + } + }, + { + "type": "named", + "data": { + "name": "place" + } + }, + { + "type": "path", + "data": { + "pathName": "D-CS2" + } + }, + { + "type": "path", + "data": { + "pathName": "CS2-C" + } + }, + { + "type": "named", + "data": { + "name": "location C" + } + }, + { + "type": "named", + "data": { + "name": "height L1" + } + }, + { + "type": "named", + "data": { + "name": "place" + } + }, + { + "type": "path", + "data": { + "pathName": "C-CS2" + } + }, + { + "type": "path", + "data": { + "pathName": "CS2-B" + } + }, + { + "type": "named", + "data": { + "name": "location B" + } + }, + { + "type": "named", + "data": { + "name": "height L1" + } + }, + { + "type": "named", + "data": { + "name": "place" + } + } + ] + } + }, + "resetOdom": true, + "folder": null, + "choreoAuto": false +} \ No newline at end of file diff --git a/src/main/deploy/pathplanner/autos/Spinny Difficult Auto Choreo.auto b/src/main/deploy/pathplanner/autos/Spinny Difficult Auto Choreo.auto deleted file mode 100644 index ec5f6f58..00000000 --- a/src/main/deploy/pathplanner/autos/Spinny Difficult Auto Choreo.auto +++ /dev/null @@ -1,19 +0,0 @@ -{ - "version": "2025.0", - "command": { - "type": "sequential", - "data": { - "commands": [ - { - "type": "path", - "data": { - "pathName": "Spinny Path" - } - } - ] - } - }, - "resetOdom": true, - "folder": null, - "choreoAuto": true -} \ No newline at end of file diff --git a/src/main/deploy/pathplanner/autos/Test Choreo Auto.auto b/src/main/deploy/pathplanner/autos/Test Choreo Auto.auto deleted file mode 100644 index 7845498b..00000000 --- a/src/main/deploy/pathplanner/autos/Test Choreo Auto.auto +++ /dev/null @@ -1,19 +0,0 @@ -{ - "version": "2025.0", - "command": { - "type": "sequential", - "data": { - "commands": [ - { - "type": "path", - "data": { - "pathName": "QuarterSprint" - } - } - ] - } - }, - "resetOdom": true, - "folder": null, - "choreoAuto": true -} \ No newline at end of file diff --git a/src/main/deploy/pathplanner/autos/help.auto b/src/main/deploy/pathplanner/autos/help.auto new file mode 100644 index 00000000..1fecc710 --- /dev/null +++ b/src/main/deploy/pathplanner/autos/help.auto @@ -0,0 +1,55 @@ +{ + "version": "2025.0", + "command": { + "type": "sequential", + "data": { + "commands": [ + { + "type": "path", + "data": { + "pathName": "RStart-F" + } + }, + { + "type": "path", + "data": { + "pathName": "C-CS2" + } + }, + { + "type": "path", + "data": { + "pathName": "CS1-A" + } + }, + { + "type": "path", + "data": { + "pathName": "B-CS2" + } + }, + { + "type": "path", + "data": { + "pathName": "CS1-A" + } + }, + { + "type": "path", + "data": { + "pathName": "B-CS2" + } + }, + { + "type": "path", + "data": { + "pathName": "CS1-B" + } + } + ] + } + }, + "resetOdom": true, + "folder": null, + "choreoAuto": false +} \ No newline at end of file diff --git a/src/main/deploy/pathplanner/autos/test.auto b/src/main/deploy/pathplanner/autos/test.auto new file mode 100644 index 00000000..42e719b7 --- /dev/null +++ b/src/main/deploy/pathplanner/autos/test.auto @@ -0,0 +1,31 @@ +{ + "version": "2025.0", + "command": { + "type": "sequential", + "data": { + "commands": [ + { + "type": "path", + "data": { + "pathName": "test1" + } + }, + { + "type": "path", + "data": { + "pathName": "test2" + } + }, + { + "type": "named", + "data": { + "name": "height L4" + } + } + ] + } + }, + "resetOdom": true, + "folder": null, + "choreoAuto": false +} \ No newline at end of file diff --git a/src/main/deploy/pathplanner/navgrid.json b/src/main/deploy/pathplanner/navgrid.json index bab0da93..23e0db94 100644 --- a/src/main/deploy/pathplanner/navgrid.json +++ b/src/main/deploy/pathplanner/navgrid.json @@ -1 +1 @@ -{"field_size":{"x":16.54,"y":8.21},"nodeSizeMeters":0.3,"grid":[[true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true],[true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true],[true,true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true,true,true],[true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true],[true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true],[true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true],[true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true],[true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true],[true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true],[true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true],[true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true],[true,true,false,false,false,false,false,false,false,false,true,true,true,false,false,false,false,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,false,false,false,false,true,true,true,false,false,false,false,false,false,false,false,false,true,true],[true,true,false,false,false,false,false,false,false,true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true,false,false,false,false,false,false,false,false,true,true],[true,true,false,false,false,false,false,false,false,true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true,false,false,false,false,false,false,false,true,true,true],[true,true,true,false,false,false,false,false,false,true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true,false,false,false,false,false,false,true,true,true,true],[true,true,true,true,false,false,false,false,false,false,true,true,true,false,false,false,false,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,false,false,false,false,true,true,true,false,false,false,false,false,false,true,true,true,true,true],[true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true,true],[true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true,true],[true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true,true],[true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true,true],[true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true,true],[true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true],[true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true],[true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true],[true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true],[true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true],[true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true],[true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true]]} \ No newline at end of file +{"field_size":{"x":17.548,"y":8.052},"nodeSizeMeters":0.3,"grid":[[true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true],[true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true],[true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true],[true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true],[true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true],[true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true],[true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true],[true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true],[true,true,false,false,false,false,false,false,false,false,false,false,false,false,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,true,true],[true,true,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,true,true],[true,true,false,false,false,false,false,false,false,false,false,true,true,true,true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,true,true],[true,true,false,false,false,false,false,false,false,false,true,true,true,true,true,true,true,true,true,true,false,false,false,false,false,false,false,false,true,true,true,false,false,false,false,false,false,false,false,true,true,true,true,true,true,true,true,true,false,false,false,false,false,false,false,false,false,true,true],[true,true,false,false,false,false,false,false,false,false,true,true,true,true,true,true,true,true,true,true,false,false,false,false,false,false,false,true,true,true,true,true,false,false,false,false,false,false,false,true,true,true,true,true,true,true,true,true,false,false,false,false,false,false,false,false,false,true,true],[true,true,false,false,false,false,false,false,false,false,true,true,true,true,true,true,true,true,true,true,false,false,false,false,false,false,false,true,true,true,true,true,false,false,false,false,false,false,false,true,true,true,true,true,true,true,true,true,false,false,false,false,false,false,false,false,false,true,true],[true,true,false,false,false,false,false,false,false,false,true,true,true,true,true,true,true,true,true,true,false,false,false,false,false,false,false,true,true,true,true,true,false,false,false,false,false,false,false,true,true,true,true,true,true,true,true,true,false,false,false,false,false,false,false,false,false,true,true],[true,true,false,false,false,false,false,false,false,false,true,true,true,true,true,true,true,true,true,true,false,false,false,false,false,false,false,false,true,true,true,false,false,false,false,false,false,false,false,true,true,true,true,true,true,true,true,true,false,false,false,false,false,false,false,false,false,true,true],[true,true,false,false,false,false,false,false,false,false,false,true,true,true,true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,true,true],[true,true,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,true,true],[true,true,false,false,false,false,false,false,false,false,false,false,false,false,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,true,true],[true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true],[true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true],[true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true],[true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true],[true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true],[true,true,true,true,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,true,true,true,true,true],[true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true],[true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true,true]]} \ No newline at end of file diff --git a/src/main/deploy/pathplanner/paths/1M.path b/src/main/deploy/pathplanner/paths/1M.path deleted file mode 100644 index 04db582d..00000000 --- a/src/main/deploy/pathplanner/paths/1M.path +++ /dev/null @@ -1,54 +0,0 @@ -{ - "version": "2025.0", - "waypoints": [ - { - "anchor": { - "x": 0.0, - "y": 0.0 - }, - "prevControl": null, - "nextControl": { - "x": 0.9673213526060513, - "y": 0.0 - }, - "isLocked": false, - "linkedName": null - }, - { - "anchor": { - "x": 1.0, - "y": 0.0 - }, - "prevControl": { - "x": -0.27527965608765825, - "y": 1.561767148845488e-16 - }, - "nextControl": null, - "isLocked": false, - "linkedName": null - } - ], - "rotationTargets": [], - "constraintZones": [], - "pointTowardsZones": [], - "eventMarkers": [], - "globalConstraints": { - "maxVelocity": 4.5, - "maxAcceleration": 3.0, - "maxAngularVelocity": 540.0, - "maxAngularAcceleration": 720.0, - "nominalVoltage": 12.0, - "unlimited": false - }, - "goalEndState": { - "velocity": 0, - "rotation": 0.0 - }, - "reversed": false, - "folder": null, - "idealStartingState": { - "velocity": 0, - "rotation": 0.0 - }, - "useDefaultConstraints": true -} \ No newline at end of file diff --git a/src/main/deploy/pathplanner/paths/Half-Field Sprint.path b/src/main/deploy/pathplanner/paths/Half-Field Sprint.path deleted file mode 100644 index 234946c2..00000000 --- a/src/main/deploy/pathplanner/paths/Half-Field Sprint.path +++ /dev/null @@ -1,54 +0,0 @@ -{ - "version": "2025.0", - "waypoints": [ - { - "anchor": { - "x": 0.3722130667010144, - "y": 5.573373042480681 - }, - "prevControl": null, - "nextControl": { - "x": 1.3722130667010144, - "y": 5.573373042480681 - }, - "isLocked": false, - "linkedName": null - }, - { - "anchor": { - "x": 8.28970984956188, - "y": 5.573373042480681 - }, - "prevControl": { - "x": 7.289709849561881, - "y": 5.573373042480681 - }, - "nextControl": null, - "isLocked": false, - "linkedName": null - } - ], - "rotationTargets": [], - "constraintZones": [], - "pointTowardsZones": [], - "eventMarkers": [], - "globalConstraints": { - "maxVelocity": 4.5, - "maxAcceleration": 3.0, - "maxAngularVelocity": 540.0, - "maxAngularAcceleration": 720.0, - "nominalVoltage": 12.0, - "unlimited": false - }, - "goalEndState": { - "velocity": 0, - "rotation": 0.0 - }, - "reversed": false, - "folder": null, - "idealStartingState": { - "velocity": 0, - "rotation": 0.0 - }, - "useDefaultConstraints": true -} \ No newline at end of file diff --git a/src/main/deploy/pathplanner/paths/Red C_L4-SourceRight.path b/src/main/deploy/pathplanner/paths/Red C_L4-SourceRight.path deleted file mode 100644 index 50254b82..00000000 --- a/src/main/deploy/pathplanner/paths/Red C_L4-SourceRight.path +++ /dev/null @@ -1,73 +0,0 @@ -{ - "version": "2025.0", - "waypoints": [ - { - "anchor": { - "x": 13.978, - "y": 5.422496749024708 - }, - "prevControl": null, - "nextControl": { - "x": 15.821846999144302, - "y": 5.225778445369686 - }, - "isLocked": false, - "linkedName": "Red Reef CD" - }, - { - "anchor": { - "x": 16.216089743589745, - "y": 6.966346153846153 - }, - "prevControl": { - "x": 15.522569813923187, - "y": 6.416928142732595 - }, - "nextControl": null, - "isLocked": false, - "linkedName": "Red Source Right" - } - ], - "rotationTargets": [], - "constraintZones": [], - "pointTowardsZones": [], - "eventMarkers": [ - { - "name": "location C", - "waypointRelativePos": 0, - "endWaypointRelativePos": null, - "command": null - }, - { - "name": "height L4", - "waypointRelativePos": 0, - "endWaypointRelativePos": null, - "command": null - }, - { - "name": "place", - "waypointRelativePos": 1.0, - "endWaypointRelativePos": null, - "command": null - } - ], - "globalConstraints": { - "maxVelocity": 4.5, - "maxAcceleration": 3.0, - "maxAngularVelocity": 540.0, - "maxAngularAcceleration": 720.0, - "nominalVoltage": 12.0, - "unlimited": false - }, - "goalEndState": { - "velocity": 0, - "rotation": 54.381510160748206 - }, - "reversed": false, - "folder": "AutoTest", - "idealStartingState": { - "velocity": 0, - "rotation": -122.10625595511773 - }, - "useDefaultConstraints": true -} \ No newline at end of file diff --git a/src/main/deploy/pathplanner/paths/Red SourceRight-C_L4.path b/src/main/deploy/pathplanner/paths/Red SourceRight-C_L4.path deleted file mode 100644 index 928b695d..00000000 --- a/src/main/deploy/pathplanner/paths/Red SourceRight-C_L4.path +++ /dev/null @@ -1,73 +0,0 @@ -{ - "version": "2025.0", - "waypoints": [ - { - "anchor": { - "x": 16.216089743589745, - "y": 6.966346153846153 - }, - "prevControl": null, - "nextControl": { - "x": 15.471575600017074, - "y": 5.982294727572125 - }, - "isLocked": false, - "linkedName": "Red Source Right" - }, - { - "anchor": { - "x": 13.978, - "y": 5.422496749024708 - }, - "prevControl": { - "x": 15.773854545219386, - "y": 5.5667511706492 - }, - "nextControl": null, - "isLocked": false, - "linkedName": "Red Reef CD" - } - ], - "rotationTargets": [], - "constraintZones": [], - "pointTowardsZones": [], - "eventMarkers": [ - { - "name": "location C", - "waypointRelativePos": 0, - "endWaypointRelativePos": null, - "command": null - }, - { - "name": "height L4", - "waypointRelativePos": 0, - "endWaypointRelativePos": null, - "command": null - }, - { - "name": "place", - "waypointRelativePos": 1.0, - "endWaypointRelativePos": null, - "command": null - } - ], - "globalConstraints": { - "maxVelocity": 4.5, - "maxAcceleration": 3.0, - "maxAngularVelocity": 540.0, - "maxAngularAcceleration": 720.0, - "nominalVoltage": 12.0, - "unlimited": false - }, - "goalEndState": { - "velocity": 0, - "rotation": -122.10625595511773 - }, - "reversed": false, - "folder": "AutoTest", - "idealStartingState": { - "velocity": 0, - "rotation": 54.381510160748206 - }, - "useDefaultConstraints": true -} \ No newline at end of file diff --git a/src/main/deploy/pathplanner/paths/Red StartRight-SourceRight .path b/src/main/deploy/pathplanner/paths/Red StartRight-SourceRight .path deleted file mode 100644 index 6ed916fe..00000000 --- a/src/main/deploy/pathplanner/paths/Red StartRight-SourceRight .path +++ /dev/null @@ -1,73 +0,0 @@ -{ - "version": "2025.0", - "waypoints": [ - { - "anchor": { - "x": 9.972179487179487, - "y": 6.243910256410256 - }, - "prevControl": null, - "nextControl": { - "x": 10.777520702180267, - "y": 6.29031630098106 - }, - "isLocked": false, - "linkedName": null - }, - { - "anchor": { - "x": 16.216089743589745, - "y": 6.966346153846153 - }, - "prevControl": { - "x": 13.887348178338486, - "y": 6.651331408074669 - }, - "nextControl": null, - "isLocked": false, - "linkedName": "Red Source Right" - } - ], - "rotationTargets": [], - "constraintZones": [], - "pointTowardsZones": [], - "eventMarkers": [ - { - "name": "location Source Right", - "waypointRelativePos": 0, - "endWaypointRelativePos": null, - "command": null - }, - { - "name": "height Source", - "waypointRelativePos": 0, - "endWaypointRelativePos": null, - "command": null - }, - { - "name": "align", - "waypointRelativePos": 1.0, - "endWaypointRelativePos": null, - "command": null - } - ], - "globalConstraints": { - "maxVelocity": 4.5, - "maxAcceleration": 3.0, - "maxAngularVelocity": 540.0, - "maxAngularAcceleration": 720.0, - "nominalVoltage": 12.0, - "unlimited": false - }, - "goalEndState": { - "velocity": 0, - "rotation": 54.381510160748206 - }, - "reversed": false, - "folder": "AutoTest", - "idealStartingState": { - "velocity": 0, - "rotation": 0.0 - }, - "useDefaultConstraints": true -} \ No newline at end of file diff --git a/src/main/deploy/pathplanner/paths/ab to bc.path b/src/main/deploy/pathplanner/paths/ab to bc.path deleted file mode 100644 index 5394e284..00000000 --- a/src/main/deploy/pathplanner/paths/ab to bc.path +++ /dev/null @@ -1,54 +0,0 @@ -{ - "version": "2025.0", - "waypoints": [ - { - "anchor": { - "x": 3.2307954545454542, - "y": 4.000071022727272 - }, - "prevControl": null, - "nextControl": { - "x": 2.3532954545454547, - "y": 3.3419460227272717 - }, - "isLocked": false, - "linkedName": null - }, - { - "anchor": { - "x": 3.6795170454545456, - "y": 2.663877840909091 - }, - "prevControl": { - "x": 2.6795170454545456, - "y": 2.663877840909091 - }, - "nextControl": null, - "isLocked": false, - "linkedName": null - } - ], - "rotationTargets": [], - "constraintZones": [], - "pointTowardsZones": [], - "eventMarkers": [], - "globalConstraints": { - "maxVelocity": 4.5, - "maxAcceleration": 3.0, - "maxAngularVelocity": 540.0, - "maxAngularAcceleration": 720.0, - "nominalVoltage": 12.0, - "unlimited": false - }, - "goalEndState": { - "velocity": 0, - "rotation": 60.06848815949221 - }, - "reversed": false, - "folder": null, - "idealStartingState": { - "velocity": 0, - "rotation": -0.9710219310791925 - }, - "useDefaultConstraints": true -} \ No newline at end of file diff --git a/src/main/deploy/pathplanner/paths/source to ab.path b/src/main/deploy/pathplanner/paths/source to ab.path deleted file mode 100644 index bcc9fa63..00000000 --- a/src/main/deploy/pathplanner/paths/source to ab.path +++ /dev/null @@ -1,54 +0,0 @@ -{ - "version": "2025.0", - "waypoints": [ - { - "anchor": { - "x": 1.0270738636363637, - "y": 1.0484801136363637 - }, - "prevControl": null, - "nextControl": { - "x": 1.3760795454545454, - "y": 2.3447869318181827 - }, - "isLocked": false, - "linkedName": null - }, - { - "anchor": { - "x": 2.8319318181818183, - "y": 3.940241477272727 - }, - "prevControl": { - "x": 1.8319318181818183, - "y": 3.940241477272727 - }, - "nextControl": null, - "isLocked": false, - "linkedName": null - } - ], - "rotationTargets": [], - "constraintZones": [], - "pointTowardsZones": [], - "eventMarkers": [], - "globalConstraints": { - "maxVelocity": 4.5, - "maxAcceleration": 3.0, - "maxAngularVelocity": 540.0, - "maxAngularAcceleration": 720.0, - "nominalVoltage": 12.0, - "unlimited": false - }, - "goalEndState": { - "velocity": 0, - "rotation": -1.4320961841646833 - }, - "reversed": false, - "folder": null, - "idealStartingState": { - "velocity": 0, - "rotation": 55.09241514460653 - }, - "useDefaultConstraints": true -} \ No newline at end of file diff --git a/src/main/deploy/pathplanner/settings.json b/src/main/deploy/pathplanner/settings.json index c52b9e29..c4f6688d 100644 --- a/src/main/deploy/pathplanner/settings.json +++ b/src/main/deploy/pathplanner/settings.json @@ -1,34 +1,36 @@ { - "robotWidth": 0.914, - "robotLength": 0.914, + "robotWidth": 0.921, + "robotLength": 0.921, "holonomicMode": true, "pathFolders": [ - "AutoTest" + "Auto Generated" ], "autoFolders": [], - "defaultMaxVel": 4.5, - "defaultMaxAccel": 3.0, + "defaultMaxVel": 4.1, + "defaultMaxAccel": 7.0, "defaultMaxAngVel": 540.0, "defaultMaxAngAccel": 720.0, "defaultNominalVoltage": 12.0, - "robotMass": 68.0389, - "robotMOI": 11.61, + "robotMass": 40.823, + "robotMOI": 2.3, "robotTrackwidth": 0.508, - "driveWheelRadius": 0.0508, - "driveGearing": 5.142857, - "maxDriveSpeed": 6.21, - "driveMotorType": "krakenX60FOC", - "driveCurrentLimit": 85.0, + "driveWheelRadius": 0.049, + "driveGearing": 6.746, + "maxDriveSpeed": 4.25, + "driveMotorType": "falcon500FOC", + "driveCurrentLimit": 64.0, "wheelCOF": 1.0, - "flModuleX": 0.2921, - "flModuleY": 0.292, - "frModuleX": 0.2921, - "frModuleY": -0.2921, - "blModuleX": -0.2921, - "blModuleY": 0.2921, - "brModuleX": -0.2921, - "brModuleY": -0.2921, + "flModuleX": 0.298, + "flModuleY": 0.298, + "frModuleX": 0.298, + "frModuleY": -0.298, + "blModuleX": -0.298, + "blModuleY": 0.298, + "brModuleX": -0.298, + "brModuleY": -0.298, "bumperOffsetX": 0.0, "bumperOffsetY": 0.0, - "robotFeatures": [] + "robotFeatures": [ + "{\"name\":\"Rectangle\",\"type\":\"rounded_rect\",\"data\":{\"center\":{\"x\":0.3,\"y\":0.0},\"size\":{\"width\":0.5,\"length\":0.2},\"borderRadius\":0.05,\"strokeWidth\":0.02,\"filled\":false}}" + ] } \ No newline at end of file diff --git a/src/main/java/com/pathplanner/lib/path/PathPlannerPathExtended.java b/src/main/java/com/pathplanner/lib/path/PathPlannerPathExtended.java new file mode 100644 index 00000000..ea3f80e8 --- /dev/null +++ b/src/main/java/com/pathplanner/lib/path/PathPlannerPathExtended.java @@ -0,0 +1,180 @@ +package com.pathplanner.lib.path; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import org.json.simple.JSONArray; +import org.json.simple.JSONObject; + +public class PathPlannerPathExtended { + @SuppressWarnings("unchecked") + public static void toPathFile(PathPlannerPath path, String folder) throws IOException { + JSONObject json = new JSONObject(); + json.put("version", "2025.1.0"); + + // Convert waypoints + JSONArray waypointsJson = new JSONArray(); + int waypointIndex = 0; + for (var waypoint : path.getWaypoints()) { + System.out.println("Processing Waypoint #" + waypointIndex + ":"); + System.out.println( + " Anchor: (" + + waypoint.anchor().getX() + + ", " + + waypoint.anchor().getY() + + ")"); + + if (waypoint.prevControl() != null) { + System.out.println( + " Prev Control: (" + + waypoint.prevControl().getX() + + ", " + + waypoint.prevControl().getY() + + ")"); + } else { + System.out.println(" Prev Control: null"); + } + + if (waypoint.nextControl() != null) { + System.out.println( + " Next Control: (" + + waypoint.nextControl().getX() + + ", " + + waypoint.nextControl().getY() + + ")"); + } else { + System.out.println(" Next Control: null"); + } + System.out.println("-------------------"); + + JSONObject waypointJson = new JSONObject(); + + if (waypoint.prevControl() != null) { + JSONObject prevControl = new JSONObject(); + prevControl.put("x", waypoint.prevControl().getX()); + prevControl.put("y", waypoint.prevControl().getY()); + waypointJson.put("prevControl", prevControl); + } else { + waypointJson.put("prevControl", null); + } + + JSONObject anchor = new JSONObject(); + anchor.put("x", waypoint.anchor().getX()); + anchor.put("y", waypoint.anchor().getY()); + waypointJson.put("anchor", anchor); + + if (waypoint.nextControl() != null) { + JSONObject nextControl = new JSONObject(); + nextControl.put("x", waypoint.nextControl().getX()); + nextControl.put("y", waypoint.nextControl().getY()); + waypointJson.put("nextControl", nextControl); + } else { + waypointJson.put("nextControl", null); + } + + waypointsJson.add(waypointJson); + waypointIndex++; + } + json.put("waypoints", waypointsJson); + + // Convert rotation targets + JSONArray rotationTargetsJson = new JSONArray(); + for (var target : path.getRotationTargets()) { + JSONObject targetJson = new JSONObject(); + targetJson.put("waypointRelativePos", target.position()); + targetJson.put("rotationDegrees", target.rotation().getDegrees()); + rotationTargetsJson.add(targetJson); + } + json.put("rotationTargets", rotationTargetsJson); + + // Convert point towards zones + JSONArray pointTowardsJson = new JSONArray(); + for (var zone : path.getPointTowardsZones()) { + JSONObject zoneJson = new JSONObject(); + + JSONObject targetPos = new JSONObject(); + targetPos.put("x", zone.targetPosition().getX()); + targetPos.put("y", zone.targetPosition().getY()); + zoneJson.put("targetPoint", targetPos); + + zoneJson.put("rotationOffset", zone.rotationOffset().getDegrees()); + zoneJson.put("minWaypointRelativePos", zone.minPosition()); + zoneJson.put("maxWaypointRelativePos", zone.maxPosition()); + pointTowardsJson.add(zoneJson); + } + json.put("pointTowardsZones", pointTowardsJson); + + // Convert constraint zones + JSONArray constraintZonesJson = new JSONArray(); + for (var zone : path.getConstraintZones()) { + JSONObject zoneJson = new JSONObject(); + zoneJson.put("minWaypointRelativePos", zone.minPosition()); + zoneJson.put("maxWaypointRelativePos", zone.maxPosition()); + + JSONObject constraints = new JSONObject(); + constraints.put("maxVelocity", zone.constraints().maxVelocityMPS()); + constraints.put("maxAcceleration", zone.constraints().maxAccelerationMPSSq()); + constraints.put("nominalVoltage", zone.constraints().nominalVoltageVolts()); + zoneJson.put("constraints", constraints); + + constraintZonesJson.add(zoneJson); + } + json.put("constraintZones", constraintZonesJson); + + json.put("folder", folder); + + // Convert event markers + JSONArray eventMarkersJson = new JSONArray(); + for (var marker : path.getEventMarkers()) { + JSONObject markerJson = new JSONObject(); + markerJson.put("waypointRelativePos", marker.position()); + + if (marker.command() != null) { + JSONObject commandJson = new JSONObject(); + commandJson.put("type", "sequential"); + JSONArray commands = new JSONArray(); + commands.add(marker.command().getName()); + commandJson.put("data", commands); + markerJson.put("command", commandJson); + } + + eventMarkersJson.add(markerJson); + } + json.put("eventMarkers", eventMarkersJson); + + // Convert global constraints + JSONObject globalConstraints = new JSONObject(); + globalConstraints.put("maxVelocity", path.getGlobalConstraints().maxVelocityMPS()); + globalConstraints.put( + "maxAcceleration", path.getGlobalConstraints().maxAccelerationMPSSq()); + globalConstraints.put("nominalVoltage", path.getGlobalConstraints().nominalVoltageVolts()); + json.put("globalConstraints", globalConstraints); + + // Convert goal end state + JSONObject goalEndState = new JSONObject(); + goalEndState.put("velocity", path.getGoalEndState().velocityMPS()); + goalEndState.put("rotation", path.getGoalEndState().rotation().getDegrees()); + json.put("goalEndState", goalEndState); + + // Convert ideal starting state if present + if (path.getIdealStartingState() != null) { + JSONObject idealStartState = new JSONObject(); + idealStartState.put("velocity", path.getIdealStartingState().velocityMPS()); + idealStartState.put("rotation", path.getIdealStartingState().rotation().getDegrees()); + json.put("idealStartingState", idealStartState); + } else { + json.put("idealStartingState", null); + } + + json.put("reversed", path.isReversed()); + json.put("preventFlipping", path.preventFlipping); + + // Write to file + File pathFile = new File("src/main/deploy/pathplanner/paths/" + path.name + ".path"); + pathFile.getParentFile().mkdirs(); + + try (FileWriter file = new FileWriter(pathFile)) { + file.write(json.toJSONString()); + } + } +} diff --git a/src/main/java/frc/robot/Main.java b/src/main/java/frc/robot/Main.java index fe215d73..e854d556 100644 --- a/src/main/java/frc/robot/Main.java +++ b/src/main/java/frc/robot/Main.java @@ -5,11 +5,17 @@ package frc.robot; import edu.wpi.first.wpilibj.RobotBase; +import frc.robot.auto.AutoGenerators; public final class Main { - private Main() {} + private Main() {} - public static void main(String... args) { - RobotBase.startRobot(Robot::new); - } + public static void main(String... args) { + String generateTrajectories = System.getenv("GENERATE_TRAJECTORIES"); + if ("true".equalsIgnoreCase(generateTrajectories)) { + RobotBase.startRobot(AutoGenerators.AutoGeneratorRobot::new); + } else { + RobotBase.startRobot(Robot::new); + } + } } diff --git a/src/main/java/frc/robot/Robot.java b/src/main/java/frc/robot/Robot.java index 19bfc983..299a6c87 100644 --- a/src/main/java/frc/robot/Robot.java +++ b/src/main/java/frc/robot/Robot.java @@ -4,6 +4,7 @@ package frc.robot; +import com.ctre.phoenix6.SignalLogger; import edu.wpi.first.wpilibj.PowerDistribution; import edu.wpi.first.wpilibj.PowerDistribution.ModuleType; import edu.wpi.first.wpilibj2.command.Command; @@ -26,10 +27,13 @@ public Robot() { Logger.recordMetadata("ProjectName", "JavaBot-2025"); // Set a metadata value if (isReal()) { + SignalLogger.setPath("/home/lvuser/logs"); + SignalLogger.start(); Logger.addDataReceiver(new WPILOGWriter("/home/lvuser/logs")); Logger.addDataReceiver(new NT4Publisher()); // Publish data to NetworkTables PowerDistribution distribution = - new PowerDistribution(1, ModuleType.kRev); // Enables power distribution logging + new PowerDistribution( + 1, ModuleType.kCTRE); // Enables power distribution logging } else { setUseTiming(true); // Run as fast as possible Logger.addDataReceiver(new NT4Publisher()); // Publish data to NetworkTables @@ -42,14 +46,15 @@ public Robot() { @Override public void robotPeriodic() { CommandScheduler.getInstance().run(); - m_robotContainer.auto.logAutoInformation(); } @Override public void disabledInit() {} @Override - public void disabledPeriodic() {} + public void disabledPeriodic() { + m_robotContainer.auto.logAutoInformation(); + } @Override public void disabledExit() {} diff --git a/src/main/java/frc/robot/RobotContainer.java b/src/main/java/frc/robot/RobotContainer.java index 0a86b32d..6cadbbff 100644 --- a/src/main/java/frc/robot/RobotContainer.java +++ b/src/main/java/frc/robot/RobotContainer.java @@ -19,6 +19,7 @@ import edu.wpi.first.wpilibj2.command.sysid.SysIdRoutine.Direction; import frc.lib.controller.LogitechController; import frc.lib.controller.ThrustmasterJoystick; +import frc.robot.auto.Auto; import frc.robot.commands.AlignAndDriveToReef; import frc.robot.commands.AlignToPiece; import frc.robot.commands.AlignToReef; @@ -31,25 +32,19 @@ import frc.robot.subsystems.ModeManager.SuperstructureStateManager; import frc.robot.subsystems.ModeManager.SuperstructureStateManager.SuperstructureState.Position; import frc.robot.subsystems.arm.ArmPivotIOSim; -import frc.robot.subsystems.arm.ArmPivotIOTalonFX; import frc.robot.subsystems.arm.ArmSubsystem; -import frc.robot.subsystems.arm.WristIONeo550; import frc.robot.subsystems.arm.WristIOSim; import frc.robot.subsystems.climber.ClimberIOSim; -import frc.robot.subsystems.climber.ClimberIOTalonFX; import frc.robot.subsystems.climber.ClimberSubsystem; import frc.robot.subsystems.elevator.ElevatorIOSim; -import frc.robot.subsystems.elevator.ElevatorIOTalonFX; import frc.robot.subsystems.elevator.ElevatorSubsystem; -import frc.robot.subsystems.gripper.GripperIOFalcon; import frc.robot.subsystems.gripper.GripperIOSim; import frc.robot.subsystems.gripper.GripperSubsystem; import frc.robot.subsystems.intake.FlipperIOSim; -import frc.robot.subsystems.intake.FlipperIOTalon; import frc.robot.subsystems.intake.IntakeRollerIOSim; -import frc.robot.subsystems.intake.IntakeRollerTalonFX; import frc.robot.subsystems.intake.IntakeSubsystem; import frc.robot.subsystems.swerve.CommandSwerveDrivetrain; +import frc.robot.subsystems.vision.DummyPhotonCamera; import frc.robot.subsystems.vision.Vision; import frc.robot.subsystems.vision.VisionIOLimelight; import frc.robot.subsystems.vision.VisionIOPhotonVisionSim; @@ -93,18 +88,19 @@ public RobotContainer() { new VisionIOLimelight( VisionConstants.camera0Name, () -> drivetrain.getRobotPose().getRotation()), - new VisionIOLimelight( - VisionConstants.camera1Name, - () -> drivetrain.getRobotPose().getRotation()), + new DummyPhotonCamera(), new VisionIOLimelight( VisionConstants.camera2Name, () -> drivetrain.getRobotPose().getRotation())); - gripperSubsystem = new GripperSubsystem(new GripperIOFalcon()); - elevatorSubsystem = new ElevatorSubsystem(new ElevatorIOTalonFX()); - armSubsystem = new ArmSubsystem(new ArmPivotIOTalonFX(), new WristIONeo550()); - climberSubsystem = new ClimberSubsystem(new ClimberIOTalonFX()); - intakeSubsystem = new IntakeSubsystem(new IntakeRollerTalonFX(), new FlipperIOTalon()); + armSubsystem = new ArmSubsystem(new ArmPivotIOSim(), new WristIOSim()); + + gripperSubsystem = new GripperSubsystem(new GripperIOSim()); + elevatorSubsystem = new ElevatorSubsystem(new ElevatorIOSim()); + + intakeSubsystem = new IntakeSubsystem(new IntakeRollerIOSim(), new FlipperIOSim()); + + climberSubsystem = new ClimberSubsystem(new ClimberIOSim()); } else { vision = new Vision( @@ -113,10 +109,7 @@ public RobotContainer() { VisionConstants.camera0Name, VisionConstants.robotToCamera0, drivetrain::getRobotPose), - new VisionIOPhotonVisionSim( - VisionConstants.camera1Name, - VisionConstants.robotToCamera1, - drivetrain::getRobotPose), + new DummyPhotonCamera(), new VisionIOPhotonVisionSimML( VisionConstants.camera2Name, VisionConstants.robotToCamera2, @@ -221,6 +214,22 @@ private void configureBindings() { // Run SysId routines when holding back/start and X/Y. // Note that each routine should be run exactly once in a single log. + // operatorController + // .getBack() + // .and(operatorController.getY()) + // .whileTrue(drivetrain.sysIdQuasistatic(Direction.kReverse)); + // operatorController + // .getBack() + // .and(operatorController.getX()) + // .whileTrue(drivetrain.sysIdDynamic(Direction.kReverse)); + // operatorController + // .getStart() + // .and(operatorController.getY()) + // .whileTrue(drivetrain.sysIdQuasistatic(Direction.kForward)); + // operatorController + // .getStart() + // .and(operatorController.getX()) + // .whileTrue(drivetrain.sysIdDynamic(Direction.kForward)); SmartDashboard.putData( drivetrain @@ -377,6 +386,16 @@ private double sps(double value) { public Command getAutonomousCommand() { return auto.getAuto(); + // return Commands.none(); + + // return drivetrain.applyRequest(() -> + // drivetrain.m_applyFieldSpeedsOrbit.withChassisSpeeds(new + // ChassisSpeeds(GlobalConstants.MAX_TRANSLATIONAL_SPEED.in(MetersPerSecond), 0, 0)) + // ).withTimeout(1).andThen(drivetrain.applyRequest(() -> + // drivetrain.m_applyFieldSpeedsOrbit.withChassisSpeeds(new + // ChassisSpeeds(-GlobalConstants.MAX_TRANSLATIONAL_SPEED.in(MetersPerSecond), 0, + // 0))).withTimeout(3)); + } public Command alignToReef(int tag, double offset) { diff --git a/src/main/java/frc/robot/Auto.java b/src/main/java/frc/robot/auto/Auto.java similarity index 99% rename from src/main/java/frc/robot/Auto.java rename to src/main/java/frc/robot/auto/Auto.java index 317e932c..ebf67e04 100644 --- a/src/main/java/frc/robot/Auto.java +++ b/src/main/java/frc/robot/auto/Auto.java @@ -1,4 +1,4 @@ -package frc.robot; +package frc.robot.auto; import com.pathplanner.lib.auto.AutoBuilder; import com.pathplanner.lib.auto.NamedCommands; @@ -21,6 +21,7 @@ import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard; import edu.wpi.first.wpilibj2.command.Command; import edu.wpi.first.wpilibj2.command.Commands; +import frc.robot.RobotContainer; import frc.robot.constants.AligningConstants; import frc.robot.constants.GlobalConstants; import frc.robot.constants.VisionConstants; @@ -189,7 +190,7 @@ public enum DriveLocation { GH(10, 21, centerOffset), H(10, 21, rightOffset), I(11, 20, leftOffset), - JH(11, 20, centerOffset), + IJ(11, 20, centerOffset), J(11, 20, rightOffset), K(6, 19, leftOffset), KL(6, 19, centerOffset), diff --git a/src/main/java/frc/robot/auto/AutoGenerators.java b/src/main/java/frc/robot/auto/AutoGenerators.java new file mode 100644 index 00000000..de077e52 --- /dev/null +++ b/src/main/java/frc/robot/auto/AutoGenerators.java @@ -0,0 +1,291 @@ +package frc.robot.auto; + +import com.pathplanner.lib.path.GoalEndState; +import com.pathplanner.lib.path.IdealStartingState; +import com.pathplanner.lib.path.PathPlannerPath; +import com.pathplanner.lib.path.PathPlannerPathExtended; +import edu.wpi.first.math.geometry.Pose2d; +import edu.wpi.first.math.geometry.Rotation2d; +import edu.wpi.first.math.geometry.Transform2d; +import edu.wpi.first.math.geometry.Translation2d; +import edu.wpi.first.math.util.Units; +import edu.wpi.first.wpilibj.RobotBase; +import frc.robot.RobotContainer; +import frc.robot.auto.Auto.DriveLocation; +import frc.robot.constants.VisionConstants; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +public class AutoGenerators { + + public static class AutoGeneratorRobot extends RobotBase { + public RobotContainer container; + + public AutoGeneratorRobot() { + container = new RobotContainer(); + + try { + DriveLocation[][] pairs = + new DriveLocation[][] { + {DriveLocation.SourceLeft, DriveLocation.A}, + {DriveLocation.SourceLeft, DriveLocation.AB}, + {DriveLocation.SourceLeft, DriveLocation.B}, + {DriveLocation.SourceLeft, DriveLocation.C}, + {DriveLocation.SourceLeft, DriveLocation.CD}, + {DriveLocation.SourceLeft, DriveLocation.D}, + {DriveLocation.SourceLeft, DriveLocation.G}, + {DriveLocation.SourceLeft, DriveLocation.GH}, + {DriveLocation.SourceLeft, DriveLocation.H}, + {DriveLocation.SourceLeft, DriveLocation.I}, + {DriveLocation.SourceLeft, DriveLocation.IJ}, + {DriveLocation.SourceLeft, DriveLocation.J}, + {DriveLocation.SourceLeft, DriveLocation.K}, + {DriveLocation.SourceLeft, DriveLocation.KL}, + {DriveLocation.SourceLeft, DriveLocation.L}, + {DriveLocation.SourceRight, DriveLocation.A}, + {DriveLocation.SourceRight, DriveLocation.AB}, + {DriveLocation.SourceRight, DriveLocation.B}, + {DriveLocation.SourceRight, DriveLocation.C}, + {DriveLocation.SourceRight, DriveLocation.CD}, + {DriveLocation.SourceRight, DriveLocation.D}, + {DriveLocation.SourceRight, DriveLocation.E}, + {DriveLocation.SourceRight, DriveLocation.EF}, + {DriveLocation.SourceRight, DriveLocation.F}, + {DriveLocation.SourceRight, DriveLocation.G}, + {DriveLocation.SourceRight, DriveLocation.GH}, + {DriveLocation.SourceRight, DriveLocation.H}, + {DriveLocation.SourceRight, DriveLocation.K}, + {DriveLocation.SourceRight, DriveLocation.KL}, + {DriveLocation.SourceRight, DriveLocation.L}, + }; + + DriveLocation[] centers = + new DriveLocation[] { + DriveLocation.E, + DriveLocation.EF, + DriveLocation.F, + DriveLocation.G, + DriveLocation.GH, + DriveLocation.H, + DriveLocation.I, + DriveLocation.IJ, + DriveLocation.J, + }; + + final PathTweakableBezier.Tweaker standardTweak = + (input, rand) -> { + List newPoints = new ArrayList<>(input.points); + int point = rand.nextInt(0, newPoints.size()); + for (int i = 0; i < newPoints.size(); i++) { + if (i != point) continue; + newPoints.set( + i, + PathTweakableBezier.tweakPoseRotation( + newPoints.get(i), rand, 0.2)); + } + for (int i = 1; i < newPoints.size() - 1; i++) { + if (i != point) continue; + newPoints.set( + i, + PathTweakableBezier.tweakPoseTranslation( + newPoints.get(i), rand, 0.2)); + } + return new PathTweakableBezier( + input.startState, input.endState, newPoints, input.tweaker); + }; + + final PathTweakableBezier.Tweaker preserveFinalDirection = + (input, rand) -> { + List newPoints = new ArrayList<>(input.points); + int point = rand.nextInt(0, newPoints.size()); + for (int i = 0; i < newPoints.size() - 1; i++) { + // if (i != point) continue; + newPoints.set( + i, + PathTweakableBezier.tweakPoseRotation( + newPoints.get(i), rand, 0.2)); + } + for (int i = 1; i < newPoints.size() - 1; i++) { + // if (i != point) continue; + newPoints.set( + i, + PathTweakableBezier.tweakPoseTranslation( + newPoints.get(i), rand, 0.2)); + } + return new PathTweakableBezier( + input.startState, input.endState, newPoints, input.tweaker); + }; + + for (var value : pairs) { + var start = getPoseFromTag(value[0]); + var end = + getPoseFromTag(value[1]) + .plus(new Transform2d(-0.3, 0, Rotation2d.kZero)); + var yay = + new PathTweakableBezier( + new IdealStartingState(0, start.getRotation()), + new GoalEndState(2, end.getRotation()), + subdividePoses(start, end, 0), + preserveFinalDirection); + yay = Optimizer.optimize(yay); + PathPlannerPath optimized = yay.getPath(); + optimized.name = value[0].name() + "-" + value[1].name(); + PathPlannerPathExtended.toPathFile(optimized, "Auto Generated"); + } + + // for (var value : pairs) { + + // PathTweakable yay = + // new PathTweakable(getPoseFromTag(value[1]), getPoseFromTag(value[0])); + // yay.setEvalFunction(evaler::timeAndCollisions); + // yay = Optimizer.optimize(yay); + // PathPlannerPath optimized = yay.getPath(); + // optimized.name = value[1].name() + "-" + value[0].name(); + // PathPlannerPathExtended.toPathFile(optimized, "Auto Generated"); + // } + + // var startingPoses = new ArrayList>(); + // { + // startingPoses.add( + // new Pair<>( + // new Pose2d(7.139, 0.521, Rotation2d.fromDegrees(180)), + // "RightStart")); + // startingPoses.add( + // new Pair<>( + // new Pose2d(7.139, 7.553, Rotation2d.fromDegrees(180)), + // "LeftStart")); + // startingPoses.add( + // new Pair<>( + // new Pose2d( + // 7.139, + // (0.521 + 7.553) / 2, + // Rotation2d.fromDegrees(180)), + // "CenterStart")); + // startingPoses.add( + // new Pair<>( + // new Pose2d( + // 7.139, + // ((0.521 + 7.553) / 2 + 0.521) / 2, + // Rotation2d.fromDegrees(180)), + // "CenterRightStart")); + // startingPoses.add( + // new Pair<>( + // new Pose2d( + // 7.139, + // ((0.521 + 7.553) / 2 + 7.553) / 2, + // Rotation2d.fromDegrees(180)), + // "CenterLeftStart")); + // } + + // for (var startingPose : startingPoses) { + // var start = startingPose.getFirst(); + + // for (var value : centers) { + // var end = + // getPoseFromTag(value) + // .plus(new Transform2d(-0.3, 0, Rotation2d.kZero)); + // PathTweakable yay = + // new PathTweakable( + // start, + // start.interpolate(end, 0.3).getTranslation(), + // end.plus(new Transform2d(-1, 0, Rotation2d.kZero)) + // .getTranslation(), + // end); + // yay.setEndVelocity(1); + // yay.setEndAngleTweak(false); + // yay.setEvalFunction(evaler::timeAndCollisions); + // yay = Optimizer.optimize(yay); + // PathPlannerPath optimized = yay.getPath(); + + // optimized.name = startingPose.getSecond() + "-" + value.name(); + // PathPlannerPathExtended.toPathFile(optimized, "Auto Generated"); + // } + // } + } catch (Exception e) { + e.printStackTrace(); + throw new RuntimeException("Failed to generate trajectory."); + } + } + + public void startCompetition() { + suppressExitWarning(true); + } + + public void endCompetition() {} + } + + public static void main(String... args) throws IOException, InterruptedException { + // Delete existing auto-generated paths + System.out.println("Deleting existing auto-generated paths..."); + java.io.File deployDir = new java.io.File("src/main/deploy/pathplanner/paths"); + if (deployDir.exists()) { + for (java.io.File file : deployDir.listFiles()) { + if (file.getName().endsWith(".path")) { + try { + String content = + new String(java.nio.file.Files.readAllBytes(file.toPath())); + if (content.contains("\"folder\": \"Auto Generated\"")) { + file.delete(); + } + } catch (IOException e) { + System.err.println("Failed to read/delete file: " + file.getName()); + } + } + } + } + System.out.println("Finished deleting existing auto-generated paths."); + + boolean isWindows = System.getProperty("os.name").startsWith("Windows"); + var gradleBuilder = + new ProcessBuilder( + isWindows ? "gradlew.bat" : "./gradlew", + "simulateJava", + "-x", + "test", + "-x", + "spotlessApply", + "-x", + "spotlessCheck"); + gradleBuilder.environment().put("GENERATE_TRAJECTORIES", "true"); + + // Redirect error stream to output stream + gradleBuilder.redirectErrorStream(true); + + var gradle = gradleBuilder.start(); + System.out.println("Started gradle subtask."); + + // Read the output stream in real-time + try (var reader = + new java.io.BufferedReader( + new java.io.InputStreamReader(gradle.getInputStream()))) { + String line; + while ((line = reader.readLine()) != null) { + System.out.println(line); + } + } + + gradle.waitFor(); + System.out.println("Finished gradle subtask."); + } + + private static Pose2d getPoseFromTag(DriveLocation location) { + return VisionConstants.aprilTagLayout + .getTagPose(location.tagBlue) + .get() + .toPose2d() + .plus( + new Transform2d( + new Translation2d(Units.feetToMeters(3) / 2, location.offset), + Rotation2d.k180deg)); + } + + private static List subdividePoses(Pose2d start, Pose2d end, int subdivisions) { + subdivisions++; + List output = new ArrayList<>(); + for (double i = 0.0; i <= subdivisions; i++) { + output.add(start.interpolate(end, i / subdivisions)); + } + return output; + } +} diff --git a/src/main/java/frc/robot/auto/Optimizer.java b/src/main/java/frc/robot/auto/Optimizer.java new file mode 100644 index 00000000..ab81c4eb --- /dev/null +++ b/src/main/java/frc/robot/auto/Optimizer.java @@ -0,0 +1,37 @@ +package frc.robot.auto; + +import java.util.Random; + +public class Optimizer { + public static interface Tweakable> { + // the goal of this is to be maximized + public double getReward(); + + public T tweak(Random random); + } + + public static > T optimize(T tweakable) { + Random rand = new Random(2539); + T bestTweakable = tweakable; + double bestReward = tweakable.getReward(); + + T absoluteBestTweakable = bestTweakable; + double absoluteBestReward = bestReward; + + for (int i = 0; i < 1000; i++) { + T nextTweakable = bestTweakable.tweak(rand); + double nextReward = nextTweakable.getReward(); + if (nextReward > bestReward || rand.nextDouble() > 0.75) { + bestReward = nextReward; + bestTweakable = nextTweakable; + } + + if (bestReward > absoluteBestReward) { + absoluteBestReward = bestReward; + absoluteBestTweakable = bestTweakable; + } + } + + return absoluteBestTweakable; + } +} diff --git a/src/main/java/frc/robot/auto/PathEval.java b/src/main/java/frc/robot/auto/PathEval.java new file mode 100644 index 00000000..1c3fcb74 --- /dev/null +++ b/src/main/java/frc/robot/auto/PathEval.java @@ -0,0 +1,131 @@ +package frc.robot.auto; + +import com.pathplanner.lib.config.RobotConfig; +import com.pathplanner.lib.path.PathPlannerPath; +import com.pathplanner.lib.trajectory.PathPlannerTrajectoryState; +import edu.wpi.first.math.Pair; +import edu.wpi.first.math.geometry.Pose2d; +import edu.wpi.first.math.geometry.Rotation2d; +import edu.wpi.first.math.geometry.Transform2d; +import edu.wpi.first.math.geometry.Translation2d; +import frc.robot.constants.GlobalConstants; +import java.util.ArrayList; +import java.util.List; + +public class PathEval { + private final RobotConfig configs; + + private final List> keepOutZones; + + public PathEval() { + try { + configs = RobotConfig.fromGUISettings(); + } catch (Exception e) { + e.printStackTrace(); + throw new RuntimeException(); + } + keepOutZones = new ArrayList<>(); + + // Reef: + keepOutZones.add( + List.of( + new Translation2d(4.489, 5.004), + new Translation2d(3.617, 4.503), + new Translation2d(3.617, 3.536), + new Translation2d(4.489, 3.034), + new Translation2d(5.348, 3.536), + new Translation2d(5.348, 4.503))); + + // Station Right: + keepOutZones.add(List.of(new Translation2d(0.025, 1.211), new Translation2d(1.697, 0))); + + // Station Left: + keepOutZones.add(List.of(new Translation2d(0.025, 6.778), new Translation2d(1.697, 7.986))); + } + + public Double timeOnly(PathPlannerPath path) { + var idealTrajectory = path.getIdealTrajectory(configs); + return -idealTrajectory.get().getTotalTimeSeconds(); + } + + public Double collisionsOnly(PathPlannerPath path) { + var nextTraj = path.getIdealTrajectory(configs).get(); + double collisions = 0; + for (var zone : keepOutZones) { + List states = nextTraj.getStates(); + for (int i = 0; i < states.size() - 1; i++) { + boolean collide = testRobotForCollision(states.get(i).pose, zone); + if (!collide) { + collisions += (states.get(i + 1).timeSeconds - states.get(i).timeSeconds); + } + } + } + return -collisions; + } + + public Double kinkOnly(PathPlannerPath path) { + var nextTraj = path.getIdealTrajectory(configs).get(); + double collisions = 0; + List states = nextTraj.getStates(); + for (int i = 0; i < states.size() - 1; i++) { + boolean collide = Math.abs(states.get(i).heading.minus(states.get(i+1).heading).getRadians()) / (states.get(i + 1).timeSeconds - states.get(i).timeSeconds) > (Math.PI * 10); + if (collide) { + collisions += (states.get(i + 1).timeSeconds - states.get(i).timeSeconds); + } + } + return -collisions; + } + + public Double timeAndCollisions(PathPlannerPath path) { + return timeOnly(path) + collisionsOnly(path) * 30;// + kinkOnly(path) * 100; + } + + private static boolean keepOutTest( + List robotPoints, List avoidPoints) { + List> pairs = new ArrayList<>(); + for (int i = 0; i < robotPoints.size() - 1; i++) { + pairs.add(new Pair<>(robotPoints.get(i), robotPoints.get(i + 1))); + } + pairs.add(new Pair<>(robotPoints.get(robotPoints.size() - 1), robotPoints.get(0))); + + for (Pair pair : pairs) { + var a = pair.getFirst(); + var b = pair.getSecond(); + boolean isInside = false; + for (Translation2d c : avoidPoints) { + double crossProduct = + (b.getX() - a.getX()) * (c.getY() - a.getY()) + - (b.getY() - a.getY()) * (c.getX() - a.getX()); + if (crossProduct > 0) { + isInside = true; + break; + } + } + if (!isInside) { + return true; + } + } + return false; + } + + private static boolean testRobotForCollision(Pose2d pose, List avoidPoints) { + List robotPoints = new ArrayList<>(); + Translation2d[] bumperCorners = + new Translation2d[] { + new Translation2d( + GlobalConstants.bumperLength / 2, GlobalConstants.bumperWidth / 2), + new Translation2d( + -GlobalConstants.bumperLength / 2, GlobalConstants.bumperWidth / 2), + new Translation2d( + -GlobalConstants.bumperLength / 2, -GlobalConstants.bumperWidth / 2), + new Translation2d( + GlobalConstants.bumperLength / 2, -GlobalConstants.bumperWidth / 2) + }; + for (int i = 0; i < 4; i++) { + robotPoints.add( + pose.plus(new Transform2d(bumperCorners[i], Rotation2d.kZero)) + .getTranslation()); + } + return keepOutTest(robotPoints, avoidPoints); + } +} diff --git a/src/main/java/frc/robot/auto/PathTweakable.java b/src/main/java/frc/robot/auto/PathTweakable.java new file mode 100644 index 00000000..5736a035 --- /dev/null +++ b/src/main/java/frc/robot/auto/PathTweakable.java @@ -0,0 +1,130 @@ +package frc.robot.auto; + +import com.pathplanner.lib.path.GoalEndState; +import com.pathplanner.lib.path.IdealStartingState; +import com.pathplanner.lib.path.PathConstraints; +import com.pathplanner.lib.path.PathPlannerPath; +import com.pathplanner.lib.path.Waypoint; +import edu.wpi.first.math.geometry.Pose2d; +import edu.wpi.first.math.geometry.Rotation2d; +import edu.wpi.first.math.geometry.Translation2d; +import java.util.ArrayList; +import java.util.Random; +import java.util.function.Function; + +public class PathTweakable implements Optimizer.Tweakable { + private Pose2d startPose; + private Translation2d startControl; + private Translation2d endControl; + private Pose2d endPose; + private double endVelocity; + private double startVelocity; + private Function evalFunction; + + private boolean allowAngleTweakStart = true; + private boolean allowAngleTweakEnd = true; + + private PathTweakable() {} + + public void setEvalFunction(Function evalFunction) { + this.evalFunction = evalFunction; + } + + public void setEndVelocity(double velocity) { + endVelocity = velocity; + } + + public void setStartVelocity(double velocity) { + startVelocity = velocity; + } + + public PathTweakable(Pose2d startPose, Pose2d endPose) { + this(); + this.startPose = startPose; + this.endPose = endPose; + startControl = startPose.interpolate(endPose, 0.3).getTranslation(); + endControl = startPose.interpolate(endPose, 0.7).getTranslation(); + } + + public PathTweakable( + Pose2d startPose, + Translation2d startControl, + Translation2d endControl, + Pose2d endPose) { + this(); + this.startPose = startPose; + this.endPose = endPose; + this.startControl = startControl; + this.endControl = endControl; + } + + public void setEndAngleTweak(boolean allow) { + allowAngleTweakEnd = allow; + } + + public void setStartAngleTweak(boolean allow) { + allowAngleTweakStart = allow; + } + + public PathTweakable tweak(Random rand) { + var nextStartControl = startControl; + var nextEndControl = endControl; + + if (allowAngleTweakStart) { + nextStartControl = + nextStartControl.rotateAround( + startPose.getTranslation(), + Rotation2d.fromRotations(rand.nextDouble() * 0.1)); + } + + if (allowAngleTweakEnd) { + nextEndControl = + nextEndControl.rotateAround( + endPose.getTranslation(), + Rotation2d.fromRotations(rand.nextDouble() * 0.1)); + } + + nextStartControl = + nextStartControl + .minus(startPose.getTranslation()) + .times(1 + (rand.nextDouble() - 0.5) * 0.1) + .plus(startPose.getTranslation()); + nextEndControl = + nextEndControl + .minus(endPose.getTranslation()) + .times(1 + (rand.nextDouble() - 0.5) * 0.1) + .plus(endPose.getTranslation()); + + var nextTweakable = new PathTweakable(); + nextTweakable.startPose = startPose; + nextTweakable.endPose = endPose; + nextTweakable.startControl = nextStartControl; + nextTweakable.endControl = nextEndControl; + nextTweakable.endVelocity = endVelocity; + nextTweakable.startVelocity = startVelocity; + nextTweakable.evalFunction = evalFunction; + nextTweakable.allowAngleTweakEnd = allowAngleTweakEnd; + nextTweakable.allowAngleTweakStart = allowAngleTweakStart; + return nextTweakable; + } + + public double getReward() { + + return evalFunction.apply(getPath()); + } + + public PathPlannerPath getPath() { + var myWaypoints = new ArrayList(); + myWaypoints.add(new Waypoint(null, startPose.getTranslation(), startControl)); + myWaypoints.add(new Waypoint(endControl, endPose.getTranslation(), null)); + + var myPath = + new PathPlannerPath( + myWaypoints, + new PathConstraints(4.1, 7.0, Math.toRadians(540), Math.toRadians(720)), + new IdealStartingState(startVelocity, startPose.getRotation()), + new GoalEndState(endVelocity, endPose.getRotation())); + + return myPath; + } +} diff --git a/src/main/java/frc/robot/auto/PathTweakableBezier.java b/src/main/java/frc/robot/auto/PathTweakableBezier.java new file mode 100644 index 00000000..90fc63c7 --- /dev/null +++ b/src/main/java/frc/robot/auto/PathTweakableBezier.java @@ -0,0 +1,92 @@ +package frc.robot.auto; + +import com.pathplanner.lib.path.GoalEndState; +import com.pathplanner.lib.path.IdealStartingState; +import com.pathplanner.lib.path.PathConstraints; +import com.pathplanner.lib.path.PathPlannerPath; +import com.pathplanner.lib.path.Waypoint; +import edu.wpi.first.math.geometry.Pose2d; +import edu.wpi.first.math.geometry.Rotation2d; +import java.util.List; +import java.util.Random; + +public class PathTweakableBezier implements Optimizer.Tweakable { + public static PathEval myEval = new PathEval(); + + @FunctionalInterface + public static interface Tweaker { + public PathTweakableBezier tweak(PathTweakableBezier input, Random rand); + } + + public final List points; + public final IdealStartingState startState; + public final GoalEndState endState; + public final Tweaker tweaker; + + /** + * Creates a PathTweakableBezier path for optimization. + * + * @param startState The initial state of the path, including velocity and rotation + * @param endState The goal end state of the path, including velocity and rotation + * @param points List of Pose2d points defining the path waypoints + */ + public PathTweakableBezier( + IdealStartingState startState, + GoalEndState endState, + List points, + Tweaker tweaker) { + this.startState = startState; + this.endState = endState; + this.points = points; + this.tweaker = tweaker; + } + + public PathTweakableBezier tweak(Random rand) { + return tweaker.tweak(this, rand); + } + ; + + /** + * @param pose + * @param rand + * @param step Step size to tweak by in meters. + * @return + */ + public static Pose2d tweakPoseTranslation(Pose2d pose, Random rand, double step) { + return new Pose2d( + pose.getX() + rand.nextDouble(-step, step), + pose.getY() + rand.nextDouble(-step, step), + pose.getRotation()); + } + + /** + * @param pose + * @param rand + * @param step Step size to tweak by in radians. + * @return + */ + public static Pose2d tweakPoseRotation(Pose2d pose, Random rand, double step) { + return new Pose2d( + pose.getX(), + pose.getY(), + Rotation2d.fromRadians( + pose.getRotation().getRadians() + rand.nextDouble(-step, step))); + } + + public double getReward() { + return myEval.timeAndCollisions(getPath()); + } + + public PathPlannerPath getPath() { + List waypoints = PathPlannerPath.waypointsFromPoses(points); + + PathPlannerPath myPath = + new PathPlannerPath( + waypoints, + new PathConstraints(4.1, 7.0, Math.toRadians(540), Math.toRadians(720)), + startState, + endState); + + return myPath; + } +} diff --git a/src/main/java/frc/robot/constants/GlobalConstants.java b/src/main/java/frc/robot/constants/GlobalConstants.java index 15a431eb..c8b74408 100644 --- a/src/main/java/frc/robot/constants/GlobalConstants.java +++ b/src/main/java/frc/robot/constants/GlobalConstants.java @@ -20,8 +20,8 @@ public class GlobalConstants { public static final LinearVelocity MAX_TRANSLATIONAL_SPEED = TunerConstants.kSpeedAt12Volts; public static final AngularVelocity MAX_ROTATIONAL_SPEED = RotationsPerSecond.of(1); - public static final Mass ROBOT_MASS = Pounds.of(150); - public static final MomentOfInertia ROBOT_MOI = KilogramSquareMeters.of(11.61); + public static final Mass ROBOT_MASS = Pounds.of(90); // 65.5 + public static final MomentOfInertia ROBOT_MOI = KilogramSquareMeters.of(11.61 * 90 / 150); public static final double g = 9.81; public static final double STOPPING_TIME = 2; @@ -29,22 +29,22 @@ public class GlobalConstants { // negative for closer to the back of the robot, 0 for the center, positive for closer to the // front. // Should be <= bumperWidth/2 and >= -bumperWidth/2 - public static final double robotComXOffset = 0.20; + public static final double robotComXOffset = 0.0; // negative for closer to the right of the robot, 0 for the center, positive for closer to the // left. // Should be <= bumperLength/2 and >= -bumperLength/2 - public static final double robotComYOffset = -0.24; + public static final double robotComYOffset = -0.0; - public static final double bumperLength = 0.97; + public static final double bumperLength = 0.91; public static final double bumperWidth = 0.91; public static final double COEFFICIENT_OF_FRICTION = 1.0; public static final DCMotor DRIVE_MOTOR = - DCMotor.getKrakenX60Foc(1).withReduction(EXAMPLE_MODULE.DriveMotorGearRatio); + DCMotor.getFalcon500Foc(1).withReduction(EXAMPLE_MODULE.DriveMotorGearRatio); public static final DCMotor STEER_MOTOR = - DCMotor.getKrakenX60Foc(1).withReduction(EXAMPLE_MODULE.SteerMotorGearRatio); + DCMotor.getFalcon500Foc(1).withReduction(EXAMPLE_MODULE.SteerMotorGearRatio); public static class ControllerConstants { public static final int LEFT_DRIVE_CONTROLLER = 0; diff --git a/src/main/java/frc/robot/constants/TunerConstants.java b/src/main/java/frc/robot/constants/TunerConstants.java index 53e8dcf5..7a76f69a 100644 --- a/src/main/java/frc/robot/constants/TunerConstants.java +++ b/src/main/java/frc/robot/constants/TunerConstants.java @@ -23,17 +23,23 @@ public class TunerConstants { // output type specified by SwerveModuleConstants.SteerMotorClosedLoopOutput private static final Slot0Configs steerGains = new Slot0Configs() - .withKP(40) + .withKP(100) // 27.9 .withKI(0) .withKD(0.5) - .withKS(0.1) - .withKV(1.59) - .withKA(0) + .withKS(0.21428) + .withKV(1.5189) + .withKA(0.021078) .withStaticFeedforwardSign(StaticFeedforwardSignValue.UseClosedLoopSign); // When using closed-loop control, the drive motor uses the control // output type specified by SwerveModuleConstants.DriveMotorClosedLoopOutput private static final Slot0Configs driveGains = - new Slot0Configs().withKP(0.1).withKI(0).withKD(0).withKS(0).withKV(0.124); + new Slot0Configs() + .withKP(0.28168) + .withKI(0) + .withKD(0) + .withKS(0.093407) + .withKV(0.11792) + .withStaticFeedforwardSign(StaticFeedforwardSignValue.UseVelocitySign); // The closed-loop output type to use for the steer motors; // This affects the PID/FF gains for the steer motors @@ -55,7 +61,7 @@ public class TunerConstants { // The stator current at which the wheels start to slip; // This needs to be tuned to your individual robot - private static final Current kSlipCurrent = Amps.of(60.0); + private static final Current kSlipCurrent = Amps.of(64); // Initial configs for the drive and steer motors and the azimuth encoder; these cannot be null. // Some configs will be overwritten; check the `with*InitialConfigs()` API documentation. @@ -68,7 +74,7 @@ public class TunerConstants { // set a relatively low // stator current limit to help avoid brownouts without // impacting performance. - .withStatorCurrentLimit(Amps.of(60)) + .withStatorCurrentLimit(Amps.of(60)) // 60 .withStatorCurrentLimitEnable(true)); private static final CANcoderConfiguration encoderInitialConfigs = new CANcoderConfiguration(); // Configs for the Pigeon 2; leave this null to skip applying Pigeon 2 configs @@ -84,11 +90,11 @@ public class TunerConstants { // Every 1 rotation of the azimuth results in kCoupleRatio drive motor turns; // This may need to be tuned to your individual robot - private static final double kCoupleRatio = 0; + private static final double kCoupleRatio = 3.5714285714285716; - private static final double kDriveGearRatio = 5.142857; - private static final double kSteerGearRatio = 25; - private static final Distance kWheelRadius = Inches.of(2); + private static final double kDriveGearRatio = 6.746031746031747; + private static final double kSteerGearRatio = 12.8; + private static final Distance kWheelRadius = Inches.of(1.9079); private static final boolean kInvertLeftSide = false; private static final boolean kInvertRightSide = true; @@ -97,7 +103,8 @@ public class TunerConstants { // These are only used for simulation private static final MomentOfInertia kSteerInertia = KilogramSquareMeters.of(0.01); - private static final MomentOfInertia kDriveInertia = KilogramSquareMeters.of(0.0439); + private static final MomentOfInertia kDriveInertia = + KilogramSquareMeters.of(0.0439 / 150 * 65.5); // Simulated voltage necessary to overcome friction private static final Voltage kSteerFrictionVoltage = Volts.of(0.2); private static final Voltage kDriveFrictionVoltage = Volts.of(0.2); @@ -137,48 +144,48 @@ public class TunerConstants { .withDriveFrictionVoltage(kDriveFrictionVoltage); // Front Left - private static final int kFrontLeftDriveMotorId = 1; - private static final int kFrontLeftSteerMotorId = 2; + private static final int kFrontLeftDriveMotorId = 0; + private static final int kFrontLeftSteerMotorId = 4; private static final int kFrontLeftEncoderId = 24; - private static final Angle kFrontLeftEncoderOffset = Rotations.of(0.09228515625); + private static final Angle kFrontLeftEncoderOffset = Rotations.of(0.330078125); private static final boolean kFrontLeftSteerMotorInverted = false; private static final boolean kFrontLeftEncoderInverted = false; - private static final Distance kFrontLeftXPos = Inches.of(11.5); - private static final Distance kFrontLeftYPos = Inches.of(11.5); + private static final Distance kFrontLeftXPos = Inches.of(11.75); + private static final Distance kFrontLeftYPos = Inches.of(11.75); // Front Right - private static final int kFrontRightDriveMotorId = 5; + private static final int kFrontRightDriveMotorId = 2; private static final int kFrontRightSteerMotorId = 6; private static final int kFrontRightEncoderId = 26; - private static final Angle kFrontRightEncoderOffset = Rotations.of(-0.3515625); + private static final Angle kFrontRightEncoderOffset = Rotations.of(0.033203125); private static final boolean kFrontRightSteerMotorInverted = false; private static final boolean kFrontRightEncoderInverted = false; - private static final Distance kFrontRightXPos = Inches.of(11.5); - private static final Distance kFrontRightYPos = Inches.of(-11.5); + private static final Distance kFrontRightXPos = Inches.of(11.75); + private static final Distance kFrontRightYPos = Inches.of(-11.75); // Back Left - private static final int kBackLeftDriveMotorId = 3; - private static final int kBackLeftSteerMotorId = 4; + private static final int kBackLeftDriveMotorId = 1; + private static final int kBackLeftSteerMotorId = 5; private static final int kBackLeftEncoderId = 25; - private static final Angle kBackLeftEncoderOffset = Rotations.of(-0.029296875); + private static final Angle kBackLeftEncoderOffset = Rotations.of(-0.44384765625); private static final boolean kBackLeftSteerMotorInverted = false; private static final boolean kBackLeftEncoderInverted = false; - private static final Distance kBackLeftXPos = Inches.of(-11.5); - private static final Distance kBackLeftYPos = Inches.of(11.5); + private static final Distance kBackLeftXPos = Inches.of(-11.75); + private static final Distance kBackLeftYPos = Inches.of(11.75); // Back Right - private static final int kBackRightDriveMotorId = 7; - private static final int kBackRightSteerMotorId = 8; + private static final int kBackRightDriveMotorId = 3; + private static final int kBackRightSteerMotorId = 7; private static final int kBackRightEncoderId = 27; - private static final Angle kBackRightEncoderOffset = Rotations.of(-0.4814453125); + private static final Angle kBackRightEncoderOffset = Rotations.of(-0.220703125); private static final boolean kBackRightSteerMotorInverted = false; private static final boolean kBackRightEncoderInverted = false; - private static final Distance kBackRightXPos = Inches.of(-11.5); - private static final Distance kBackRightYPos = Inches.of(-11.5); + private static final Distance kBackRightXPos = Inches.of(-11.75); + private static final Distance kBackRightYPos = Inches.of(-11.75); public static final SwerveModuleConstants< TalonFXConfiguration, TalonFXConfiguration, CANcoderConfiguration> diff --git a/src/main/java/frc/robot/subsystems/swerve/CommandSwerveDrivetrain.java b/src/main/java/frc/robot/subsystems/swerve/CommandSwerveDrivetrain.java index f16a7afc..acdb9538 100644 --- a/src/main/java/frc/robot/subsystems/swerve/CommandSwerveDrivetrain.java +++ b/src/main/java/frc/robot/subsystems/swerve/CommandSwerveDrivetrain.java @@ -564,7 +564,7 @@ public void periodic() { double acceleration = (currentSpeed - lastSpeed) / 0.02; lastSpeed = currentSpeed; - Logger.recordOutput("Drive/Velocity", currentSpeed); + Logger.recordOutput("Drive/Velocity", getState().Speeds); Logger.recordOutput("Drive/Acceleration", acceleration); Logger.recordOutput( diff --git a/tuner-swerve-project.json b/tuner-swerve-project.json index b412df7f..789d8f89 100644 --- a/tuner-swerve-project.json +++ b/tuner-swerve-project.json @@ -1 +1 @@ -{"Version":"1.0.0.0","LastState":11,"Modules":[{"SteerMotor":{"Id":2,"Name":"Front Left Steer","Model":"Talon FX vers. C","CANbus":"rio","CANbusFriendly":"","SelectedMotorType":{"Name":"WCP Kraken x60","FreeSpeedRps":96.7},"IsStandaloneFx":false},"DriveMotor":{"Id":1,"Name":"Front Left Drive","Model":"Talon FX vers. C","CANbus":"rio","CANbusFriendly":"","SelectedMotorType":{"Name":"WCP Kraken x60","FreeSpeedRps":96.7},"IsStandaloneFx":false},"SelectedEncoderType":"CANcoder","ValidatedSteerId":2,"ValidatedDriveId":1,"ValidatedEncoderId":24,"AvailEncoders":[{"Id":24,"Name":"Front Left CANCoder","Model":"CANCoder","CANbus":"rio","CANbusFriendly":"","SelectedMotorType":null,"IsStandaloneFx":false},{"Id":25,"Name":"Back Left CANCoder","Model":"CANCoder","CANbus":"rio","CANbusFriendly":"","SelectedMotorType":null,"IsStandaloneFx":false},{"Id":26,"Name":"Front Right CANCoder","Model":"CANCoder","CANbus":"rio","CANbusFriendly":"","SelectedMotorType":null,"IsStandaloneFx":false},{"Id":27,"Name":"Back Right CANCoder","Model":"CANCoder","CANbus":"rio","CANbusFriendly":"","SelectedMotorType":null,"IsStandaloneFx":false}],"IsEncoderTypeCAN":true,"IsDeviceSelectionCompleted":true,"IsConfigurationCompleted":true,"AvailEncoderTypes":["CANcoder"],"ModuleName":"Front Left","ModuleId":0,"Encoder":{"Id":24,"Name":"Front Left CANCoder","Model":"CANCoder","CANbus":"rio","CANbusFriendly":"","SelectedMotorType":null,"IsStandaloneFx":false},"IsEncoderInverted":false,"IsSteerInverted":false,"EncoderOffset":0.09228515625,"DriveMotorSelectionState":1,"SteerMotorSelectionState":1,"SteerEncoderSelectionState":1,"IsModuleValidationComplete":true},{"SteerMotor":{"Id":6,"Name":"Front Right Steer","Model":"Talon FX vers. C","CANbus":"rio","CANbusFriendly":"","SelectedMotorType":{"Name":"WCP Kraken x60","FreeSpeedRps":96.7},"IsStandaloneFx":false},"DriveMotor":{"Id":5,"Name":"Front Right Drive","Model":"Talon FX vers. C","CANbus":"rio","CANbusFriendly":"","SelectedMotorType":{"Name":"WCP Kraken x60","FreeSpeedRps":96.7},"IsStandaloneFx":false},"SelectedEncoderType":"CANcoder","ValidatedSteerId":6,"ValidatedDriveId":5,"ValidatedEncoderId":26,"AvailEncoders":[{"Id":24,"Name":"Front Left CANCoder","Model":"CANCoder","CANbus":"rio","CANbusFriendly":"","SelectedMotorType":null,"IsStandaloneFx":false},{"Id":25,"Name":"Back Left CANCoder","Model":"CANCoder","CANbus":"rio","CANbusFriendly":"","SelectedMotorType":null,"IsStandaloneFx":false},{"Id":26,"Name":"Front Right CANCoder","Model":"CANCoder","CANbus":"rio","CANbusFriendly":"","SelectedMotorType":null,"IsStandaloneFx":false},{"Id":27,"Name":"Back Right CANCoder","Model":"CANCoder","CANbus":"rio","CANbusFriendly":"","SelectedMotorType":null,"IsStandaloneFx":false}],"IsEncoderTypeCAN":true,"IsDeviceSelectionCompleted":true,"IsConfigurationCompleted":true,"AvailEncoderTypes":["CANcoder"],"ModuleName":"Front Right","ModuleId":1,"Encoder":{"Id":26,"Name":"Front Right CANCoder","Model":"CANCoder","CANbus":"rio","CANbusFriendly":"","SelectedMotorType":null,"IsStandaloneFx":false},"IsEncoderInverted":false,"IsSteerInverted":false,"EncoderOffset":-0.3515625,"DriveMotorSelectionState":1,"SteerMotorSelectionState":1,"SteerEncoderSelectionState":1,"IsModuleValidationComplete":true},{"SteerMotor":{"Id":4,"Name":"Back Left Steer","Model":"Talon FX vers. C","CANbus":"rio","CANbusFriendly":"","SelectedMotorType":{"Name":"WCP Kraken x60","FreeSpeedRps":96.7},"IsStandaloneFx":false},"DriveMotor":{"Id":3,"Name":"Back Left Drive","Model":"Talon FX vers. C","CANbus":"rio","CANbusFriendly":"","SelectedMotorType":{"Name":"WCP Kraken x60","FreeSpeedRps":96.7},"IsStandaloneFx":false},"SelectedEncoderType":"CANcoder","ValidatedSteerId":4,"ValidatedDriveId":3,"ValidatedEncoderId":25,"AvailEncoders":[{"Id":24,"Name":"Front Left CANCoder","Model":"CANCoder","CANbus":"rio","CANbusFriendly":"","SelectedMotorType":null,"IsStandaloneFx":false},{"Id":25,"Name":"Back Left CANCoder","Model":"CANCoder","CANbus":"rio","CANbusFriendly":"","SelectedMotorType":null,"IsStandaloneFx":false},{"Id":26,"Name":"Front Right CANCoder","Model":"CANCoder","CANbus":"rio","CANbusFriendly":"","SelectedMotorType":null,"IsStandaloneFx":false},{"Id":27,"Name":"Back Right CANCoder","Model":"CANCoder","CANbus":"rio","CANbusFriendly":"","SelectedMotorType":null,"IsStandaloneFx":false}],"IsEncoderTypeCAN":true,"IsDeviceSelectionCompleted":true,"IsConfigurationCompleted":true,"AvailEncoderTypes":["CANcoder"],"ModuleName":"Back Left","ModuleId":2,"Encoder":{"Id":25,"Name":"Back Left CANCoder","Model":"CANCoder","CANbus":"rio","CANbusFriendly":"","SelectedMotorType":null,"IsStandaloneFx":false},"IsEncoderInverted":false,"IsSteerInverted":false,"EncoderOffset":-0.029296875,"DriveMotorSelectionState":1,"SteerMotorSelectionState":1,"SteerEncoderSelectionState":1,"IsModuleValidationComplete":true},{"SteerMotor":{"Id":8,"Name":"Back Right Steer","Model":"Talon FX vers. C","CANbus":"rio","CANbusFriendly":"","SelectedMotorType":{"Name":"WCP Kraken x60","FreeSpeedRps":96.7},"IsStandaloneFx":false},"DriveMotor":{"Id":7,"Name":"Back Right Drive","Model":"Talon FX vers. C","CANbus":"rio","CANbusFriendly":"","SelectedMotorType":{"Name":"WCP Kraken x60","FreeSpeedRps":96.7},"IsStandaloneFx":false},"SelectedEncoderType":"CANcoder","ValidatedSteerId":8,"ValidatedDriveId":7,"ValidatedEncoderId":27,"AvailEncoders":[{"Id":24,"Name":"Front Left CANCoder","Model":"CANCoder","CANbus":"rio","CANbusFriendly":"","SelectedMotorType":null,"IsStandaloneFx":false},{"Id":25,"Name":"Back Left CANCoder","Model":"CANCoder","CANbus":"rio","CANbusFriendly":"","SelectedMotorType":null,"IsStandaloneFx":false},{"Id":26,"Name":"Front Right CANCoder","Model":"CANCoder","CANbus":"rio","CANbusFriendly":"","SelectedMotorType":null,"IsStandaloneFx":false},{"Id":27,"Name":"Back Right CANCoder","Model":"CANCoder","CANbus":"rio","CANbusFriendly":"","SelectedMotorType":null,"IsStandaloneFx":false}],"IsEncoderTypeCAN":true,"IsDeviceSelectionCompleted":true,"IsConfigurationCompleted":true,"AvailEncoderTypes":["CANcoder"],"ModuleName":"Back Right","ModuleId":3,"Encoder":{"Id":27,"Name":"Back Right CANCoder","Model":"CANCoder","CANbus":"rio","CANbusFriendly":"","SelectedMotorType":null,"IsStandaloneFx":false},"IsEncoderInverted":false,"IsSteerInverted":false,"EncoderOffset":-0.4814453125,"DriveMotorSelectionState":1,"SteerMotorSelectionState":1,"SteerEncoderSelectionState":1,"IsModuleValidationComplete":true}],"SwerveOptions":{"kSpeedAt12Volts":6.206390992491586,"IsValidConfiguration":true,"Gyro":{"Id":29,"Name":"Pigeon","Model":"Pigeon 2 vers. S","CANbus":"rio","CANbusFriendly":"","SelectedMotorType":null,"IsStandaloneFx":false},"IsValidGyroCANbus":true,"VerticalTrackSizeInches":23.0,"HorizontalTrackSizeInches":23.0,"WheelRadiusInches":2.0,"IsLeftSideInverted":false,"IsRightSideInverted":true,"SwerveModuleType":0,"SwerveModuleConfiguration":{"_CouplingRatio":0.0,"_CustomName":null,"SteerRatio":25.0,"ModuleBrand":-1,"DriveRatio":5.142857,"CouplingRatio":0.0,"CustomName":null},"HasVerifiedSteer":true,"HasVerifiedDrive":true}} \ No newline at end of file +{"Version":"1.0.0.0","LastState":11,"Modules":[{"SteerMotor":{"Id":4,"Name":"Front Left Steer","Model":"Talon FX","CANbus":"93E5ADD63353385320202034162703FF","CANbusFriendly":"CANivore","SelectedMotorType":{"Name":"WCP Kraken x60","FreeSpeedRps":96.7},"IsStandaloneFx":false},"DriveMotor":{"Id":0,"Name":"Front Left Drive","Model":"Talon FX","CANbus":"93E5ADD63353385320202034162703FF","CANbusFriendly":"CANivore","SelectedMotorType":{"Name":"WCP Kraken x60","FreeSpeedRps":96.7},"IsStandaloneFx":false},"SelectedEncoderType":"CANcoder","ValidatedSteerId":4,"ValidatedDriveId":0,"ValidatedEncoderId":24,"AvailEncoders":[{"Id":24,"Name":"Front Left CANCoder","Model":"CANCoder","CANbus":"93E5ADD63353385320202034162703FF","CANbusFriendly":"CANivore","SelectedMotorType":null,"IsStandaloneFx":false},{"Id":25,"Name":"Back Left CANCoder","Model":"CANCoder","CANbus":"93E5ADD63353385320202034162703FF","CANbusFriendly":"CANivore","SelectedMotorType":null,"IsStandaloneFx":false},{"Id":26,"Name":"Front Right CANCoder","Model":"CANCoder","CANbus":"93E5ADD63353385320202034162703FF","CANbusFriendly":"CANivore","SelectedMotorType":null,"IsStandaloneFx":false},{"Id":27,"Name":"Back Right CANCoder","Model":"CANCoder","CANbus":"93E5ADD63353385320202034162703FF","CANbusFriendly":"CANivore","SelectedMotorType":null,"IsStandaloneFx":false}],"IsEncoderTypeCAN":true,"IsDeviceSelectionCompleted":true,"IsConfigurationCompleted":true,"AvailEncoderTypes":["CANcoder"],"ModuleName":"Front Left","ModuleId":0,"Encoder":{"Id":24,"Name":"Front Left CANCoder","Model":"CANCoder","CANbus":"93E5ADD63353385320202034162703FF","CANbusFriendly":"CANivore","SelectedMotorType":null,"IsStandaloneFx":false},"IsEncoderInverted":false,"IsSteerInverted":false,"EncoderOffset":0.330078125,"DriveMotorSelectionState":1,"SteerMotorSelectionState":1,"SteerEncoderSelectionState":1,"IsModuleValidationComplete":true},{"SteerMotor":{"Id":6,"Name":"Front Right Steer","Model":"Talon FX","CANbus":"93E5ADD63353385320202034162703FF","CANbusFriendly":"CANivore","SelectedMotorType":{"Name":"WCP Kraken x60","FreeSpeedRps":96.7},"IsStandaloneFx":false},"DriveMotor":{"Id":2,"Name":"Front Right Drive","Model":"Talon FX","CANbus":"93E5ADD63353385320202034162703FF","CANbusFriendly":"CANivore","SelectedMotorType":{"Name":"WCP Kraken x60","FreeSpeedRps":96.7},"IsStandaloneFx":false},"SelectedEncoderType":"CANcoder","ValidatedSteerId":6,"ValidatedDriveId":2,"ValidatedEncoderId":26,"AvailEncoders":[{"Id":24,"Name":"Front Left CANCoder","Model":"CANCoder","CANbus":"93E5ADD63353385320202034162703FF","CANbusFriendly":"CANivore","SelectedMotorType":null,"IsStandaloneFx":false},{"Id":25,"Name":"Back Left CANCoder","Model":"CANCoder","CANbus":"93E5ADD63353385320202034162703FF","CANbusFriendly":"CANivore","SelectedMotorType":null,"IsStandaloneFx":false},{"Id":26,"Name":"Front Right CANCoder","Model":"CANCoder","CANbus":"93E5ADD63353385320202034162703FF","CANbusFriendly":"CANivore","SelectedMotorType":null,"IsStandaloneFx":false},{"Id":27,"Name":"Back Right CANCoder","Model":"CANCoder","CANbus":"93E5ADD63353385320202034162703FF","CANbusFriendly":"CANivore","SelectedMotorType":null,"IsStandaloneFx":false}],"IsEncoderTypeCAN":true,"IsDeviceSelectionCompleted":true,"IsConfigurationCompleted":true,"AvailEncoderTypes":["CANcoder"],"ModuleName":"Front Right","ModuleId":1,"Encoder":{"Id":26,"Name":"Front Right CANCoder","Model":"CANCoder","CANbus":"93E5ADD63353385320202034162703FF","CANbusFriendly":"CANivore","SelectedMotorType":null,"IsStandaloneFx":false},"IsEncoderInverted":false,"IsSteerInverted":false,"EncoderOffset":0.033203125,"DriveMotorSelectionState":1,"SteerMotorSelectionState":1,"SteerEncoderSelectionState":1,"IsModuleValidationComplete":true},{"SteerMotor":{"Id":5,"Name":"Back Left Steer","Model":"Talon FX","CANbus":"93E5ADD63353385320202034162703FF","CANbusFriendly":"CANivore","SelectedMotorType":{"Name":"WCP Kraken x60","FreeSpeedRps":96.7},"IsStandaloneFx":false},"DriveMotor":{"Id":1,"Name":"Back Left Drive","Model":"Talon FX","CANbus":"93E5ADD63353385320202034162703FF","CANbusFriendly":"CANivore","SelectedMotorType":{"Name":"WCP Kraken x60","FreeSpeedRps":96.7},"IsStandaloneFx":false},"SelectedEncoderType":"CANcoder","ValidatedSteerId":5,"ValidatedDriveId":1,"ValidatedEncoderId":25,"AvailEncoders":[{"Id":24,"Name":"Front Left CANCoder","Model":"CANCoder","CANbus":"93E5ADD63353385320202034162703FF","CANbusFriendly":"CANivore","SelectedMotorType":null,"IsStandaloneFx":false},{"Id":25,"Name":"Back Left CANCoder","Model":"CANCoder","CANbus":"93E5ADD63353385320202034162703FF","CANbusFriendly":"CANivore","SelectedMotorType":null,"IsStandaloneFx":false},{"Id":26,"Name":"Front Right CANCoder","Model":"CANCoder","CANbus":"93E5ADD63353385320202034162703FF","CANbusFriendly":"CANivore","SelectedMotorType":null,"IsStandaloneFx":false},{"Id":27,"Name":"Back Right CANCoder","Model":"CANCoder","CANbus":"93E5ADD63353385320202034162703FF","CANbusFriendly":"CANivore","SelectedMotorType":null,"IsStandaloneFx":false}],"IsEncoderTypeCAN":true,"IsDeviceSelectionCompleted":true,"IsConfigurationCompleted":true,"AvailEncoderTypes":["CANcoder"],"ModuleName":"Back Left","ModuleId":2,"Encoder":{"Id":25,"Name":"Back Left CANCoder","Model":"CANCoder","CANbus":"93E5ADD63353385320202034162703FF","CANbusFriendly":"CANivore","SelectedMotorType":null,"IsStandaloneFx":false},"IsEncoderInverted":false,"IsSteerInverted":false,"EncoderOffset":-0.44384765625,"DriveMotorSelectionState":1,"SteerMotorSelectionState":1,"SteerEncoderSelectionState":1,"IsModuleValidationComplete":true},{"SteerMotor":{"Id":7,"Name":"Back Right Steer","Model":"Talon FX","CANbus":"93E5ADD63353385320202034162703FF","CANbusFriendly":"CANivore","SelectedMotorType":{"Name":"WCP Kraken x60","FreeSpeedRps":96.7},"IsStandaloneFx":false},"DriveMotor":{"Id":3,"Name":"Back Right Drive","Model":"Talon FX","CANbus":"93E5ADD63353385320202034162703FF","CANbusFriendly":"CANivore","SelectedMotorType":{"Name":"WCP Kraken x60","FreeSpeedRps":96.7},"IsStandaloneFx":false},"SelectedEncoderType":"CANcoder","ValidatedSteerId":7,"ValidatedDriveId":3,"ValidatedEncoderId":27,"AvailEncoders":[{"Id":24,"Name":"Front Left CANCoder","Model":"CANCoder","CANbus":"93E5ADD63353385320202034162703FF","CANbusFriendly":"CANivore","SelectedMotorType":null,"IsStandaloneFx":false},{"Id":25,"Name":"Back Left CANCoder","Model":"CANCoder","CANbus":"93E5ADD63353385320202034162703FF","CANbusFriendly":"CANivore","SelectedMotorType":null,"IsStandaloneFx":false},{"Id":26,"Name":"Front Right CANCoder","Model":"CANCoder","CANbus":"93E5ADD63353385320202034162703FF","CANbusFriendly":"CANivore","SelectedMotorType":null,"IsStandaloneFx":false},{"Id":27,"Name":"Back Right CANCoder","Model":"CANCoder","CANbus":"93E5ADD63353385320202034162703FF","CANbusFriendly":"CANivore","SelectedMotorType":null,"IsStandaloneFx":false}],"IsEncoderTypeCAN":true,"IsDeviceSelectionCompleted":true,"IsConfigurationCompleted":true,"AvailEncoderTypes":["CANcoder"],"ModuleName":"Back Right","ModuleId":3,"Encoder":{"Id":27,"Name":"Back Right CANCoder","Model":"CANCoder","CANbus":"93E5ADD63353385320202034162703FF","CANbusFriendly":"CANivore","SelectedMotorType":null,"IsStandaloneFx":false},"IsEncoderInverted":false,"IsSteerInverted":false,"EncoderOffset":-0.220703125,"DriveMotorSelectionState":1,"SteerMotorSelectionState":1,"SteerEncoderSelectionState":1,"IsModuleValidationComplete":true}],"SwerveOptions":{"kSpeedAt12Volts":4.731460295787658,"IsValidConfiguration":true,"Gyro":{"Id":29,"Name":"Pigeon 2 (Device ID 29)","Model":"Pigeon 2","CANbus":"93E5ADD63353385320202034162703FF","CANbusFriendly":"CANivore","SelectedMotorType":null,"IsStandaloneFx":false},"IsValidGyroCANbus":true,"VerticalTrackSizeInches":23.5,"HorizontalTrackSizeInches":23.5,"WheelRadiusInches":2.0,"IsLeftSideInverted":false,"IsRightSideInverted":true,"SwerveModuleType":3,"SwerveModuleConfiguration":{"_CouplingRatio":3.5714285714285716,"_CustomName":"L2","SteerRatio":12.8,"ModuleBrand":3,"DriveRatio":6.746031746031747,"CouplingRatio":3.5714285714285716,"CustomName":"L2"},"HasVerifiedSteer":true,"HasVerifiedDrive":true}} \ No newline at end of file