diff --git a/cmake/dependencies.cmake b/cmake/dependencies.cmake index e09a68a5f03e998b41a80a44a8dd2cf709583994..7ddbe6d3cfb69d79efa8f3e39f22317140329db3 100644 --- a/cmake/dependencies.cmake +++ b/cmake/dependencies.cmake @@ -25,6 +25,7 @@ set(OBSW_INCLUDE_DIRS ) set(MAIN_COMPUTER + src/boards/Main/Data/ABKTrajectorySet.cpp src/boards/Main/Sensors/Sensors.cpp src/boards/Main/AlgoReference/AlgoReference.cpp src/boards/Main/Radio/Radio.cpp @@ -34,7 +35,7 @@ set(MAIN_COMPUTER src/boards/Main/StateMachines/NASController/NASController.cpp src/boards/Main/StateMachines/ADAController/ADAController.cpp src/boards/Main/PinHandler/PinHandler.cpp - # src/boards/Main/StateMachines/ABKController/ABKController.cpp + src/boards/Main/StateMachines/ABKController/ABKController.cpp src/boards/Main/StateMachines/MEAController/MEAController.cpp src/boards/Main/StatsRecorder/StatsRecorder.cpp ) diff --git a/src/boards/Main/BoardScheduler.h b/src/boards/Main/BoardScheduler.h index 11428599a702a4c921d51c74785ca71c7829253f..dfd49ec8d70ba76aa8e01db31ec233d792f00931 100644 --- a/src/boards/Main/BoardScheduler.h +++ b/src/boards/Main/BoardScheduler.h @@ -76,6 +76,8 @@ public: Boardcore::TaskScheduler &getMeaScheduler() { return nas; } + Boardcore::TaskScheduler &getAbkScheduler() { return nas; } + Boardcore::TaskScheduler &getAdaScheduler() { return ada; } Boardcore::TaskScheduler &getSensorsScheduler() { return sensors; } diff --git a/src/boards/Main/Configs/ABKConfig.h b/src/boards/Main/Configs/ABKConfig.h new file mode 100644 index 0000000000000000000000000000000000000000..522a27e736e19b5cae56baa76e5f4dff9e6aab7d --- /dev/null +++ b/src/boards/Main/Configs/ABKConfig.h @@ -0,0 +1,73 @@ +/* Copyright (c) 2024 Skyward Experimental Rocketry + * Authors: Davide Mor + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#pragma once + +#include <algorithms/AirBrakes/AirBrakesInterp.h> +#include <units/Frequency.h> + +#include <cstdint> + +namespace Main +{ + +namespace Config +{ + +namespace ABK +{ + +/* linter off */ using namespace Boardcore::Units::Frequency; + +constexpr Hertz UPDATE_RATE = 10_hz; + +constexpr unsigned int SHADOW_MODE_TIMEOUT = 500; // [ms] + +// TODO remove this useless config from interpolation algorithm +static const Boardcore::AirBrakesConfig BULLSHIT_RANDOM_CONFIG_REMOVE_ME_PLEASE{ + 0.4884, -1.4391, 6.6940, + -18.4272, 29.1044, -24.5585, + 8.6058, 9.0426, 159.5995, + 4.8188, -208.4471, 47.0771, + 1.9433e+03, -205.6689, -6.4634e+03, + 331.0332, 8.8763e+03, -161.8111, + -3.9917e+03, 2.8025e-06, 0.0373, + 20, -0.009216, 0.02492, + -0.01627, 0.03191, 0.017671458676443, + 0, +}; + +static const Boardcore::AirBrakesInterpConfig CONFIG = { + .FILTER_MINIMUM_ALTITUDE = 1000, + .FILTER_MAXIMUM_ALTITUDE = 3000, + .STARTING_FILTER_VALUE = 0.9f, + .ABK_CRITICAL_ALTITUDE = 2990, + .DZ = 10, + .INITIAL_MASS = 26, + .DM = 0.4f, + .N_FORWARD = 0}; + +} // namespace ABK + +} // namespace Config + +} // namespace Main \ No newline at end of file diff --git a/src/boards/Main/Configs/SchedulerConfig.h b/src/boards/Main/Configs/SchedulerConfig.h index 8d3150dc5343025db42a1f2c5a9f9a005e050d7c..1d28559e1fcadbba7cf37ead818450c818cd48d0 100644 --- a/src/boards/Main/Configs/SchedulerConfig.h +++ b/src/boards/Main/Configs/SchedulerConfig.h @@ -35,8 +35,10 @@ namespace Scheduler // Used for NAS related activities (state machines/scheduler) static const miosix::Priority NAS_PRIORITY = miosix::PRIORITY_MAX - 1; -// Used for NAS related activities (state machines/scheduler) +// Used for MEA related activities (state machines/scheduler) static const miosix::Priority MEA_PRIORITY = miosix::PRIORITY_MAX - 1; +// Used for ABK related activities (state machines/scheduler) +static const miosix::Priority ABK_PRIORITY = miosix::PRIORITY_MAX - 1; // Used for ADA related activities (state machines/scheduler) static const miosix::Priority ADA_PRIORITY = miosix::PRIORITY_MAX - 1; // Used for Sensors TaskScheduler diff --git a/src/boards/Main/Data/ABKTrajectorySet.cpp b/src/boards/Main/Data/ABKTrajectorySet.cpp new file mode 100644 index 0000000000000000000000000000000000000000..47cecd3afb4c660acdccef980ea46b0fd744bee8 --- /dev/null +++ b/src/boards/Main/Data/ABKTrajectorySet.cpp @@ -0,0 +1,6719 @@ +/* Copyright (c) 2024 Skyward Experimental Rocketry + * Author: Davide Mor + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#include "ABKTrajectorySet.h" + +using namespace Boardcore; + +// ============================================= +// WARNING: GEMINI ROCCARASO TRAJECTORIES +// REMOVE THESE!!! +// ============================================= +TrajectoryPoint t0_closed[] = { + TrajectoryPoint(0, 291.697688278318), + TrajectoryPoint(10, 290.984535447996), + TrajectoryPoint(20, 290.272554676878), + TrajectoryPoint(30, 289.561766863639), + TrajectoryPoint(40, 288.852030395801), + TrajectoryPoint(50, 288.143059351263), + TrajectoryPoint(60, 287.435031702346), + TrajectoryPoint(70, 286.728110939376), + TrajectoryPoint(80, 286.021892458837), + TrajectoryPoint(90, 285.316377182964), + TrajectoryPoint(100, 284.612028614926), + TrajectoryPoint(110, 283.908322286167), + TrajectoryPoint(120, 283.205255534554), + TrajectoryPoint(130, 282.50308711451), + TrajectoryPoint(140, 281.801667911645), + TrajectoryPoint(150, 281.1008305958), + TrajectoryPoint(160, 280.400637653825), + TrajectoryPoint(170, 279.701294671578), + TrajectoryPoint(180, 279.002478787265), + TrajectoryPoint(190, 278.304185227024), + TrajectoryPoint(200, 277.606610031429), + TrajectoryPoint(210, 276.909620330855), + TrajectoryPoint(220, 276.213100610647), + TrajectoryPoint(230, 275.517059820918), + TrajectoryPoint(240, 274.82171272541), + TrajectoryPoint(250, 274.126785845519), + TrajectoryPoint(260, 273.43227319665), + TrajectoryPoint(270, 272.738247390128), + TrajectoryPoint(280, 272.044742814953), + TrajectoryPoint(290, 271.351605000273), + TrajectoryPoint(300, 270.658827282562), + TrajectoryPoint(310, 269.966503330181), + TrajectoryPoint(320, 269.274581563642), + TrajectoryPoint(330, 268.582974629793), + TrajectoryPoint(340, 267.891675380714), + TrajectoryPoint(350, 267.200770381043), + TrajectoryPoint(360, 266.510185961775), + TrajectoryPoint(370, 265.819866035091), + TrajectoryPoint(380, 265.129803108316), + TrajectoryPoint(390, 264.440060197535), + TrajectoryPoint(400, 263.750580678499), + TrajectoryPoint(410, 263.061316875416), + TrajectoryPoint(420, 262.372261048453), + TrajectoryPoint(430, 261.683445809333), + TrajectoryPoint(440, 260.994850482844), + TrajectoryPoint(450, 260.306423575181), + TrajectoryPoint(460, 259.618157164805), + TrajectoryPoint(470, 258.93005453962), + TrajectoryPoint(480, 258.242133161705), + TrajectoryPoint(490, 257.554334259916), + TrajectoryPoint(500, 256.866649771936), + TrajectoryPoint(510, 256.179071425476), + TrajectoryPoint(520, 255.491612941993), + TrajectoryPoint(530, 254.80424221825), + TrajectoryPoint(540, 254.116941049339), + TrajectoryPoint(550, 253.429701072041), + TrajectoryPoint(560, 252.742514410224), + TrajectoryPoint(570, 252.055379875809), + TrajectoryPoint(580, 251.368271078778), + TrajectoryPoint(590, 250.681179566394), + TrajectoryPoint(600, 249.99409673583), + TrajectoryPoint(610, 249.307013259786), + TrajectoryPoint(620, 248.619912378961), + TrajectoryPoint(630, 247.932785721418), + TrajectoryPoint(640, 247.245624600031), + TrajectoryPoint(650, 246.558420198845), + TrajectoryPoint(660, 245.871163580697), + TrajectoryPoint(670, 245.183824700715), + TrajectoryPoint(680, 244.496407515798), + TrajectoryPoint(690, 243.808904442685), + TrajectoryPoint(700, 243.121306454657), + TrajectoryPoint(710, 242.433604414687), + TrajectoryPoint(720, 241.745776514132), + TrajectoryPoint(730, 241.057801409348), + TrajectoryPoint(740, 240.369689078822), + TrajectoryPoint(750, 239.681430271073), + TrajectoryPoint(760, 238.993015629897), + TrajectoryPoint(770, 238.30443569757), + TrajectoryPoint(780, 237.61566492373), + TrajectoryPoint(790, 236.926679238592), + TrajectoryPoint(800, 236.237495318523), + TrajectoryPoint(810, 235.548103559551), + TrajectoryPoint(820, 234.858494256803), + TrajectoryPoint(830, 234.16865760621), + TrajectoryPoint(840, 233.478583705918), + TrajectoryPoint(850, 232.788224228347), + TrajectoryPoint(860, 232.097591757854), + TrajectoryPoint(870, 231.406688953627), + TrajectoryPoint(880, 230.715505725166), + TrajectoryPoint(890, 230.024031880883), + TrajectoryPoint(900, 229.332257128576), + TrajectoryPoint(910, 228.640171075695), + TrajectoryPoint(920, 227.94775068442), + TrajectoryPoint(930, 227.254954930989), + TrajectoryPoint(940, 226.561814303897), + TrajectoryPoint(950, 225.868318174168), + TrajectoryPoint(960, 225.174455806958), + TrajectoryPoint(970, 224.480216361252), + TrajectoryPoint(980, 223.785588889414), + TrajectoryPoint(990, 223.090562336636), + TrajectoryPoint(1000, 222.395125540258), + TrajectoryPoint(1010, 221.699255543157), + TrajectoryPoint(1020, 221.002910978018), + TrajectoryPoint(1030, 220.306121420704), + TrajectoryPoint(1040, 219.60887541045), + TrajectoryPoint(1050, 218.911161371448), + TrajectoryPoint(1060, 218.212967611875), + TrajectoryPoint(1070, 217.514282322845), + TrajectoryPoint(1080, 216.8150935773), + TrajectoryPoint(1090, 216.115389328827), + TrajectoryPoint(1100, 215.415157410421), + TrajectoryPoint(1110, 214.714385533196), + TrajectoryPoint(1120, 214.013061285041), + TrajectoryPoint(1130, 213.311172129224), + TrajectoryPoint(1140, 212.608673742036), + TrajectoryPoint(1150, 211.905576887698), + TrajectoryPoint(1160, 211.201877731975), + TrajectoryPoint(1170, 210.497563350611), + TrajectoryPoint(1180, 209.792620686413), + TrajectoryPoint(1190, 209.087036547734), + TrajectoryPoint(1200, 208.380797606912), + TrajectoryPoint(1210, 207.673890398689), + TrajectoryPoint(1220, 206.966301318579), + TrajectoryPoint(1230, 206.258016621218), + TrajectoryPoint(1240, 205.549022418667), + TrajectoryPoint(1250, 204.839304678699), + TrajectoryPoint(1260, 204.128849223041), + TrajectoryPoint(1270, 203.417641725602), + TrajectoryPoint(1280, 202.705667710654), + TrajectoryPoint(1290, 201.992912551), + TrajectoryPoint(1300, 201.279361466101), + TrajectoryPoint(1310, 200.564999520181), + TrajectoryPoint(1320, 199.849811620298), + TrajectoryPoint(1330, 199.133782514392), + TrajectoryPoint(1340, 198.416896789296), + TrajectoryPoint(1350, 197.699138868718), + TrajectoryPoint(1360, 196.980493011203), + TrajectoryPoint(1370, 196.260943308046), + TrajectoryPoint(1380, 195.540473681187), + TrajectoryPoint(1390, 194.819067881072), + TrajectoryPoint(1400, 194.096709484473), + TrajectoryPoint(1410, 193.373381892281), + TrajectoryPoint(1420, 192.649068327263), + TrajectoryPoint(1430, 191.923751831781), + TrajectoryPoint(1440, 191.197415265473), + TrajectoryPoint(1450, 190.470041302905), + TrajectoryPoint(1460, 189.741612431169), + TrajectoryPoint(1470, 189.012110947453), + TrajectoryPoint(1480, 188.281518956566), + TrajectoryPoint(1490, 187.549818368419), + TrajectoryPoint(1500, 186.816952567424), + TrajectoryPoint(1510, 186.082905678569), + TrajectoryPoint(1520, 185.347689154617), + TrajectoryPoint(1530, 184.611283957458), + TrajectoryPoint(1540, 183.873670839394), + TrajectoryPoint(1550, 183.134830340299), + TrajectoryPoint(1560, 182.394742784713), + TrajectoryPoint(1570, 181.653388278888), + TrajectoryPoint(1580, 180.910746707778), + TrajectoryPoint(1590, 180.166797731971), + TrajectoryPoint(1600, 179.421520784558), + TrajectoryPoint(1610, 178.674808817941), + TrajectoryPoint(1620, 177.926676784425), + TrajectoryPoint(1630, 177.177146378547), + TrajectoryPoint(1640, 176.426195929864), + TrajectoryPoint(1650, 175.67380352185), + TrajectoryPoint(1660, 174.919946988324), + TrajectoryPoint(1670, 174.164603909805), + TrajectoryPoint(1680, 173.407715382908), + TrajectoryPoint(1690, 172.649146178947), + TrajectoryPoint(1700, 171.889013057377), + TrajectoryPoint(1710, 171.127292370435), + TrajectoryPoint(1720, 170.363960195215), + TrajectoryPoint(1730, 169.598992329481), + TrajectoryPoint(1740, 168.832310429993), + TrajectoryPoint(1750, 168.063764499078), + TrajectoryPoint(1760, 167.293498806744), + TrajectoryPoint(1770, 166.521487795767), + TrajectoryPoint(1780, 165.747705604384), + TrajectoryPoint(1790, 164.972080733082), + TrajectoryPoint(1800, 164.194399148115), + TrajectoryPoint(1810, 163.414856083536), + TrajectoryPoint(1820, 162.633424199322), + TrajectoryPoint(1830, 161.850075822372), + TrajectoryPoint(1840, 161.064556645122), + TrajectoryPoint(1850, 160.276961344482), + TrajectoryPoint(1860, 159.487352451706), + TrajectoryPoint(1870, 158.695700675387), + TrajectoryPoint(1880, 157.901720616709), + TrajectoryPoint(1890, 157.105519268063), + TrajectoryPoint(1900, 156.307171866083), + TrajectoryPoint(1910, 155.506626385401), + TrajectoryPoint(1920, 154.703483224839), + TrajectoryPoint(1930, 153.89808575136), + TrajectoryPoint(1940, 153.090401455257), + TrajectoryPoint(1950, 152.280087885851), + TrajectoryPoint(1960, 151.467267063182), + TrajectoryPoint(1970, 150.652044175097), + TrajectoryPoint(1980, 149.834109418323), + TrajectoryPoint(1990, 149.013471914356), + TrajectoryPoint(2000, 148.190311224522), + TrajectoryPoint(2010, 147.364252189324), + TrajectoryPoint(2020, 146.535383279066), + TrajectoryPoint(2030, 145.703863786175), + TrajectoryPoint(2040, 144.869143927633), + TrajectoryPoint(2050, 144.031606027675), + TrajectoryPoint(2060, 143.191114848679), + TrajectoryPoint(2070, 142.347330408586), + TrajectoryPoint(2080, 141.500661472084), + TrajectoryPoint(2090, 140.650526550284), + TrajectoryPoint(2100, 139.797269614436), + TrajectoryPoint(2110, 138.940659933022), + TrajectoryPoint(2120, 138.08056305132), + TrajectoryPoint(2130, 137.217170605551), + TrajectoryPoint(2140, 136.349970986925), + TrajectoryPoint(2150, 135.479471796961), + TrajectoryPoint(2160, 134.604895213864), + TrajectoryPoint(2170, 133.726945074672), + TrajectoryPoint(2180, 132.844708576594), + TrajectoryPoint(2190, 131.958955479211), + TrajectoryPoint(2200, 131.068753317653), + TrajectoryPoint(2210, 130.174816309537), + TrajectoryPoint(2220, 129.27633929721), + TrajectoryPoint(2230, 128.373820743973), + TrajectoryPoint(2240, 127.466742075516), + TrajectoryPoint(2250, 126.555223090573), + TrajectoryPoint(2260, 125.639200846806), + TrajectoryPoint(2270, 124.71823997185), + TrajectoryPoint(2280, 123.792752260635), + TrajectoryPoint(2290, 122.862047991453), + TrajectoryPoint(2300, 121.926390385521), + TrajectoryPoint(2310, 120.985781216501), + TrajectoryPoint(2320, 120.039447022012), + TrajectoryPoint(2330, 119.087894481187), + TrajectoryPoint(2340, 118.130967276745), + TrajectoryPoint(2350, 117.167913449536), + TrajectoryPoint(2360, 116.199153768707), + TrajectoryPoint(2370, 115.224530490338), + TrajectoryPoint(2380, 114.243642807481), + TrajectoryPoint(2390, 113.256236854829), + TrajectoryPoint(2400, 112.262428217485), + TrajectoryPoint(2410, 111.262017430573), + TrajectoryPoint(2420, 110.254797311192), + TrajectoryPoint(2430, 109.240210388553), + TrajectoryPoint(2440, 108.218359657945), + TrajectoryPoint(2450, 107.18905886819), + TrajectoryPoint(2460, 106.152068475589), + TrajectoryPoint(2470, 105.107139357046), + TrajectoryPoint(2480, 104.054012347058), + TrajectoryPoint(2490, 102.992417746795), + TrajectoryPoint(2500, 101.922074803322), + TrajectoryPoint(2510, 100.842691156895), + TrajectoryPoint(2520, 99.753962254038), + TrajectoryPoint(2530, 98.6555707239711), + TrajectoryPoint(2540, 97.5471857157151), + TrajectoryPoint(2550, 96.4284621929983), + TrajectoryPoint(2560, 95.2990401838284), + TrajectoryPoint(2570, 94.1585439813332), + TrajectoryPoint(2580, 93.0065812921652), + TrajectoryPoint(2590, 91.8427423284479), + TrajectoryPoint(2600, 90.6665988388753), + TrajectoryPoint(2610, 89.4774390540253), + TrajectoryPoint(2620, 88.2746396649513), + TrajectoryPoint(2630, 87.0580281855391), + TrajectoryPoint(2640, 85.8270846882579), + TrajectoryPoint(2650, 84.5804379182145), + TrajectoryPoint(2660, 83.3180612390695), + TrajectoryPoint(2670, 82.0392338060996), + TrajectoryPoint(2680, 80.7424991054066), + TrajectoryPoint(2690, 79.4279821236853), + TrajectoryPoint(2700, 78.0935956269846), + TrajectoryPoint(2710, 76.7393940987897), + TrajectoryPoint(2720, 75.3636329858332), + TrajectoryPoint(2730, 73.9651817263447), + TrajectoryPoint(2740, 72.5431290280362), + TrajectoryPoint(2750, 71.0958831964234), + TrajectoryPoint(2760, 69.6212360147459), + TrajectoryPoint(2770, 68.1180465393934), + TrajectoryPoint(2780, 66.5843147037006), + TrajectoryPoint(2790, 65.0178549168622), + TrajectoryPoint(2800, 63.4162742978174), + TrajectoryPoint(2810, 61.7767195677176), + TrajectoryPoint(2820, 60.095624802691), + TrajectoryPoint(2830, 58.3702755230403), + TrajectoryPoint(2840, 56.5962574251198), + TrajectoryPoint(2850, 54.7686724086359), + TrajectoryPoint(2860, 52.8819145270167), + TrajectoryPoint(2870, 50.9298307741777), + TrajectoryPoint(2880, 48.9042896236109), + TrajectoryPoint(2890, 46.7957762132094), + TrajectoryPoint(2900, 44.5930868834589), + TrajectoryPoint(2910, 42.2799660800708), + TrajectoryPoint(2920, 39.8388300333339), + TrajectoryPoint(2930, 37.2438952999428), + TrajectoryPoint(2940, 34.4609033921338), + TrajectoryPoint(2950, 31.4390325302813), + TrajectoryPoint(2960, 28.1028168888058), + TrajectoryPoint(2970, 24.3209267802065), + TrajectoryPoint(2980, 19.8437772488535), + TrajectoryPoint(2990, 14.0194488542204), + TrajectoryPoint(3000, 0), +}; +TrajectoryPoint t1_closed[] = { + TrajectoryPoint(0, 290.829077875845), + TrajectoryPoint(10, 290.122172054902), + TrajectoryPoint(20, 289.417015425694), + TrajectoryPoint(30, 288.712681652409), + TrajectoryPoint(40, 288.009090411237), + TrajectoryPoint(50, 287.306575566213), + TrajectoryPoint(60, 286.604955600667), + TrajectoryPoint(70, 285.904016310454), + TrajectoryPoint(80, 285.203904889002), + TrajectoryPoint(90, 284.504762210305), + TrajectoryPoint(100, 283.806241375245), + TrajectoryPoint(110, 283.108339356948), + TrajectoryPoint(120, 282.411426891841), + TrajectoryPoint(130, 281.715105784861), + TrajectoryPoint(140, 281.019347001664), + TrajectoryPoint(150, 280.324320518395), + TrajectoryPoint(160, 279.629993971235), + TrajectoryPoint(170, 278.936176071407), + TrajectoryPoint(180, 278.242861849887), + TrajectoryPoint(190, 277.550330696212), + TrajectoryPoint(200, 276.858263577897), + TrajectoryPoint(210, 276.166648858561), + TrajectoryPoint(220, 275.475577471328), + TrajectoryPoint(230, 274.785082243284), + TrajectoryPoint(240, 274.094990631664), + TrajectoryPoint(250, 273.405296556451), + TrajectoryPoint(260, 272.716137305278), + TrajectoryPoint(270, 272.027402462398), + TrajectoryPoint(280, 271.339018608207), + TrajectoryPoint(290, 270.650979032165), + TrajectoryPoint(300, 269.963428352593), + TrajectoryPoint(310, 269.276199688281), + TrajectoryPoint(320, 268.58927089732), + TrajectoryPoint(330, 267.902638402271), + TrajectoryPoint(340, 267.216418064091), + TrajectoryPoint(350, 266.530455149956), + TrajectoryPoint(360, 265.844742552838), + TrajectoryPoint(370, 265.159274959654), + TrajectoryPoint(380, 264.474140252046), + TrajectoryPoint(390, 263.789215233555), + TrajectoryPoint(400, 263.104492503099), + TrajectoryPoint(410, 262.419964350752), + TrajectoryPoint(420, 261.735687838805), + TrajectoryPoint(430, 261.051584197904), + TrajectoryPoint(440, 260.367636256453), + TrajectoryPoint(450, 259.683836135295), + TrajectoryPoint(460, 259.000206047323), + TrajectoryPoint(470, 258.316717367152), + TrajectoryPoint(480, 257.633339113222), + TrajectoryPoint(490, 256.950063274559), + TrajectoryPoint(500, 256.266886049725), + TrajectoryPoint(510, 255.583814805828), + TrajectoryPoint(520, 254.900809880192), + TrajectoryPoint(530, 254.217863149985), + TrajectoryPoint(540, 253.534966317164), + TrajectoryPoint(550, 252.852115469077), + TrajectoryPoint(560, 252.169295073575), + TrajectoryPoint(570, 251.486489660126), + TrajectoryPoint(580, 250.803690845035), + TrajectoryPoint(590, 250.120890099958), + TrajectoryPoint(600, 249.438073589924), + TrajectoryPoint(610, 248.755227958891), + TrajectoryPoint(620, 248.072346441901), + TrajectoryPoint(630, 247.389420428771), + TrajectoryPoint(640, 246.706441184727), + TrajectoryPoint(650, 246.023389640157), + TrajectoryPoint(660, 245.340249714397), + TrajectoryPoint(670, 244.657023333154), + TrajectoryPoint(680, 243.973701668469), + TrajectoryPoint(690, 243.290275780156), + TrajectoryPoint(700, 242.606736620884), + TrajectoryPoint(710, 241.923040328153), + TrajectoryPoint(720, 241.23920538233), + TrajectoryPoint(730, 240.555224440028), + TrajectoryPoint(740, 239.871088341122), + TrajectoryPoint(750, 239.186787823495), + TrajectoryPoint(760, 238.502312831033), + TrajectoryPoint(770, 237.817608922812), + TrajectoryPoint(780, 237.132708127409), + TrajectoryPoint(790, 236.447601039962), + TrajectoryPoint(800, 235.762278155135), + TrajectoryPoint(810, 235.076729869037), + TrajectoryPoint(820, 234.39094648083), + TrajectoryPoint(830, 233.704891884481), + TrajectoryPoint(840, 233.018554126146), + TrajectoryPoint(850, 232.331948690626), + TrajectoryPoint(860, 231.645065695013), + TrajectoryPoint(870, 230.957895156788), + TrajectoryPoint(880, 230.270426994446), + TrajectoryPoint(890, 229.582651027917), + TrajectoryPoint(900, 228.894548232979), + TrajectoryPoint(910, 228.206068791782), + TrajectoryPoint(920, 227.517248524449), + TrajectoryPoint(930, 226.828077023166), + TrajectoryPoint(940, 226.138543776481), + TrajectoryPoint(950, 225.448638169104), + TrajectoryPoint(960, 224.758349481575), + TrajectoryPoint(970, 224.0676668898), + TrajectoryPoint(980, 223.376579464479), + TrajectoryPoint(990, 222.685050692273), + TrajectoryPoint(1000, 221.993064690274), + TrajectoryPoint(1010, 221.300639720334), + TrajectoryPoint(1020, 220.607764565613), + TrajectoryPoint(1030, 219.914427897154), + TrajectoryPoint(1040, 219.220618272985), + TrajectoryPoint(1050, 218.526324137143), + TrajectoryPoint(1060, 217.831533818629), + TrajectoryPoint(1070, 217.136235530293), + TrajectoryPoint(1080, 216.440417367657), + TrajectoryPoint(1090, 215.744067307687), + TrajectoryPoint(1100, 215.0471732075), + TrajectoryPoint(1110, 214.349681234015), + TrajectoryPoint(1120, 213.651617827089), + TrajectoryPoint(1130, 212.952973951545), + TrajectoryPoint(1140, 212.25373709601), + TrajectoryPoint(1150, 211.553894621211), + TrajectoryPoint(1160, 210.853433758546), + TrajectoryPoint(1170, 210.152341608619), + TrajectoryPoint(1180, 209.450605139728), + TrajectoryPoint(1190, 208.748211186327), + TrajectoryPoint(1200, 208.045146447444), + TrajectoryPoint(1210, 207.341397485074), + TrajectoryPoint(1220, 206.63695072253), + TrajectoryPoint(1230, 205.931792442771), + TrajectoryPoint(1240, 205.225908786697), + TrajectoryPoint(1250, 204.519285751413), + TrajectoryPoint(1260, 203.811909188463), + TrajectoryPoint(1270, 203.103764802039), + TrajectoryPoint(1280, 202.39483814716), + TrajectoryPoint(1290, 201.685114627816), + TrajectoryPoint(1300, 200.974579495099), + TrajectoryPoint(1310, 200.263217845284), + TrajectoryPoint(1320, 199.551014617905), + TrajectoryPoint(1330, 198.83795459378), + TrajectoryPoint(1340, 198.124022393023), + TrajectoryPoint(1350, 197.409202473016), + TrajectoryPoint(1360, 196.693479126357), + TrajectoryPoint(1370, 195.976836478773), + TrajectoryPoint(1380, 195.259258487002), + TrajectoryPoint(1390, 194.540728936648), + TrajectoryPoint(1400, 193.821231439988), + TrajectoryPoint(1410, 193.100749433768), + TrajectoryPoint(1420, 192.379266176939), + TrajectoryPoint(1430, 191.656764748376), + TrajectoryPoint(1440, 190.933228044551), + TrajectoryPoint(1450, 190.20863877717), + TrajectoryPoint(1460, 189.482979470771), + TrajectoryPoint(1470, 188.756232460279), + TrajectoryPoint(1480, 188.028379888526), + TrajectoryPoint(1490, 187.299403703721), + TrajectoryPoint(1500, 186.569285656882), + TrajectoryPoint(1510, 185.838007299214), + TrajectoryPoint(1520, 185.105507192333), + TrajectoryPoint(1530, 184.371765601887), + TrajectoryPoint(1540, 183.636801220906), + TrajectoryPoint(1550, 182.900594630179), + TrajectoryPoint(1560, 182.163126195348), + TrajectoryPoint(1570, 181.424376063945), + TrajectoryPoint(1580, 180.684324162368), + TrajectoryPoint(1590, 179.942950192808), + TrajectoryPoint(1600, 179.200233630109), + TrajectoryPoint(1610, 178.456153718572), + TrajectoryPoint(1620, 177.710613893524), + TrajectoryPoint(1630, 176.963598576561), + TrajectoryPoint(1640, 176.215148726596), + TrajectoryPoint(1650, 175.465242470346), + TrajectoryPoint(1660, 174.713857684942), + TrajectoryPoint(1670, 173.96097199428), + TrajectoryPoint(1680, 173.206562765285), + TrajectoryPoint(1690, 172.4505311038), + TrajectoryPoint(1700, 171.692810521247), + TrajectoryPoint(1710, 170.933488157364), + TrajectoryPoint(1720, 170.172540133522), + TrajectoryPoint(1730, 169.409942291753), + TrajectoryPoint(1740, 168.64567019047), + TrajectoryPoint(1750, 167.879554206843), + TrajectoryPoint(1760, 167.111614131452), + TrajectoryPoint(1770, 166.34191476266), + TrajectoryPoint(1780, 165.570430283399), + TrajectoryPoint(1790, 164.797134567163), + TrajectoryPoint(1800, 164.021816777897), + TrajectoryPoint(1810, 163.244527411786), + TrajectoryPoint(1820, 162.465335453913), + TrajectoryPoint(1830, 161.684213275933), + TrajectoryPoint(1840, 160.901044112436), + TrajectoryPoint(1850, 160.115645042362), + TrajectoryPoint(1860, 159.328218769358), + TrajectoryPoint(1870, 158.53873604667), + TrajectoryPoint(1880, 157.747046321975), + TrajectoryPoint(1890, 156.952984241906), + TrajectoryPoint(1900, 156.15676266115), + TrajectoryPoint(1910, 155.358350584961), + TrajectoryPoint(1920, 154.557416650126), + TrajectoryPoint(1930, 153.754102012342), + TrajectoryPoint(1940, 152.948487268968), + TrajectoryPoint(1950, 152.140359660956), + TrajectoryPoint(1960, 151.329578949268), + TrajectoryPoint(1970, 150.516383010107), + TrajectoryPoint(1980, 149.700589632649), + TrajectoryPoint(1990, 148.881949787186), + TrajectoryPoint(2000, 148.060773715051), + TrajectoryPoint(2010, 147.23681120013), + TrajectoryPoint(2020, 146.409897777274), + TrajectoryPoint(2030, 145.580320852129), + TrajectoryPoint(2040, 144.747652426745), + TrajectoryPoint(2050, 143.912028131551), + TrajectoryPoint(2060, 143.073559183707), + TrajectoryPoint(2070, 142.231659479903), + TrajectoryPoint(2080, 141.386862559265), + TrajectoryPoint(2090, 140.538704393667), + TrajectoryPoint(2100, 139.687290783155), + TrajectoryPoint(2110, 138.832628253849), + TrajectoryPoint(2120, 137.974346110366), + TrajectoryPoint(2130, 137.112871033484), + TrajectoryPoint(2140, 136.247457672887), + TrajectoryPoint(2150, 135.378777012577), + TrajectoryPoint(2160, 134.506027212234), + TrajectoryPoint(2170, 133.629822593518), + TrajectoryPoint(2180, 132.74942754111), + TrajectoryPoint(2190, 131.865407817577), + TrajectoryPoint(2200, 130.977000888017), + TrajectoryPoint(2210, 130.084860666808), + TrajectoryPoint(2220, 129.188057115323), + TrajectoryPoint(2230, 128.287304916148), + TrajectoryPoint(2240, 127.381871800353), + TrajectoryPoint(2250, 126.472088647913), + TrajectoryPoint(2260, 125.557684168049), + TrajectoryPoint(2270, 124.638428526806), + TrajectoryPoint(2280, 123.714631056739), + TrajectoryPoint(2290, 122.785501210383), + TrajectoryPoint(2300, 121.851503075104), + TrajectoryPoint(2310, 120.912440830451), + TrajectoryPoint(2320, 119.967735287543), + TrajectoryPoint(2330, 119.017796100875), + TrajectoryPoint(2340, 118.062388321257), + TrajectoryPoint(2350, 117.100901468559), + TrajectoryPoint(2360, 116.133708726001), + TrajectoryPoint(2370, 115.160636824536), + TrajectoryPoint(2380, 114.181194958593), + TrajectoryPoint(2390, 113.195309277643), + TrajectoryPoint(2400, 112.203005205245), + TrajectoryPoint(2410, 111.204083201297), + TrajectoryPoint(2420, 110.198295295584), + TrajectoryPoint(2430, 109.185121788222), + TrajectoryPoint(2440, 108.164712722323), + TrajectoryPoint(2450, 107.136837632749), + TrajectoryPoint(2460, 106.101256915076), + TrajectoryPoint(2470, 105.057721388591), + TrajectoryPoint(2480, 104.005971833185), + TrajectoryPoint(2490, 102.945738498333), + TrajectoryPoint(2500, 101.876740582235), + TrajectoryPoint(2510, 100.798685679019), + TrajectoryPoint(2520, 99.7112691917454), + TrajectoryPoint(2530, 98.6141737087591), + TrajectoryPoint(2540, 97.5070683407233), + TrajectoryPoint(2550, 96.3896080154607), + TrajectoryPoint(2560, 95.2614327274642), + TrajectoryPoint(2570, 94.1221667386778), + TrajectoryPoint(2580, 92.9714177268462), + TrajectoryPoint(2590, 91.8087758774081), + TrajectoryPoint(2600, 90.6338129145457), + TrajectoryPoint(2610, 89.4458787073954), + TrajectoryPoint(2620, 88.2442247651321), + TrajectoryPoint(2630, 87.0287420336022), + TrajectoryPoint(2640, 85.7989105704131), + TrajectoryPoint(2650, 84.5534152660321), + TrajectoryPoint(2660, 83.2921150807374), + TrajectoryPoint(2670, 82.014401350699), + TrajectoryPoint(2680, 80.7187073523509), + TrajectoryPoint(2690, 79.4052657110939), + TrajectoryPoint(2700, 78.0718839085126), + TrajectoryPoint(2710, 76.7187188147948), + TrajectoryPoint(2720, 75.3439262036785), + TrajectoryPoint(2730, 73.9464719823418), + TrajectoryPoint(2740, 72.5253960116352), + TrajectoryPoint(2750, 71.0790628106865), + TrajectoryPoint(2760, 69.605352224911), + TrajectoryPoint(2770, 68.1030785439597), + TrajectoryPoint(2780, 66.5702415163878), + TrajectoryPoint(2790, 65.0046553770575), + TrajectoryPoint(2800, 63.4039270807116), + TrajectoryPoint(2810, 61.7652383944638), + TrajectoryPoint(2820, 60.0849510939485), + TrajectoryPoint(2830, 58.3603874267216), + TrajectoryPoint(2840, 56.5871637456788), + TrajectoryPoint(2850, 54.7603182114602), + TrajectoryPoint(2860, 52.8743051150524), + TrajectoryPoint(2870, 50.9229401999799), + TrajectoryPoint(2880, 48.8980914998915), + TrajectoryPoint(2890, 46.7902437443092), + TrajectoryPoint(2900, 44.5881928976516), + TrajectoryPoint(2910, 42.2757031657274), + TrajectoryPoint(2920, 39.8351667536236), + TrajectoryPoint(2930, 37.2407994157408), + TrajectoryPoint(2940, 34.4583574305346), + TrajectoryPoint(2950, 31.4369990092808), + TrajectoryPoint(2960, 28.101257203988), + TrajectoryPoint(2970, 24.3198210242276), + TrajectoryPoint(2980, 19.8430839205536), + TrajectoryPoint(2990, 14.019128463856), + TrajectoryPoint(3000, 0), +}; +TrajectoryPoint t2_closed[] = { + TrajectoryPoint(0, 289.990532647539), + TrajectoryPoint(10, 289.290629334632), + TrajectoryPoint(20, 288.591524150995), + TrajectoryPoint(30, 287.893139205481), + TrajectoryPoint(40, 287.195935188177), + TrajectoryPoint(50, 286.499447145895), + TrajectoryPoint(60, 285.80361876589), + TrajectoryPoint(70, 285.108716919421), + TrajectoryPoint(80, 284.414616111409), + TrajectoryPoint(90, 283.72111733734), + TrajectoryPoint(100, 283.028305908279), + TrajectoryPoint(110, 282.336376766393), + TrajectoryPoint(120, 281.644994825122), + TrajectoryPoint(130, 280.95415627984), + TrajectoryPoint(140, 280.264118377312), + TrajectoryPoint(150, 279.574653525184), + TrajectoryPoint(160, 278.885679483621), + TrajectoryPoint(170, 278.197269942942), + TrajectoryPoint(180, 277.509534392015), + TrajectoryPoint(190, 276.822239615796), + TrajectoryPoint(200, 276.135380289327), + TrajectoryPoint(210, 275.449113629437), + TrajectoryPoint(220, 274.763323659928), + TrajectoryPoint(230, 274.077921314087), + TrajectoryPoint(240, 273.392900446543), + TrajectoryPoint(250, 272.708449809811), + TrajectoryPoint(260, 272.024342074227), + TrajectoryPoint(270, 271.340570164451), + TrajectoryPoint(280, 270.657164681517), + TrajectoryPoint(290, 269.974198011273), + TrajectoryPoint(300, 269.291523580107), + TrajectoryPoint(310, 268.609134666897), + TrajectoryPoint(320, 267.927069649664), + TrajectoryPoint(330, 267.245349080588), + TrajectoryPoint(340, 266.563872345745), + TrajectoryPoint(350, 265.882632346677), + TrajectoryPoint(360, 265.201657131346), + TrajectoryPoint(370, 264.520957818512), + TrajectoryPoint(380, 263.840455322292), + TrajectoryPoint(390, 263.160142268207), + TrajectoryPoint(400, 262.480027897729), + TrajectoryPoint(410, 261.800136004061), + TrajectoryPoint(420, 261.120395239726), + TrajectoryPoint(430, 260.440798023814), + TrajectoryPoint(440, 259.761336527479), + TrajectoryPoint(450, 259.082045843505), + TrajectoryPoint(460, 258.402864059875), + TrajectoryPoint(470, 257.723781206795), + TrajectoryPoint(480, 257.04478933079), + TrajectoryPoint(490, 256.365893858026), + TrajectoryPoint(500, 255.687076890643), + TrajectoryPoint(510, 255.008315364283), + TrajectoryPoint(520, 254.329601218851), + TrajectoryPoint(530, 253.650926225461), + TrajectoryPoint(540, 252.972286353988), + TrajectoryPoint(550, 252.293660416161), + TrajectoryPoint(560, 251.615039235209), + TrajectoryPoint(570, 250.936414499555), + TrajectoryPoint(580, 250.257777392541), + TrajectoryPoint(590, 249.579107520317), + TrajectoryPoint(600, 248.900400574317), + TrajectoryPoint(610, 248.221648151675), + TrajectoryPoint(620, 247.54284172103), + TrajectoryPoint(630, 246.863972630215), + TrajectoryPoint(640, 246.185007937019), + TrajectoryPoint(650, 245.505954714799), + TrajectoryPoint(660, 244.826806064946), + TrajectoryPoint(670, 244.147553243614), + TrajectoryPoint(680, 243.468187397823), + TrajectoryPoint(690, 242.788682034575), + TrajectoryPoint(700, 242.109022336875), + TrajectoryPoint(710, 241.429217331709), + TrajectoryPoint(720, 240.749258053238), + TrajectoryPoint(730, 240.069135432812), + TrajectoryPoint(740, 239.388840302282), + TrajectoryPoint(750, 238.708334729357), + TrajectoryPoint(760, 238.027616389498), + TrajectoryPoint(770, 237.346693489852), + TrajectoryPoint(780, 236.665556721415), + TrajectoryPoint(790, 235.984196676983), + TrajectoryPoint(800, 235.302603852965), + TrajectoryPoint(810, 234.620758226245), + TrajectoryPoint(820, 233.938615799731), + TrajectoryPoint(830, 233.256208509574), + TrajectoryPoint(840, 232.573526676086), + TrajectoryPoint(850, 231.890560521205), + TrajectoryPoint(860, 231.207300169286), + TrajectoryPoint(870, 230.523735647671), + TrajectoryPoint(880, 229.839856776478), + TrajectoryPoint(890, 229.155595480256), + TrajectoryPoint(900, 228.470997524063), + TrajectoryPoint(910, 227.786052715702), + TrajectoryPoint(920, 227.10075076137), + TrajectoryPoint(930, 226.415081265576), + TrajectoryPoint(940, 225.729033730923), + TrajectoryPoint(950, 225.04259755775), + TrajectoryPoint(960, 224.355762043657), + TrajectoryPoint(970, 223.668483317803), + TrajectoryPoint(980, 222.980758770208), + TrajectoryPoint(990, 222.292601340314), + TrajectoryPoint(1000, 221.604000048377), + TrajectoryPoint(1010, 220.914943805308), + TrajectoryPoint(1020, 220.225421411858), + TrajectoryPoint(1030, 219.535421557711), + TrajectoryPoint(1040, 218.844932820517), + TrajectoryPoint(1050, 218.15394366484), + TrajectoryPoint(1060, 217.462442441048), + TrajectoryPoint(1070, 216.770417384147), + TrajectoryPoint(1080, 216.077821062503), + TrajectoryPoint(1090, 215.384664298062), + TrajectoryPoint(1100, 214.690948191719), + TrajectoryPoint(1110, 213.996660628405), + TrajectoryPoint(1120, 213.301789369925), + TrajectoryPoint(1130, 212.606322053624), + TrajectoryPoint(1140, 211.910246191012), + TrajectoryPoint(1150, 211.213549166341), + TrajectoryPoint(1160, 210.516218235156), + TrajectoryPoint(1170, 209.818240522791), + TrajectoryPoint(1180, 209.119603022842), + TrajectoryPoint(1190, 208.420292595602), + TrajectoryPoint(1200, 207.720295966463), + TrajectoryPoint(1210, 207.019599724287), + TrajectoryPoint(1220, 206.318190319742), + TrajectoryPoint(1230, 205.616054063619), + TrajectoryPoint(1240, 204.913177125106), + TrajectoryPoint(1250, 204.209545530044), + TrajectoryPoint(1260, 203.505145159153), + TrajectoryPoint(1270, 202.799961746222), + TrajectoryPoint(1280, 202.093980876282), + TrajectoryPoint(1290, 201.387187983746), + TrajectoryPoint(1300, 200.679568350519), + TrajectoryPoint(1310, 199.971107104085), + TrajectoryPoint(1320, 199.261789215561), + TrajectoryPoint(1330, 198.551599497726), + TrajectoryPoint(1340, 197.840522603016), + TrajectoryPoint(1350, 197.128543021498), + TrajectoryPoint(1360, 196.415645078801), + TrajectoryPoint(1370, 195.701812934028), + TrajectoryPoint(1380, 194.987030577632), + TrajectoryPoint(1390, 194.271281829256), + TrajectoryPoint(1400, 193.554550335542), + TrajectoryPoint(1410, 192.836819567913), + TrajectoryPoint(1420, 192.118072820307), + TrajectoryPoint(1430, 191.398293206884), + TrajectoryPoint(1440, 190.677463659694), + TrajectoryPoint(1450, 189.955566926305), + TrajectoryPoint(1460, 189.232585567395), + TrajectoryPoint(1470, 188.508501954297), + TrajectoryPoint(1480, 187.783298266512), + TrajectoryPoint(1490, 187.056956489174), + TrajectoryPoint(1500, 186.329458410464), + TrajectoryPoint(1510, 185.600785618995), + TrajectoryPoint(1520, 184.870919501133), + TrajectoryPoint(1530, 184.139841238284), + TrajectoryPoint(1540, 183.407455774352), + TrajectoryPoint(1550, 182.673796287573), + TrajectoryPoint(1560, 181.938860700964), + TrajectoryPoint(1570, 181.202629201723), + TrajectoryPoint(1580, 180.46508175607), + TrajectoryPoint(1590, 179.726198106159), + TrajectoryPoint(1600, 178.985957766931), + TrajectoryPoint(1610, 178.244340022909), + TrajectoryPoint(1620, 177.50132392493), + TrajectoryPoint(1630, 176.756810850301), + TrajectoryPoint(1640, 176.010779537374), + TrajectoryPoint(1650, 175.26327789023), + TrajectoryPoint(1660, 174.514283827528), + TrajectoryPoint(1670, 173.763775014745), + TrajectoryPoint(1680, 173.011728860433), + TrajectoryPoint(1690, 172.258122512408), + TrajectoryPoint(1700, 171.502802299328), + TrajectoryPoint(1710, 170.745799826362), + TrajectoryPoint(1720, 169.987158029808), + TrajectoryPoint(1730, 169.226852794084), + TrajectoryPoint(1740, 168.464859719965), + TrajectoryPoint(1750, 167.701148737858), + TrajectoryPoint(1760, 166.935458415675), + TrajectoryPoint(1770, 166.167995325343), + TrajectoryPoint(1780, 165.398733692557), + TrajectoryPoint(1790, 164.627647433495), + TrajectoryPoint(1800, 163.854662367914), + TrajectoryPoint(1810, 163.079553375224), + TrajectoryPoint(1820, 162.302528510133), + TrajectoryPoint(1830, 161.523560187086), + TrajectoryPoint(1840, 160.742620481751), + TrajectoryPoint(1850, 159.959392392691), + TrajectoryPoint(1860, 159.174077919573), + TrajectoryPoint(1870, 158.386693913255), + TrajectoryPoint(1880, 157.597210803919), + TrajectoryPoint(1890, 156.805229841621), + TrajectoryPoint(1900, 156.011065255406), + TrajectoryPoint(1910, 155.214697246271), + TrajectoryPoint(1920, 154.415922921581), + TrajectoryPoint(1930, 153.614623793633), + TrajectoryPoint(1940, 152.811011747412), + TrajectoryPoint(1950, 152.005000931991), + TrajectoryPoint(1960, 151.196194495543), + TrajectoryPoint(1970, 150.384960134497), + TrajectoryPoint(1980, 149.57124041917), + TrajectoryPoint(1990, 148.754533875081), + TrajectoryPoint(2000, 147.935278523036), + TrajectoryPoint(2010, 147.113346278167), + TrajectoryPoint(2020, 146.288325452034), + TrajectoryPoint(2030, 145.460628658026), + TrajectoryPoint(2040, 144.629946895004), + TrajectoryPoint(2050, 143.796174767656), + TrajectoryPoint(2060, 142.959592799733), + TrajectoryPoint(2070, 142.119588813678), + TrajectoryPoint(2080, 141.276603912625), + TrajectoryPoint(2090, 140.430360174269), + TrajectoryPoint(2100, 139.580730880441), + TrajectoryPoint(2110, 138.727954136291), + TrajectoryPoint(2120, 137.871428705336), + TrajectoryPoint(2130, 137.011737812166), + TrajectoryPoint(2140, 136.148126450635), + TrajectoryPoint(2150, 135.281162988202), + TrajectoryPoint(2160, 134.410225809084), + TrajectoryPoint(2170, 133.535711065008), + TrajectoryPoint(2180, 132.65709956286), + TrajectoryPoint(2190, 131.774742497623), + TrajectoryPoint(2200, 130.888089926654), + TrajectoryPoint(2210, 129.997586473053), + TrajectoryPoint(2220, 129.102506764339), + TrajectoryPoint(2230, 128.203465468637), + TrajectoryPoint(2240, 127.299625668779), + TrajectoryPoint(2250, 126.391523900619), + TrajectoryPoint(2260, 125.478685893337), + TrajectoryPoint(2270, 124.561082042761), + TrajectoryPoint(2280, 123.638888122458), + TrajectoryPoint(2290, 122.711316602962), + TrajectoryPoint(2300, 121.778925986366), + TrajectoryPoint(2310, 120.841361773559), + TrajectoryPoint(2320, 119.898233943148), + TrajectoryPoint(2330, 118.949857663134), + TrajectoryPoint(2340, 117.995906426099), + TrajectoryPoint(2350, 117.035952554308), + TrajectoryPoint(2360, 116.07027781758), + TrajectoryPoint(2370, 115.098708862294), + TrajectoryPoint(2380, 114.120667320821), + TrajectoryPoint(2390, 113.136254502301), + TrajectoryPoint(2400, 112.145408092451), + TrajectoryPoint(2410, 111.147928478732), + TrajectoryPoint(2420, 110.143485075267), + TrajectoryPoint(2430, 109.131723764081), + TrajectoryPoint(2440, 108.112711507268), + TrajectoryPoint(2450, 107.086217777984), + TrajectoryPoint(2460, 106.052002913153), + TrajectoryPoint(2470, 105.009817676376), + TrajectoryPoint(2480, 103.95940279472), + TrajectoryPoint(2490, 102.900488467612), + TrajectoryPoint(2500, 101.832793845895), + TrajectoryPoint(2510, 100.756026478954), + TrajectoryPoint(2520, 99.6698817276448), + TrajectoryPoint(2530, 98.5740421405746), + TrajectoryPoint(2540, 97.4681767910725), + TrajectoryPoint(2550, 96.3519405719673), + TrajectoryPoint(2560, 95.2249734450403), + TrajectoryPoint(2570, 94.0868996417504), + TrajectoryPoint(2580, 92.937326811532), + TrajectoryPoint(2590, 91.7758451136384), + TrajectoryPoint(2600, 90.6020262481441), + TrajectoryPoint(2610, 89.4152799633214), + TrajectoryPoint(2620, 88.2147361589403), + TrajectoryPoint(2630, 87.000347402234), + TrajectoryPoint(2640, 85.7715937359367), + TrajectoryPoint(2650, 84.527214583509), + TrajectoryPoint(2660, 83.2669577874919), + TrajectoryPoint(2670, 81.9903236346375), + TrajectoryPoint(2680, 80.6956383732317), + TrajectoryPoint(2690, 79.3832391537127), + TrajectoryPoint(2700, 78.0508312241006), + TrajectoryPoint(2710, 76.6986708698004), + TrajectoryPoint(2720, 75.3248170873549), + TrajectoryPoint(2730, 73.9283294471792), + TrajectoryPoint(2740, 72.5082003818366), + TrajectoryPoint(2750, 71.0627519044716), + TrajectoryPoint(2760, 69.5899493514023), + TrajectoryPoint(2770, 68.088563550995), + TrajectoryPoint(2780, 66.5565940725129), + TrajectoryPoint(2790, 64.9918549815491), + TrajectoryPoint(2800, 63.3919530733085), + TrajectoryPoint(2810, 61.7541041282596), + TrajectoryPoint(2820, 60.0745997507789), + TrajectoryPoint(2830, 58.3507978337962), + TrajectoryPoint(2840, 56.5783444803655), + TrajectoryPoint(2850, 54.7522159954608), + TrajectoryPoint(2860, 52.8669251254865), + TrajectoryPoint(2870, 50.9162572872799), + TrajectoryPoint(2880, 48.8920800877321), + TrajectoryPoint(2890, 46.7848778599192), + TrajectoryPoint(2900, 44.5834462029579), + TrajectoryPoint(2910, 42.2715684944862), + TrajectoryPoint(2920, 39.8316136279946), + TrajectoryPoint(2930, 37.2377965794946), + TrajectoryPoint(2940, 34.4558879526583), + TrajectoryPoint(2950, 31.4350265460602), + TrajectoryPoint(2960, 28.0997443226259), + TrajectoryPoint(2970, 24.318748429892), + TrajectoryPoint(2980, 19.8424113696207), + TrajectoryPoint(2990, 14.018817664886), + TrajectoryPoint(3000, 0), +}; +TrajectoryPoint t3_closed[] = { + TrajectoryPoint(0, 289.182107830101), + TrajectoryPoint(10, 288.487638116439), + TrajectoryPoint(20, 287.794369522951), + TrajectoryPoint(30, 287.102211933116), + TrajectoryPoint(40, 286.410695187298), + TrajectoryPoint(50, 285.719817704691), + TrajectoryPoint(60, 285.029943027159), + TrajectoryPoint(70, 284.340728032277), + TrajectoryPoint(80, 283.65209586107), + TrajectoryPoint(90, 282.964224486183), + TrajectoryPoint(100, 282.277101384937), + TrajectoryPoint(110, 281.590507383385), + TrajectoryPoint(120, 280.904450122347), + TrajectoryPoint(130, 280.219221744867), + TrajectoryPoint(140, 279.534471301906), + TrajectoryPoint(150, 278.850194443121), + TrajectoryPoint(160, 278.166533743119), + TrajectoryPoint(170, 277.483443750756), + TrajectoryPoint(180, 276.800778293557), + TrajectoryPoint(190, 276.118531957525), + TrajectoryPoint(200, 275.436914717286), + TrajectoryPoint(210, 274.755690398112), + TrajectoryPoint(220, 274.074838303812), + TrajectoryPoint(230, 273.394405066399), + TrajectoryPoint(240, 272.714461114381), + TrajectoryPoint(250, 272.034844647825), + TrajectoryPoint(260, 271.355549436037), + TrajectoryPoint(270, 270.676648132464), + TrajectoryPoint(280, 269.998117180636), + TrajectoryPoint(290, 269.31986469574), + TrajectoryPoint(300, 268.641883957194), + TrajectoryPoint(310, 267.964246231187), + TrajectoryPoint(320, 267.286895934092), + TrajectoryPoint(330, 266.609776440362), + TrajectoryPoint(340, 265.932880673336), + TrajectoryPoint(350, 265.256262317718), + TrajectoryPoint(360, 264.579872075959), + TrajectoryPoint(370, 263.903666326736), + TrajectoryPoint(380, 263.227637732365), + TrajectoryPoint(390, 262.551815422004), + TrajectoryPoint(400, 261.876175277844), + TrajectoryPoint(410, 261.200674608831), + TrajectoryPoint(420, 260.525305881423), + TrajectoryPoint(430, 259.850074355068), + TrajectoryPoint(440, 259.174983876365), + TrajectoryPoint(450, 258.499989049415), + TrajectoryPoint(460, 257.825082186983), + TrajectoryPoint(470, 257.150255398236), + TrajectoryPoint(480, 256.475518987411), + TrajectoryPoint(490, 255.800839060547), + TrajectoryPoint(500, 255.126204212873), + TrajectoryPoint(510, 254.451606451008), + TrajectoryPoint(520, 253.777039039285), + TrajectoryPoint(530, 253.102490277219), + TrajectoryPoint(540, 252.427944642911), + TrajectoryPoint(550, 251.753394045062), + TrajectoryPoint(560, 251.078830246711), + TrajectoryPoint(570, 250.404239549638), + TrajectoryPoint(580, 249.729606329369), + TrajectoryPoint(590, 249.054926860967), + TrajectoryPoint(600, 248.380192818114), + TrajectoryPoint(610, 247.705395749725), + TrajectoryPoint(620, 247.030517745045), + TrajectoryPoint(630, 246.355538213215), + TrajectoryPoint(640, 245.680463309527), + TrajectoryPoint(650, 245.005284486521), + TrajectoryPoint(660, 244.329993085172), + TrajectoryPoint(670, 243.654580340112), + TrajectoryPoint(680, 242.97899931081), + TrajectoryPoint(690, 242.303272242708), + TrajectoryPoint(700, 241.627391969393), + TrajectoryPoint(710, 240.951349614003), + TrajectoryPoint(720, 240.275136199286), + TrajectoryPoint(730, 239.598735259265), + TrajectoryPoint(740, 238.922102531394), + TrajectoryPoint(750, 238.245267141656), + TrajectoryPoint(760, 237.568219974598), + TrajectoryPoint(770, 236.89095181662), + TrajectoryPoint(780, 236.213453358014), + TrajectoryPoint(790, 235.535715194701), + TrajectoryPoint(800, 234.857681583719), + TrajectoryPoint(810, 234.179376911183), + TrajectoryPoint(820, 233.500800847528), + TrajectoryPoint(830, 232.821943814915), + TrajectoryPoint(840, 232.142796139083), + TrajectoryPoint(850, 231.463348050087), + TrajectoryPoint(860, 230.783589682829), + TrajectoryPoint(870, 230.103465159568), + TrajectoryPoint(880, 229.422995047235), + TrajectoryPoint(890, 228.742182562763), + TrajectoryPoint(900, 228.061017624598), + TrajectoryPoint(910, 227.379490051459), + TrajectoryPoint(920, 226.697589562234), + TrajectoryPoint(930, 226.015305775741), + TrajectoryPoint(940, 225.332628210357), + TrajectoryPoint(950, 224.64951167313), + TrajectoryPoint(960, 223.965954940055), + TrajectoryPoint(970, 223.281971459366), + TrajectoryPoint(980, 222.597550481904), + TrajectoryPoint(990, 221.912681151786), + TrajectoryPoint(1000, 221.227352505668), + TrajectoryPoint(1010, 220.541553471925), + TrajectoryPoint(1020, 219.855272869754), + TrajectoryPoint(1030, 219.168499408195), + TrajectoryPoint(1040, 218.481221685092), + TrajectoryPoint(1050, 217.793413282696), + TrajectoryPoint(1060, 217.105040699245), + TrajectoryPoint(1070, 216.416129220919), + TrajectoryPoint(1080, 215.726667113262), + TrajectoryPoint(1090, 215.036642523188), + TrajectoryPoint(1100, 214.346043477744), + TrajectoryPoint(1110, 213.654857882841), + TrajectoryPoint(1120, 212.963073521924), + TrajectoryPoint(1130, 212.270678054611), + TrajectoryPoint(1140, 211.577659015282), + TrajectoryPoint(1150, 210.884003811634), + TrajectoryPoint(1160, 210.189699723196), + TrajectoryPoint(1170, 209.494733899818), + TrajectoryPoint(1180, 208.799093360109), + TrajectoryPoint(1190, 208.102764989864), + TrajectoryPoint(1200, 207.405735540444), + TrajectoryPoint(1210, 206.707991627129), + TrajectoryPoint(1220, 206.009519727452), + TrajectoryPoint(1230, 205.310303799033), + TrajectoryPoint(1240, 204.610315296992), + TrajectoryPoint(1250, 203.909559678483), + TrajectoryPoint(1260, 203.208022969636), + TrajectoryPoint(1270, 202.505691050197), + TrajectoryPoint(1280, 201.802549651752), + TrajectoryPoint(1290, 201.098584355917), + TrajectoryPoint(1300, 200.393780592496), + TrajectoryPoint(1310, 199.688123637622), + TrajectoryPoint(1320, 198.981598611851), + TrajectoryPoint(1330, 198.274190478238), + TrajectoryPoint(1340, 197.56588404038), + TrajectoryPoint(1350, 196.856663940426), + TrajectoryPoint(1360, 196.146514657056), + TrajectoryPoint(1370, 195.435420503433), + TrajectoryPoint(1380, 194.723365625114), + TrajectoryPoint(1390, 194.010308695131), + TrajectoryPoint(1400, 193.296252909082), + TrajectoryPoint(1410, 192.581183606465), + TrajectoryPoint(1420, 191.865084115041), + TrajectoryPoint(1430, 191.147937583066), + TrajectoryPoint(1440, 190.429726976956), + TrajectoryPoint(1450, 189.710435078906), + TrajectoryPoint(1460, 188.990044484474), + TrajectoryPoint(1470, 188.268537600125), + TrajectoryPoint(1480, 187.545896640728), + TrajectoryPoint(1490, 186.822103627015), + TrajectoryPoint(1500, 186.097140382996), + TrajectoryPoint(1510, 185.370988533322), + TrajectoryPoint(1520, 184.643629500611), + TrajectoryPoint(1530, 183.915044502719), + TrajectoryPoint(1540, 183.185214549962), + TrajectoryPoint(1550, 182.454087620405), + TrajectoryPoint(1560, 181.721602774448), + TrajectoryPoint(1570, 180.987808302819), + TrajectoryPoint(1580, 180.252684210011), + TrajectoryPoint(1590, 179.516210276581), + TrajectoryPoint(1600, 178.778366055993), + TrajectoryPoint(1610, 178.039130871408), + TrajectoryPoint(1620, 177.298483812401), + TrajectoryPoint(1630, 176.556403731627), + TrajectoryPoint(1640, 175.812777108933), + TrajectoryPoint(1650, 175.067602452673), + TrajectoryPoint(1660, 174.320921985024), + TrajectoryPoint(1670, 173.572713411345), + TrajectoryPoint(1680, 172.822954180107), + TrajectoryPoint(1690, 172.071621479073), + TrajectoryPoint(1700, 171.318692231397), + TrajectoryPoint(1710, 170.563943004238), + TrajectoryPoint(1720, 169.807533251097), + TrajectoryPoint(1730, 169.049446917602), + TrajectoryPoint(1740, 168.289659645109), + TrajectoryPoint(1750, 167.528146786912), + TrajectoryPoint(1760, 166.764765718723), + TrajectoryPoint(1770, 165.999467153305), + TrajectoryPoint(1780, 165.232357085834), + TrajectoryPoint(1790, 164.463409473346), + TrajectoryPoint(1800, 163.692597958339), + TrajectoryPoint(1810, 162.919685838993), + TrajectoryPoint(1820, 162.14475871462), + TrajectoryPoint(1830, 161.36787535874), + TrajectoryPoint(1840, 160.589007887833), + TrajectoryPoint(1850, 159.807969061943), + TrajectoryPoint(1860, 159.024698948165), + TrajectoryPoint(1870, 158.239346675455), + TrajectoryPoint(1880, 157.451882714642), + TrajectoryPoint(1890, 156.662035140382), + TrajectoryPoint(1900, 155.86986200023), + TrajectoryPoint(1910, 155.075472960758), + TrajectoryPoint(1920, 154.278790922891), + TrajectoryPoint(1930, 153.479443181285), + TrajectoryPoint(1940, 152.67777015486), + TrajectoryPoint(1950, 151.873739038617), + TrajectoryPoint(1960, 151.066915305604), + TrajectoryPoint(1970, 150.257580255098), + TrajectoryPoint(1980, 149.445770622936), + TrajectoryPoint(1990, 148.631035081752), + TrajectoryPoint(2000, 147.813639581047), + TrajectoryPoint(2010, 146.993647022485), + TrajectoryPoint(2020, 146.170486289793), + TrajectoryPoint(2030, 145.344610145469), + TrajectoryPoint(2040, 144.515853279567), + TrajectoryPoint(2050, 143.683874788175), + TrajectoryPoint(2060, 142.849074531548), + TrajectoryPoint(2070, 142.010953079031), + TrajectoryPoint(2080, 141.169723033753), + TrajectoryPoint(2090, 140.325334283944), + TrajectoryPoint(2100, 139.477433081159), + TrajectoryPoint(2110, 138.626464065991), + TrajectoryPoint(2120, 137.771659590004), + TrajectoryPoint(2130, 136.913658444504), + TrajectoryPoint(2140, 136.051831558164), + TrajectoryPoint(2150, 135.186531341384), + TrajectoryPoint(2160, 134.317350631723), + TrajectoryPoint(2170, 133.444472731043), + TrajectoryPoint(2180, 132.567589563416), + TrajectoryPoint(2190, 131.686843041269), + TrajectoryPoint(2200, 130.801890554278), + TrajectoryPoint(2210, 129.912971447264), + TrajectoryPoint(2220, 129.019563468995), + TrajectoryPoint(2230, 128.122154035541), + TrajectoryPoint(2240, 127.219883914503), + TrajectoryPoint(2250, 126.313411598424), + TrajectoryPoint(2260, 125.402091170407), + TrajectoryPoint(2270, 124.48608813533), + TrajectoryPoint(2280, 123.565385958573), + TrajectoryPoint(2290, 122.639386555774), + TrajectoryPoint(2300, 121.708553902917), + TrajectoryPoint(2310, 120.77244110872), + TrajectoryPoint(2320, 119.83084240012), + TrajectoryPoint(2330, 118.883980904618), + TrajectoryPoint(2340, 117.931440972961), + TrajectoryPoint(2350, 116.972972927859), + TrajectoryPoint(2360, 116.008769517596), + TrajectoryPoint(2370, 115.0386573072), + TrajectoryPoint(2380, 114.061972709715), + TrajectoryPoint(2390, 113.07898752469), + TrajectoryPoint(2400, 112.089554031402), + TrajectoryPoint(2410, 111.093472547498), + TrajectoryPoint(2420, 110.090332102255), + TrajectoryPoint(2430, 109.079939701269), + TrajectoryPoint(2440, 108.062281456774), + TrajectoryPoint(2450, 107.037126782327), + TrajectoryPoint(2460, 106.004235958171), + TrajectoryPoint(2470, 104.963359694045), + TrajectoryPoint(2480, 103.914238665882), + TrajectoryPoint(2490, 102.856603024624), + TrajectoryPoint(2500, 101.790171875195), + TrajectoryPoint(2510, 100.714618329294), + TrajectoryPoint(2520, 99.6296978451342), + TrajectoryPoint(2530, 98.5351188831332), + TrajectoryPoint(2540, 97.4304557412904), + TrajectoryPoint(2550, 96.3154063227267), + TrajectoryPoint(2560, 95.1896105572851), + TrajectoryPoint(2570, 94.0526926466147), + TrajectoryPoint(2580, 92.9042602124198), + TrajectoryPoint(2590, 91.7439033882566), + TrajectoryPoint(2600, 90.5711938504912), + TrajectoryPoint(2610, 89.3855995405474), + TrajectoryPoint(2620, 88.1861321721964), + TrajectoryPoint(2630, 86.9728041990342), + TrajectoryPoint(2640, 85.7450956489303), + TrajectoryPoint(2650, 84.5017989338394), + TrajectoryPoint(2660, 83.2425539259075), + TrajectoryPoint(2670, 81.9669667685812), + TrajectoryPoint(2680, 80.6732597287169), + TrajectoryPoint(2690, 79.3618642701204), + TrajectoryPoint(2700, 78.0304080190454), + TrajectoryPoint(2710, 76.6792221405925), + TrajectoryPoint(2720, 75.3062788564618), + TrajectoryPoint(2730, 73.9107287146203), + TrajectoryPoint(2740, 72.4915180773333), + TrajectoryPoint(2750, 71.0469276770162), + TrajectoryPoint(2760, 69.575005880163), + TrajectoryPoint(2770, 68.0744813032637), + TrajectoryPoint(2780, 66.5433533415323), + TrajectoryPoint(2790, 64.9794358961371), + TrajectoryPoint(2800, 63.3803356072063), + TrajectoryPoint(2810, 61.7433012808369), + TrajectoryPoint(2820, 60.0645563868848), + TrajectoryPoint(2830, 58.3414934287796), + TrajectoryPoint(2840, 56.5697873929039), + TrajectoryPoint(2850, 54.7443545298248), + TrajectoryPoint(2860, 52.8597643370541), + TrajectoryPoint(2870, 50.9097727881416), + TrajectoryPoint(2880, 48.8862470757287), + TrajectoryPoint(2890, 46.7796711478539), + TrajectoryPoint(2900, 44.5788402486425), + TrajectoryPoint(2910, 42.2675563651644), + TrajectoryPoint(2920, 39.8281657616084), + TrajectoryPoint(2930, 37.2348826584473), + TrajectoryPoint(2940, 34.4534915630279), + TrajectoryPoint(2950, 31.4331124313534), + TrajectoryPoint(2960, 28.0982761691317), + TrajectoryPoint(2970, 24.3177075274654), + TrajectoryPoint(2980, 19.8417586758741), + TrajectoryPoint(2990, 14.0185160329622), + TrajectoryPoint(3000, 0), +}; +TrajectoryPoint t4_closed[] = { + TrajectoryPoint(0, 288.400431198465), + TrajectoryPoint(10, 287.711921016228), + TrajectoryPoint(20, 287.024564629671), + TrajectoryPoint(30, 286.337866313319), + TrajectoryPoint(40, 285.65181294685), + TrajectoryPoint(50, 284.966768428709), + TrajectoryPoint(60, 284.282290678797), + TrajectoryPoint(70, 283.598377146192), + TrajectoryPoint(80, 282.915280133241), + TrajectoryPoint(90, 282.232818502879), + TrajectoryPoint(100, 281.550868454993), + TrajectoryPoint(110, 280.869510195808), + TrajectoryPoint(120, 280.188872452093), + TrajectoryPoint(130, 279.50869613773), + TrajectoryPoint(140, 278.828976782997), + TrajectoryPoint(150, 278.149911832688), + TrajectoryPoint(160, 277.47133057719), + TrajectoryPoint(170, 276.793158194143), + TrajectoryPoint(180, 276.11542941738), + TrajectoryPoint(190, 275.438274708529), + TrajectoryPoint(200, 274.761483007308), + TrajectoryPoint(210, 274.085048710897), + TrajectoryPoint(220, 273.409061175978), + TrajectoryPoint(230, 272.733493015012), + TrajectoryPoint(240, 272.058238351673), + TrajectoryPoint(250, 271.38329094514), + TrajectoryPoint(260, 270.708756326526), + TrajectoryPoint(270, 270.034534437161), + TrajectoryPoint(280, 269.360577790603), + TrajectoryPoint(290, 268.686879681535), + TrajectoryPoint(300, 268.013536529709), + TrajectoryPoint(310, 267.340433023407), + TrajectoryPoint(320, 266.66754782805), + TrajectoryPoint(330, 265.994873900041), + TrajectoryPoint(340, 265.322484013229), + TrajectoryPoint(350, 264.650282362245), + TrajectoryPoint(360, 263.978253406401), + TrajectoryPoint(370, 263.30638985346), + TrajectoryPoint(380, 262.634735152878), + TrajectoryPoint(390, 261.96322912017), + TrajectoryPoint(400, 261.291851422255), + TrajectoryPoint(410, 260.620594579627), + TrajectoryPoint(420, 259.949474410455), + TrajectoryPoint(430, 259.278466969676), + TrajectoryPoint(440, 258.607544660365), + TrajectoryPoint(450, 257.936699855327), + TrajectoryPoint(460, 257.265928649302), + TrajectoryPoint(470, 256.595230918324), + TrajectoryPoint(480, 255.924576148272), + TrajectoryPoint(490, 255.253956587112), + TrajectoryPoint(500, 254.583364311473), + TrajectoryPoint(510, 253.912792037851), + TrajectoryPoint(520, 253.242223924358), + TrajectoryPoint(530, 252.571649626302), + TrajectoryPoint(540, 251.901061124742), + TrajectoryPoint(550, 251.230450259334), + TrajectoryPoint(560, 250.559796205452), + TrajectoryPoint(570, 249.889092990303), + TrajectoryPoint(580, 249.218334819605), + TrajectoryPoint(590, 248.54751344508), + TrajectoryPoint(600, 247.876620497016), + TrajectoryPoint(610, 247.205625469229), + TrajectoryPoint(620, 246.534528863012), + TrajectoryPoint(630, 245.863328766793), + TrajectoryPoint(640, 245.192016715646), + TrajectoryPoint(650, 244.520584135817), + TrajectoryPoint(660, 243.849006570674), + TrajectoryPoint(670, 243.177263154125), + TrajectoryPoint(680, 242.505367764573), + TrajectoryPoint(690, 241.833311715744), + TrajectoryPoint(700, 241.161086219717), + TrajectoryPoint(710, 240.488682390396), + TrajectoryPoint(720, 239.816058586825), + TrajectoryPoint(730, 239.143217628455), + TrajectoryPoint(740, 238.470167128845), + TrajectoryPoint(750, 237.796898065338), + TrajectoryPoint(760, 237.123401319153), + TrajectoryPoint(770, 236.44966767735), + TrajectoryPoint(780, 235.775664645354), + TrajectoryPoint(790, 235.101370558986), + TrajectoryPoint(800, 234.426808353039), + TrajectoryPoint(810, 233.751968646039), + TrajectoryPoint(820, 233.076841961013), + TrajectoryPoint(830, 232.401418726393), + TrajectoryPoint(840, 231.725689276717), + TrajectoryPoint(850, 231.049614962792), + TrajectoryPoint(860, 230.373181617153), + TrajectoryPoint(870, 229.696410463845), + TrajectoryPoint(880, 229.019291628508), + TrajectoryPoint(890, 228.341815138819), + TrajectoryPoint(900, 227.66397092451), + TrajectoryPoint(910, 226.985748817252), + TrajectoryPoint(920, 226.307138550401), + TrajectoryPoint(930, 225.62809946443), + TrajectoryPoint(940, 224.948620192505), + TrajectoryPoint(950, 224.268720345345), + TrajectoryPoint(960, 223.588389398183), + TrajectoryPoint(970, 222.90761672199), + TrajectoryPoint(980, 222.226391582827), + TrajectoryPoint(990, 221.544703141109), + TrajectoryPoint(1000, 220.862540450785), + TrajectoryPoint(1010, 220.179892458441), + TrajectoryPoint(1020, 219.496748002327), + TrajectoryPoint(1030, 218.813060371453), + TrajectoryPoint(1040, 218.128834552168), + TrajectoryPoint(1050, 217.444078261782), + TrajectoryPoint(1060, 216.758780017229), + TrajectoryPoint(1070, 216.072928219891), + TrajectoryPoint(1080, 215.386511154428), + TrajectoryPoint(1090, 214.699516987561), + TrajectoryPoint(1100, 214.011933766801), + TrajectoryPoint(1110, 213.323749419139), + TrajectoryPoint(1120, 212.634951749688), + TrajectoryPoint(1130, 211.945528440289), + TrajectoryPoint(1140, 211.255467048075), + TrajectoryPoint(1150, 210.564755004007), + TrajectoryPoint(1160, 209.873379611363), + TrajectoryPoint(1170, 209.181328044208), + TrajectoryPoint(1180, 208.488577492694), + TrajectoryPoint(1190, 207.795104219395), + TrajectoryPoint(1200, 207.100917295221), + TrajectoryPoint(1210, 206.406003476037), + TrajectoryPoint(1220, 205.710349380257), + TrajectoryPoint(1230, 205.013941487196), + TrajectoryPoint(1240, 204.316766135399), + TrajectoryPoint(1250, 203.618809520941), + TrajectoryPoint(1260, 202.920057695692), + TrajectoryPoint(1270, 202.220496565557), + TrajectoryPoint(1280, 201.520111888687), + TrajectoryPoint(1290, 200.81888927366), + TrajectoryPoint(1300, 200.116814177633), + TrajectoryPoint(1310, 199.413871904466), + TrajectoryPoint(1320, 198.710047602816), + TrajectoryPoint(1330, 198.005326264198), + TrajectoryPoint(1340, 197.299692721025), + TrajectoryPoint(1350, 196.593131644607), + TrajectoryPoint(1360, 195.885627543123), + TrajectoryPoint(1370, 195.177164759563), + TrajectoryPoint(1380, 194.467727469639), + TrajectoryPoint(1390, 193.757299679654), + TrajectoryPoint(1400, 193.045865224347), + TrajectoryPoint(1410, 192.333407764698), + TrajectoryPoint(1420, 191.6199107857), + TrajectoryPoint(1430, 190.905322780246), + TrajectoryPoint(1440, 190.189647107171), + TrajectoryPoint(1450, 189.472876527352), + TrajectoryPoint(1460, 188.754993670017), + TrajectoryPoint(1470, 188.035980975529), + TrajectoryPoint(1480, 187.315820692875), + TrajectoryPoint(1490, 186.59449487712), + TrajectoryPoint(1500, 185.871985386811), + TrajectoryPoint(1510, 185.148273881338), + TrajectoryPoint(1520, 184.423341818247), + TrajectoryPoint(1530, 183.697170450505), + TrajectoryPoint(1540, 182.969740823718), + TrajectoryPoint(1550, 182.241033773288), + TrajectoryPoint(1560, 181.511029901333), + TrajectoryPoint(1570, 180.779594730267), + TrajectoryPoint(1580, 180.046816739329), + TrajectoryPoint(1590, 179.312675745994), + TrajectoryPoint(1600, 178.577151340754), + TrajectoryPoint(1610, 177.840222883898), + TrajectoryPoint(1620, 177.101869502225), + TrajectoryPoint(1630, 176.362070085694), + TrajectoryPoint(1640, 175.620803284013), + TrajectoryPoint(1650, 174.877927579264), + TrajectoryPoint(1660, 174.13348723214), + TrajectoryPoint(1670, 173.387505887092), + TrajectoryPoint(1680, 172.639961030897), + TrajectoryPoint(1690, 171.89082988964), + TrajectoryPoint(1700, 171.140089424815), + TrajectoryPoint(1710, 170.387650638499), + TrajectoryPoint(1720, 169.633402250696), + TrajectoryPoint(1730, 168.877464597034), + TrajectoryPoint(1740, 168.119813357763), + TrajectoryPoint(1750, 167.36042392504), + TrajectoryPoint(1760, 166.599271398437), + TrajectoryPoint(1770, 165.836083865085), + TrajectoryPoint(1780, 165.071057442012), + TrajectoryPoint(1790, 164.30418100186), + TrajectoryPoint(1800, 163.535428226177), + TrajectoryPoint(1810, 162.764691737369), + TrajectoryPoint(1820, 161.991796265612), + TrajectoryPoint(1830, 161.216932229542), + TrajectoryPoint(1840, 160.44007178471), + TrajectoryPoint(1850, 159.661154930748), + TrajectoryPoint(1860, 158.879864904239), + TrajectoryPoint(1870, 158.096480527657), + TrajectoryPoint(1880, 157.310972310723), + TrajectoryPoint(1890, 156.523192595656), + TrajectoryPoint(1900, 155.732948427036), + TrajectoryPoint(1910, 154.940476310972), + TrajectoryPoint(1920, 154.145744978267), + TrajectoryPoint(1930, 153.348364840947), + TrajectoryPoint(1940, 152.548570137481), + TrajectoryPoint(1950, 151.746405439504), + TrajectoryPoint(1960, 150.941554975928), + TrajectoryPoint(1970, 150.134059878806), + TrajectoryPoint(1980, 149.324078400722), + TrajectoryPoint(1990, 148.511275730857), + TrajectoryPoint(2000, 147.695682053642), + TrajectoryPoint(2010, 146.877479624742), + TrajectoryPoint(2020, 146.056211137843), + TrajectoryPoint(2030, 145.232098933755), + TrajectoryPoint(2040, 144.405208023058), + TrajectoryPoint(2050, 143.574967360873), + TrajectoryPoint(2060, 142.741893413172), + TrajectoryPoint(2070, 141.905596904374), + TrajectoryPoint(2080, 141.066067208368), + TrajectoryPoint(2090, 140.223476723442), + TrajectoryPoint(2100, 139.377249997122), + TrajectoryPoint(2110, 138.527944110655), + TrajectoryPoint(2120, 137.67489661382), + TrajectoryPoint(2130, 136.81853288239), + TrajectoryPoint(2140, 135.95843599383), + TrajectoryPoint(2150, 135.094747569336), + TrajectoryPoint(2160, 134.22726973848), + TrajectoryPoint(2170, 133.355978103545), + TrajectoryPoint(2180, 132.480770572025), + TrajectoryPoint(2190, 131.601584886375), + TrajectoryPoint(2200, 130.718280681949), + TrajectoryPoint(2210, 129.830897081207), + TrajectoryPoint(2220, 128.939109933057), + TrajectoryPoint(2230, 128.043210776131), + TrajectoryPoint(2240, 127.142533944956), + TrajectoryPoint(2250, 126.237641512498), + TrajectoryPoint(2260, 125.327792021431), + TrajectoryPoint(2270, 124.413341145268), + TrajectoryPoint(2280, 123.494084919109), + TrajectoryPoint(2290, 122.569609890261), + TrajectoryPoint(2300, 121.6402878983), + TrajectoryPoint(2310, 120.705582049405), + TrajectoryPoint(2320, 119.76546607844), + TrajectoryPoint(2330, 118.820073430179), + TrajectoryPoint(2340, 117.868901639836), + TrajectoryPoint(2350, 116.911874406278), + TrajectoryPoint(2360, 115.949097760183), + TrajectoryPoint(2370, 114.980359684919), + TrajectoryPoint(2380, 114.005029137626), + TrajectoryPoint(2390, 113.023428406018), + TrajectoryPoint(2400, 112.035365109698), + TrajectoryPoint(2410, 111.040639498985), + TrajectoryPoint(2420, 110.03876236273), + TrajectoryPoint(2430, 109.029697543662), + TrajectoryPoint(2440, 108.013352449616), + TrajectoryPoint(2450, 106.98949643655), + TrajectoryPoint(2460, 105.957889729889), + TrajectoryPoint(2470, 104.918282987238), + TrajectoryPoint(2480, 103.870416835007), + TrajectoryPoint(2490, 102.814021377134), + TrajectoryPoint(2500, 101.74877062261), + TrajectoryPoint(2510, 100.674404702738), + TrajectoryPoint(2520, 99.5906811754193), + TrajectoryPoint(2530, 98.4972858586535), + TrajectoryPoint(2540, 97.3938531451154), + TrajectoryPoint(2550, 96.2799549001043), + TrajectoryPoint(2560, 95.1552953515873), + TrajectoryPoint(2570, 94.019498672057), + TrajectoryPoint(2580, 92.8721724560516), + TrajectoryPoint(2590, 91.7129068119073), + TrajectoryPoint(2600, 90.5412733926751), + TrajectoryPoint(2610, 89.3567967164087), + TrajectoryPoint(2620, 88.1583735932861), + TrajectoryPoint(2630, 86.9460746997048), + TrajectoryPoint(2640, 85.7193800486954), + TrajectoryPoint(2650, 84.4771335603578), + TrajectoryPoint(2660, 83.2188701530575), + TrajectoryPoint(2670, 81.9442988619684), + TrajectoryPoint(2680, 80.6515408918803), + TrajectoryPoint(2690, 79.3410791988585), + TrajectoryPoint(2700, 78.0105864796306), + TrajectoryPoint(2710, 76.6603461600492), + TrajectoryPoint(2720, 75.2882863068892), + TrajectoryPoint(2730, 73.893645873302), + TrajectoryPoint(2740, 72.4753264520392), + TrajectoryPoint(2750, 71.0315686679998), + TrajectoryPoint(2760, 69.5605015614551), + TrajectoryPoint(2770, 68.0608127335285), + TrajectoryPoint(2780, 66.5305014103984), + TrajectoryPoint(2790, 64.9673813334451), + TrajectoryPoint(2800, 63.3690589919956), + TrajectoryPoint(2810, 61.7328152723726), + TrajectoryPoint(2820, 60.0548074594194), + TrajectoryPoint(2830, 58.3324616765179), + TrajectoryPoint(2840, 56.5614809638394), + TrajectoryPoint(2850, 54.7367232413618), + TrajectoryPoint(2860, 52.8528131267647), + TrajectoryPoint(2870, 50.9034779957129), + TrajectoryPoint(2880, 48.8805846385624), + TrajectoryPoint(2890, 46.7746166292359), + TrajectoryPoint(2900, 44.5743688667463), + TrajectoryPoint(2910, 42.2636614095763), + TrajectoryPoint(2920, 39.824818545402), + TrajectoryPoint(2930, 37.2320537610135), + TrajectoryPoint(2940, 34.4511650642228), + TrajectoryPoint(2950, 31.4312541138461), + TrajectoryPoint(2960, 28.0968507888569), + TrajectoryPoint(2970, 24.3166969327988), + TrajectoryPoint(2980, 19.8411249726781), + TrajectoryPoint(2990, 14.0182231684044), + TrajectoryPoint(3000, 0), +}; +TrajectoryPoint t5_closed[] = { + TrajectoryPoint(0, 287.645068077735), + TrajectoryPoint(10, 286.962205130311), + TrajectoryPoint(20, 286.280179676493), + TrajectoryPoint(30, 285.598860517744), + TrajectoryPoint(40, 284.918429532041), + TrajectoryPoint(50, 284.238547504384), + TrajectoryPoint(60, 283.559211689187), + TrajectoryPoint(70, 282.880732817141), + TrajectoryPoint(80, 282.202794897937), + TrajectoryPoint(90, 281.525351622756), + TrajectoryPoint(100, 280.848541071326), + TrajectoryPoint(110, 280.172359709641), + TrajectoryPoint(120, 279.496623828556), + TrajectoryPoint(130, 278.821328872096), + TrajectoryPoint(140, 278.146715039818), + TrajectoryPoint(150, 277.472512081307), + TrajectoryPoint(160, 276.798702896296), + TrajectoryPoint(170, 276.125366203722), + TrajectoryPoint(180, 275.452531494382), + TrajectoryPoint(190, 274.780045558337), + TrajectoryPoint(200, 274.107902768587), + TrajectoryPoint(210, 273.436225799665), + TrajectoryPoint(220, 272.764909414153), + TrajectoryPoint(230, 272.093893075098), + TrajectoryPoint(240, 271.423170548129), + TrajectoryPoint(250, 270.752872388411), + TrajectoryPoint(260, 270.082838729061), + TrajectoryPoint(270, 269.41305761704), + TrajectoryPoint(280, 268.743535533207), + TrajectoryPoint(290, 268.074347999303), + TrajectoryPoint(300, 267.405373454689), + TrajectoryPoint(310, 266.736605246243), + TrajectoryPoint(320, 266.068049577673), + TrajectoryPoint(330, 265.399753173828), + TrajectoryPoint(340, 264.731625122843), + TrajectoryPoint(350, 264.06365847463), + TrajectoryPoint(360, 263.395849868737), + TrajectoryPoint(370, 262.728240782365), + TrajectoryPoint(380, 262.060756558422), + TrajectoryPoint(390, 261.393390020641), + TrajectoryPoint(400, 260.726133749202), + TrajectoryPoint(410, 260.059010182716), + TrajectoryPoint(420, 259.391976029199), + TrajectoryPoint(430, 258.725016965189), + TrajectoryPoint(440, 258.058125427881), + TrajectoryPoint(450, 257.391301739614), + TrajectoryPoint(460, 256.724531778613), + TrajectoryPoint(470, 256.0577953091), + TrajectoryPoint(480, 255.391084646739), + TrajectoryPoint(490, 254.724391940888), + TrajectoryPoint(500, 254.057706940469), + TrajectoryPoint(510, 253.391014925052), + TrajectoryPoint(520, 252.724307867906), + TrajectoryPoint(530, 252.0575778245), + TrajectoryPoint(540, 251.390814826726), + TrajectoryPoint(550, 250.723994890922), + TrajectoryPoint(560, 250.057119779301), + TrajectoryPoint(570, 249.390181448748), + TrajectoryPoint(580, 248.723171730173), + TrajectoryPoint(590, 248.056079187464), + TrajectoryPoint(600, 247.388869047185), + TrajectoryPoint(610, 246.721556001355), + TrajectoryPoint(620, 246.054131779844), + TrajectoryPoint(630, 245.386588000762), + TrajectoryPoint(640, 244.718916175861), + TrajectoryPoint(650, 244.051073881721), + TrajectoryPoint(660, 243.383072751928), + TrajectoryPoint(670, 242.714912529256), + TrajectoryPoint(680, 242.046584614037), + TrajectoryPoint(690, 241.378080307108), + TrajectoryPoint(700, 240.709385427713), + TrajectoryPoint(710, 240.040449230509), + TrajectoryPoint(720, 239.371305855379), + TrajectoryPoint(730, 238.701946468383), + TrajectoryPoint(740, 238.032362139138), + TrajectoryPoint(750, 237.362543843013), + TrajectoryPoint(760, 236.692482463019), + TrajectoryPoint(770, 236.022113617346), + TrajectoryPoint(780, 235.351476653399), + TrajectoryPoint(790, 234.680565756963), + TrajectoryPoint(800, 234.009371644625), + TrajectoryPoint(810, 233.337884939232), + TrajectoryPoint(820, 232.666096170764), + TrajectoryPoint(830, 231.993988417772), + TrajectoryPoint(840, 231.321503974306), + TrajectoryPoint(850, 230.648686359201), + TrajectoryPoint(860, 229.975525900583), + TrajectoryPoint(870, 229.302012830173), + TrajectoryPoint(880, 228.628137283441), + TrajectoryPoint(890, 227.95388929962), + TrajectoryPoint(900, 227.279258821564), + TrajectoryPoint(910, 226.604215383972), + TrajectoryPoint(920, 225.928726336818), + TrajectoryPoint(930, 225.25282291406), + TrajectoryPoint(940, 224.576494809445), + TrajectoryPoint(950, 223.899731614758), + TrajectoryPoint(960, 223.22252281927), + TrajectoryPoint(970, 222.544857809092), + TrajectoryPoint(980, 221.866725866438), + TrajectoryPoint(990, 221.188116168805), + TrajectoryPoint(1000, 220.509017788083), + TrajectoryPoint(1010, 219.829370965822), + TrajectoryPoint(1020, 219.149204865238), + TrajectoryPoint(1030, 218.468516679728), + TrajectoryPoint(1040, 217.787295170526), + TrajectoryPoint(1050, 217.10552898627), + TrajectoryPoint(1060, 216.423206661892), + TrajectoryPoint(1070, 215.740316617464), + TrajectoryPoint(1080, 215.056847156983), + TrajectoryPoint(1090, 214.372786467116), + TrajectoryPoint(1100, 213.688122615898), + TrajectoryPoint(1110, 213.002843551388), + TrajectoryPoint(1120, 212.316937100288), + TrajectoryPoint(1130, 211.630390966522), + TrajectoryPoint(1140, 210.943188669665), + TrajectoryPoint(1150, 210.255287974639), + TrajectoryPoint(1160, 209.566711388752), + TrajectoryPoint(1170, 208.877446223105), + TrajectoryPoint(1180, 208.187479658105), + TrajectoryPoint(1190, 207.496798741929), + TrajectoryPoint(1200, 206.805390388963), + TrajectoryPoint(1210, 206.113241378201), + TrajectoryPoint(1220, 205.42033835162), + TrajectoryPoint(1230, 204.726667812527), + TrajectoryPoint(1240, 204.032216123872), + TrajectoryPoint(1250, 203.336969506533), + TrajectoryPoint(1260, 202.640914037577), + TrajectoryPoint(1270, 201.944035648488), + TrajectoryPoint(1280, 201.246320123365), + TrajectoryPoint(1290, 200.5477530971), + TrajectoryPoint(1300, 199.848320053519), + TrajectoryPoint(1310, 199.148006323497), + TrajectoryPoint(1320, 198.446797083045), + TrajectoryPoint(1330, 197.744677351369), + TrajectoryPoint(1340, 197.041631988893), + TrajectoryPoint(1350, 196.337645695257), + TrajectoryPoint(1360, 195.632703007283), + TrajectoryPoint(1370, 194.92678829691), + TrajectoryPoint(1380, 194.219885769091), + TrajectoryPoint(1390, 193.511979459665), + TrajectoryPoint(1400, 192.80305323319), + TrajectoryPoint(1410, 192.093090780743), + TrajectoryPoint(1420, 191.382075617684), + TrajectoryPoint(1430, 190.669991081381), + TrajectoryPoint(1440, 189.956820328903), + TrajectoryPoint(1450, 189.242546334669), + TrajectoryPoint(1460, 188.527092475612), + TrajectoryPoint(1470, 187.810495305715), + TrajectoryPoint(1480, 187.092737497607), + TrajectoryPoint(1490, 186.373801139469), + TrajectoryPoint(1500, 185.653668123152), + TrajectoryPoint(1510, 184.932320141534), + TrajectoryPoint(1520, 184.209738685825), + TrajectoryPoint(1530, 183.485905042824), + TrajectoryPoint(1540, 182.760800292131), + TrajectoryPoint(1550, 182.034405303298), + TrajectoryPoint(1560, 181.306700732938), + TrajectoryPoint(1570, 180.577667021772), + TrajectoryPoint(1580, 179.847183515782), + TrajectoryPoint(1590, 179.115302276004), + TrajectoryPoint(1600, 178.382024949056), + TrajectoryPoint(1610, 177.647330930922), + TrajectoryPoint(1620, 176.911199384181), + TrajectoryPoint(1630, 176.173609234648), + TrajectoryPoint(1640, 175.434539167953), + TrajectoryPoint(1650, 174.693967626053), + TrajectoryPoint(1660, 173.951711763561), + TrajectoryPoint(1670, 173.207888040727), + TrajectoryPoint(1680, 172.46248839248), + TrajectoryPoint(1690, 171.715490081693), + TrajectoryPoint(1700, 170.966870106656), + TrajectoryPoint(1710, 170.216605197079), + TrajectoryPoint(1720, 169.46451729046), + TrajectoryPoint(1730, 168.710661360815), + TrajectoryPoint(1740, 167.95507963025), + TrajectoryPoint(1750, 167.197747528185), + TrajectoryPoint(1760, 166.438640191411), + TrajectoryPoint(1770, 165.677613836988), + TrajectoryPoint(1780, 164.914606290587), + TrajectoryPoint(1790, 164.149736679401), + TrajectoryPoint(1800, 163.382978722402), + TrajectoryPoint(1810, 162.614305818787), + TrajectoryPoint(1820, 161.843425105075), + TrajectoryPoint(1830, 161.070517782534), + TrajectoryPoint(1840, 160.29560217459), + TrajectoryPoint(1850, 159.518650129482), + TrajectoryPoint(1860, 158.73937179666), + TrajectoryPoint(1870, 157.957894430793), + TrajectoryPoint(1880, 157.174281483588), + TrajectoryPoint(1890, 156.388503129619), + TrajectoryPoint(1900, 155.600132266168), + TrajectoryPoint(1910, 154.80951789124), + TrajectoryPoint(1920, 154.016632695386), + TrajectoryPoint(1930, 153.22120508215), + TrajectoryPoint(1940, 152.423230802707), + TrajectoryPoint(1950, 151.622875024949), + TrajectoryPoint(1960, 150.819938204493), + TrajectoryPoint(1970, 150.01422643591), + TrajectoryPoint(1980, 149.206016883473), + TrajectoryPoint(1990, 148.39508871791), + TrajectoryPoint(2000, 147.581241503595), + TrajectoryPoint(2010, 146.764774235666), + TrajectoryPoint(2020, 145.94534089845), + TrajectoryPoint(2030, 145.122938527948), + TrajectoryPoint(2040, 144.297787439618), + TrajectoryPoint(2050, 143.46930120438), + TrajectoryPoint(2060, 142.637900702192), + TrajectoryPoint(2070, 141.803374139476), + TrajectoryPoint(2080, 140.965492781696), + TrajectoryPoint(2090, 140.124626254003), + TrajectoryPoint(2100, 139.280042978536), + TrajectoryPoint(2110, 138.432349435245), + TrajectoryPoint(2120, 137.581006048985), + TrajectoryPoint(2130, 136.726229787813), + TrajectoryPoint(2140, 135.867810868594), + TrajectoryPoint(2150, 135.005685130171), + TrajectoryPoint(2160, 134.139858995665), + TrajectoryPoint(2170, 133.270105353598), + TrajectoryPoint(2180, 132.396523126834), + TrajectoryPoint(2190, 131.518850833749), + TrajectoryPoint(2200, 130.63714543608), + TrajectoryPoint(2210, 129.751250722126), + TrajectoryPoint(2220, 128.861035787662), + TrajectoryPoint(2230, 127.96660110763), + TrajectoryPoint(2240, 127.067469812509), + TrajectoryPoint(2250, 126.164109917979), + TrajectoryPoint(2260, 125.255686836633), + TrajectoryPoint(2270, 124.342741643179), + TrajectoryPoint(2280, 123.424887648915), + TrajectoryPoint(2290, 122.501891389149), + TrajectoryPoint(2300, 121.574034873178), + TrajectoryPoint(2310, 120.640693507332), + TrajectoryPoint(2320, 119.702015964978), + TrajectoryPoint(2330, 118.758048281497), + TrajectoryPoint(2340, 117.808203416895), + TrajectoryPoint(2350, 116.852573991573), + TrajectoryPoint(2360, 115.891181538506), + TrajectoryPoint(2370, 114.92373303021), + TrajectoryPoint(2380, 113.949759432374), + TrajectoryPoint(2390, 112.969501901223), + TrajectoryPoint(2400, 111.9827679883), + TrajectoryPoint(2410, 110.989357878944), + TrajectoryPoint(2420, 109.988706183813), + TrajectoryPoint(2430, 108.980929459917), + TrajectoryPoint(2440, 107.965858474578), + TrajectoryPoint(2450, 106.943262528051), + TrajectoryPoint(2460, 105.912901792707), + TrajectoryPoint(2470, 104.874526875667), + TrajectoryPoint(2480, 103.827878355339), + TrajectoryPoint(2490, 102.772677167077), + TrajectoryPoint(2500, 101.708557360755), + TrajectoryPoint(2510, 100.635367250582), + TrajectoryPoint(2520, 99.552805230541), + TrajectoryPoint(2530, 98.4605570804311), + TrajectoryPoint(2540, 97.3582953162009), + TrajectoryPoint(2550, 96.2455388771763), + TrajectoryPoint(2560, 95.1219819583308), + TrajectoryPoint(2570, 93.987273383584), + TrajectoryPoint(2580, 92.8410207208554), + TrajectoryPoint(2590, 91.6828140537279), + TrajectoryPoint(2600, 90.512225012325), + TrajectoryPoint(2610, 89.3288057385688), + TrajectoryPoint(2620, 88.1314234939478), + TrajectoryPoint(2630, 86.9201233757825), + TrajectoryPoint(2640, 85.6944127842922), + TrajectoryPoint(2650, 84.4531857280538), + TrajectoryPoint(2660, 83.19587506461), + TrajectoryPoint(2670, 81.922289877814), + TrajectoryPoint(2680, 80.6304531093402), + TrajectoryPoint(2690, 79.320897779959), + TrajectoryPoint(2700, 77.9913404068083), + TrajectoryPoint(2710, 76.6420179970206), + TrajectoryPoint(2720, 75.2708156965392), + TrajectoryPoint(2730, 73.8770583983956), + TrajectoryPoint(2740, 72.4596041725589), + TrajectoryPoint(2750, 71.0166546604778), + TrajectoryPoint(2760, 69.546417318339), + TrajectoryPoint(2770, 68.0475398784428), + TrajectoryPoint(2780, 66.5180214027292), + TrajectoryPoint(2790, 64.9556754772321), + TrajectoryPoint(2800, 63.3581084445769), + TrajectoryPoint(2810, 61.7226323658535), + TrajectoryPoint(2820, 60.0453402080718), + TrajectoryPoint(2830, 58.3236907658563), + TrajectoryPoint(2840, 56.5534143388102), + TrajectoryPoint(2850, 54.7293121670692), + TrajectoryPoint(2860, 52.846062426764), + TrajectoryPoint(2870, 50.8973647052268), + TrajectoryPoint(2880, 48.8750854019792), + TrajectoryPoint(2890, 46.7697077272905), + TrajectoryPoint(2900, 44.5700262445342), + TrajectoryPoint(2910, 42.2598785685748), + TrajectoryPoint(2920, 39.8215676355347), + TrajectoryPoint(2930, 37.2293062194413), + TrajectoryPoint(2940, 34.4489054426478), + TrajectoryPoint(2950, 31.4294491888299), + TrajectoryPoint(2960, 28.0954663394126), + TrajectoryPoint(2970, 24.3157153411942), + TrajectoryPoint(2980, 19.8405094431073), + TrajectoryPoint(2990, 14.0179386944373), + TrajectoryPoint(3000, 0), +}; +TrajectoryPoint t6_closed[] = { + TrajectoryPoint(0, 286.914805317672), + TrajectoryPoint(10, 286.236902974706), + TrajectoryPoint(20, 285.560162939834), + TrajectoryPoint(30, 284.884210042744), + TrajectoryPoint(40, 284.208788843333), + TrajectoryPoint(50, 283.533915417412), + TrajectoryPoint(60, 282.859888206836), + TrajectoryPoint(70, 282.186342646755), + TrajectoryPoint(80, 281.513275361756), + TrajectoryPoint(90, 280.840869547869), + TrajectoryPoint(100, 280.169016519694), + TrajectoryPoint(110, 279.49759356929), + TrajectoryPoint(120, 278.826629706472), + TrajectoryPoint(130, 278.156296544326), + TrajectoryPoint(140, 277.486347445279), + TrajectoryPoint(150, 276.8167775692), + TrajectoryPoint(160, 276.147699848122), + TrajectoryPoint(170, 275.479063571649), + TrajectoryPoint(180, 274.810762358349), + TrajectoryPoint(190, 274.14279057589), + TrajectoryPoint(200, 273.47529612968), + TrajectoryPoint(210, 272.808113150259), + TrajectoryPoint(220, 272.141217284644), + TrajectoryPoint(230, 271.474624506282), + TrajectoryPoint(240, 270.808417127517), + TrajectoryPoint(250, 270.14245634132), + TrajectoryPoint(260, 269.476735915803), + TrajectoryPoint(270, 268.811283804856), + TrajectoryPoint(280, 268.146124234358), + TrajectoryPoint(290, 267.481166136238), + TrajectoryPoint(300, 266.816402896338), + TrajectoryPoint(310, 266.15185718636), + TrajectoryPoint(320, 265.487535410947), + TrajectoryPoint(330, 264.823371130067), + TrajectoryPoint(340, 264.159357443263), + TrajectoryPoint(350, 263.495503556897), + TrajectoryPoint(360, 262.831819227989), + TrajectoryPoint(370, 262.168249526081), + TrajectoryPoint(380, 261.504787331837), + TrajectoryPoint(390, 260.841427770469), + TrajectoryPoint(400, 260.178189234804), + TrajectoryPoint(410, 259.515023496369), + TrajectoryPoint(420, 258.851923262196), + TrajectoryPoint(430, 258.188881037529), + TrajectoryPoint(440, 257.525898672682), + TrajectoryPoint(450, 256.862953907957), + TrajectoryPoint(460, 256.20003360898), + TrajectoryPoint(470, 255.537130161908), + TrajectoryPoint(480, 254.874235538139), + TrajectoryPoint(490, 254.21133541338), + TrajectoryPoint(500, 253.548419547377), + TrajectoryPoint(510, 252.885480215848), + TrajectoryPoint(520, 252.222509550343), + TrajectoryPoint(530, 251.559491897477), + TrajectoryPoint(540, 250.896410543287), + TrajectoryPoint(550, 250.233266095005), + TrajectoryPoint(560, 249.570050586632), + TrajectoryPoint(570, 248.906755929144), + TrajectoryPoint(580, 248.243360191519), + TrajectoryPoint(590, 247.579845928393), + TrajectoryPoint(600, 246.916221403899), + TrajectoryPoint(610, 246.252478428827), + TrajectoryPoint(620, 245.588608704626), + TrajectoryPoint(630, 244.924597299995), + TrajectoryPoint(640, 244.260403121697), + TrajectoryPoint(650, 243.596051541959), + TrajectoryPoint(660, 242.931534148769), + TrajectoryPoint(670, 242.266842428939), + TrajectoryPoint(680, 241.60196777175), + TrajectoryPoint(690, 240.936874187598), + TrajectoryPoint(700, 240.271551608894), + TrajectoryPoint(710, 239.606015679217), + TrajectoryPoint(720, 238.940257654473), + TrajectoryPoint(730, 238.274268695939), + TrajectoryPoint(740, 237.608039872387), + TrajectoryPoint(750, 236.941537147562), + TrajectoryPoint(760, 236.274739935903), + TrajectoryPoint(770, 235.607672446967), + TrajectoryPoint(780, 234.940325587566), + TrajectoryPoint(790, 234.272690171371), + TrajectoryPoint(800, 233.604756919973), + TrajectoryPoint(810, 232.93651646371), + TrajectoryPoint(820, 232.267914564727), + TrajectoryPoint(830, 231.598965730603), + TrajectoryPoint(840, 230.929678946613), + TrajectoryPoint(850, 230.260044643951), + TrajectoryPoint(860, 229.590053159058), + TrajectoryPoint(870, 228.919694733762), + TrajectoryPoint(880, 228.248959515272), + TrajectoryPoint(890, 227.577832685076), + TrajectoryPoint(900, 226.906249585546), + TrajectoryPoint(910, 226.234258327656), + TrajectoryPoint(920, 225.561848818101), + TrajectoryPoint(930, 224.889010863751), + TrajectoryPoint(940, 224.215734171201), + TrajectoryPoint(950, 223.542008346217), + TrajectoryPoint(960, 222.867822893085), + TrajectoryPoint(970, 222.193167213885), + TrajectoryPoint(980, 221.518030607672), + TrajectoryPoint(990, 220.842347295988), + TrajectoryPoint(1000, 220.166156741913), + TrajectoryPoint(1010, 219.489452444678), + TrajectoryPoint(1020, 218.812223403018), + TrajectoryPoint(1030, 218.134458505901), + TrajectoryPoint(1040, 217.456146531482), + TrajectoryPoint(1050, 216.777276146008), + TrajectoryPoint(1060, 216.097835902671), + TrajectoryPoint(1070, 215.417814240403), + TrajectoryPoint(1080, 214.737199482634), + TrajectoryPoint(1090, 214.055979836004), + TrajectoryPoint(1100, 213.37414338903), + TrajectoryPoint(1110, 212.691666599875), + TrajectoryPoint(1120, 212.008517344608), + TrajectoryPoint(1130, 211.324716022633), + TrajectoryPoint(1140, 210.640250347823), + TrajectoryPoint(1150, 209.955107908266), + TrajectoryPoint(1160, 209.269276164814), + TrajectoryPoint(1170, 208.582742449591), + TrajectoryPoint(1180, 207.895493964482), + TrajectoryPoint(1190, 207.207517779582), + TrajectoryPoint(1200, 206.518800831614), + TrajectoryPoint(1210, 205.829329922323), + TrajectoryPoint(1220, 205.139091716833), + TrajectoryPoint(1230, 204.448072741985), + TrajectoryPoint(1240, 203.75625938464), + TrajectoryPoint(1250, 203.063637889953), + TrajectoryPoint(1260, 202.370194359624), + TrajectoryPoint(1270, 201.675914750119), + TrajectoryPoint(1280, 200.980784870864), + TrajectoryPoint(1290, 200.284790382407), + TrajectoryPoint(1300, 199.587916794558), + TrajectoryPoint(1310, 198.890149464494), + TrajectoryPoint(1320, 198.191473594843), + TrajectoryPoint(1330, 197.491874231731), + TrajectoryPoint(1340, 196.791336262803), + TrajectoryPoint(1350, 196.089844415215), + TrajectoryPoint(1360, 195.38738325359), + TrajectoryPoint(1370, 194.683937177948), + TrajectoryPoint(1380, 193.9794904216), + TrajectoryPoint(1390, 193.274027049011), + TrajectoryPoint(1400, 192.567530953627), + TrajectoryPoint(1410, 191.859985855669), + TrajectoryPoint(1420, 191.151375299892), + TrajectoryPoint(1430, 190.4416826533), + TrajectoryPoint(1440, 189.730891102839), + TrajectoryPoint(1450, 189.018983653031), + TrajectoryPoint(1460, 188.305943123588), + TrajectoryPoint(1470, 187.59175214697), + TrajectoryPoint(1480, 186.876333937809), + TrajectoryPoint(1490, 186.159712888558), + TrajectoryPoint(1500, 185.441882635579), + TrajectoryPoint(1510, 184.722824904041), + TrajectoryPoint(1520, 184.002521217607), + TrajectoryPoint(1530, 183.280952895687), + TrajectoryPoint(1540, 182.558101050634), + TrajectoryPoint(1550, 181.833946584902), + TrajectoryPoint(1560, 181.108470188136), + TrajectoryPoint(1570, 180.381652334217), + TrajectoryPoint(1580, 179.653473278254), + TrajectoryPoint(1590, 178.923814964305), + TrajectoryPoint(1600, 178.192715327339), + TrajectoryPoint(1610, 177.460186785632), + TrajectoryPoint(1620, 176.72620853617), + TrajectoryPoint(1630, 175.990759539246), + TrajectoryPoint(1640, 175.253818515026), + TrajectoryPoint(1650, 174.515363940055), + TrajectoryPoint(1660, 173.775343630487), + TrajectoryPoint(1670, 173.033611120216), + TrajectoryPoint(1680, 172.290290687958), + TrajectoryPoint(1690, 171.545359631917), + TrajectoryPoint(1700, 170.798794985717), + TrajectoryPoint(1710, 170.050573514399), + TrajectoryPoint(1720, 169.300645275722), + TrajectoryPoint(1730, 168.548807182271), + TrajectoryPoint(1740, 167.795231482643), + TrajectoryPoint(1750, 167.039893642019), + TrajectoryPoint(1760, 166.282768832897), + TrajectoryPoint(1770, 165.52383193051), + TrajectoryPoint(1780, 164.762788641066), + TrajectoryPoint(1790, 163.999864456367), + TrajectoryPoint(1800, 163.235040317509), + TrajectoryPoint(1810, 162.468289659485), + TrajectoryPoint(1820, 161.699441908338), + TrajectoryPoint(1830, 160.928431549823), + TrajectoryPoint(1840, 160.155401425857), + TrajectoryPoint(1850, 159.380323420431), + TrajectoryPoint(1860, 158.603027642284), + TrajectoryPoint(1870, 157.823399175132), + TrajectoryPoint(1880, 157.041623776734), + TrajectoryPoint(1890, 156.257671657196), + TrajectoryPoint(1900, 155.471232551976), + TrajectoryPoint(1910, 154.682419426835), + TrajectoryPoint(1920, 153.891324261923), + TrajectoryPoint(1930, 153.097791004735), + TrajectoryPoint(1940, 152.301581879404), + TrajectoryPoint(1950, 151.502980133226), + TrajectoryPoint(1960, 150.70189997761), + TrajectoryPoint(1970, 149.897917480305), + TrajectoryPoint(1980, 149.091426173304), + TrajectoryPoint(1990, 148.282316736548), + TrajectoryPoint(2000, 147.4701631312), + TrajectoryPoint(2010, 146.655378543097), + TrajectoryPoint(2020, 145.837725793591), + TrajectoryPoint(2030, 145.016981596303), + TrajectoryPoint(2040, 144.193477848436), + TrajectoryPoint(2050, 143.366733890421), + TrajectoryPoint(2060, 142.536956356811), + TrajectoryPoint(2070, 141.704147182096), + TrajectoryPoint(2080, 140.867864497212), + TrajectoryPoint(2090, 140.028585967836), + TrajectoryPoint(2100, 139.18568147652), + TrajectoryPoint(2110, 138.339551777773), + TrajectoryPoint(2120, 137.489861976331), + TrajectoryPoint(2130, 136.636625488319), + TrajectoryPoint(2140, 135.779834814848), + TrajectoryPoint(2150, 134.919224863046), + TrajectoryPoint(2160, 134.055001508926), + TrajectoryPoint(2170, 133.186739753902), + TrajectoryPoint(2180, 132.314734728343), + TrajectoryPoint(2190, 131.438530511481), + TrajectoryPoint(2200, 130.558376633597), + TrajectoryPoint(2210, 129.673926275328), + TrajectoryPoint(2220, 128.785237087734), + TrajectoryPoint(2230, 127.892223134406), + TrajectoryPoint(2240, 126.994591731729), + TrajectoryPoint(2250, 126.092682146911), + TrajectoryPoint(2260, 125.185679911972), + TrajectoryPoint(2270, 124.274195977326), + TrajectoryPoint(2280, 123.35770244723), + TrajectoryPoint(2290, 122.436141364042), + TrajectoryPoint(2300, 121.50970713276), + TrajectoryPoint(2310, 120.577689679439), + TrajectoryPoint(2320, 119.640408210082), + TrajectoryPoint(2330, 118.697823543189), + TrajectoryPoint(2340, 117.749266221815), + TrajectoryPoint(2350, 116.794993495322), + TrajectoryPoint(2360, 115.834944538596), + TrajectoryPoint(2370, 114.868747393219), + TrajectoryPoint(2380, 113.896090888978), + TrajectoryPoint(2390, 112.917137119608), + TrajectoryPoint(2400, 111.931693570957), + TrajectoryPoint(2410, 110.939538519951), + TrajectoryPoint(2420, 109.940097920041), + TrajectoryPoint(2430, 108.933571538425), + TrajectoryPoint(2440, 107.919737333781), + TrajectoryPoint(2450, 106.898364552455), + TrajectoryPoint(2460, 105.869213315446), + TrajectoryPoint(2470, 104.832034180949), + TrajectoryPoint(2480, 103.786567680823), + TrajectoryPoint(2490, 102.732468262517), + TrajectoryPoint(2500, 101.669503762144), + TrajectoryPoint(2510, 100.597455128765), + TrajectoryPoint(2520, 99.5160207170817), + TrajectoryPoint(2530, 98.4248862697143), + TrajectoryPoint(2540, 97.3237242674834), + TrajectoryPoint(2550, 96.2121135562458), + TrajectoryPoint(2560, 95.0896271465131), + TrajectoryPoint(2570, 93.9559749960346), + TrajectoryPoint(2580, 92.8107646466441), + TrajectoryPoint(2590, 91.6535861576271), + TrajectoryPoint(2600, 90.4840111365609), + TrajectoryPoint(2610, 89.3015917045376), + TrajectoryPoint(2620, 88.1052470654749), + TrajectoryPoint(2630, 86.8949167371822), + TrajectoryPoint(2640, 85.670161663317), + TrajectoryPoint(2650, 84.4299245787049), + TrajectoryPoint(2660, 83.1735390559704), + TrajectoryPoint(2670, 81.9008809296054), + TrajectoryPoint(2680, 80.6099692743149), + TrajectoryPoint(2690, 79.301294095063), + TrajectoryPoint(2700, 77.972645100712), + TrajectoryPoint(2710, 76.6242141465072), + TrajectoryPoint(2720, 75.2538446408375), + TrajectoryPoint(2730, 73.8609450525468), + TrajectoryPoint(2740, 72.4443311244359), + TrajectoryPoint(2750, 71.0021665921202), + TrajectoryPoint(2760, 69.5327351629805), + TrajectoryPoint(2770, 68.0346457998035), + TrajectoryPoint(2780, 66.5058974048844), + TrajectoryPoint(2790, 64.9443034131675), + TrajectoryPoint(2800, 63.3474700245106), + TrajectoryPoint(2810, 61.7127396070419), + TrajectoryPoint(2820, 60.0361425993504), + TrajectoryPoint(2830, 58.3151695581118), + TrajectoryPoint(2840, 56.5455772812289), + TrajectoryPoint(2850, 54.7221119107376), + TrajectoryPoint(2860, 52.8395036848696), + TrajectoryPoint(2870, 50.8914251783219), + TrajectoryPoint(2880, 48.8697424107491), + TrajectoryPoint(2890, 46.7649382387952), + TrajectoryPoint(2900, 44.5658068992822), + TrajectoryPoint(2910, 42.2562030701249), + TrajectoryPoint(2920, 39.8184089345789), + TrajectoryPoint(2930, 37.2266365739458), + TrajectoryPoint(2940, 34.4467098555064), + TrajectoryPoint(2950, 31.42769538782), + TrajectoryPoint(2960, 28.0941210827197), + TrajectoryPoint(2970, 24.3147615217758), + TrajectoryPoint(2980, 19.8399113164253), + TrajectoryPoint(2990, 14.0176622555655), + TrajectoryPoint(3000, 0), +}; +TrajectoryPoint t7_closed[] = { + TrajectoryPoint(0, 286.207536847051), + TrajectoryPoint(10, 285.535077414886), + TrajectoryPoint(20, 284.863437411843), + TrajectoryPoint(30, 284.192348384917), + TrajectoryPoint(40, 283.521838698171), + TrajectoryPoint(50, 282.852094250836), + TrajectoryPoint(60, 282.182815728898), + TrajectoryPoint(70, 281.513999670143), + TrajectoryPoint(80, 280.845863306509), + TrajectoryPoint(90, 280.178216402721), + TrajectoryPoint(100, 279.510984706648), + TrajectoryPoint(110, 278.844232814604), + TrajectoryPoint(120, 278.178048720745), + TrajectoryPoint(130, 277.512234691857), + TrajectoryPoint(140, 276.846785866913), + TrajectoryPoint(150, 276.181840948142), + TrajectoryPoint(160, 275.517287020983), + TrajectoryPoint(170, 274.853054954324), + TrajectoryPoint(180, 274.189148746781), + TrajectoryPoint(190, 273.525705734919), + TrajectoryPoint(200, 272.862543105237), + TrajectoryPoint(210, 272.199655156462), + TrajectoryPoint(220, 271.537079223044), + TrajectoryPoint(230, 270.874846244708), + TrajectoryPoint(240, 270.212848126684), + TrajectoryPoint(250, 269.551078671541), + TrajectoryPoint(260, 268.889581885578), + TrajectoryPoint(270, 268.228342295024), + TrajectoryPoint(280, 267.567293127746), + TrajectoryPoint(290, 266.906427816928), + TrajectoryPoint(300, 266.245781008459), + TrajectoryPoint(310, 265.585328430802), + TrajectoryPoint(320, 264.925022945688), + TrajectoryPoint(330, 264.2648577087), + TrajectoryPoint(340, 263.604850764564), + TrajectoryPoint(350, 262.94498818147), + TrajectoryPoint(360, 262.2852304342), + TrajectoryPoint(370, 261.625570465259), + TrajectoryPoint(380, 260.966009817216), + TrajectoryPoint(390, 260.30654862979), + TrajectoryPoint(400, 259.647151024477), + TrajectoryPoint(410, 258.987809774023), + TrajectoryPoint(420, 258.328517454817), + TrajectoryPoint(430, 257.66927530953), + TrajectoryPoint(440, 257.010057634902), + TrajectoryPoint(450, 256.35085582331), + TrajectoryPoint(460, 255.691662333739), + TrajectoryPoint(470, 255.032467437014), + TrajectoryPoint(480, 254.373255928457), + TrajectoryPoint(490, 253.71402059337), + TrajectoryPoint(500, 253.054753781532), + TrajectoryPoint(510, 252.395447701914), + TrajectoryPoint(520, 251.736079910209), + TrajectoryPoint(530, 251.076643495073), + TrajectoryPoint(540, 250.417136468119), + TrajectoryPoint(550, 249.757550941413), + TrajectoryPoint(560, 249.097878906633), + TrajectoryPoint(570, 248.438087341157), + TrajectoryPoint(580, 247.778177597475), + TrajectoryPoint(590, 247.118150626477), + TrajectoryPoint(600, 246.457998320241), + TrajectoryPoint(610, 245.797712463687), + TrajectoryPoint(620, 245.137263245373), + TrajectoryPoint(630, 244.476636255167), + TrajectoryPoint(640, 243.815845437621), + TrajectoryPoint(650, 243.154882465053), + TrajectoryPoint(660, 242.493738910504), + TrajectoryPoint(670, 241.832406251286), + TrajectoryPoint(680, 241.170827012), + TrajectoryPoint(690, 240.509031356764), + TrajectoryPoint(700, 239.847016545368), + TrajectoryPoint(710, 239.184773923019), + TrajectoryPoint(720, 238.522294741972), + TrajectoryPoint(730, 237.859570163593), + TrajectoryPoint(740, 237.196538574956), + TrajectoryPoint(750, 236.53323204497), + TrajectoryPoint(760, 235.86965006035), + TrajectoryPoint(770, 235.205783622386), + TrajectoryPoint(780, 234.541623640825), + TrajectoryPoint(790, 233.877160934885), + TrajectoryPoint(800, 233.212371072885), + TrajectoryPoint(810, 232.547209145732), + TrajectoryPoint(820, 231.881714206485), + TrajectoryPoint(830, 231.215876881588), + TrajectoryPoint(840, 230.549687704021), + TrajectoryPoint(850, 229.883137113579), + TrajectoryPoint(860, 229.216215457004), + TrajectoryPoint(870, 228.548912987966), + TrajectoryPoint(880, 227.881170177789), + TrajectoryPoint(890, 227.213009628583), + TrajectoryPoint(900, 226.544437261333), + TrajectoryPoint(910, 225.875443092577), + TrajectoryPoint(920, 225.206017040653), + TrajectoryPoint(930, 224.53614892524), + TrajectoryPoint(940, 223.865828466811), + TrajectoryPoint(950, 223.195045285985), + TrajectoryPoint(960, 222.523788902802), + TrajectoryPoint(970, 221.851994318651), + TrajectoryPoint(980, 221.179697872664), + TrajectoryPoint(990, 220.506895974739), + TrajectoryPoint(1000, 219.833577854602), + TrajectoryPoint(1010, 219.15973263491), + TrajectoryPoint(1020, 218.485349330272), + TrajectoryPoint(1030, 217.810416846222), + TrajectoryPoint(1040, 217.134923978131), + TrajectoryPoint(1050, 216.458859410067), + TrajectoryPoint(1060, 215.782211713609), + TrajectoryPoint(1070, 215.104969346617), + TrajectoryPoint(1080, 214.427119075252), + TrajectoryPoint(1090, 213.748604677677), + TrajectoryPoint(1100, 213.069461242472), + TrajectoryPoint(1110, 212.389676870454), + TrajectoryPoint(1120, 211.709239541317), + TrajectoryPoint(1130, 211.02813711227), + TrajectoryPoint(1140, 210.346357316634), + TrajectoryPoint(1150, 209.663887762403), + TrajectoryPoint(1160, 208.980715930775), + TrajectoryPoint(1170, 208.29682917465), + TrajectoryPoint(1180, 207.612214717099), + TrajectoryPoint(1190, 206.926859649795), + TrajectoryPoint(1200, 206.24075093143), + TrajectoryPoint(1210, 205.553875386086), + TrajectoryPoint(1220, 204.86621970159), + TrajectoryPoint(1230, 204.177770427837), + TrajectoryPoint(1240, 203.488513975084), + TrajectoryPoint(1250, 202.798436612221), + TrajectoryPoint(1260, 202.107524465007), + TrajectoryPoint(1270, 201.415763514292), + TrajectoryPoint(1280, 200.723139594193), + TrajectoryPoint(1290, 200.02963839026), + TrajectoryPoint(1300, 199.335245437603), + TrajectoryPoint(1310, 198.639946118996), + TrajectoryPoint(1320, 197.94372566295), + TrajectoryPoint(1330, 197.246569141756), + TrajectoryPoint(1340, 196.548461469503), + TrajectoryPoint(1350, 195.849387400059), + TrajectoryPoint(1360, 195.149331525026), + TrajectoryPoint(1370, 194.448278271663), + TrajectoryPoint(1380, 193.746211900774), + TrajectoryPoint(1390, 193.043116504565), + TrajectoryPoint(1400, 192.338976004467), + TrajectoryPoint(1410, 191.633774148922), + TrajectoryPoint(1420, 190.927494511136), + TrajectoryPoint(1430, 190.220120486794), + TrajectoryPoint(1440, 189.511635291736), + TrajectoryPoint(1450, 188.802021959599), + TrajectoryPoint(1460, 188.09126333941), + TrajectoryPoint(1470, 187.379342093148), + TrajectoryPoint(1480, 186.666240693258), + TrajectoryPoint(1490, 185.951938744363), + TrajectoryPoint(1500, 185.236340898261), + TrajectoryPoint(1510, 184.519503476129), + TrajectoryPoint(1520, 183.801408032926), + TrajectoryPoint(1530, 183.0820359195), + TrajectoryPoint(1540, 182.361368279781), + TrajectoryPoint(1550, 181.639386047927), + TrajectoryPoint(1560, 180.916069945412), + TrajectoryPoint(1570, 180.191400478062), + TrajectoryPoint(1580, 179.46535793304), + TrajectoryPoint(1590, 178.737922375765), + TrajectoryPoint(1600, 178.008966793815), + TrajectoryPoint(1610, 177.278537893074), + TrajectoryPoint(1620, 176.546647509496), + TrajectoryPoint(1630, 175.813274636538), + TrajectoryPoint(1640, 175.078398027584), + TrajectoryPoint(1650, 174.341996192443), + TrajectoryPoint(1660, 173.604047393776), + TrajectoryPoint(1670, 172.864440884697), + TrajectoryPoint(1680, 172.123136661147), + TrajectoryPoint(1690, 171.380210248617), + TrajectoryPoint(1700, 170.635638714677), + TrajectoryPoint(1710, 169.889398858312), + TrajectoryPoint(1720, 169.141467205827), + TrajectoryPoint(1730, 168.391685430626), + TrajectoryPoint(1740, 167.640055148469), + TrajectoryPoint(1750, 166.886651344555), + TrajectoryPoint(1760, 166.131449225666), + TrajectoryPoint(1770, 165.374423701256), + TrajectoryPoint(1780, 164.615402005244), + TrajectoryPoint(1790, 163.854364609601), + TrajectoryPoint(1800, 163.091416033914), + TrajectoryPoint(1810, 162.326529747521), + TrajectoryPoint(1820, 161.559655161383), + TrajectoryPoint(1830, 160.790484703573), + TrajectoryPoint(1840, 160.019283377664), + TrajectoryPoint(1850, 159.246023101928), + TrajectoryPoint(1860, 158.470651596697), + TrajectoryPoint(1870, 157.692816524291), + TrajectoryPoint(1880, 156.912823542905), + TrajectoryPoint(1890, 156.130642896707), + TrajectoryPoint(1900, 155.346078805411), + TrajectoryPoint(1910, 154.559012969409), + TrajectoryPoint(1920, 153.769654241633), + TrajectoryPoint(1930, 152.977959719172), + TrajectoryPoint(1940, 152.183462950703), + TrajectoryPoint(1950, 151.386562801754), + TrajectoryPoint(1960, 150.587226180988), + TrajectoryPoint(1970, 149.784979958864), + TrajectoryPoint(1980, 148.980155614003), + TrajectoryPoint(1990, 148.172777074918), + TrajectoryPoint(2000, 147.362301079301), + TrajectoryPoint(2010, 146.549149029904), + TrajectoryPoint(2020, 145.733224693201), + TrajectoryPoint(2030, 144.914089310072), + TrajectoryPoint(2040, 144.092183894461), + TrajectoryPoint(2050, 143.267131206262), + TrajectoryPoint(2060, 142.438928409549), + TrajectoryPoint(2070, 141.607786362709), + TrajectoryPoint(2080, 140.773054892413), + TrajectoryPoint(2090, 139.935317247214), + TrajectoryPoint(2100, 139.094042460563), + TrajectoryPoint(2110, 138.249430259597), + TrajectoryPoint(2120, 137.401345724098), + TrajectoryPoint(2130, 136.549603426327), + TrajectoryPoint(2140, 135.694393446138), + TrajectoryPoint(2150, 134.835254458212), + TrajectoryPoint(2160, 133.972587103533), + TrajectoryPoint(2170, 133.105773169177), + TrajectoryPoint(2180, 132.235299339883), + TrajectoryPoint(2190, 131.360519885334), + TrajectoryPoint(2200, 130.481872302199), + TrajectoryPoint(2210, 129.598823734166), + TrajectoryPoint(2220, 128.711615851671), + TrajectoryPoint(2230, 127.819980803974), + TrajectoryPoint(2240, 126.923805638098), + TrajectoryPoint(2250, 126.023252162767), + TrajectoryPoint(2260, 125.117681026501), + TrajectoryPoint(2270, 124.207615860236), + TrajectoryPoint(2280, 123.292442863301), + TrajectoryPoint(2290, 122.372275260105), + TrajectoryPoint(2300, 121.447222000453), + TrajectoryPoint(2310, 120.516489670244), + TrajectoryPoint(2320, 119.580563758719), + TrajectoryPoint(2330, 118.639321982649), + TrajectoryPoint(2340, 117.692014548037), + TrajectoryPoint(2350, 116.739059195442), + TrajectoryPoint(2360, 115.780314804533), + TrajectoryPoint(2370, 114.815332489566), + TrajectoryPoint(2380, 113.843954951181), + TrajectoryPoint(2390, 112.866267214492), + TrajectoryPoint(2400, 111.882076701886), + TrajectoryPoint(2410, 110.891088942265), + TrajectoryPoint(2420, 109.892875666616), + TrajectoryPoint(2430, 108.887563508315), + TrajectoryPoint(2440, 107.874930371337), + TrajectoryPoint(2450, 106.854745449833), + TrajectoryPoint(2460, 105.826768815018), + TrajectoryPoint(2470, 104.790750977653), + TrajectoryPoint(2480, 103.746432424429), + TrajectoryPoint(2490, 102.693402849876), + TrajectoryPoint(2500, 101.631560389923), + TrajectoryPoint(2510, 100.560620381365), + TrajectoryPoint(2520, 99.4802811406893), + TrajectoryPoint(2530, 98.3902283743204), + TrajectoryPoint(2540, 97.2901345288442), + TrajectoryPoint(2550, 96.1796367753489), + TrajectoryPoint(2560, 95.058190136743), + TrajectoryPoint(2570, 93.9255640929727), + TrajectoryPoint(2580, 92.7813661603038), + TrajectoryPoint(2590, 91.6251863741699), + TrajectoryPoint(2600, 90.4565963199775), + TrajectoryPoint(2610, 89.275148098296), + TrajectoryPoint(2620, 88.0798114688228), + TrajectoryPoint(2630, 86.8704231881022), + TrajectoryPoint(2640, 85.6465963135072), + TrajectoryPoint(2650, 84.407320998294), + TrajectoryPoint(2660, 83.1518341951938), + TrajectoryPoint(2670, 81.8800608690652), + TrajectoryPoint(2680, 80.5900638104315), + TrajectoryPoint(2690, 79.282243688495), + TrajectoryPoint(2700, 77.9544772549455), + TrajectoryPoint(2710, 76.6069124291296), + TrajectoryPoint(2720, 75.2373520170843), + TrajectoryPoint(2730, 73.8452857951918), + TrajectoryPoint(2740, 72.4294883263256), + TrajectoryPoint(2750, 70.9880864739511), + TrajectoryPoint(2760, 69.5194381200289), + TrajectoryPoint(2770, 68.0221145124561), + TrajectoryPoint(2780, 66.4941143982843), + TrajectoryPoint(2790, 64.9332510654512), + TrajectoryPoint(2800, 63.3371305748235), + TrajectoryPoint(2810, 61.7031247695055), + TrajectoryPoint(2820, 60.0272032755617), + TrajectoryPoint(2830, 58.3068875398862), + TrajectoryPoint(2840, 56.5379601289491), + TrajectoryPoint(2850, 54.7151136032121), + TrajectoryPoint(2860, 52.8331288284302), + TrajectoryPoint(2870, 50.8856521103676), + TrajectoryPoint(2880, 48.864549099322), + TrajectoryPoint(2890, 46.7603023079308), + TrajectoryPoint(2900, 44.5617056551878), + TrajectoryPoint(2910, 42.2526304092233), + TrajectoryPoint(2920, 39.8153385742936), + TrajectoryPoint(2930, 37.2240415581766), + TrajectoryPoint(2940, 34.4445756188724), + TrajectoryPoint(2950, 31.4259905690461), + TrajectoryPoint(2960, 28.0928133777348), + TrajectoryPoint(2970, 24.3138343123499), + TrajectoryPoint(2980, 19.8393298648743), + TrajectoryPoint(2990, 14.0173935160974), + TrajectoryPoint(3000, 0), +}; +TrajectoryPoint t8_closed[] = { + TrajectoryPoint(0, 285.523113265711), + TrajectoryPoint(10, 284.855479592315), + TrajectoryPoint(20, 284.188599955009), + TrajectoryPoint(30, 283.522319891926), + TrajectoryPoint(40, 282.856738052227), + TrajectoryPoint(50, 282.191606926307), + TrajectoryPoint(60, 281.526922993916), + TrajectoryPoint(70, 280.862927897498), + TrajectoryPoint(80, 280.199370408337), + TrajectoryPoint(90, 279.53621377455), + TrajectoryPoint(100, 278.873549246532), + TrajectoryPoint(110, 278.211400254819), + TrajectoryPoint(120, 277.54960782467), + TrajectoryPoint(130, 276.888167092974), + TrajectoryPoint(140, 276.22723524485), + TrajectoryPoint(150, 275.566652746908), + TrajectoryPoint(160, 274.906379396659), + TrajectoryPoint(170, 274.246440631504), + TrajectoryPoint(180, 273.586921896077), + TrajectoryPoint(190, 272.927671562415), + TrajectoryPoint(200, 272.268683957444), + TrajectoryPoint(210, 271.610012172191), + TrajectoryPoint(220, 270.951647780515), + TrajectoryPoint(230, 270.29350697632), + TrajectoryPoint(240, 269.63558360616), + TrajectoryPoint(250, 268.977933131465), + TrajectoryPoint(260, 268.320510263718), + TrajectoryPoint(270, 267.663267218803), + TrajectoryPoint(280, 267.006197484494), + TrajectoryPoint(290, 266.349343914107), + TrajectoryPoint(300, 265.692659694764), + TrajectoryPoint(310, 265.036112602816), + TrajectoryPoint(320, 264.37969585541), + TrajectoryPoint(330, 263.723433254483), + TrajectoryPoint(340, 263.06729386886), + TrajectoryPoint(350, 262.411249952544), + TrajectoryPoint(360, 261.755294514099), + TrajectoryPoint(370, 261.099432998246), + TrajectoryPoint(380, 260.443652786982), + TrajectoryPoint(390, 259.787927355261), + TrajectoryPoint(400, 259.13224954476), + TrajectoryPoint(410, 258.476613175241), + TrajectoryPoint(420, 257.821013728907), + TrajectoryPoint(430, 257.165429245428), + TrajectoryPoint(440, 256.50985242548), + TrajectoryPoint(450, 255.854275802825), + TrajectoryPoint(460, 255.198686644694), + TrajectoryPoint(470, 254.543071820487), + TrajectoryPoint(480, 253.887425475764), + TrajectoryPoint(490, 253.2317400358), + TrajectoryPoint(500, 252.576007788054), + TrajectoryPoint(510, 251.920198781337), + TrajectoryPoint(520, 251.264317636031), + TrajectoryPoint(530, 250.60835874226), + TrajectoryPoint(540, 249.952314290874), + TrajectoryPoint(550, 249.296176354702), + TrajectoryPoint(560, 248.639900564981), + TrajectoryPoint(570, 247.983507836944), + TrajectoryPoint(580, 247.326991286202), + TrajectoryPoint(590, 246.67034288633), + TrajectoryPoint(600, 246.013554505713), + TrajectoryPoint(610, 245.356581559388), + TrajectoryPoint(620, 244.699436329154), + TrajectoryPoint(630, 244.042121205665), + TrajectoryPoint(640, 243.384627945387), + TrajectoryPoint(650, 242.726948207252), + TrajectoryPoint(660, 242.069061291831), + TrajectoryPoint(670, 241.410925613854), + TrajectoryPoint(680, 240.752573795882), + TrajectoryPoint(690, 240.093997365522), + TrajectoryPoint(700, 239.435187756668), + TrajectoryPoint(710, 238.776136311819), + TrajectoryPoint(720, 238.116818638694), + TrajectoryPoint(730, 237.457193427333), + TrajectoryPoint(740, 236.797296735251), + TrajectoryPoint(750, 236.137119748541), + TrajectoryPoint(760, 235.476653562034), + TrajectoryPoint(770, 234.815889180508), + TrajectoryPoint(780, 234.154817519677), + TrajectoryPoint(790, 233.493381841834), + TrajectoryPoint(800, 232.831599648341), + TrajectoryPoint(810, 232.169480232087), + TrajectoryPoint(820, 231.5070143185), + TrajectoryPoint(830, 230.844192541051), + TrajectoryPoint(840, 230.181005441523), + TrajectoryPoint(850, 229.517443470133), + TrajectoryPoint(860, 228.853472035346), + TrajectoryPoint(870, 228.189063405612), + TrajectoryPoint(880, 227.524249386891), + TrajectoryPoint(890, 226.859020200281), + TrajectoryPoint(900, 226.193365970585), + TrajectoryPoint(910, 225.527276725961), + TrajectoryPoint(920, 224.860742397472), + TrajectoryPoint(930, 224.193752818536), + TrajectoryPoint(940, 223.526297724289), + TrajectoryPoint(950, 222.858319459937), + TrajectoryPoint(960, 222.189838287004), + TrajectoryPoint(970, 221.520859897277), + TrajectoryPoint(980, 220.851373745248), + TrajectoryPoint(990, 220.181369180901), + TrajectoryPoint(1000, 219.510835448812), + TrajectoryPoint(1010, 218.839761687189), + TrajectoryPoint(1020, 218.168136926844), + TrajectoryPoint(1030, 217.495950090128), + TrajectoryPoint(1040, 216.823189989797), + TrajectoryPoint(1050, 216.149845327839), + TrajectoryPoint(1060, 215.475877416546), + TrajectoryPoint(1070, 214.80127836353), + TrajectoryPoint(1080, 214.126061010631), + TrajectoryPoint(1090, 213.450213713862), + TrajectoryPoint(1100, 212.773724711259), + TrajectoryPoint(1110, 212.09658212156), + TrajectoryPoint(1120, 211.418773942857), + TrajectoryPoint(1130, 210.740288051206), + TrajectoryPoint(1140, 210.061112199208), + TrajectoryPoint(1150, 209.381234014553), + TrajectoryPoint(1160, 208.700640998534), + TrajectoryPoint(1170, 208.019320524532), + TrajectoryPoint(1180, 207.33725983647), + TrajectoryPoint(1190, 206.654446047238), + TrajectoryPoint(1200, 205.970866137089), + TrajectoryPoint(1210, 205.286506952009), + TrajectoryPoint(1220, 204.601355202063), + TrajectoryPoint(1230, 203.915397459701), + TrajectoryPoint(1240, 203.228620158054), + TrajectoryPoint(1250, 202.541009589193), + TrajectoryPoint(1260, 201.852551902359), + TrajectoryPoint(1270, 201.163233102175), + TrajectoryPoint(1280, 200.473039046825), + TrajectoryPoint(1290, 199.781955446206), + TrajectoryPoint(1300, 199.089967860053), + TrajectoryPoint(1310, 198.397061696035), + TrajectoryPoint(1320, 197.703222207824), + TrajectoryPoint(1330, 197.008434493137), + TrajectoryPoint(1340, 196.31268349174), + TrajectoryPoint(1350, 195.615953983432), + TrajectoryPoint(1360, 194.918230585992), + TrajectoryPoint(1370, 194.219497753096), + TrajectoryPoint(1380, 193.5197397722), + TrajectoryPoint(1390, 192.818940762392), + TrajectoryPoint(1400, 192.117084672212), + TrajectoryPoint(1410, 191.41415527743), + TrajectoryPoint(1420, 190.710136178793), + TrajectoryPoint(1430, 190.005010799738), + TrajectoryPoint(1440, 189.298762384061), + TrajectoryPoint(1450, 188.591373993548), + TrajectoryPoint(1460, 187.882828505574), + TrajectoryPoint(1470, 187.173108610646), + TrajectoryPoint(1480, 186.462196809922), + TrajectoryPoint(1490, 185.75007541267), + TrajectoryPoint(1500, 185.036726533696), + TrajectoryPoint(1510, 184.322087607605), + TrajectoryPoint(1520, 183.606133997179), + TrajectoryPoint(1530, 182.888892075563), + TrajectoryPoint(1540, 182.170343017133), + TrajectoryPoint(1550, 181.450467786611), + TrajectoryPoint(1560, 180.729247136151), + TrajectoryPoint(1570, 180.006661602364), + TrajectoryPoint(1580, 179.282691503298), + TrajectoryPoint(1590, 178.557316935352), + TrajectoryPoint(1600, 177.830517770135), + TrajectoryPoint(1610, 177.102146245149), + TrajectoryPoint(1620, 176.372281218417), + TrajectoryPoint(1630, 175.640922343904), + TrajectoryPoint(1640, 174.908048406959), + TrajectoryPoint(1650, 174.173637949395), + TrajectoryPoint(1660, 173.437669265913), + TrajectoryPoint(1670, 172.700120400445), + TrajectoryPoint(1680, 171.960808350156), + TrajectoryPoint(1690, 171.219826759187), + TrajectoryPoint(1700, 170.477188891358), + TrajectoryPoint(1710, 169.73287157828), + TrajectoryPoint(1720, 168.986851378867), + TrajectoryPoint(1730, 168.23909191192), + TrajectoryPoint(1740, 167.48934912901), + TrajectoryPoint(1750, 166.737821813749), + TrajectoryPoint(1760, 165.984485205846), + TrajectoryPoint(1770, 165.229314247626), + TrajectoryPoint(1780, 164.472255503174), + TrajectoryPoint(1790, 163.713048861259), + TrajectoryPoint(1800, 162.951920177622), + TrajectoryPoint(1810, 162.18884295457), + TrajectoryPoint(1820, 161.423790369185), + TrajectoryPoint(1830, 160.656499224743), + TrajectoryPoint(1840, 159.88707252106), + TrajectoryPoint(1850, 159.115576157201), + TrajectoryPoint(1860, 158.341981733516), + TrajectoryPoint(1870, 157.565978432388), + TrajectoryPoint(1880, 156.787715173247), + TrajectoryPoint(1890, 156.007253658688), + TrajectoryPoint(1900, 155.224510286424), + TrajectoryPoint(1910, 154.439140161109), + TrajectoryPoint(1920, 153.651466641418), + TrajectoryPoint(1930, 152.861458193193), + TrajectoryPoint(1940, 152.068722752288), + TrajectoryPoint(1950, 151.273474076715), + TrajectoryPoint(1960, 150.475778547396), + TrajectoryPoint(1970, 149.675269543101), + TrajectoryPoint(1980, 148.872063133736), + TrajectoryPoint(1990, 148.066292236779), + TrajectoryPoint(2000, 147.25751779753), + TrajectoryPoint(2010, 146.445950348983), + TrajectoryPoint(2020, 145.631694684321), + TrajectoryPoint(2030, 144.81413073952), + TrajectoryPoint(2040, 143.993776798312), + TrajectoryPoint(2050, 143.170366571422), + TrajectoryPoint(2060, 142.343692394227), + TrajectoryPoint(2070, 141.514102806064), + TrajectoryPoint(2080, 140.680943745961), + TrajectoryPoint(2090, 139.844701933015), + TrajectoryPoint(2100, 139.005009885509), + TrajectoryPoint(2110, 138.161870862199), + TrajectoryPoint(2120, 137.315345354401), + TrajectoryPoint(2130, 136.46505365521), + TrajectoryPoint(2140, 135.61137886277), + TrajectoryPoint(2150, 134.753667972044), + TrajectoryPoint(2160, 133.892511848776), + TrajectoryPoint(2170, 133.027103589809), + TrajectoryPoint(2180, 132.158116930458), + TrajectoryPoint(2190, 131.284720810643), + TrajectoryPoint(2200, 130.407536241305), + TrajectoryPoint(2210, 129.52584874985), + TrajectoryPoint(2220, 128.640079640029), + TrajectoryPoint(2230, 127.749783494374), + TrajectoryPoint(2240, 126.855022784092), + TrajectoryPoint(2250, 125.955786120814), + TrajectoryPoint(2260, 125.051605055493), + TrajectoryPoint(2270, 124.142917990285), + TrajectoryPoint(2280, 123.229027326204), + TrajectoryPoint(2290, 122.31021329417), + TrajectoryPoint(2300, 121.38644954933), + TrajectoryPoint(2310, 120.457017146129), + TrajectoryPoint(2320, 119.522408012795), + TrajectoryPoint(2330, 118.582418839063), + TrajectoryPoint(2340, 117.636377142724), + TrajectoryPoint(2350, 116.68470152192), + TrajectoryPoint(2360, 115.727224431874), + TrajectoryPoint(2370, 114.763421990318), + TrajectoryPoint(2380, 113.79328691982), + TrajectoryPoint(2390, 112.816829099011), + TrajectoryPoint(2400, 111.833855888938), + TrajectoryPoint(2410, 110.84400191246), + TrajectoryPoint(2420, 109.846980996819), + TrajectoryPoint(2430, 108.842848483946), + TrajectoryPoint(2440, 107.831382224854), + TrajectoryPoint(2450, 106.812351363113), + TrajectoryPoint(2460, 105.78551592168), + TrajectoryPoint(2470, 104.750626365291), + TrajectoryPoint(2480, 103.707364272066), + TrajectoryPoint(2490, 102.655432846983), + TrajectoryPoint(2500, 101.594680577135), + TrajectoryPoint(2510, 100.524817738453), + TrajectoryPoint(2520, 99.4455426102373), + TrajectoryPoint(2530, 98.3565408636541), + TrajectoryPoint(2540, 97.257484911913), + TrajectoryPoint(2550, 96.1480332193403), + TrajectoryPoint(2560, 95.0276324299234), + TrajectoryPoint(2570, 93.8960034612218), + TrajectoryPoint(2580, 92.7527893160912), + TrajectoryPoint(2590, 91.5975800065485), + TrajectoryPoint(2600, 90.4299470961985), + TrajectoryPoint(2610, 89.2494426653926), + TrajectoryPoint(2620, 88.0550856972589), + TrajectoryPoint(2630, 86.8466128949824), + TrajectoryPoint(2640, 85.6236880559177), + TrajectoryPoint(2650, 84.3853474955093), + TrajectoryPoint(2660, 83.1307341065176), + TrajectoryPoint(2670, 81.8598206815153), + TrajectoryPoint(2680, 80.5707125652386), + TrajectoryPoint(2690, 79.2637234655312), + TrajectoryPoint(2700, 77.9368148596952), + TrajectoryPoint(2710, 76.5900918989892), + TrajectoryPoint(2720, 75.2213178767821), + TrajectoryPoint(2730, 73.8300616994356), + TrajectoryPoint(2740, 72.4150578513234), + TrajectoryPoint(2750, 70.9743973158589), + TrajectoryPoint(2760, 69.5065101563758), + TrajectoryPoint(2770, 68.0099309182002), + TrajectoryPoint(2780, 66.4826581973602), + TrajectoryPoint(2790, 64.9225051387046), + TrajectoryPoint(2800, 63.327077667737), + TrajectoryPoint(2810, 61.6937495738048), + TrajectoryPoint(2820, 60.0185115080315), + TrajectoryPoint(2830, 58.2988347798023), + TrajectoryPoint(2840, 56.5305537545326), + TrajectoryPoint(2850, 54.7083088659519), + TrajectoryPoint(2860, 52.8269302311832), + TrajectoryPoint(2870, 50.880038600498), + TrajectoryPoint(2880, 48.8594992649163), + TrajectoryPoint(2890, 46.7557944022989), + TrajectoryPoint(2900, 44.5577176221904), + TrajectoryPoint(2910, 42.2491563294788), + TrajectoryPoint(2920, 39.8123528998214), + TrajectoryPoint(2930, 37.2215180858861), + TrajectoryPoint(2940, 34.4425001967444), + TrajectoryPoint(2950, 31.4243327087247), + TrajectoryPoint(2960, 28.0915416737693), + TrajectoryPoint(2970, 24.3129326146767), + TrajectoryPoint(2980, 19.8387644007151), + TrajectoryPoint(2990, 14.0171321587863), + TrajectoryPoint(3000, 0), +}; +TrajectoryPoint t9_closed[] = { + TrajectoryPoint(0, 284.860132271709), + TrajectoryPoint(10, 284.196954575389), + TrajectoryPoint(20, 283.534777036889), + TrajectoryPoint(30, 282.873243011805), + TrajectoryPoint(40, 282.212144989553), + TrajectoryPoint(50, 281.551479416948), + TrajectoryPoint(60, 280.891503985271), + TrajectoryPoint(70, 280.231924382733), + TrajectoryPoint(80, 279.572731784548), + TrajectoryPoint(90, 278.914036336609), + TrajectoryPoint(100, 278.255813506923), + TrajectoryPoint(110, 277.597934213897), + TrajectoryPoint(120, 276.940393608758), + TrajectoryPoint(130, 276.28336107756), + TrajectoryPoint(140, 275.626643954136), + TrajectoryPoint(150, 274.970223737409), + TrajectoryPoint(160, 274.314141418251), + TrajectoryPoint(170, 273.658443168417), + TrajectoryPoint(180, 273.003001790553), + TrajectoryPoint(190, 272.347811650729), + TrajectoryPoint(200, 271.69293681138), + TrajectoryPoint(210, 271.038339781219), + TrajectoryPoint(220, 270.383955506719), + TrajectoryPoint(230, 269.729777886714), + TrajectoryPoint(240, 269.075869958168), + TrajectoryPoint(250, 268.422165010115), + TrajectoryPoint(260, 267.768629714238), + TrajectoryPoint(270, 267.115257619198), + TrajectoryPoint(280, 266.462096652855), + TrajectoryPoint(290, 265.809084279181), + TrajectoryPoint(300, 265.156199485578), + TrajectoryPoint(310, 264.503435555533), + TrajectoryPoint(320, 263.850819531513), + TrajectoryPoint(330, 263.198309001446), + TrajectoryPoint(340, 262.545884979851), + TrajectoryPoint(350, 261.89354054497), + TrajectoryPoint(360, 261.241283035297), + TrajectoryPoint(370, 260.589091520446), + TrajectoryPoint(380, 259.936946376295), + TrajectoryPoint(390, 259.28484051619), + TrajectoryPoint(400, 258.632768650923), + TrajectoryPoint(410, 257.980720350232), + TrajectoryPoint(420, 257.328679124255), + TrajectoryPoint(430, 256.676637746542), + TrajectoryPoint(440, 256.024588827252), + TrajectoryPoint(450, 255.372515718959), + TrajectoryPoint(460, 254.720409509474), + TrajectoryPoint(470, 254.068264458153), + TrajectoryPoint(480, 253.416073066936), + TrajectoryPoint(490, 252.763825413684), + TrajectoryPoint(500, 252.111490530356), + TrajectoryPoint(510, 251.45907873107), + TrajectoryPoint(520, 250.80658240923), + TrajectoryPoint(530, 250.15399383501), + TrajectoryPoint(540, 249.501298073655), + TrajectoryPoint(550, 248.8484607203), + TrajectoryPoint(560, 248.195501137233), + TrajectoryPoint(570, 247.542411488323), + TrajectoryPoint(580, 246.889183828715), + TrajectoryPoint(590, 246.235809161444), + TrajectoryPoint(600, 245.582231345332), + TrajectoryPoint(610, 244.928485971925), + TrajectoryPoint(620, 244.274564981276), + TrajectoryPoint(630, 243.620460213729), + TrajectoryPoint(640, 242.966163413684), + TrajectoryPoint(650, 242.31163651172), + TrajectoryPoint(660, 241.656870199237), + TrajectoryPoint(670, 241.001882535127), + TrajectoryPoint(680, 240.34666513352), + TrajectoryPoint(690, 239.69120951633), + TrajectoryPoint(700, 239.035507115515), + TrajectoryPoint(710, 238.379510576256), + TrajectoryPoint(720, 237.723222254929), + TrajectoryPoint(730, 237.066657841556), + TrajectoryPoint(740, 236.409808613365), + TrajectoryPoint(750, 235.752665757752), + TrajectoryPoint(760, 235.095220373467), + TrajectoryPoint(770, 234.437453344742), + TrajectoryPoint(780, 233.779307397293), + TrajectoryPoint(790, 233.120829410333), + TrajectoryPoint(800, 232.462010298004), + TrajectoryPoint(810, 231.802840883498), + TrajectoryPoint(820, 231.143311899487), + TrajectoryPoint(830, 230.483413988376), + TrajectoryPoint(840, 229.823137702427), + TrajectoryPoint(850, 229.162409488717), + TrajectoryPoint(860, 228.501277556995), + TrajectoryPoint(870, 227.839737074187), + TrajectoryPoint(880, 227.177778366591), + TrajectoryPoint(890, 226.515391665711), + TrajectoryPoint(900, 225.852567107906), + TrajectoryPoint(910, 225.189294733942), + TrajectoryPoint(920, 224.52556448845), + TrajectoryPoint(930, 223.861332381098), + TrajectoryPoint(940, 223.196590127606), + TrajectoryPoint(950, 222.531358831378), + TrajectoryPoint(960, 221.865628165727), + TrajectoryPoint(970, 221.199387701887), + TrajectoryPoint(980, 220.532626908188), + TrajectoryPoint(990, 219.86533514917), + TrajectoryPoint(1000, 219.197501684629), + TrajectoryPoint(1010, 218.529115668609), + TrajectoryPoint(1020, 217.86016614834), + TrajectoryPoint(1030, 217.190642063122), + TrajectoryPoint(1040, 216.520487434659), + TrajectoryPoint(1050, 215.849726555463), + TrajectoryPoint(1060, 215.178357982363), + TrajectoryPoint(1070, 214.506370319467), + TrajectoryPoint(1080, 213.833752055933), + TrajectoryPoint(1090, 213.160491564705), + TrajectoryPoint(1100, 212.486577101214), + TrajectoryPoint(1110, 211.811996802043), + TrajectoryPoint(1120, 211.13673868355), + TrajectoryPoint(1130, 210.460790640468), + TrajectoryPoint(1140, 209.784140444462), + TrajectoryPoint(1150, 209.106775742663), + TrajectoryPoint(1160, 208.428684056169), + TrajectoryPoint(1170, 207.749852778514), + TrajectoryPoint(1180, 207.070269174113), + TrajectoryPoint(1190, 206.389920376677), + TrajectoryPoint(1200, 205.7087933876), + TrajectoryPoint(1210, 205.026875074322), + TrajectoryPoint(1220, 204.34415216866), + TrajectoryPoint(1230, 203.660611265117), + TrajectoryPoint(1240, 202.976238819165), + TrajectoryPoint(1250, 202.291019684537), + TrajectoryPoint(1260, 201.604934397644), + TrajectoryPoint(1270, 200.917978945247), + TrajectoryPoint(1280, 200.230139317258), + TrajectoryPoint(1290, 199.541401356063), + TrajectoryPoint(1300, 198.851750754696), + TrajectoryPoint(1310, 198.161173054968), + TrajectoryPoint(1320, 197.469651093697), + TrajectoryPoint(1330, 196.777161436794), + TrajectoryPoint(1340, 196.083696748141), + TrajectoryPoint(1350, 195.389241832702), + TrajectoryPoint(1360, 194.693781333652), + TrajectoryPoint(1370, 193.997299730282), + TrajectoryPoint(1380, 193.299781335887), + TrajectoryPoint(1390, 192.601210295605), + TrajectoryPoint(1400, 191.901570584236), + TrajectoryPoint(1410, 191.200846004012), + TrajectoryPoint(1420, 190.499020182346), + TrajectoryPoint(1430, 189.79607656953), + TrajectoryPoint(1440, 189.091998436406), + TrajectoryPoint(1450, 188.38676887199), + TrajectoryPoint(1460, 187.680370781063), + TrajectoryPoint(1470, 186.972786881714), + TrajectoryPoint(1480, 186.263999702848), + TrajectoryPoint(1490, 185.553991581642), + TrajectoryPoint(1500, 184.842744660964), + TrajectoryPoint(1510, 184.130240886744), + TrajectoryPoint(1520, 183.416449069571), + TrajectoryPoint(1530, 182.701274237962), + TrajectoryPoint(1540, 181.984781033213), + TrajectoryPoint(1550, 181.266950449524), + TrajectoryPoint(1560, 180.54776326863), + TrajectoryPoint(1570, 179.82720005682), + TrajectoryPoint(1580, 179.105241161914), + TrajectoryPoint(1590, 178.381866710166), + TrajectoryPoint(1600, 177.657056603121), + TrajectoryPoint(1610, 176.930787350821), + TrajectoryPoint(1620, 176.20288792369), + TrajectoryPoint(1630, 175.47348365584), + TrajectoryPoint(1640, 174.742553363391), + TrajectoryPoint(1650, 174.010075618963), + TrajectoryPoint(1660, 173.27602874809), + TrajectoryPoint(1670, 172.540390825568), + TrajectoryPoint(1680, 171.803100147764), + TrajectoryPoint(1690, 171.064006183184), + TrajectoryPoint(1700, 170.323245144399), + TrajectoryPoint(1710, 169.580793894391), + TrajectoryPoint(1720, 168.836629023431), + TrajectoryPoint(1730, 168.090726844893), + TrajectoryPoint(1740, 167.3429233275), + TrajectoryPoint(1750, 166.593217473833), + TrajectoryPoint(1760, 165.84169170131), + TrajectoryPoint(1770, 165.088320983845), + TrajectoryPoint(1780, 164.333079993209), + TrajectoryPoint(1790, 163.575739572046), + TrajectoryPoint(1800, 162.816377543151), + TrajectoryPoint(1810, 162.055056491904), + TrajectoryPoint(1820, 161.291749626964), + TrajectoryPoint(1830, 160.526307141909), + TrajectoryPoint(1840, 159.758603249157), + TrajectoryPoint(1850, 158.988819327081), + TrajectoryPoint(1860, 158.216927007504), + TrajectoryPoint(1870, 157.442726327146), + TrajectoryPoint(1880, 156.666142391393), + TrajectoryPoint(1890, 155.887349946125), + TrajectoryPoint(1900, 155.106318920254), + TrajectoryPoint(1910, 154.322651560624), + TrajectoryPoint(1920, 153.536614247997), + TrajectoryPoint(1930, 152.74823186829), + TrajectoryPoint(1940, 151.957218529703), + TrajectoryPoint(1950, 151.163573380709), + TrajectoryPoint(1960, 150.367471324249), + TrajectoryPoint(1970, 149.568650017007), + TrajectoryPoint(1980, 148.767014642972), + TrajectoryPoint(1990, 147.962804812621), + TrajectoryPoint(2000, 147.15568345995), + TrajectoryPoint(2010, 146.345654750718), + TrajectoryPoint(2020, 145.532927941512), + TrajectoryPoint(2030, 144.716982300626), + TrajectoryPoint(2040, 143.898135002593), + TrajectoryPoint(2050, 143.076320503308), + TrajectoryPoint(2060, 142.251130820992), + TrajectoryPoint(2070, 141.423015983168), + TrajectoryPoint(2080, 140.59141757117), + TrajectoryPoint(2090, 139.75662848236), + TrajectoryPoint(2100, 138.918474203177), + TrajectoryPoint(2110, 138.076765947777), + TrajectoryPoint(2120, 137.231755192692), + TrajectoryPoint(2130, 136.382872377543), + TrajectoryPoint(2140, 135.530689198789), + TrajectoryPoint(2150, 134.674365382645), + TrajectoryPoint(2160, 133.814641738985), + TrajectoryPoint(2170, 132.950634704476), + TrajectoryPoint(2180, 132.08307195848), + TrajectoryPoint(2190, 131.211040621662), + TrajectoryPoint(2200, 130.335277619677), + TrajectoryPoint(2210, 129.454912237195), + TrajectoryPoint(2220, 128.570541169391), + TrajectoryPoint(2230, 127.681545635994), + TrajectoryPoint(2240, 126.788159368973), + TrajectoryPoint(2250, 125.890201902086), + TrajectoryPoint(2260, 124.987371615836), + TrajectoryPoint(2270, 124.080023704841), + TrajectoryPoint(2280, 123.167378805519), + TrajectoryPoint(2290, 122.249880122997), + TrajectoryPoint(2300, 121.327340922214), + TrajectoryPoint(2310, 120.399200018403), + TrajectoryPoint(2320, 119.465870521575), + TrajectoryPoint(2330, 118.527072728175), + TrajectoryPoint(2340, 117.582286711512), + TrajectoryPoint(2350, 116.631854768689), + TrajectoryPoint(2360, 115.675609286581), + TrajectoryPoint(2370, 114.712953247704), + TrajectoryPoint(2380, 113.744025685441), + TrajectoryPoint(2390, 112.76876318555), + TrajectoryPoint(2400, 111.786973049757), + TrajectoryPoint(2410, 110.798220769624), + TrajectoryPoint(2420, 109.802358721198), + TrajectoryPoint(2430, 108.799372730605), + TrajectoryPoint(2440, 107.789040597536), + TrajectoryPoint(2450, 106.771131416532), + TrajectoryPoint(2460, 105.745405163731), + TrajectoryPoint(2470, 104.711612259198), + TrajectoryPoint(2480, 103.669371974665), + TrajectoryPoint(2490, 102.618512829381), + TrajectoryPoint(2500, 101.558820235446), + TrajectoryPoint(2510, 100.490004430682), + TrajectoryPoint(2520, 99.4117636581828), + TrajectoryPoint(2530, 98.3237835547576), + TrajectoryPoint(2540, 97.2257365010637), + TrajectoryPoint(2550, 96.1172809306365), + TrajectoryPoint(2560, 94.9979176500855), + TrajectoryPoint(2570, 93.8672579390628), + TrajectoryPoint(2580, 92.7250001491128), + TrajectoryPoint(2590, 91.570734269261), + TrajectoryPoint(2600, 90.4040318416731), + TrajectoryPoint(2610, 89.2244449267843), + TrajectoryPoint(2620, 88.0310404503353), + TrajectoryPoint(2630, 86.8234576653431), + TrajectoryPoint(2640, 85.6014097885444), + TrajectoryPoint(2650, 84.363978090251), + TrajectoryPoint(2660, 83.1102138634812), + TrajectoryPoint(2670, 81.8401364766352), + TrajectoryPoint(2680, 80.5518927124763), + TrajectoryPoint(2690, 79.2457115990299), + TrajectoryPoint(2700, 77.9196371128033), + TrajectoryPoint(2710, 76.573732759094), + TrajectoryPoint(2720, 75.2057233651619), + TrajectoryPoint(2730, 73.8152548757506), + TrajectoryPoint(2740, 72.4010227547454), + TrajectoryPoint(2750, 70.9610830582135), + TrajectoryPoint(2760, 69.4939361166712), + TrajectoryPoint(2770, 67.9980807451113), + TrajectoryPoint(2780, 66.4715153925865), + TrajectoryPoint(2790, 64.912053064619), + TrajectoryPoint(2800, 63.317299554836), + TrajectoryPoint(2810, 61.6846285279769), + TrajectoryPoint(2820, 60.0100571541484), + TrajectoryPoint(2830, 58.2910018887725), + TrajectoryPoint(2840, 56.5233495287609), + TrajectoryPoint(2850, 54.7016897775644), + TrajectoryPoint(2860, 52.820900682815), + TrajectoryPoint(2870, 50.8745781240896), + TrajectoryPoint(2880, 48.8545870427998), + TrajectoryPoint(2890, 46.7514092908934), + TrajectoryPoint(2900, 44.5538381765167), + TrajectoryPoint(2910, 42.2457768061917), + TrajectoryPoint(2920, 39.8094484551715), + TrajectoryPoint(2930, 37.2190632386811), + TrajectoryPoint(2940, 34.4404811909898), + TrajectoryPoint(2950, 31.4227198930438), + TrajectoryPoint(2960, 28.0903045043538), + TrajectoryPoint(2970, 24.3120553901285), + TrajectoryPoint(2980, 19.8382142735135), + TrajectoryPoint(2990, 14.0168778835745), + TrajectoryPoint(3000, 0), +}; +TrajectoryPoint t10_closed[] = { + TrajectoryPoint(0, 284.217060865029), + TrajectoryPoint(10, 283.558695560262), + TrajectoryPoint(20, 282.901066213715), + TrajectoryPoint(30, 282.2438920452), + TrajectoryPoint(40, 281.5871507165), + TrajectoryPoint(50, 280.931064826739), + TrajectoryPoint(60, 280.275356468001), + TrajectoryPoint(70, 279.62002174664), + TrajectoryPoint(80, 278.965182967075), + TrajectoryPoint(90, 278.310782098687), + TrajectoryPoint(100, 277.656712203669), + TrajectoryPoint(110, 277.00297036531), + TrajectoryPoint(120, 276.349727053556), + TrajectoryPoint(130, 275.696773837399), + TrajectoryPoint(140, 275.044105740489), + TrajectoryPoint(150, 274.391774243689), + TrajectoryPoint(160, 273.739797150309), + TrajectoryPoint(170, 273.088065832102), + TrajectoryPoint(180, 272.436574703862), + TrajectoryPoint(190, 271.785394728316), + TrajectoryPoint(200, 271.134468161814), + TrajectoryPoint(210, 270.483743941939), + TrajectoryPoint(220, 269.83321602705), + TrajectoryPoint(230, 269.182951775553), + TrajectoryPoint(240, 268.532870144488), + TrajectoryPoint(250, 267.88294840627), + TrajectoryPoint(260, 267.233180175921), + TrajectoryPoint(270, 266.583615875424), + TrajectoryPoint(280, 265.934182915387), + TrajectoryPoint(290, 265.284868387449), + TrajectoryPoint(300, 264.635665645574), + TrajectoryPoint(310, 263.986602948067), + TrajectoryPoint(320, 263.337630898988), + TrajectoryPoint(330, 262.688736784896), + TrajectoryPoint(340, 262.039913756836), + TrajectoryPoint(350, 261.391169480478), + TrajectoryPoint(360, 260.74247824232), + TrajectoryPoint(370, 260.093825341646), + TrajectoryPoint(380, 259.445203765819), + TrajectoryPoint(390, 258.79660792686), + TrajectoryPoint(400, 258.14802421407), + TrajectoryPoint(410, 257.499440052208), + TrajectoryPoint(420, 256.850848289447), + TrajectoryPoint(430, 256.202241613688), + TrajectoryPoint(440, 255.553598892973), + TrajectoryPoint(450, 254.904916872003), + TrajectoryPoint(460, 254.256189042771), + TrajectoryPoint(470, 253.60740798483), + TrajectoryPoint(480, 252.958559143628), + TrajectoryPoint(490, 252.309617722723), + TrajectoryPoint(500, 251.660592879102), + TrajectoryPoint(510, 251.011477083801), + TrajectoryPoint(520, 250.362262686695), + TrajectoryPoint(530, 249.7129267839), + TrajectoryPoint(540, 249.063448120732), + TrajectoryPoint(550, 248.413841239794), + TrajectoryPoint(560, 247.764098384764), + TrajectoryPoint(570, 247.114211692327), + TrajectoryPoint(580, 246.464161165948), + TrajectoryPoint(590, 245.813910110824), + TrajectoryPoint(600, 245.16348601726), + TrajectoryPoint(610, 244.51288090731), + TrajectoryPoint(620, 243.86208670485), + TrajectoryPoint(630, 243.211095239261), + TrajectoryPoint(640, 242.559851903875), + TrajectoryPoint(650, 241.908378169887), + TrajectoryPoint(660, 241.256678187504), + TrajectoryPoint(670, 240.604743656787), + TrajectoryPoint(680, 239.95256618696), + TrajectoryPoint(690, 239.300137298627), + TrajectoryPoint(700, 238.647387836907), + TrajectoryPoint(710, 237.994361642452), + TrajectoryPoint(720, 237.341055048766), + TrajectoryPoint(730, 236.687459423309), + TrajectoryPoint(740, 236.033566045058), + TrajectoryPoint(750, 235.379366105661), + TrajectoryPoint(760, 234.724813395315), + TrajectoryPoint(770, 234.069902825872), + TrajectoryPoint(780, 233.414656510954), + TrajectoryPoint(790, 232.759065459875), + TrajectoryPoint(800, 232.10312059237), + TrajectoryPoint(810, 231.44681273902), + TrajectoryPoint(820, 230.790132641501), + TrajectoryPoint(830, 230.13304067002), + TrajectoryPoint(840, 229.475516977617), + TrajectoryPoint(850, 228.817591327444), + TrajectoryPoint(860, 228.159254242639), + TrajectoryPoint(870, 227.500496153216), + TrajectoryPoint(880, 226.841307395835), + TrajectoryPoint(890, 226.181678213455), + TrajectoryPoint(900, 225.521598754892), + TrajectoryPoint(910, 224.861044764806), + TrajectoryPoint(920, 224.199967444365), + TrajectoryPoint(930, 223.538409189616), + TrajectoryPoint(940, 222.876359887027), + TrajectoryPoint(950, 222.21380932328), + TrajectoryPoint(960, 221.550747184522), + TrajectoryPoint(970, 220.887163055561), + TrajectoryPoint(980, 220.223046418979), + TrajectoryPoint(990, 219.5583866542), + TrajectoryPoint(1000, 218.893173036488), + TrajectoryPoint(1010, 218.227394735901), + TrajectoryPoint(1020, 217.560986376641), + TrajectoryPoint(1030, 216.893988829051), + TrajectoryPoint(1040, 216.226394059999), + TrajectoryPoint(1050, 215.558190914844), + TrajectoryPoint(1060, 214.889368126915), + TrajectoryPoint(1070, 214.219914316298), + TrajectoryPoint(1080, 213.549817988594), + TrajectoryPoint(1090, 212.879067533634), + TrajectoryPoint(1100, 212.207651224154), + TrajectoryPoint(1110, 211.535557214442), + TrajectoryPoint(1120, 210.862773538947), + TrajectoryPoint(1130, 210.189288110859), + TrajectoryPoint(1140, 209.515088720655), + TrajectoryPoint(1150, 208.840163034618), + TrajectoryPoint(1160, 208.164498593327), + TrajectoryPoint(1170, 207.488082810117), + TrajectoryPoint(1180, 206.810902969514), + TrajectoryPoint(1190, 206.13292457024), + TrajectoryPoint(1200, 205.454153880327), + TrajectoryPoint(1210, 204.774582485683), + TrajectoryPoint(1220, 204.094197244072), + TrajectoryPoint(1230, 203.412984876468), + TrajectoryPoint(1240, 202.730931965383), + TrajectoryPoint(1250, 202.048024953167), + TrajectoryPoint(1260, 201.364250140279), + TrajectoryPoint(1270, 200.679593683532), + TrajectoryPoint(1280, 199.994041594307), + TrajectoryPoint(1290, 199.307579736745), + TrajectoryPoint(1300, 198.620193825903), + TrajectoryPoint(1310, 197.931869425885), + TrajectoryPoint(1320, 197.242591947943), + TrajectoryPoint(1330, 196.552346648553), + TrajectoryPoint(1340, 195.861118627451), + TrajectoryPoint(1350, 195.168892825646), + TrajectoryPoint(1360, 194.475654023398), + TrajectoryPoint(1370, 193.781386838169), + TrajectoryPoint(1380, 193.086060382431), + TrajectoryPoint(1390, 192.389651884636), + TrajectoryPoint(1400, 191.692163493074), + TrajectoryPoint(1410, 190.993579035609), + TrajectoryPoint(1420, 190.293882165467), + TrajectoryPoint(1430, 189.593056358935), + TrajectoryPoint(1440, 188.891084913025), + TrajectoryPoint(1450, 188.187950943096), + TrajectoryPoint(1460, 187.483637380433), + TrajectoryPoint(1470, 186.778126969793), + TrajectoryPoint(1480, 186.071402266903), + TrajectoryPoint(1490, 185.363445635912), + TrajectoryPoint(1500, 184.654239246804), + TrajectoryPoint(1510, 183.943765072763), + TrajectoryPoint(1520, 183.232004887492), + TrajectoryPoint(1530, 182.518940262478), + TrajectoryPoint(1540, 181.804451801445), + TrajectoryPoint(1550, 181.088606222286), + TrajectoryPoint(1560, 180.371393223427), + TrajectoryPoint(1570, 179.652793399783), + TrajectoryPoint(1580, 178.932787127878), + TrajectoryPoint(1590, 178.211354562753), + TrajectoryPoint(1600, 177.48847563481), + TrajectoryPoint(1610, 176.764130046598), + TrajectoryPoint(1620, 176.038258301008), + TrajectoryPoint(1630, 175.310751824504), + TrajectoryPoint(1640, 174.581708708596), + TrajectoryPoint(1650, 173.851107555573), + TrajectoryPoint(1660, 173.118926720661), + TrajectoryPoint(1670, 172.385144308363), + TrajectoryPoint(1680, 171.649738168726), + TrajectoryPoint(1690, 170.912556882719), + TrajectoryPoint(1700, 170.173618295166), + TrajectoryPoint(1710, 169.432979070706), + TrajectoryPoint(1720, 168.690615829777), + TrajectoryPoint(1730, 167.946504915895), + TrajectoryPoint(1740, 167.200598255468), + TrajectoryPoint(1750, 166.452661212771), + TrajectoryPoint(1760, 165.702893960156), + TrajectoryPoint(1770, 164.951271501907), + TrajectoryPoint(1780, 164.197768540106), + TrajectoryPoint(1790, 163.442269001612), + TrajectoryPoint(1800, 162.684622684623), + TrajectoryPoint(1810, 161.925007192098), + TrajectoryPoint(1820, 161.163395763042), + TrajectoryPoint(1830, 160.399749833423), + TrajectoryPoint(1840, 159.63371916964), + TrajectoryPoint(1850, 158.865598432802), + TrajectoryPoint(1860, 158.095359284961), + TrajectoryPoint(1870, 157.322910452589), + TrajectoryPoint(1880, 156.547957606193), + TrajectoryPoint(1890, 155.770786317144), + TrajectoryPoint(1900, 154.991366544342), + TrajectoryPoint(1910, 154.209406025209), + TrajectoryPoint(1920, 153.424958019643), + TrajectoryPoint(1930, 152.638155124884), + TrajectoryPoint(1940, 151.848815449002), + TrajectoryPoint(1950, 151.056727932878), + TrajectoryPoint(1960, 150.262173768664), + TrajectoryPoint(1970, 149.464992715667), + TrajectoryPoint(1980, 148.664883482326), + TrajectoryPoint(1990, 147.862190133666), + TrajectoryPoint(2000, 147.056675430956), + TrajectoryPoint(2010, 146.248141557878), + TrajectoryPoint(2020, 145.436900007296), + TrajectoryPoint(2030, 144.622527247612), + TrajectoryPoint(2040, 143.80514367317), + TrajectoryPoint(2050, 142.984880127093), + TrajectoryPoint(2060, 142.161132694795), + TrajectoryPoint(2070, 141.334450663163), + TrajectoryPoint(2080, 140.50436915139), + TrajectoryPoint(2090, 139.670991512361), + TrajectoryPoint(2100, 138.834331914379), + TrajectoryPoint(2110, 137.994013819464), + TrajectoryPoint(2120, 137.150475396111), + TrajectoryPoint(2130, 136.302961521506), + TrajectoryPoint(2140, 135.452153761484), + TrajectoryPoint(2150, 134.597252182141), + TrajectoryPoint(2160, 133.738867122969), + TrajectoryPoint(2170, 132.876275508058), + TrajectoryPoint(2180, 132.010030322447), + TrajectoryPoint(2190, 131.139391754783), + TrajectoryPoint(2200, 130.26499103446), + TrajectoryPoint(2210, 129.38593001286), + TrajectoryPoint(2220, 128.502917958065), + TrajectoryPoint(2230, 127.615186364543), + TrajectoryPoint(2240, 126.723136199075), + TrajectoryPoint(2250, 125.826421900187), + TrajectoryPoint(2260, 124.924904740617), + TrajectoryPoint(2270, 124.01885866196), + TrajectoryPoint(2280, 123.107424499922), + TrajectoryPoint(2290, 122.191204538836), + TrajectoryPoint(2300, 121.269855490042), + TrajectoryPoint(2310, 120.342970152429), + TrajectoryPoint(2320, 119.410884697565), + TrajectoryPoint(2330, 118.473244881224), + TrajectoryPoint(2340, 117.529679647516), + TrajectoryPoint(2350, 116.580456829175), + TrajectoryPoint(2360, 115.625408747032), + TrajectoryPoint(2370, 114.663867043354), + TrajectoryPoint(2380, 113.696113482846), + TrajectoryPoint(2390, 112.722013146543), + TrajectoryPoint(2400, 111.741373278759), + TrajectoryPoint(2410, 110.753691950393), + TrajectoryPoint(2420, 109.758956666518), + TrajectoryPoint(2430, 108.757085449398), + TrajectoryPoint(2440, 107.747856048974), + TrajectoryPoint(2450, 106.731037512227), + TrajectoryPoint(2460, 105.706389769855), + TrajectoryPoint(2470, 104.673663198538), + TrajectoryPoint(2480, 103.632416327513), + TrajectoryPoint(2490, 102.582599849262), + TrajectoryPoint(2500, 101.523937679523), + TrajectoryPoint(2510, 100.45614001903), + TrajectoryPoint(2520, 99.3789050756092), + TrajectoryPoint(2530, 98.291918452576), + TrajectoryPoint(2540, 97.1948524988287), + TrajectoryPoint(2550, 96.0873656178334), + TrajectoryPoint(2560, 94.9690114000573), + TrajectoryPoint(2570, 93.839294276825), + TrajectoryPoint(2580, 92.6979665407632), + TrajectoryPoint(2590, 91.5446181583213), + TrajectoryPoint(2600, 90.3788206505824), + TrajectoryPoint(2610, 89.200126058364), + TrajectoryPoint(2620, 88.0076480181356), + TrajectoryPoint(2630, 86.8009308364979), + TrajectoryPoint(2640, 85.5797358794279), + TrajectoryPoint(2650, 84.3431882112177), + TrajectoryPoint(2660, 83.0902498907466), + TrajectoryPoint(2670, 81.8209856585395), + TrajectoryPoint(2680, 80.5335826622994), + TrajectoryPoint(2690, 79.2281874436575), + TrajectoryPoint(2700, 77.9029243380736), + TrajectoryPoint(2710, 76.5578162836645), + TrajectoryPoint(2720, 75.1905506472505), + TrajectoryPoint(2730, 73.8008484018779), + TrajectoryPoint(2740, 72.3873670077783), + TrajectoryPoint(2750, 70.9481285090389), + TrajectoryPoint(2760, 69.4817016640765), + TrajectoryPoint(2770, 67.9865504917883), + TrajectoryPoint(2780, 66.4606732981375), + TrajectoryPoint(2790, 64.9018829529339), + TrajectoryPoint(2800, 63.3077851212815), + TrajectoryPoint(2810, 61.6757533464129), + TrajectoryPoint(2820, 60.0018306178938), + TrajectoryPoint(2830, 58.2833799834912), + TrajectoryPoint(2840, 56.5163392871054), + TrajectoryPoint(2850, 54.6952488430528), + TrajectoryPoint(2860, 52.8150333609928), + TrajectoryPoint(2870, 50.8692645074718), + TrajectoryPoint(2880, 48.8498068835772), + TrajectoryPoint(2890, 46.7471420238584), + TrajectoryPoint(2900, 44.5500629428049), + TrajectoryPoint(2910, 42.2424880308071), + TrajectoryPoint(2920, 39.8066219698814), + TrajectoryPoint(2930, 37.2166742547711), + TrajectoryPoint(2940, 34.4385163321078), + TrajectoryPoint(2950, 31.421150310798), + TrajectoryPoint(2960, 28.0891004816011), + TrajectoryPoint(2970, 24.3112016557051), + TrajectoryPoint(2980, 19.83767886765), + TrajectoryPoint(2990, 14.016630406453), + TrajectoryPoint(3000, 0), +}; +TrajectoryPoint t0_open[] = { + TrajectoryPoint(0, 521.120565192786), + TrajectoryPoint(10, 518.991801421389), + TrajectoryPoint(20, 516.856699928473), + TrajectoryPoint(30, 514.721598435556), + TrajectoryPoint(40, 512.572518503631), + TrajectoryPoint(50, 510.418971229153), + TrajectoryPoint(60, 508.26164242241), + TrajectoryPoint(70, 506.089240058818), + TrajectoryPoint(80, 503.916837695226), + TrajectoryPoint(90, 501.731504222196), + TrajectoryPoint(100, 499.539825001482), + TrajectoryPoint(110, 497.344824136831), + TrajectoryPoint(120, 495.133433312379), + TrajectoryPoint(130, 492.922042487927), + TrajectoryPoint(140, 490.696668629275), + TrajectoryPoint(150, 488.46511793058), + TrajectoryPoint(160, 486.228493346599), + TrajectoryPoint(170, 483.976320405152), + TrajectoryPoint(180, 481.724147463705), + TrajectoryPoint(190, 479.454551687215), + TrajectoryPoint(200, 477.181279431688), + TrajectoryPoint(210, 474.898664539356), + TrajectoryPoint(220, 472.603800558107), + TrajectoryPoint(230, 470.307460055081), + TrajectoryPoint(240, 467.990495923824), + TrajectoryPoint(250, 465.673531792567), + TrajectoryPoint(260, 463.340095398418), + TrajectoryPoint(270, 461.000505970764), + TrajectoryPoint(280, 458.65127057735), + TrajectoryPoint(290, 456.288513235716), + TrajectoryPoint(300, 453.922631510944), + TrajectoryPoint(310, 451.536145375146), + TrajectoryPoint(320, 449.149659239347), + TrajectoryPoint(330, 446.741928299143), + TrajectoryPoint(340, 444.331133389775), + TrajectoryPoint(350, 441.904318252896), + TrajectoryPoint(360, 439.468614606361), + TrajectoryPoint(370, 437.021697763097), + TrajectoryPoint(380, 434.560464494884), + TrajectoryPoint(390, 432.092371295971), + TrajectoryPoint(400, 429.604965608517), + TrajectoryPoint(410, 427.114560602746), + TrajectoryPoint(420, 424.600316733894), + TrajectoryPoint(430, 422.086072865043), + TrajectoryPoint(440, 419.544627833795), + TrajectoryPoint(450, 417.002855941526), + TrajectoryPoint(460, 414.435914616953), + TrajectoryPoint(470, 411.865899595707), + TrajectoryPoint(480, 409.27209270257), + TrajectoryPoint(490, 406.673092926047), + TrajectoryPoint(500, 404.050971343853), + TrajectoryPoint(510, 401.422217328759), + TrajectoryPoint(520, 398.770246671263), + TrajectoryPoint(530, 396.110939655939), + TrajectoryPoint(540, 393.427494412086), + TrajectoryPoint(550, 390.736804843449), + TrajectoryPoint(560, 388.020162038425), + TrajectoryPoint(570, 385.297227960018), + TrajectoryPoint(580, 382.545560290619), + TrajectoryPoint(590, 379.789485623912), + TrajectoryPoint(600, 377.000854017401), + TrajectoryPoint(610, 374.208242129888), + TrajectoryPoint(620, 371.383052267733), + TrajectoryPoint(630, 368.5502399551), + TrajectoryPoint(640, 365.688997562073), + TrajectoryPoint(650, 362.813701394117), + TrajectoryPoint(660, 359.915354262726), + TrajectoryPoint(670, 357.32260718315), + TrajectoryPoint(680, 354.958253640362), + TrajectoryPoint(690, 352.623468030845), + TrajectoryPoint(700, 350.297592787733), + TrajectoryPoint(710, 348.008085164846), + TrajectoryPoint(720, 345.729189579957), + TrajectoryPoint(730, 343.476843175116), + TrajectoryPoint(740, 341.245222151474), + TrajectoryPoint(750, 339.029661821691), + TrajectoryPoint(760, 336.845324052314), + TrajectoryPoint(770, 334.672333471892), + TrajectoryPoint(780, 332.52875604073), + TrajectoryPoint(790, 330.403023144118), + TrajectoryPoint(800, 328.29446065421), + TrajectoryPoint(810, 326.215403681309), + TrajectoryPoint(820, 324.148792210556), + TrajectoryPoint(830, 322.107979412238), + TrajectoryPoint(840, 320.087229071478), + TrajectoryPoint(850, 318.079569910648), + TrajectoryPoint(860, 316.103191352049), + TrajectoryPoint(870, 314.140204405162), + TrajectoryPoint(880, 312.194737518311), + TrajectoryPoint(890, 310.275270850366), + TrajectoryPoint(900, 308.368969789847), + TrajectoryPoint(910, 306.482665571424), + TrajectoryPoint(920, 304.61828770851), + TrajectoryPoint(930, 302.767156573424), + TrajectoryPoint(940, 300.936474144206), + TrajectoryPoint(950, 299.125501207428), + TrajectoryPoint(960, 297.327684699286), + TrajectoryPoint(970, 295.549153942853), + TrajectoryPoint(980, 293.78962393444), + TrajectoryPoint(990, 292.043019854867), + TrajectoryPoint(1000, 290.313291077487), + TrajectoryPoint(1010, 288.603045890991), + TrajectoryPoint(1020, 286.905386012368), + TrajectoryPoint(1030, 285.221260980693), + TrajectoryPoint(1040, 283.558017060944), + TrajectoryPoint(1050, 281.906934764266), + TrajectoryPoint(1060, 280.268135081471), + TrajectoryPoint(1070, 278.646790967731), + TrajectoryPoint(1080, 277.039875858583), + TrajectoryPoint(1090, 275.444715192965), + TrajectoryPoint(1100, 273.861733860144), + TrajectoryPoint(1110, 272.296574550798), + TrajectoryPoint(1120, 270.742609805965), + TrajectoryPoint(1130, 269.19985418361), + TrajectoryPoint(1140, 267.66962154525), + TrajectoryPoint(1150, 266.154455581122), + TrajectoryPoint(1160, 264.64989672029), + TrajectoryPoint(1170, 263.155914598756), + TrajectoryPoint(1180, 261.673183373565), + TrajectoryPoint(1190, 260.204490577437), + TrajectoryPoint(1200, 258.745756034462), + TrajectoryPoint(1210, 257.296917860176), + TrajectoryPoint(1220, 255.857900297539), + TrajectoryPoint(1230, 254.43125615693), + TrajectoryPoint(1240, 253.014818390154), + TrajectoryPoint(1250, 251.607577269978), + TrajectoryPoint(1260, 250.209439259995), + TrajectoryPoint(1270, 248.820301546194), + TrajectoryPoint(1280, 247.44248963384), + TrajectoryPoint(1290, 246.073433747702), + TrajectoryPoint(1300, 244.712771291403), + TrajectoryPoint(1310, 243.360391050712), + TrajectoryPoint(1320, 242.016175807355), + TrajectoryPoint(1330, 240.680921280826), + TrajectoryPoint(1340, 239.354508653423), + TrajectoryPoint(1350, 238.03568428165), + TrajectoryPoint(1360, 236.724328683521), + TrajectoryPoint(1370, 235.420318649447), + TrajectoryPoint(1380, 234.123527798845), + TrajectoryPoint(1390, 232.833911366531), + TrajectoryPoint(1400, 231.552442971861), + TrajectoryPoint(1410, 230.277658448206), + TrajectoryPoint(1420, 229.009433992513), + TrajectoryPoint(1430, 227.747644022401), + TrajectoryPoint(1440, 226.492161534326), + TrajectoryPoint(1450, 225.242858427892), + TrajectoryPoint(1460, 223.999605798976), + TrajectoryPoint(1470, 222.762274204143), + TrajectoryPoint(1480, 221.531307239179), + TrajectoryPoint(1490, 220.30603760666), + TrajectoryPoint(1500, 219.086218595482), + TrajectoryPoint(1510, 217.871727115404), + TrajectoryPoint(1520, 216.662440085799), + TrajectoryPoint(1530, 215.458234599419), + TrajectoryPoint(1540, 214.25898806858), + TrajectoryPoint(1550, 213.064578355244), + TrajectoryPoint(1560, 211.874883886333), + TrajectoryPoint(1570, 210.689783755549), + TrajectoryPoint(1580, 209.509157812835), + TrajectoryPoint(1590, 208.332886742547), + TrajectoryPoint(1600, 207.160852131313), + TrajectoryPoint(1610, 205.992936526466), + TrajectoryPoint(1620, 204.82902348589), + TrajectoryPoint(1630, 203.66899762003), + TrajectoryPoint(1640, 202.512744626749), + TrajectoryPoint(1650, 201.360151319693), + TrajectoryPoint(1660, 200.211105650727), + TrajectoryPoint(1670, 199.065496726992), + TrajectoryPoint(1680, 197.923214823063), + TrajectoryPoint(1690, 196.784151388666), + TrajectoryPoint(1700, 195.648199052364), + TrajectoryPoint(1710, 194.515251621588), + TrajectoryPoint(1720, 193.385204079349), + TrajectoryPoint(1730, 192.257952577966), + TrajectoryPoint(1740, 191.133394430078), + TrajectoryPoint(1750, 190.011428097218), + TrajectoryPoint(1760, 188.891953176176), + TrajectoryPoint(1770, 187.774870383385), + TrajectoryPoint(1780, 186.660081537517), + TrajectoryPoint(1790, 185.547489540483), + TrajectoryPoint(1800, 184.436998356994), + TrajectoryPoint(1810, 183.328512992838), + TrajectoryPoint(1820, 182.221939472019), + TrajectoryPoint(1830, 181.117184812867), + TrajectoryPoint(1840, 180.014157003249), + TrajectoryPoint(1850, 178.912876309929), + TrajectoryPoint(1860, 177.813165516071), + TrajectoryPoint(1870, 176.714900564586), + TrajectoryPoint(1880, 175.617992382794), + TrajectoryPoint(1890, 174.522352762002), + TrajectoryPoint(1900, 173.427894326819), + TrajectoryPoint(1910, 172.334530504245), + TrajectoryPoint(1920, 171.242235376914), + TrajectoryPoint(1930, 170.15090643089), + TrajectoryPoint(1940, 169.060400475654), + TrajectoryPoint(1950, 167.9706333759), + TrajectoryPoint(1960, 166.881521654137), + TrajectoryPoint(1970, 165.79298977618), + TrajectoryPoint(1980, 164.705000214645), + TrajectoryPoint(1990, 163.617399304431), + TrajectoryPoint(2000, 162.530105500651), + TrajectoryPoint(2010, 161.4430377559), + TrajectoryPoint(2020, 160.356121815525), + TrajectoryPoint(2030, 159.2692565601), + TrajectoryPoint(2040, 158.182354078541), + TrajectoryPoint(2050, 157.095334648252), + TrajectoryPoint(2060, 156.008081048174), + TrajectoryPoint(2070, 154.920518336546), + TrajectoryPoint(2080, 153.832576317611), + TrajectoryPoint(2090, 152.744142735198), + TrajectoryPoint(2100, 151.655084007351), + TrajectoryPoint(2110, 150.565382905551), + TrajectoryPoint(2120, 149.47492700139), + TrajectoryPoint(2130, 148.383524606988), + TrajectoryPoint(2140, 147.291215147378), + TrajectoryPoint(2150, 146.197840193004), + TrajectoryPoint(2160, 145.103232347324), + TrajectoryPoint(2170, 144.007450084582), + TrajectoryPoint(2180, 142.910205735737), + TrajectoryPoint(2190, 141.811513658577), + TrajectoryPoint(2200, 140.711292709606), + TrajectoryPoint(2210, 139.60925748977), + TrajectoryPoint(2220, 138.505582028893), + TrajectoryPoint(2230, 137.39979176046), + TrajectoryPoint(2240, 136.292130696626), + TrajectoryPoint(2250, 135.182188878635), + TrajectoryPoint(2260, 134.070082184691), + TrajectoryPoint(2270, 132.955482203964), + TrajectoryPoint(2280, 131.838456624828), + TrajectoryPoint(2290, 130.718664344809), + TrajectoryPoint(2300, 129.596232286281), + TrajectoryPoint(2310, 128.47068504852), + TrajectoryPoint(2320, 127.342320573594), + TrajectoryPoint(2330, 126.210448699626), + TrajectoryPoint(2340, 125.07542124522), + TrajectoryPoint(2350, 123.936811433677), + TrajectoryPoint(2360, 122.794476554548), + TrajectoryPoint(2370, 121.648502556774), + TrajectoryPoint(2380, 120.498256924178), + TrajectoryPoint(2390, 119.34392487721), + TrajectoryPoint(2400, 118.185388743453), + TrajectoryPoint(2410, 117.02204647557), + TrajectoryPoint(2420, 115.854002602854), + TrajectoryPoint(2430, 114.681125989036), + TrajectoryPoint(2440, 113.503121022244), + TrajectoryPoint(2450, 112.319477354966), + TrajectoryPoint(2460, 111.130302169627), + TrajectoryPoint(2470, 109.935339654805), + TrajectoryPoint(2480, 108.734322728103), + TrajectoryPoint(2490, 107.526972585311), + TrajectoryPoint(2500, 106.312764906374), + TrajectoryPoint(2510, 105.091641408405), + TrajectoryPoint(2520, 103.863309280202), + TrajectoryPoint(2530, 102.627441654131), + TrajectoryPoint(2540, 101.383697233385), + TrajectoryPoint(2550, 100.13171959447), + TrajectoryPoint(2560, 98.8711364376235), + TrajectoryPoint(2570, 97.601558781944), + TrajectoryPoint(2580, 96.3225801016818), + TrajectoryPoint(2590, 95.0337753997379), + TrajectoryPoint(2600, 93.7347002140031), + TrajectoryPoint(2610, 92.4248001314896), + TrajectoryPoint(2620, 91.1033239911738), + TrajectoryPoint(2630, 89.77002096111), + TrajectoryPoint(2640, 88.4243499314687), + TrajectoryPoint(2650, 87.0657436983054), + TrajectoryPoint(2660, 85.6928954416259), + TrajectoryPoint(2670, 84.3056384957582), + TrajectoryPoint(2680, 82.9033983924275), + TrajectoryPoint(2690, 81.4843217486486), + TrajectoryPoint(2700, 80.0487023349478), + TrajectoryPoint(2710, 78.5944468068267), + TrajectoryPoint(2720, 77.1215852209347), + TrajectoryPoint(2730, 75.6276292144849), + TrajectoryPoint(2740, 74.1123357025503), + TrajectoryPoint(2750, 72.5741737086814), + TrajectoryPoint(2760, 71.0108143169275), + TrajectoryPoint(2770, 69.4210851134829), + TrajectoryPoint(2780, 67.8030655923401), + TrajectoryPoint(2790, 66.1545480056578), + TrajectoryPoint(2800, 64.4731102141604), + TrajectoryPoint(2810, 62.7560900611626), + TrajectoryPoint(2820, 61.0005451401103), + TrajectoryPoint(2830, 59.201938261766), + TrajectoryPoint(2840, 57.357500451166), + TrajectoryPoint(2850, 55.4618551497509), + TrajectoryPoint(2860, 53.5101472407736), + TrajectoryPoint(2870, 51.4945963227155), + TrajectoryPoint(2880, 49.4084336376015), + TrajectoryPoint(2890, 47.2421692640004), + TrajectoryPoint(2900, 44.9833942277677), + TrajectoryPoint(2910, 42.6180522003692), + TrajectoryPoint(2920, 40.1266741856633), + TrajectoryPoint(2930, 37.4847526201682), + TrajectoryPoint(2940, 34.6569277185914), + TrajectoryPoint(2950, 31.5938499317644), + TrajectoryPoint(2960, 28.2196614984515), + TrajectoryPoint(2970, 24.4030107389703), + TrajectoryPoint(2980, 19.8945111716972), + TrajectoryPoint(2990, 14.0425210341658), + TrajectoryPoint(3000, 0), +}; +TrajectoryPoint t1_open[] = { + TrajectoryPoint(0, 516.075462318736), + TrajectoryPoint(10, 513.951767963176), + TrajectoryPoint(20, 511.816892070643), + TrajectoryPoint(30, 509.681943626028), + TrajectoryPoint(40, 507.538901983707), + TrajectoryPoint(50, 505.385455032326), + TrajectoryPoint(60, 503.232008080945), + TrajectoryPoint(70, 501.061378463031), + TrajectoryPoint(80, 498.889022744504), + TrajectoryPoint(90, 496.708796715245), + TrajectoryPoint(100, 494.517109465635), + TrajectoryPoint(110, 492.325422216025), + TrajectoryPoint(120, 490.115298470141), + TrajectoryPoint(130, 487.903843901604), + TrajectoryPoint(140, 485.682577838891), + TrajectoryPoint(150, 483.450906592059), + TrajectoryPoint(160, 481.217891298104), + TrajectoryPoint(170, 478.965539865484), + TrajectoryPoint(180, 476.713188432863), + TrajectoryPoint(190, 474.446625985688), + TrajectoryPoint(200, 472.173116104199), + TrajectoryPoint(210, 469.892997363922), + TrajectoryPoint(220, 467.597835374581), + TrajectoryPoint(230, 465.30267338524), + TrajectoryPoint(240, 462.986110026064), + TrajectoryPoint(250, 460.668786198653), + TrajectoryPoint(260, 458.336647684613), + TrajectoryPoint(270, 455.996635505007), + TrajectoryPoint(280, 453.648096700647), + TrajectoryPoint(290, 451.284852118303), + TrajectoryPoint(300, 448.919042817371), + TrajectoryPoint(310, 446.532003450262), + TrajectoryPoint(320, 444.144964083153), + TrajectoryPoint(330, 441.736589903981), + TrajectoryPoint(340, 439.32517419807), + TrajectoryPoint(350, 436.897041016659), + TrajectoryPoint(360, 434.460647356738), + TrajectoryPoint(370, 432.011711330841), + TrajectoryPoint(380, 429.549717099335), + TrajectoryPoint(390, 427.078875971681), + TrajectoryPoint(400, 424.590636551708), + TrajectoryPoint(410, 422.096725905539), + TrajectoryPoint(420, 419.58157362422), + TrajectoryPoint(430, 417.06336285287), + TrajectoryPoint(440, 414.520605860541), + TrajectoryPoint(450, 411.976793825682), + TrajectoryPoint(460, 409.405714906275), + TrajectoryPoint(470, 406.834635986868), + TrajectoryPoint(480, 404.234780564351), + TrajectoryPoint(490, 401.634635871822), + TrajectoryPoint(500, 399.005574400743), + TrajectoryPoint(510, 396.375592115945), + TrajectoryPoint(520, 393.715752860396), + TrajectoryPoint(530, 391.054941904306), + TrajectoryPoint(540, 388.36284984906), + TrajectoryPoint(550, 385.668696431895), + TrajectoryPoint(560, 382.944268732136), + TrajectoryPoint(570, 380.214935999433), + TrajectoryPoint(580, 377.457273696392), + TrajectoryPoint(590, 374.690812395256), + TrajectoryPoint(600, 371.898980414652), + TrajectoryPoint(610, 369.093320764613), + TrajectoryPoint(620, 366.266345946983), + TrajectoryPoint(630, 363.419288809556), + TrajectoryPoint(640, 360.556157804582), + TrajectoryPoint(650, 358.07750540975), + TrajectoryPoint(660, 355.73159501216), + TrajectoryPoint(670, 353.420537615106), + TrajectoryPoint(680, 351.117950070915), + TrajectoryPoint(690, 348.845037965951), + TrajectoryPoint(700, 346.588068491621), + TrajectoryPoint(710, 344.351469128974), + TrajectoryPoint(720, 342.14045224522), + TrajectoryPoint(730, 339.939902913167), + TrajectoryPoint(740, 337.774834895347), + TrajectoryPoint(750, 335.620656133682), + TrajectoryPoint(760, 333.490583670304), + TrajectoryPoint(770, 331.382458545804), + TrajectoryPoint(780, 329.286751272891), + TrajectoryPoint(790, 327.224163668299), + TrajectoryPoint(800, 325.173510509683), + TrajectoryPoint(810, 323.144389118234), + TrajectoryPoint(820, 321.138552238337), + TrajectoryPoint(830, 319.145310388317), + TrajectoryPoint(840, 317.179625528437), + TrajectoryPoint(850, 315.23011166703), + TrajectoryPoint(860, 313.294896069763), + TrajectoryPoint(870, 311.388026542861), + TrajectoryPoint(880, 309.49388803068), + TrajectoryPoint(890, 307.617051528777), + TrajectoryPoint(900, 305.76405865343), + TrajectoryPoint(910, 303.923914343046), + TrajectoryPoint(920, 302.102036253489), + TrajectoryPoint(930, 300.301366608351), + TrajectoryPoint(940, 298.513494384318), + TrajectoryPoint(950, 296.743208344859), + TrajectoryPoint(960, 294.993026758467), + TrajectoryPoint(970, 293.255451626422), + TrajectoryPoint(980, 291.533496983133), + TrajectoryPoint(990, 289.831765152282), + TrajectoryPoint(1000, 288.142337500014), + TrajectoryPoint(1010, 286.465592126747), + TrajectoryPoint(1020, 284.810137342228), + TrajectoryPoint(1030, 283.166599236242), + TrajectoryPoint(1040, 281.535109007165), + TrajectoryPoint(1050, 279.92067141799), + TrajectoryPoint(1060, 278.320710759617), + TrajectoryPoint(1070, 276.732302864371), + TrajectoryPoint(1080, 275.155978122154), + TrajectoryPoint(1090, 273.597271552795), + TrajectoryPoint(1100, 272.04958778684), + TrajectoryPoint(1110, 270.512950582499), + TrajectoryPoint(1120, 268.989078767115), + TrajectoryPoint(1130, 267.479797155222), + TrajectoryPoint(1140, 265.980986119023), + TrajectoryPoint(1150, 264.49262359021), + TrajectoryPoint(1160, 263.01603403852), + TrajectoryPoint(1170, 261.552781767992), + TrajectoryPoint(1180, 260.099381772819), + TrajectoryPoint(1190, 258.655779451436), + TrajectoryPoint(1200, 257.221906135797), + TrajectoryPoint(1210, 255.801202718471), + TrajectoryPoint(1220, 254.389787356041), + TrajectoryPoint(1230, 252.987495024856), + TrajectoryPoint(1240, 251.594238264859), + TrajectoryPoint(1250, 250.210684749988), + TrajectoryPoint(1260, 248.837925929596), + TrajectoryPoint(1270, 247.473612391355), + TrajectoryPoint(1280, 246.117644929749), + TrajectoryPoint(1290, 244.769917286544), + TrajectoryPoint(1300, 243.430327214359), + TrajectoryPoint(1310, 242.100814009726), + TrajectoryPoint(1320, 240.778973698845), + TrajectoryPoint(1330, 239.464695304326), + TrajectoryPoint(1340, 238.157863332843), + TrajectoryPoint(1350, 236.858358388465), + TrajectoryPoint(1360, 235.566057733331), + TrajectoryPoint(1370, 234.282167267295), + TrajectoryPoint(1380, 233.005178406709), + TrajectoryPoint(1390, 231.734866945997), + TrajectoryPoint(1400, 230.471112123031), + TrajectoryPoint(1410, 229.213791255182), + TrajectoryPoint(1420, 227.962780102539), + TrajectoryPoint(1430, 226.717953197416), + TrajectoryPoint(1440, 225.47953716872), + TrajectoryPoint(1450, 224.247490434176), + TrajectoryPoint(1460, 223.021150580813), + TrajectoryPoint(1470, 221.800397266915), + TrajectoryPoint(1480, 220.585109669361), + TrajectoryPoint(1490, 219.375166692189), + TrajectoryPoint(1500, 218.170447154204), + TrajectoryPoint(1510, 216.970829957341), + TrajectoryPoint(1520, 215.776194237339), + TrajectoryPoint(1530, 214.5864194982), + TrajectoryPoint(1540, 213.401385731773), + TrajectoryPoint(1550, 212.220973523707), + TrajectoryPoint(1560, 211.045276051436), + TrajectoryPoint(1570, 209.873975026309), + TrajectoryPoint(1580, 208.706899596091), + TrajectoryPoint(1590, 207.543937230756), + TrajectoryPoint(1600, 206.384976126029), + TrajectoryPoint(1610, 205.22990526409), + TrajectoryPoint(1620, 204.078614465974), + TrajectoryPoint(1630, 202.930994436394), + TrajectoryPoint(1640, 201.78693680162), + TrajectoryPoint(1650, 200.646334141034), + TrajectoryPoint(1660, 199.509080012902), + TrajectoryPoint(1670, 198.375068974869), + TrajectoryPoint(1680, 197.244196599655), + TrajectoryPoint(1690, 196.116359486365), + TrajectoryPoint(1700, 194.991455267815), + TrajectoryPoint(1710, 193.869382614221), + TrajectoryPoint(1720, 192.750041233603), + TrajectoryPoint(1730, 191.633331869182), + TrajectoryPoint(1740, 190.51915629406), + TrajectoryPoint(1750, 189.407417303433), + TrajectoryPoint(1760, 188.298062371199), + TrajectoryPoint(1770, 187.191030802736), + TrajectoryPoint(1780, 186.086149070392), + TrajectoryPoint(1790, 184.983322842924), + TrajectoryPoint(1800, 183.882458800182), + TrajectoryPoint(1810, 182.783464610757), + TrajectoryPoint(1820, 181.686248908668), + TrajectoryPoint(1830, 180.590721269201), + TrajectoryPoint(1840, 179.496792183993), + TrajectoryPoint(1850, 178.404373035445), + TrajectoryPoint(1860, 177.313376070553), + TrajectoryPoint(1870, 176.223810878003), + TrajectoryPoint(1880, 175.135518140618), + TrajectoryPoint(1890, 174.048376618935), + TrajectoryPoint(1900, 172.962301175474), + TrajectoryPoint(1910, 171.877207420869), + TrajectoryPoint(1920, 170.793011683607), + TrajectoryPoint(1930, 169.709650613285), + TrajectoryPoint(1940, 168.627087534098), + TrajectoryPoint(1950, 167.545158183061), + TrajectoryPoint(1960, 166.463781035553), + TrajectoryPoint(1970, 165.382875141106), + TrajectoryPoint(1980, 164.30236536343), + TrajectoryPoint(1990, 163.222195645432), + TrajectoryPoint(2000, 162.142236964217), + TrajectoryPoint(2010, 161.062409998055), + TrajectoryPoint(2020, 159.982635842776), + TrajectoryPoint(2030, 158.902821053688), + TrajectoryPoint(2040, 157.822878454364), + TrajectoryPoint(2050, 156.74273093052), + TrajectoryPoint(2060, 155.662293848312), + TrajectoryPoint(2070, 154.581422101799), + TrajectoryPoint(2080, 153.500087477817), + TrajectoryPoint(2090, 152.418212441148), + TrajectoryPoint(2100, 151.335617084348), + TrajectoryPoint(2110, 150.252270147482), + TrajectoryPoint(2120, 149.168123874255), + TrajectoryPoint(2130, 148.082960464206), + TrajectoryPoint(2140, 146.996762701771), + TrajectoryPoint(2150, 145.909504427634), + TrajectoryPoint(2160, 144.820868170309), + TrajectoryPoint(2170, 143.730965319885), + TrajectoryPoint(2180, 142.639636591109), + TrajectoryPoint(2190, 141.546670023277), + TrajectoryPoint(2200, 140.452189079909), + TrajectoryPoint(2210, 139.355768958293), + TrajectoryPoint(2220, 138.257602236553), + TrajectoryPoint(2230, 137.157375967441), + TrajectoryPoint(2240, 136.055079320287), + TrajectoryPoint(2250, 134.950567388492), + TrajectoryPoint(2260, 133.843684316085), + TrajectoryPoint(2270, 132.734380690456), + TrajectoryPoint(2280, 131.622441342454), + TrajectoryPoint(2290, 130.507812699109), + TrajectoryPoint(2300, 129.390332758933), + TrajectoryPoint(2310, 128.269817431044), + TrajectoryPoint(2320, 127.146296883748), + TrajectoryPoint(2330, 126.019303548196), + TrajectoryPoint(2340, 124.889118314658), + TrajectoryPoint(2350, 123.755131438307), + TrajectoryPoint(2360, 122.617509321186), + TrajectoryPoint(2370, 121.476109920764), + TrajectoryPoint(2380, 120.330373689998), + TrajectoryPoint(2390, 119.180566676227), + TrajectoryPoint(2400, 118.026428598958), + TrajectoryPoint(2410, 116.867398322719), + TrajectoryPoint(2420, 115.703693208571), + TrajectoryPoint(2430, 114.535095215592), + TrajectoryPoint(2440, 113.361155158109), + TrajectoryPoint(2450, 112.181665877777), + TrajectoryPoint(2460, 110.996585122804), + TrajectoryPoint(2470, 109.805656950286), + TrajectoryPoint(2480, 108.608614188462), + TrajectoryPoint(2490, 107.405050761812), + TrajectoryPoint(2500, 106.194675760476), + TrajectoryPoint(2510, 104.977345526093), + TrajectoryPoint(2520, 103.752746982078), + TrajectoryPoint(2530, 102.520553299366), + TrajectoryPoint(2540, 101.280423245652), + TrajectoryPoint(2550, 100.032000485686), + TrajectoryPoint(2560, 98.774912829721), + TrajectoryPoint(2570, 97.5087714268899), + TrajectoryPoint(2580, 96.2331698999251), + TrajectoryPoint(2590, 94.9476834172508), + TrajectoryPoint(2600, 93.6518676980616), + TrajectoryPoint(2610, 92.3452579455445), + TrajectoryPoint(2620, 91.0269579210489), + TrajectoryPoint(2630, 89.6967350865243), + TrajectoryPoint(2640, 88.3540861183212), + TrajectoryPoint(2650, 86.9984440723996), + TrajectoryPoint(2660, 85.6286161640558), + TrajectoryPoint(2670, 84.2442030808829), + TrajectoryPoint(2680, 82.8447847615517), + TrajectoryPoint(2690, 81.4285079764025), + TrajectoryPoint(2700, 79.9955555712281), + TrajectoryPoint(2710, 78.5440110858705), + TrajectoryPoint(2720, 77.0737349533772), + TrajectoryPoint(2730, 75.5823276082931), + TrajectoryPoint(2740, 74.069557449954), + TrajectoryPoint(2750, 72.5338553726178), + TrajectoryPoint(2760, 70.972800620144), + TrajectoryPoint(2770, 69.3854050643102), + TrajectoryPoint(2780, 67.7696549887913), + TrajectoryPoint(2790, 66.1233423531312), + TrajectoryPoint(2800, 64.4440447975735), + TrajectoryPoint(2810, 62.7291000128289), + TrajectoryPoint(2820, 60.9755762587353), + TrajectoryPoint(2830, 59.1789723575138), + TrajectoryPoint(2840, 57.3364103021364), + TrajectoryPoint(2850, 55.4426379416606), + TrajectoryPoint(2860, 53.4926702226482), + TrajectoryPoint(2870, 51.4788490429852), + TrajectoryPoint(2880, 49.3943424001609), + TrajectoryPoint(2890, 47.2296596537324), + TrajectoryPoint(2900, 44.9724378947071), + TrajectoryPoint(2910, 42.6085225877237), + TrajectoryPoint(2920, 40.1185344210058), + TrajectoryPoint(2930, 37.4779176587061), + TrajectoryPoint(2940, 34.6513439483134), + TrajectoryPoint(2950, 31.5894217580687), + TrajectoryPoint(2960, 28.2163166308658), + TrajectoryPoint(2970, 24.4006408180068), + TrajectoryPoint(2980, 19.8930385895336), + TrajectoryPoint(2990, 14.0418475561034), + TrajectoryPoint(3000, 0), +}; +TrajectoryPoint t2_open[] = { + TrajectoryPoint(0, 510.438944020476), + TrajectoryPoint(10, 508.336075559748), + TrajectoryPoint(20, 506.224157422375), + TrajectoryPoint(30, 504.109073957462), + TrajectoryPoint(40, 501.990078128675), + TrajectoryPoint(50, 499.856819982617), + TrajectoryPoint(60, 497.723561836559), + TrajectoryPoint(70, 495.576998381722), + TrajectoryPoint(80, 493.425166355719), + TrajectoryPoint(90, 491.268700955086), + TrajectoryPoint(100, 489.0978837954), + TrajectoryPoint(110, 486.927066635715), + TrajectoryPoint(120, 484.740754672874), + TrajectoryPoint(130, 482.550528573838), + TrajectoryPoint(140, 480.352778261895), + TrajectoryPoint(150, 478.142706343131), + TrajectoryPoint(160, 475.932634424368), + TrajectoryPoint(170, 473.702542206166), + TrajectoryPoint(180, 471.472173962392), + TrajectoryPoint(190, 469.228932180325), + TrajectoryPoint(200, 466.977802902002), + TrajectoryPoint(210, 464.72072358017), + TrajectoryPoint(220, 462.448353743114), + TrajectoryPoint(230, 460.175983906057), + TrajectoryPoint(240, 457.882607021545), + TrajectoryPoint(250, 455.588501643493), + TrajectoryPoint(260, 453.279288483466), + TrajectoryPoint(270, 450.962936445422), + TrajectoryPoint(280, 448.63706607167), + TrajectoryPoint(290, 446.297939401685), + TrajectoryPoint(300, 443.954546708919), + TrajectoryPoint(310, 441.592099825793), + TrajectoryPoint(320, 439.229652942667), + TrajectoryPoint(330, 436.843941776459), + TrajectoryPoint(340, 434.457610690628), + TrajectoryPoint(350, 432.051920339639), + TrajectoryPoint(360, 429.641121808321), + TrajectoryPoint(370, 427.214417651668), + TrajectoryPoint(380, 424.778548285076), + TrajectoryPoint(390, 422.329738642242), + TrajectoryPoint(400, 419.868173957427), + TrajectoryPoint(410, 417.396106474007), + TrajectoryPoint(420, 414.90819989261), + TrajectoryPoint(430, 412.411657653271), + TrajectoryPoint(440, 409.89673943913), + TrajectoryPoint(450, 407.374436783869), + TrajectoryPoint(460, 404.831812916119), + TrajectoryPoint(470, 402.282390933487), + TrajectoryPoint(480, 399.711341910368), + TrajectoryPoint(490, 397.133363578656), + TrajectoryPoint(500, 394.533143146876), + TrajectoryPoint(510, 391.925088091255), + TrajectoryPoint(520, 389.294921895265), + TrajectoryPoint(530, 386.655180725547), + TrajectoryPoint(540, 383.99426487059), + TrajectoryPoint(550, 381.321133060532), + TrajectoryPoint(560, 378.628632582783), + TrajectoryPoint(570, 375.920303847669), + TrajectoryPoint(580, 373.195351084157), + TrajectoryPoint(590, 370.449910208707), + TrajectoryPoint(600, 367.691603059037), + TrajectoryPoint(610, 364.907018122424), + TrajectoryPoint(620, 362.114418193569), + TrajectoryPoint(630, 359.288532132394), + TrajectoryPoint(640, 356.539105670124), + TrajectoryPoint(650, 354.246008711818), + TrajectoryPoint(660, 351.966178869211), + TrajectoryPoint(670, 349.708700394863), + TrajectoryPoint(680, 347.473166984683), + TrajectoryPoint(690, 345.251178625487), + TrajectoryPoint(700, 343.060313750778), + TrajectoryPoint(710, 340.879398952424), + TrajectoryPoint(720, 338.727451423805), + TrajectoryPoint(730, 336.591674009833), + TrajectoryPoint(740, 334.474051997262), + TrajectoryPoint(750, 332.383155307184), + TrajectoryPoint(760, 330.303595206886), + TrajectoryPoint(770, 328.252807850172), + TrajectoryPoint(780, 326.217762523003), + TrajectoryPoint(790, 324.199360394516), + TrajectoryPoint(800, 322.208111931427), + TrajectoryPoint(810, 320.22895960087), + TrajectoryPoint(820, 318.273049531377), + TrajectoryPoint(830, 316.33670341381), + TrajectoryPoint(840, 314.412911349317), + TrajectoryPoint(850, 312.516289135939), + TrajectoryPoint(860, 310.63402346781), + TrajectoryPoint(870, 308.765811320178), + TrajectoryPoint(880, 306.92393229391), + TrajectoryPoint(890, 305.094497766026), + TrajectoryPoint(900, 303.280627612389), + TrajectoryPoint(910, 301.490000887359), + TrajectoryPoint(920, 299.711806392195), + TrajectoryPoint(930, 297.949012715548), + TrajectoryPoint(940, 296.207928073765), + TrajectoryPoint(950, 294.479124224312), + TrajectoryPoint(960, 292.76423248221), + TrajectoryPoint(970, 291.070770062134), + TrajectoryPoint(980, 289.389324677751), + TrajectoryPoint(990, 287.720093128336), + TrajectoryPoint(1000, 286.071382921106), + TrajectoryPoint(1010, 284.435145861461), + TrajectoryPoint(1020, 282.810716702151), + TrajectoryPoint(1030, 281.202564909554), + TrajectoryPoint(1040, 279.609321683532), + TrajectoryPoint(1050, 278.027424637499), + TrajectoryPoint(1060, 276.457167388104), + TrajectoryPoint(1070, 274.904682120259), + TrajectoryPoint(1080, 273.363043341617), + TrajectoryPoint(1090, 271.832284460829), + TrajectoryPoint(1100, 270.314227414656), + TrajectoryPoint(1110, 268.810599641995), + TrajectoryPoint(1120, 267.317302133533), + TrajectoryPoint(1130, 265.834321515683), + TrajectoryPoint(1140, 264.363365842169), + TrajectoryPoint(1150, 262.905325188571), + TrajectoryPoint(1160, 261.457027720216), + TrajectoryPoint(1170, 260.018426463953), + TrajectoryPoint(1180, 258.589973825141), + TrajectoryPoint(1190, 257.174234164876), + TrajectoryPoint(1200, 255.767611911171), + TrajectoryPoint(1210, 254.370036824462), + TrajectoryPoint(1220, 252.981427794748), + TrajectoryPoint(1230, 251.603282523696), + TrajectoryPoint(1240, 250.235092302875), + TrajectoryPoint(1250, 248.875293031428), + TrajectoryPoint(1260, 247.523790891387), + TrajectoryPoint(1270, 246.180484793705), + TrajectoryPoint(1280, 244.846258176969), + TrajectoryPoint(1290, 243.521123284475), + TrajectoryPoint(1300, 242.203629496326), + TrajectoryPoint(1310, 240.893670180688), + TrajectoryPoint(1320, 239.591133997306), + TrajectoryPoint(1330, 238.295905515086), + TrajectoryPoint(1340, 237.008861764547), + TrajectoryPoint(1350, 235.729343404159), + TrajectoryPoint(1360, 234.456610477226), + TrajectoryPoint(1370, 233.190547854754), + TrajectoryPoint(1380, 231.931037931043), + TrajectoryPoint(1390, 230.677961028943), + TrajectoryPoint(1400, 229.431195768794), + TrajectoryPoint(1410, 228.191242042023), + TrajectoryPoint(1420, 226.957632352407), + TrajectoryPoint(1430, 225.72985735465), + TrajectoryPoint(1440, 224.507799806885), + TrajectoryPoint(1450, 223.291341638293), + TrajectoryPoint(1460, 222.080364185713), + TrajectoryPoint(1470, 220.874748407395), + TrajectoryPoint(1480, 219.67437507571), + TrajectoryPoint(1490, 218.479124950493), + TrajectoryPoint(1500, 217.28887893458), + TrajectoryPoint(1510, 216.103913811166), + TrajectoryPoint(1520, 214.923688046284), + TrajectoryPoint(1530, 213.74805545381), + TrajectoryPoint(1540, 212.576903274009), + TrajectoryPoint(1550, 211.410119162983), + TrajectoryPoint(1560, 210.247591287103), + TrajectoryPoint(1570, 209.089208406473), + TrajectoryPoint(1580, 207.934859948354), + TrajectoryPoint(1590, 206.784436071385), + TrajectoryPoint(1600, 205.637827721367), + TrajectoryPoint(1610, 204.494926679339), + TrajectoryPoint(1620, 203.355625602584), + TrajectoryPoint(1630, 202.219818059186), + TrajectoryPoint(1640, 201.087398556683), + TrajectoryPoint(1650, 199.958262565336), + TrajectoryPoint(1660, 198.832306536475), + TrajectoryPoint(1670, 197.70942791636), + TrajectoryPoint(1680, 196.58952515595), + TrajectoryPoint(1690, 195.472497716944), + TrajectoryPoint(1700, 194.358246074434), + TrajectoryPoint(1710, 193.246671716465), + TrajectoryPoint(1720, 192.137677140792), + TrajectoryPoint(1730, 191.031165849091), + TrajectoryPoint(1740, 189.927042338851), + TrajectoryPoint(1750, 188.825212093178), + TrajectoryPoint(1760, 187.725581568693), + TrajectoryPoint(1770, 186.628058181715), + TrajectoryPoint(1780, 185.532550292897), + TrajectoryPoint(1790, 184.438967190454), + TrajectoryPoint(1800, 183.347316657309), + TrajectoryPoint(1810, 182.257440514159), + TrajectoryPoint(1820, 181.169215924193), + TrajectoryPoint(1830, 180.082554885517), + TrajectoryPoint(1840, 178.997370261122), + TrajectoryPoint(1850, 177.913575753458), + TrajectoryPoint(1860, 176.831085878528), + TrajectoryPoint(1870, 175.749815939547), + TrajectoryPoint(1880, 174.669686983332), + TrajectoryPoint(1890, 173.590716357941), + TrajectoryPoint(1900, 172.512702209773), + TrajectoryPoint(1910, 171.435562209799), + TrajectoryPoint(1920, 170.35921469624), + TrajectoryPoint(1930, 169.283578645068), + TrajectoryPoint(1940, 168.208576248062), + TrajectoryPoint(1950, 167.134187663271), + TrajectoryPoint(1960, 166.060252977035), + TrajectoryPoint(1970, 164.98669303105), + TrajectoryPoint(1980, 163.91342916273), + TrajectoryPoint(1990, 162.840387580692), + TrajectoryPoint(2000, 161.767489743081), + TrajectoryPoint(2010, 160.69463366266), + TrajectoryPoint(2020, 159.62174201671), + TrajectoryPoint(2030, 158.5487342576), + TrajectoryPoint(2040, 157.475493937166), + TrajectoryPoint(2050, 156.401964751756), + TrajectoryPoint(2060, 155.328070245315), + TrajectoryPoint(2070, 154.253687199598), + TrajectoryPoint(2080, 153.178717897483), + TrajectoryPoint(2090, 152.103129720852), + TrajectoryPoint(2100, 151.026811696914), + TrajectoryPoint(2110, 149.949587798145), + TrajectoryPoint(2120, 148.871489883762), + TrajectoryPoint(2130, 147.792387256151), + TrajectoryPoint(2140, 146.712080470218), + TrajectoryPoint(2150, 145.630642008614), + TrajectoryPoint(2160, 144.547852610447), + TrajectoryPoint(2170, 143.46361833659), + TrajectoryPoint(2180, 142.377991171378), + TrajectoryPoint(2190, 141.290559988109), + TrajectoryPoint(2200, 140.20153430118), + TrajectoryPoint(2210, 139.110620635151), + TrajectoryPoint(2220, 138.017767318833), + TrajectoryPoint(2230, 136.922917706154), + TrajectoryPoint(2240, 135.825796075724), + TrajectoryPoint(2250, 134.726531358393), + TrajectoryPoint(2260, 133.624688265252), + TrajectoryPoint(2270, 132.520503033195), + TrajectoryPoint(2280, 131.413471860235), + TrajectoryPoint(2290, 130.303833617324), + TrajectoryPoint(2300, 129.19113315951), + TrajectoryPoint(2310, 128.075481226642), + TrajectoryPoint(2320, 126.956614457742), + TrajectoryPoint(2330, 125.834358621532), + TrajectoryPoint(2340, 124.708811346036), + TrajectoryPoint(2350, 123.579330257577), + TrajectoryPoint(2360, 122.446263721663), + TrajectoryPoint(2370, 121.309208969182), + TrajectoryPoint(2380, 120.167904923082), + TrajectoryPoint(2390, 119.022472433814), + TrajectoryPoint(2400, 117.872498486347), + TrajectoryPoint(2410, 116.717720915557), + TrajectoryPoint(2420, 115.558210709353), + TrajectoryPoint(2430, 114.393749564257), + TrajectoryPoint(2440, 113.223736608425), + TrajectoryPoint(2450, 112.048264469815), + TrajectoryPoint(2460, 110.867142984631), + TrajectoryPoint(2470, 109.680116090926), + TrajectoryPoint(2480, 108.48691653709), + TrajectoryPoint(2490, 107.28699308468), + TrajectoryPoint(2500, 106.080344482169), + TrajectoryPoint(2510, 104.866683047908), + TrajectoryPoint(2520, 103.645695718079), + TrajectoryPoint(2530, 102.417055702894), + TrajectoryPoint(2540, 101.180421833564), + TrajectoryPoint(2550, 99.9354378605575), + TrajectoryPoint(2560, 98.6817317002351), + TrajectoryPoint(2570, 97.4189146265985), + TrajectoryPoint(2580, 96.1465804045545), + TrajectoryPoint(2590, 94.8643043607048), + TrajectoryPoint(2600, 93.5716423872569), + TrajectoryPoint(2610, 92.2681298741985), + TrajectoryPoint(2620, 90.9529909579097), + TrajectoryPoint(2630, 89.6257488059519), + TrajectoryPoint(2640, 88.2860244163942), + TrajectoryPoint(2650, 86.9332510923595), + TrajectoryPoint(2660, 85.5663473201793), + TrajectoryPoint(2670, 84.1846867699902), + TrajectoryPoint(2680, 82.7879657500223), + TrajectoryPoint(2690, 81.3744339597015), + TrajectoryPoint(2700, 79.9440633148982), + TrajectoryPoint(2710, 78.4951440004728), + TrajectoryPoint(2720, 77.0273345993343), + TrajectoryPoint(2730, 75.5384317464843), + TrajectoryPoint(2740, 74.0281053005299), + TrajectoryPoint(2750, 72.4946976021054), + TrajectoryPoint(2760, 70.9359625270873), + TrajectoryPoint(2770, 69.3508272707421), + TrajectoryPoint(2780, 67.7372754058456), + TrajectoryPoint(2790, 66.0930986077318), + TrajectoryPoint(2800, 64.415874301262), + TrajectoryPoint(2810, 62.7029400265993), + TrajectoryPoint(2820, 60.9513639542653), + TrajectoryPoint(2830, 59.1567112456614), + TrajectoryPoint(2840, 57.3159665939673), + TrajectoryPoint(2850, 55.424009158904), + TrajectoryPoint(2860, 53.4757276711571), + TrajectoryPoint(2870, 51.4635828074135), + TrajectoryPoint(2880, 49.3806811333399), + TrajectoryPoint(2890, 47.2175313092844), + TrajectoryPoint(2900, 44.9618151377485), + TrajectoryPoint(2910, 42.5992827520479), + TrajectoryPoint(2920, 40.1106418853167), + TrajectoryPoint(2930, 37.4712900421995), + TrajectoryPoint(2940, 34.6459293664533), + TrajectoryPoint(2950, 31.5851275844203), + TrajectoryPoint(2960, 28.2130728448859), + TrajectoryPoint(2970, 24.3983424037428), + TrajectoryPoint(2980, 19.8916103594115), + TrajectoryPoint(2990, 14.0411943132275), + TrajectoryPoint(3000, 0), +}; +TrajectoryPoint t3_open[] = { + TrajectoryPoint(0, 505.673314279408), + TrajectoryPoint(10, 503.571309337535), + TrajectoryPoint(20, 501.462198249855), + TrajectoryPoint(30, 499.346984013761), + TrajectoryPoint(40, 497.231073804537), + TrajectoryPoint(50, 495.097632729956), + TrajectoryPoint(60, 492.964191655374), + TrajectoryPoint(70, 490.820229779375), + TrajectoryPoint(80, 488.668161661023), + TrajectoryPoint(90, 486.513850709671), + TrajectoryPoint(100, 484.342743242901), + TrajectoryPoint(110, 482.171635776131), + TrajectoryPoint(120, 479.986959956721), + TrajectoryPoint(130, 477.796388238276), + TrajectoryPoint(140, 475.599793412978), + TrajectoryPoint(150, 473.389319415815), + TrajectoryPoint(160, 471.178845418652), + TrajectoryPoint(170, 468.949353115059), + TrajectoryPoint(180, 466.718525135607), + TrajectoryPoint(190, 464.475366110723), + TrajectoryPoint(200, 462.223718186821), + TrajectoryPoint(210, 459.966185642958), + TrajectoryPoint(220, 457.693236940578), + TrajectoryPoint(230, 455.420288238199), + TrajectoryPoint(240, 453.125840917815), + TrajectoryPoint(250, 450.831095084557), + TrajectoryPoint(260, 448.5202339146), + TrajectoryPoint(270, 446.203178397754), + TrajectoryPoint(280, 443.875060932814), + TrajectoryPoint(290, 441.535166259644), + TrajectoryPoint(300, 439.188904903967), + TrajectoryPoint(310, 436.825623921675), + TrajectoryPoint(320, 434.460283189767), + TrajectoryPoint(330, 432.073050262396), + TrajectoryPoint(340, 429.685817335024), + TrajectoryPoint(350, 427.275874000826), + TrajectoryPoint(360, 424.864104160132), + TrajectoryPoint(370, 422.432449645892), + TrajectoryPoint(380, 419.995537692997), + TrajectoryPoint(390, 417.541053160247), + TrajectoryPoint(400, 415.07837271459), + TrajectoryPoint(410, 412.599877314747), + TrajectoryPoint(420, 410.110779806595), + TrajectoryPoint(430, 407.607026707573), + TrajectoryPoint(440, 405.090840310015), + TrajectoryPoint(450, 402.560512419461), + TrajectoryPoint(460, 400.016540915465), + TrajectoryPoint(470, 397.458246273671), + TrajectoryPoint(480, 394.885767853424), + TrajectoryPoint(490, 392.29803466624), + TrajectoryPoint(500, 389.696300649536), + TrajectoryPoint(510, 387.077571928537), + TrajectoryPoint(520, 384.445805406555), + TrajectoryPoint(530, 381.794433180289), + TrajectoryPoint(540, 379.131827570564), + TrajectoryPoint(550, 376.446066626894), + TrajectoryPoint(560, 373.751784134747), + TrajectoryPoint(570, 371.029785250003), + TrajectoryPoint(580, 368.302955229069), + TrajectoryPoint(590, 365.54275783492), + TrajectoryPoint(600, 362.776676556562), + TrajectoryPoint(610, 359.981999272286), + TrajectoryPoint(620, 357.375927861028), + TrajectoryPoint(630, 355.098049957626), + TrajectoryPoint(640, 352.840476297135), + TrajectoryPoint(650, 350.597362638867), + TrajectoryPoint(660, 348.382804137875), + TrajectoryPoint(670, 346.1771986137), + TrajectoryPoint(680, 344.003243299432), + TrajectoryPoint(690, 341.841552086956), + TrajectoryPoint(700, 339.701723077021), + TrajectoryPoint(710, 337.583968436858), + TrajectoryPoint(720, 335.4778183136), + TrajectoryPoint(730, 333.403801552188), + TrajectoryPoint(740, 331.340592496704), + TrajectoryPoint(750, 329.300125888697), + TrajectoryPoint(760, 327.280369776211), + TrajectoryPoint(770, 325.272246784855), + TrajectoryPoint(780, 323.294824353252), + TrajectoryPoint(790, 321.329465581858), + TrajectoryPoint(800, 319.382469066472), + TrajectoryPoint(810, 317.459015297307), + TrajectoryPoint(820, 315.54763991517), + TrajectoryPoint(830, 313.659176913637), + TrajectoryPoint(840, 311.788523402819), + TrajectoryPoint(850, 309.930231687277), + TrajectoryPoint(860, 308.097131859418), + TrajectoryPoint(870, 306.278157727583), + TrajectoryPoint(880, 304.471646851342), + TrajectoryPoint(890, 302.690724470728), + TrajectoryPoint(900, 300.921967185769), + TrajectoryPoint(910, 299.16595290998), + TrajectoryPoint(920, 297.433737908412), + TrajectoryPoint(930, 295.71347196902), + TrajectoryPoint(940, 294.005427518377), + TrajectoryPoint(950, 292.319552990522), + TrajectoryPoint(960, 290.645862433995), + TrajectoryPoint(970, 288.984103702291), + TrajectoryPoint(980, 287.341321696607), + TrajectoryPoint(990, 285.712163318988), + TrajectoryPoint(1000, 284.094567452432), + TrajectoryPoint(1010, 282.492108564521), + TrajectoryPoint(1020, 280.905364872013), + TrajectoryPoint(1030, 279.329755666396), + TrajectoryPoint(1040, 277.765358455558), + TrajectoryPoint(1050, 276.218524384088), + TrajectoryPoint(1060, 274.682711941348), + TrajectoryPoint(1070, 273.157608372656), + TrajectoryPoint(1080, 271.64484237367), + TrajectoryPoint(1090, 270.146653824708), + TrajectoryPoint(1100, 268.658651194353), + TrajectoryPoint(1110, 267.180830182683), + TrajectoryPoint(1120, 265.71502038601), + TrajectoryPoint(1130, 264.261976788164), + TrajectoryPoint(1140, 262.818563921565), + TrajectoryPoint(1150, 261.38474277624), + TrajectoryPoint(1160, 259.961342931237), + TrajectoryPoint(1170, 258.550265015189), + TrajectoryPoint(1180, 257.148219282345), + TrajectoryPoint(1190, 255.755142360112), + TrajectoryPoint(1200, 254.370959759411), + TrajectoryPoint(1210, 252.997803975035), + TrajectoryPoint(1220, 251.633967580259), + TrajectoryPoint(1230, 250.278465760067), + TrajectoryPoint(1240, 248.931210314696), + TrajectoryPoint(1250, 247.592105538553), + TrajectoryPoint(1260, 246.262855805616), + TrajectoryPoint(1270, 244.941884938995), + TrajectoryPoint(1280, 243.628521911628), + TrajectoryPoint(1290, 242.322664617964), + TrajectoryPoint(1300, 241.024206038033), + TrajectoryPoint(1310, 239.733349959227), + TrajectoryPoint(1320, 238.451001377562), + TrajectoryPoint(1330, 237.175535502023), + TrajectoryPoint(1340, 235.906843739737), + TrajectoryPoint(1350, 234.64481440398), + TrajectoryPoint(1360, 233.389333164586), + TrajectoryPoint(1370, 232.140283459408), + TrajectoryPoint(1380, 230.898205196113), + TrajectoryPoint(1390, 229.662690474805), + TrajectoryPoint(1400, 228.43313173581), + TrajectoryPoint(1410, 227.20941542742), + TrajectoryPoint(1420, 225.991426778439), + TrajectoryPoint(1430, 224.779050065385), + TrajectoryPoint(1440, 223.572168854832), + TrajectoryPoint(1450, 222.370666222793), + TrajectoryPoint(1460, 221.174424952934), + TrajectoryPoint(1470, 219.983884761016), + TrajectoryPoint(1480, 218.798308392023), + TrajectoryPoint(1490, 217.617574583726), + TrajectoryPoint(1500, 216.441571764602), + TrajectoryPoint(1510, 215.270188470366), + TrajectoryPoint(1520, 214.103313467832), + TrajectoryPoint(1530, 212.940835865621), + TrajectoryPoint(1540, 211.782645212761), + TrajectoryPoint(1550, 210.628631586183), + TrajectoryPoint(1560, 209.478685668018), + TrajectoryPoint(1570, 208.332698813533), + TrajectoryPoint(1580, 207.190563110497), + TrajectoryPoint(1590, 206.052171430675), + TrajectoryPoint(1600, 204.917417474135), + TrajectoryPoint(1610, 203.786195806947), + TrajectoryPoint(1620, 202.658401892867), + TrajectoryPoint(1630, 201.533932119493), + TrajectoryPoint(1640, 200.412683819386), + TrajectoryPoint(1650, 199.29455528659), + TrajectoryPoint(1660, 198.179445788942), + TrajectoryPoint(1670, 197.067255576555), + TrajectoryPoint(1680, 195.957885886803), + TrajectoryPoint(1690, 194.851238946121), + TrajectoryPoint(1700, 193.747217968909), + TrajectoryPoint(1710, 192.645727153797), + TrajectoryPoint(1720, 191.546671677518), + TrajectoryPoint(1730, 190.449957686602), + TrajectoryPoint(1740, 189.355492287093), + TrajectoryPoint(1750, 188.263183532489), + TrajectoryPoint(1760, 187.172940410045), + TrajectoryPoint(1770, 186.08467282563), + TrajectoryPoint(1780, 184.998291587248), + TrajectoryPoint(1790, 183.913708387371), + TrajectoryPoint(1800, 182.830835784199), + TrajectoryPoint(1810, 181.749587181951), + TrajectoryPoint(1820, 180.669899537425), + TrajectoryPoint(1830, 179.591764558373), + TrajectoryPoint(1840, 178.514989633085), + TrajectoryPoint(1850, 177.439490660505), + TrajectoryPoint(1860, 176.365184304181), + TrajectoryPoint(1870, 175.291987966354), + TrajectoryPoint(1880, 174.219819761737), + TrajectoryPoint(1890, 173.148598491027), + TrajectoryPoint(1900, 172.078298555941), + TrajectoryPoint(1910, 171.008813308556), + TrajectoryPoint(1920, 169.940019947379), + TrajectoryPoint(1930, 168.871839298533), + TrajectoryPoint(1940, 167.804192750189), + TrajectoryPoint(1950, 166.737002223853), + TrajectoryPoint(1960, 165.67023275995), + TrajectoryPoint(1970, 164.603746993282), + TrajectoryPoint(1980, 163.537466894326), + TrajectoryPoint(1990, 162.471315868705), + TrajectoryPoint(2000, 161.405215889623), + TrajectoryPoint(2010, 160.339075352706), + TrajectoryPoint(2020, 159.272814889976), + TrajectoryPoint(2030, 158.206358972611), + TrajectoryPoint(2040, 157.139606146026), + TrajectoryPoint(2050, 156.07245530354), + TrajectoryPoint(2060, 155.004860322057), + TrajectoryPoint(2070, 153.936746267285), + TrajectoryPoint(2080, 152.867923580772), + TrajectoryPoint(2090, 151.798396561662), + TrajectoryPoint(2100, 150.728100784551), + TrajectoryPoint(2110, 149.656827143468), + TrajectoryPoint(2120, 148.584561974873), + TrajectoryPoint(2130, 147.51127620845), + TrajectoryPoint(2140, 146.436693490123), + TrajectoryPoint(2150, 145.360868823331), + TrajectoryPoint(2160, 144.283731915086), + TrajectoryPoint(2170, 143.204966416396), + TrajectoryPoint(2180, 142.124743024093), + TrajectoryPoint(2190, 141.042761130079), + TrajectoryPoint(2200, 139.95899973215), + TrajectoryPoint(2210, 138.873409848003), + TrajectoryPoint(2220, 137.785684728609), + TrajectoryPoint(2230, 136.696033503369), + TrajectoryPoint(2240, 135.603907271519), + TrajectoryPoint(2250, 134.509676297611), + TrajectoryPoint(2260, 133.412738653818), + TrajectoryPoint(2270, 132.313458237307), + TrajectoryPoint(2280, 131.211210571734), + TrajectoryPoint(2290, 130.106397911041), + TrajectoryPoint(2300, 128.998313116614), + TrajectoryPoint(2310, 127.887364251613), + TrajectoryPoint(2320, 126.772992401749), + TrajectoryPoint(2330, 125.65531820751), + TrajectoryPoint(2340, 124.534147829708), + TrajectoryPoint(2350, 123.409128126869), + TrajectoryPoint(2360, 122.280467626596), + TrajectoryPoint(2370, 121.147610681928), + TrajectoryPoint(2380, 120.010593690396), + TrajectoryPoint(2390, 118.869392522116), + TrajectoryPoint(2400, 117.723442785128), + TrajectoryPoint(2410, 116.572779083497), + TrajectoryPoint(2420, 115.417326905112), + TrajectoryPoint(2430, 114.256776720111), + TrajectoryPoint(2440, 113.090650907429), + TrajectoryPoint(2450, 111.919065300544), + TrajectoryPoint(2460, 110.741774457595), + TrajectoryPoint(2470, 109.558522208659), + TrajectoryPoint(2480, 108.368911705953), + TrajectoryPoint(2490, 107.172637530315), + TrajectoryPoint(2500, 105.969594867631), + TrajectoryPoint(2510, 104.759483760812), + TrajectoryPoint(2520, 103.541991160897), + TrajectoryPoint(2530, 102.316790317746), + TrajectoryPoint(2540, 101.083540124905), + TrajectoryPoint(2550, 99.8418844159803), + TrajectoryPoint(2560, 98.5914512095855), + TrajectoryPoint(2570, 97.3318518995843), + TrajectoryPoint(2580, 96.0626803870046), + TrajectoryPoint(2590, 94.7835121496189), + TrajectoryPoint(2600, 93.4939032447719), + TrajectoryPoint(2610, 92.1933892405828), + TrajectoryPoint(2620, 90.8813119121372), + TrajectoryPoint(2630, 89.5569556622576), + TrajectoryPoint(2640, 88.2200629981109), + TrajectoryPoint(2650, 86.8700674580021), + TrajectoryPoint(2660, 85.5059961193338), + TrajectoryPoint(2670, 84.1270010932271), + TrajectoryPoint(2680, 82.7328922479654), + TrajectoryPoint(2690, 81.3220196568161), + TrajectoryPoint(2700, 79.894149540421), + TrajectoryPoint(2710, 78.4477735322434), + TrajectoryPoint(2720, 76.9823534941141), + TrajectoryPoint(2730, 75.4958772290697), + TrajectoryPoint(2740, 73.9879185597794), + TrajectoryPoint(2750, 72.4567313464441), + TrajectoryPoint(2760, 70.9002463544824), + TrajectoryPoint(2770, 69.3173014497324), + TrajectoryPoint(2780, 67.7058798588637), + TrajectoryPoint(2790, 66.0637729809836), + TrajectoryPoint(2800, 64.38855803046), + TrajectoryPoint(2810, 62.6775723989456), + TrajectoryPoint(2820, 60.9278841670521), + TrajectoryPoint(2830, 59.1351229781754), + TrajectoryPoint(2840, 57.2961400583996), + TrajectoryPoint(2850, 55.4059421861985), + TrajectoryPoint(2860, 53.459295441486), + TrajectoryPoint(2870, 51.4487759074568), + TrajectoryPoint(2880, 49.3674304546589), + TrajectoryPoint(2890, 47.2057670631994), + TrajectoryPoint(2900, 44.951510951961), + TrajectoryPoint(2910, 42.5903196745025), + TrajectoryPoint(2920, 40.1029854838136), + TrajectoryPoint(2930, 37.4648604768426), + TrajectoryPoint(2940, 34.6406763982697), + TrajectoryPoint(2950, 31.5809614191273), + TrajectoryPoint(2960, 28.2099256267369), + TrajectoryPoint(2970, 24.3961123079863), + TrajectoryPoint(2980, 19.8902245073417), + TrajectoryPoint(2990, 14.040560407066), + TrajectoryPoint(3000, 0), +}; +TrajectoryPoint t4_open[] = { + TrajectoryPoint(0, 501.011831601148), + TrajectoryPoint(10, 498.910275275413), + TrajectoryPoint(20, 496.80313301355), + TrajectoryPoint(30, 494.687649597284), + TrajectoryPoint(40, 492.572166181019), + TrajectoryPoint(50, 490.439757552511), + TrajectoryPoint(60, 488.305994721969), + TrajectoryPoint(70, 486.163323016975), + TrajectoryPoint(80, 484.010879516332), + TrajectoryPoint(90, 481.857405085496), + TrajectoryPoint(100, 479.685867513483), + TrajectoryPoint(110, 477.51432994147), + TrajectoryPoint(120, 475.329965091921), + TrajectoryPoint(130, 473.138907400239), + TrajectoryPoint(140, 470.942135968601), + TrajectoryPoint(150, 468.731118934247), + TrajectoryPoint(160, 466.520101899893), + TrajectoryPoint(170, 464.289869645841), + TrajectoryPoint(180, 462.05844031572), + TrajectoryPoint(190, 459.814016802862), + TrajectoryPoint(200, 457.561707908902), + TrajectoryPoint(210, 455.302367289329), + TrajectoryPoint(220, 453.028696632207), + TrajectoryPoint(230, 450.753674889665), + TrajectoryPoint(240, 448.458144689095), + TrajectoryPoint(250, 446.162614488526), + TrajectoryPoint(260, 443.848733603067), + TrajectoryPoint(270, 441.530829812458), + TrajectoryPoint(280, 439.199085091469), + TrajectoryPoint(290, 436.858276674566), + TrajectoryPoint(300, 434.507757728438), + TrajectoryPoint(310, 432.143495895401), + TrajectoryPoint(320, 429.773243380208), + TrajectoryPoint(330, 427.38496078036), + TrajectoryPoint(340, 424.993963394525), + TrajectoryPoint(350, 422.581073262788), + TrajectoryPoint(360, 420.16818313105), + TrajectoryPoint(370, 417.73015977797), + TrajectoryPoint(380, 415.292055031762), + TrajectoryPoint(390, 412.830466845898), + TrajectoryPoint(400, 410.366519129002), + TrajectoryPoint(410, 407.880156338589), + TrajectoryPoint(420, 405.389715008208), + TrajectoryPoint(430, 402.877300405396), + TrajectoryPoint(440, 400.359691458295), + TrajectoryPoint(450, 397.819876027173), + TrajectoryPoint(460, 395.274400960464), + TrajectoryPoint(470, 392.705759167282), + TrajectoryPoint(480, 390.131693769013), + TrajectoryPoint(490, 387.532718484226), + TrajectoryPoint(500, 384.929311548516), + TrajectoryPoint(510, 382.298408567138), + TrajectoryPoint(520, 379.664821172904), + TrajectoryPoint(530, 377.000362651398), + TrajectoryPoint(540, 374.332214511475), + TrajectoryPoint(550, 371.635984767183), + TrajectoryPoint(560, 368.931415986492), + TrajectoryPoint(570, 366.202541268844), + TrajectoryPoint(580, 363.4595798983), + TrajectoryPoint(590, 360.697151687422), + TrajectoryPoint(600, 358.238591938618), + TrajectoryPoint(610, 355.9749349171), + TrajectoryPoint(620, 353.739140244251), + TrajectoryPoint(630, 351.511215449331), + TrajectoryPoint(640, 349.315389753838), + TrajectoryPoint(650, 347.129845272164), + TrajectoryPoint(660, 344.967758823777), + TrajectoryPoint(670, 342.824909685462), + TrajectoryPoint(680, 340.696271806021), + TrajectoryPoint(690, 338.596190366938), + TrajectoryPoint(700, 336.506167422886), + TrajectoryPoint(710, 334.443147221629), + TrajectoryPoint(720, 332.395975857659), + TrajectoryPoint(730, 330.364962052424), + TrajectoryPoint(740, 328.360206325315), + TrajectoryPoint(750, 326.366558674982), + TrajectoryPoint(760, 324.397651900161), + TrajectoryPoint(770, 322.445820880983), + TrajectoryPoint(780, 320.506930200583), + TrajectoryPoint(790, 318.5961219278), + TrajectoryPoint(800, 316.696914239036), + TrajectoryPoint(810, 314.815842006258), + TrajectoryPoint(820, 312.95656788272), + TrajectoryPoint(830, 311.109209852234), + TrajectoryPoint(840, 309.282908838304), + TrajectoryPoint(850, 307.474172518963), + TrajectoryPoint(860, 305.67749167396), + TrajectoryPoint(870, 303.902881242454), + TrajectoryPoint(880, 302.143346032911), + TrajectoryPoint(890, 300.395850866721), + TrajectoryPoint(900, 298.669885607527), + TrajectoryPoint(910, 296.957948004568), + TrajectoryPoint(920, 295.257905001225), + TrajectoryPoint(930, 293.577622035441), + TrajectoryPoint(940, 291.911481016706), + TrajectoryPoint(950, 290.256984049878), + TrajectoryPoint(960, 288.61953416604), + TrajectoryPoint(970, 286.997252614701), + TrajectoryPoint(980, 285.38628259194), + TrajectoryPoint(990, 283.788949355392), + TrajectoryPoint(1000, 282.208506220077), + TrajectoryPoint(1010, 280.638980549451), + TrajectoryPoint(1020, 279.080461072082), + TrajectoryPoint(1030, 277.538523754555), + TrajectoryPoint(1040, 276.008336180711), + TrajectoryPoint(1050, 274.488681825754), + TrajectoryPoint(1060, 272.980703685605), + TrajectoryPoint(1070, 271.487755526576), + TrajectoryPoint(1080, 270.004844640325), + TrajectoryPoint(1090, 268.531976160512), + TrajectoryPoint(1100, 267.070842427118), + TrajectoryPoint(1110, 265.62259556837), + TrajectoryPoint(1120, 264.18386335563), + TrajectoryPoint(1130, 262.754615067255), + TrajectoryPoint(1140, 261.335828177703), + TrajectoryPoint(1150, 259.929211048086), + TrajectoryPoint(1160, 258.531537843023), + TrajectoryPoint(1170, 257.142752342932), + TrajectoryPoint(1180, 255.762786948742), + TrajectoryPoint(1190, 254.39421606484), + TrajectoryPoint(1200, 253.034530095862), + TrajectoryPoint(1210, 251.683120052634), + TrajectoryPoint(1220, 250.339903585138), + TrajectoryPoint(1230, 249.004819199555), + TrajectoryPoint(1240, 247.680143697496), + TrajectoryPoint(1250, 246.363132670705), + TrajectoryPoint(1260, 245.053694539157), + TrajectoryPoint(1270, 243.751731907328), + TrajectoryPoint(1280, 242.457142246331), + TrajectoryPoint(1290, 241.170938789962), + TrajectoryPoint(1300, 239.892453846147), + TrajectoryPoint(1310, 238.62083544771), + TrajectoryPoint(1320, 237.355978760764), + TrajectoryPoint(1330, 236.097775674215), + TrajectoryPoint(1340, 234.846115256769), + TrajectoryPoint(1350, 233.601314833465), + TrajectoryPoint(1360, 232.36357203808), + TrajectoryPoint(1370, 231.131898891793), + TrajectoryPoint(1380, 229.906186194541), + TrajectoryPoint(1390, 228.686323089591), + TrajectoryPoint(1400, 227.472197364003), + TrajectoryPoint(1410, 226.263695722108), + TrajectoryPoint(1420, 225.060704034019), + TrajectoryPoint(1430, 223.86345408056), + TrajectoryPoint(1440, 222.671789655937), + TrajectoryPoint(1450, 221.485209770253), + TrajectoryPoint(1460, 220.303604996177), + TrajectoryPoint(1470, 219.126865624062), + TrajectoryPoint(1480, 217.954881820805), + TrajectoryPoint(1490, 216.787543772977), + TrajectoryPoint(1500, 215.624741815463), + TrajectoryPoint(1510, 214.466366546774), + TrajectoryPoint(1520, 213.312308932085), + TrajectoryPoint(1530, 212.162460394984), + TrajectoryPoint(1540, 211.016712898867), + TrajectoryPoint(1550, 209.874959018799), + TrajectoryPoint(1560, 208.737188389876), + TrajectoryPoint(1570, 207.603252874027), + TrajectoryPoint(1580, 206.472960694832), + TrajectoryPoint(1590, 205.346210340825), + TrajectoryPoint(1600, 204.222900980061), + TrajectoryPoint(1610, 203.102932500515), + TrajectoryPoint(1620, 201.986205544577), + TrajectoryPoint(1630, 200.872621538143), + TrajectoryPoint(1640, 199.762082714757), + TrajectoryPoint(1650, 198.654492135217), + TrajectoryPoint(1660, 197.549753703022), + TrajectoryPoint(1670, 196.447772176024), + TrajectoryPoint(1680, 195.348453174605), + TrajectoryPoint(1690, 194.251703186674), + TrajectoryPoint(1700, 193.157429569767), + TrajectoryPoint(1710, 192.065540550495), + TrajectoryPoint(1720, 190.975952359583), + TrajectoryPoint(1730, 189.888656627771), + TrajectoryPoint(1740, 188.803476744573), + TrajectoryPoint(1750, 187.720323218041), + TrajectoryPoint(1760, 186.639107449743), + TrajectoryPoint(1770, 185.559741718621), + TrajectoryPoint(1780, 184.482139163723), + TrajectoryPoint(1790, 183.406213765911), + TrajectoryPoint(1800, 182.331880328657), + TrajectoryPoint(1810, 181.259054458001), + TrajectoryPoint(1820, 180.187652541783), + TrajectoryPoint(1830, 179.1175917282), + TrajectoryPoint(1840, 178.04880639304), + TrajectoryPoint(1850, 176.981291691348), + TrajectoryPoint(1860, 175.91486278596), + TrajectoryPoint(1870, 174.849439065793), + TrajectoryPoint(1880, 173.784940586438), + TrajectoryPoint(1890, 172.721288044253), + TrajectoryPoint(1900, 171.658402750259), + TrajectoryPoint(1910, 170.596229150332), + TrajectoryPoint(1920, 169.534711685655), + TrajectoryPoint(1930, 168.473712703709), + TrajectoryPoint(1940, 167.413155296663), + TrajectoryPoint(1950, 166.352963047292), + TrajectoryPoint(1960, 165.293060696756), + TrajectoryPoint(1970, 164.233391851482), + TrajectoryPoint(1980, 163.173842348616), + TrajectoryPoint(1990, 162.114337106978), + TrajectoryPoint(2000, 161.054801398575), + TrajectoryPoint(2010, 159.995142022085), + TrajectoryPoint(2020, 158.935274713262), + TrajectoryPoint(2030, 157.87513272378), + TrajectoryPoint(2040, 156.814642130798), + TrajectoryPoint(2050, 155.753658689766), + TrajectoryPoint(2060, 154.692139345057), + TrajectoryPoint(2070, 153.630026810156), + TrajectoryPoint(2080, 152.567195060339), + TrajectoryPoint(2090, 151.503515288), + TrajectoryPoint(2100, 150.438996176293), + TrajectoryPoint(2110, 149.373511699917), + TrajectoryPoint(2120, 148.306874865985), + TrajectoryPoint(2130, 147.239150148223), + TrajectoryPoint(2140, 146.170156824464), + TrajectoryPoint(2150, 145.099750576168), + TrajectoryPoint(2160, 144.028004564788), + TrajectoryPoint(2170, 142.954594757833), + TrajectoryPoint(2180, 141.879588351799), + TrajectoryPoint(2190, 140.802877638679), + TrajectoryPoint(2200, 139.724199334209), + TrajectoryPoint(2210, 138.643740504799), + TrajectoryPoint(2220, 137.560986576288), + TrajectoryPoint(2230, 136.476245193123), + TrajectoryPoint(2240, 135.389062658967), + TrajectoryPoint(2250, 134.299600378242), + TrajectoryPoint(2260, 133.207502365147), + TrajectoryPoint(2270, 132.112867704636), + TrajectoryPoint(2280, 131.015340985864), + TrajectoryPoint(2290, 129.915068276456), + TrajectoryPoint(2300, 128.811572262761), + TrajectoryPoint(2310, 127.70517381454), + TrajectoryPoint(2320, 126.595145976192), + TrajectoryPoint(2330, 125.481905023643), + TrajectoryPoint(2340, 124.364965182652), + TrajectoryPoint(2350, 123.24426268382), + TrajectoryPoint(2360, 122.119865829321), + TrajectoryPoint(2370, 120.991067137268), + TrajectoryPoint(2380, 119.858199003943), + TrajectoryPoint(2390, 118.721083276317), + TrajectoryPoint(2400, 117.57903425801), + TrajectoryPoint(2410, 116.432352213256), + TrajectoryPoint(2420, 115.280827714441), + TrajectoryPoint(2430, 114.124006634284), + TrajectoryPoint(2440, 112.96169682862), + TrajectoryPoint(2450, 111.79387336148), + TrajectoryPoint(2460, 110.62029065528), + TrajectoryPoint(2470, 109.440692441966), + TrajectoryPoint(2480, 108.254542272019), + TrajectoryPoint(2490, 107.061813004956), + TrajectoryPoint(2500, 105.862261535746), + TrajectoryPoint(2510, 104.655587898418), + TrajectoryPoint(2520, 103.441479060529), + TrajectoryPoint(2530, 102.219608311681), + TrajectoryPoint(2540, 100.989634606426), + TrajectoryPoint(2550, 99.7512018588889), + TrajectoryPoint(2560, 98.5039381861555), + TrajectoryPoint(2570, 97.247455097111), + TrajectoryPoint(2580, 95.981346623101), + TrajectoryPoint(2590, 94.7051883863886), + TrajectoryPoint(2600, 93.4185366019755), + TrajectoryPoint(2610, 92.1209270079005), + TrajectoryPoint(2620, 90.8118163531082), + TrajectoryPoint(2630, 89.490255662728), + TrajectoryPoint(2640, 88.1561062124945), + TrajectoryPoint(2650, 86.8088017646198), + TrajectoryPoint(2660, 85.4474753898248), + TrajectoryPoint(2670, 84.0710629319449), + TrajectoryPoint(2680, 82.6794850961345), + TrajectoryPoint(2690, 81.2711898584975), + TrajectoryPoint(2700, 79.8457428067736), + TrajectoryPoint(2710, 78.4018320023688), + TrajectoryPoint(2720, 76.9387275376952), + TrajectoryPoint(2730, 75.4546035286158), + TrajectoryPoint(2740, 73.9489401797798), + TrajectoryPoint(2750, 72.419905205717), + TrajectoryPoint(2760, 70.865601637311), + TrajectoryPoint(2770, 69.2847803297828), + TrajectoryPoint(2780, 67.6754241744377), + TrajectoryPoint(2790, 66.0353243017501), + TrajectoryPoint(2800, 64.3620577202878), + TrajectoryPoint(2810, 62.6529616752113), + TrajectoryPoint(2820, 60.9051041567696), + TrajectoryPoint(2830, 59.1141775088849), + TrajectoryPoint(2840, 57.2769031675002), + TrajectoryPoint(2850, 55.38841198935), + TrajectoryPoint(2860, 53.4433508214166), + TrajectoryPoint(2870, 51.4344079213076), + TrajectoryPoint(2880, 49.3545721292828), + TrajectoryPoint(2890, 47.1943507633915), + TrajectoryPoint(2900, 44.9415112190163), + TrajectoryPoint(2910, 42.5816211045782), + TrajectoryPoint(2920, 40.0955547757743), + TrajectoryPoint(2930, 37.4586202160777), + TrajectoryPoint(2940, 34.6355779145418), + TrajectoryPoint(2950, 31.5769176224689), + TrajectoryPoint(2960, 28.2068707274524), + TrajectoryPoint(2970, 24.3939475293035), + TrajectoryPoint(2980, 19.8888791747687), + TrajectoryPoint(2990, 14.0399449915658), + TrajectoryPoint(3000, 0), +}; +TrajectoryPoint t5_open[] = { + TrajectoryPoint(0, 495.893395461229), + TrajectoryPoint(10, 493.810993067849), + TrajectoryPoint(20, 491.723623806074), + TrajectoryPoint(30, 489.627258378458), + TrajectoryPoint(40, 487.530892950843), + TrajectoryPoint(50, 485.418249444041), + TrajectoryPoint(60, 483.303921136716), + TrajectoryPoint(70, 481.180740058117), + TrajectoryPoint(80, 479.04805822962), + TrajectoryPoint(90, 476.913799276504), + TrajectoryPoint(100, 474.762361567924), + TrajectoryPoint(110, 472.610923859345), + TrajectoryPoint(120, 470.445848776917), + TrajectoryPoint(130, 468.275240632425), + TrajectoryPoint(140, 466.097495740579), + TrajectoryPoint(150, 463.907289903251), + TrajectoryPoint(160, 461.716234446234), + TrajectoryPoint(170, 459.505990427636), + TrajectoryPoint(180, 457.295746409038), + TrajectoryPoint(190, 455.070214214563), + TrajectoryPoint(200, 452.839477736434), + TrajectoryPoint(210, 450.598784057996), + TrajectoryPoint(220, 448.347086464256), + TrajectoryPoint(230, 446.090470909099), + TrajectoryPoint(240, 443.81732854626), + TrajectoryPoint(250, 441.543991076714), + TrajectoryPoint(260, 439.248904640641), + TrajectoryPoint(270, 436.953818204568), + TrajectoryPoint(280, 434.640457089716), + TrajectoryPoint(290, 432.322910936517), + TrajectoryPoint(300, 429.990566697908), + TrajectoryPoint(310, 427.650028116558), + TrajectoryPoint(320, 425.297749292189), + TrajectoryPoint(330, 422.933667736322), + TrajectoryPoint(340, 420.560452047679), + TrajectoryPoint(350, 418.172258323749), + TrajectoryPoint(360, 415.777049559525), + TrajectoryPoint(370, 413.36415496834), + TrajectoryPoint(380, 410.945839640421), + TrajectoryPoint(390, 408.507635068793), + TrajectoryPoint(400, 406.065038821181), + TrajectoryPoint(410, 403.600893780176), + TrajectoryPoint(420, 401.132777529652), + TrajectoryPoint(430, 398.64203913562), + TrajectoryPoint(440, 396.147094920836), + TrajectoryPoint(450, 393.629086815097), + TrajectoryPoint(460, 391.105933328478), + TrajectoryPoint(470, 388.559954531165), + TrajectoryPoint(480, 386.00713230542), + TrajectoryPoint(490, 383.432455998614), + TrajectoryPoint(500, 380.84842221676), + TrajectoryPoint(510, 378.244294451611), + TrajectoryPoint(520, 375.627417346211), + TrajectoryPoint(530, 372.99305566828), + TrajectoryPoint(540, 370.341608472009), + TrajectoryPoint(550, 367.676200458531), + TrajectoryPoint(560, 364.988354864159), + TrajectoryPoint(570, 362.29105656638), + TrajectoryPoint(580, 359.564875649757), + TrajectoryPoint(590, 356.877812546097), + TrajectoryPoint(600, 354.660563862069), + TrajectoryPoint(610, 352.453533239782), + TrajectoryPoint(620, 350.269419346282), + TrajectoryPoint(630, 348.103545396908), + TrajectoryPoint(640, 345.952455029112), + TrajectoryPoint(650, 343.828092339714), + TrajectoryPoint(660, 341.712919882817), + TrajectoryPoint(670, 339.62705603907), + TrajectoryPoint(680, 337.553860465795), + TrajectoryPoint(690, 335.50000019761), + TrajectoryPoint(700, 333.468581549406), + TrajectoryPoint(710, 331.447650000944), + TrajectoryPoint(720, 329.456195105124), + TrajectoryPoint(730, 327.476765906696), + TrajectoryPoint(740, 325.515599925019), + TrajectoryPoint(750, 323.577059166331), + TrajectoryPoint(760, 321.649748978644), + TrajectoryPoint(770, 319.747133871286), + TrajectoryPoint(780, 317.859873109628), + TrajectoryPoint(790, 315.985467757623), + TrajectoryPoint(800, 314.137366949025), + TrajectoryPoint(810, 312.300733409882), + TrajectoryPoint(820, 310.480540575317), + TrajectoryPoint(830, 308.681845346624), + TrajectoryPoint(840, 306.894793272802), + TrajectoryPoint(850, 305.125836379044), + TrajectoryPoint(860, 303.375332776532), + TrajectoryPoint(870, 301.636496455236), + TrajectoryPoint(880, 299.915817905577), + TrajectoryPoint(890, 298.212022324272), + TrajectoryPoint(900, 296.519788693651), + TrajectoryPoint(910, 294.844499327861), + TrajectoryPoint(920, 293.18572430559), + TrajectoryPoint(930, 291.538299698869), + TrajectoryPoint(940, 289.905611954089), + TrajectoryPoint(950, 288.290025587958), + TrajectoryPoint(960, 286.685493997892), + TrajectoryPoint(970, 285.092742847463), + TrajectoryPoint(980, 283.518420003648), + TrajectoryPoint(990, 281.954792051268), + TrajectoryPoint(1000, 280.401959270446), + TrajectoryPoint(1010, 278.864411855548), + TrajectoryPoint(1020, 277.339664710456), + TrajectoryPoint(1030, 275.82527021877), + TrajectoryPoint(1040, 274.321595674167), + TrajectoryPoint(1050, 272.833704738262), + TrajectoryPoint(1060, 271.355697852343), + TrajectoryPoint(1070, 269.887589924874), + TrajectoryPoint(1080, 268.430679185858), + TrajectoryPoint(1090, 266.987042898227), + TrajectoryPoint(1100, 265.552801260825), + TrajectoryPoint(1110, 264.127932156465), + TrajectoryPoint(1120, 262.713333334318), + TrajectoryPoint(1130, 261.310988794171), + TrajectoryPoint(1140, 259.917496619146), + TrajectoryPoint(1150, 258.532808025578), + TrajectoryPoint(1160, 257.156862572419), + TrajectoryPoint(1170, 255.792485031092), + TrajectoryPoint(1180, 254.436757364152), + TrajectoryPoint(1190, 253.08924445696), + TrajectoryPoint(1200, 251.749870042421), + TrajectoryPoint(1210, 250.419011150129), + TrajectoryPoint(1220, 249.098143264294), + TrajectoryPoint(1230, 247.784897883706), + TrajectoryPoint(1240, 246.479188562563), + TrajectoryPoint(1250, 245.180922802817), + TrajectoryPoint(1260, 243.890002741704), + TrajectoryPoint(1270, 242.608114697835), + TrajectoryPoint(1280, 241.333298514383), + TrajectoryPoint(1290, 240.065331308404), + TrajectoryPoint(1300, 238.804112153356), + TrajectoryPoint(1310, 237.54953665173), + TrajectoryPoint(1320, 236.301497399213), + TrajectoryPoint(1330, 235.061131748147), + TrajectoryPoint(1340, 233.827033279834), + TrajectoryPoint(1350, 232.599005165637), + TrajectoryPoint(1360, 231.376941151161), + TrajectoryPoint(1370, 230.160733174253), + TrajectoryPoint(1380, 228.950271672266), + TrajectoryPoint(1390, 227.745445862251), + TrajectoryPoint(1400, 226.546662123896), + TrajectoryPoint(1410, 225.35352298062), + TrajectoryPoint(1420, 224.165593878836), + TrajectoryPoint(1430, 222.982767951493), + TrajectoryPoint(1440, 221.804937764672), + TrajectoryPoint(1450, 220.631995499108), + TrajectoryPoint(1460, 219.463833114491), + TrajectoryPoint(1470, 218.300342497839), + TrajectoryPoint(1480, 217.141415597213), + TrajectoryPoint(1490, 215.98694454189), + TrajectoryPoint(1500, 214.83686129325), + TrajectoryPoint(1510, 213.691290814749), + TrajectoryPoint(1520, 212.549807517293), + TrajectoryPoint(1530, 211.41230900981), + TrajectoryPoint(1540, 210.278693285792), + TrajectoryPoint(1550, 209.148858796874), + TrajectoryPoint(1560, 208.022704517951), + TrajectoryPoint(1570, 206.900130004505), + TrajectoryPoint(1580, 205.781035442789), + TrajectoryPoint(1590, 204.66532169343), + TrajectoryPoint(1600, 203.552890329003), + TrajectoryPoint(1610, 202.443643666062), + TrajectoryPoint(1620, 201.337484792092), + TrajectoryPoint(1630, 200.234317587797), + TrajectoryPoint(1640, 199.134046745126), + TrajectoryPoint(1650, 198.036577781376), + TrajectoryPoint(1660, 196.941817049718), + TrajectoryPoint(1670, 195.849671746449), + TrajectoryPoint(1680, 194.760049915236), + TrajectoryPoint(1690, 193.672860448629), + TrajectoryPoint(1700, 192.588013087064), + TrajectoryPoint(1710, 191.505418415587), + TrajectoryPoint(1720, 190.424987858486), + TrajectoryPoint(1730, 189.346633672029), + TrajectoryPoint(1740, 188.270268935464), + TrajectoryPoint(1750, 187.195807540446), + TrajectoryPoint(1760, 186.123164179032), + TrajectoryPoint(1770, 185.052358205946), + TrajectoryPoint(1780, 183.983204984588), + TrajectoryPoint(1790, 182.915613568121), + TrajectoryPoint(1800, 181.849500894911), + TrajectoryPoint(1810, 180.784784663588), + TrajectoryPoint(1820, 179.721383312216), + TrajectoryPoint(1830, 178.659215996897), + TrajectoryPoint(1840, 177.598202569869), + TrajectoryPoint(1850, 176.538263557143), + TrajectoryPoint(1860, 175.479363769597), + TrajectoryPoint(1870, 174.421427705209), + TrajectoryPoint(1880, 173.364318661386), + TrajectoryPoint(1890, 172.307959128872), + TrajectoryPoint(1900, 171.252272170697), + TrajectoryPoint(1910, 170.197181396571), + TrajectoryPoint(1920, 169.142619283827), + TrajectoryPoint(1930, 168.088542697927), + TrajectoryPoint(1940, 167.034819310001), + TrajectoryPoint(1950, 165.981374273152), + TrajectoryPoint(1960, 164.928133163716), + TrajectoryPoint(1970, 163.875023027652), + TrajectoryPoint(1980, 162.82196422019), + TrajectoryPoint(1990, 161.768868610692), + TrajectoryPoint(2000, 160.715662863601), + TrajectoryPoint(2010, 159.66227393177), + TrajectoryPoint(2020, 158.608578090986), + TrajectoryPoint(2030, 157.554527852596), + TrajectoryPoint(2040, 156.500054501047), + TrajectoryPoint(2050, 155.445065091192), + TrajectoryPoint(2060, 154.389409065964), + TrajectoryPoint(2070, 153.333088921158), + TrajectoryPoint(2080, 152.276032204878), + TrajectoryPoint(2090, 151.218019301767), + TrajectoryPoint(2100, 150.159076943771), + TrajectoryPoint(2110, 149.099154970456), + TrajectoryPoint(2120, 148.037992273448), + TrajectoryPoint(2130, 146.975637471456), + TrajectoryPoint(2140, 145.912053252946), + TrajectoryPoint(2150, 144.846879976045), + TrajectoryPoint(2160, 143.780305379313), + TrajectoryPoint(2170, 142.712114332152), + TrajectoryPoint(2180, 141.642147562469), + TrajectoryPoint(2190, 140.570525911569), + TrajectoryPoint(2200, 139.496770987418), + TrajectoryPoint(2210, 138.421166027237), + TrajectoryPoint(2220, 137.343327739557), + TrajectoryPoint(2230, 136.26331632478), + TrajectoryPoint(2240, 135.18093363586), + TrajectoryPoint(2250, 134.096080328852), + TrajectoryPoint(2260, 133.008666839912), + TrajectoryPoint(2270, 131.918522966773), + TrajectoryPoint(2280, 130.825566111821), + TrajectoryPoint(2290, 129.729668710133), + TrajectoryPoint(2300, 128.630628706097), + TrajectoryPoint(2310, 127.528499364839), + TrajectoryPoint(2320, 126.422807924827), + TrajectoryPoint(2330, 125.31385881044), + TrajectoryPoint(2340, 124.201010328155), + TrajectoryPoint(2350, 123.084487642166), + TrajectoryPoint(2360, 121.964092598988), + TrajectoryPoint(2370, 120.839345574661), + TrajectoryPoint(2380, 119.710494607687), + TrajectoryPoint(2390, 118.577200943165), + TrajectoryPoint(2400, 117.43905953008), + TrajectoryPoint(2410, 116.29623314359), + TrajectoryPoint(2420, 115.148512102922), + TrajectoryPoint(2430, 113.995299524828), + TrajectoryPoint(2440, 112.836685381886), + TrajectoryPoint(2450, 111.672505495286), + TrajectoryPoint(2460, 110.502514162983), + TrajectoryPoint(2470, 109.326363229242), + TrajectoryPoint(2480, 108.143654313685), + TrajectoryPoint(2490, 106.954358774437), + TrajectoryPoint(2500, 105.758189111665), + TrajectoryPoint(2510, 104.55484535341), + TrajectoryPoint(2520, 103.344014485055), + TrajectoryPoint(2530, 102.125369835799), + TrajectoryPoint(2540, 100.898570419754), + TrajectoryPoint(2550, 99.6632602289389), + TrajectoryPoint(2560, 98.4190674752137), + TrajectoryPoint(2570, 97.1656037778128), + TrajectoryPoint(2580, 95.9024632928412), + TrajectoryPoint(2590, 94.6292217806866), + TrajectoryPoint(2600, 93.345435606903), + TrajectoryPoint(2610, 92.0506406716688), + TrajectoryPoint(2620, 90.7443512624303), + TrajectoryPoint(2630, 89.4255547962579), + TrajectoryPoint(2640, 88.0940641243211), + TrajectoryPoint(2650, 86.7493680635676), + TrajectoryPoint(2660, 85.3907031603099), + TrajectoryPoint(2670, 84.0167941204665), + TrajectoryPoint(2680, 82.6276698469137), + TrajectoryPoint(2690, 81.221873828954), + TrajectoryPoint(2700, 79.7987759172389), + TrajectoryPoint(2710, 78.3572557497955), + TrajectoryPoint(2720, 76.8963964307387), + TrajectoryPoint(2730, 75.4145537036169), + TrajectoryPoint(2740, 73.9111164894967), + TrajectoryPoint(2750, 72.3841686044142), + TrajectoryPoint(2760, 70.8319808913), + TrajectoryPoint(2770, 69.2532194288865), + TrajectoryPoint(2780, 67.6458667832983), + TrajectoryPoint(2790, 66.0077138236099), + TrajectoryPoint(2800, 64.3363373571012), + TrajectoryPoint(2810, 62.6290744844389), + TrajectoryPoint(2820, 60.8829931051843), + TrajectoryPoint(2830, 59.0938465540543), + TrajectoryPoint(2840, 57.2582300062206), + TrajectoryPoint(2850, 55.3713949995749), + TrajectoryPoint(2860, 53.4278724266371), + TrajectoryPoint(2870, 51.4204596199541), + TrajectoryPoint(2880, 49.3420889863206), + TrajectoryPoint(2890, 47.1832671991707), + TrajectoryPoint(2900, 44.9318026426547), + TrajectoryPoint(2910, 42.5731755042324), + TrajectoryPoint(2920, 40.0883399270314), + TrajectoryPoint(2930, 37.4525610208921), + TrajectoryPoint(2940, 34.6306271992805), + TrajectoryPoint(2950, 31.5729908812172), + TrajectoryPoint(2960, 28.2039041437284), + TrajectoryPoint(2970, 24.3918452395342), + TrajectoryPoint(2980, 19.8875726102464), + TrajectoryPoint(2990, 14.0393472693167), + TrajectoryPoint(3000, 0), +}; +TrajectoryPoint t6_open[] = { + TrajectoryPoint(0, 491.462437549768), + TrajectoryPoint(10, 489.379712617304), + TrajectoryPoint(20, 487.292182881464), + TrajectoryPoint(30, 485.195308275166), + TrajectoryPoint(40, 483.098433668869), + TrajectoryPoint(50, 480.985124362365), + TrajectoryPoint(60, 478.870234647171), + TrajectoryPoint(70, 476.745950078586), + TrajectoryPoint(80, 474.612653518557), + TrajectoryPoint(90, 472.476838243683), + TrajectoryPoint(100, 470.324731338337), + TrajectoryPoint(110, 468.172624432992), + TrajectoryPoint(120, 466.005468776384), + TrajectoryPoint(130, 463.834135778838), + TrajectoryPoint(140, 461.65382405153), + TrajectoryPoint(150, 459.462836461792), + TrajectoryPoint(160, 457.268710736369), + TrajectoryPoint(170, 455.057626768234), + TrajectoryPoint(180, 452.846542800098), + TrajectoryPoint(190, 450.617359442783), + TrajectoryPoint(200, 448.385723462656), + TrajectoryPoint(210, 446.140837174581), + TrajectoryPoint(220, 443.888179110438), + TrajectoryPoint(230, 441.626809920875), + TrajectoryPoint(240, 439.352644639431), + TrajectoryPoint(250, 437.073972055534), + TrajectoryPoint(260, 434.777798705549), + TrajectoryPoint(270, 432.480959329006), + TrajectoryPoint(280, 430.162260648487), + TrajectoryPoint(290, 427.843561967967), + TrajectoryPoint(300, 425.504587209956), + TrajectoryPoint(310, 423.162828794852), + TrajectoryPoint(320, 420.803269030112), + TrajectoryPoint(330, 418.437898561902), + TrajectoryPoint(340, 416.056726904515), + TrajectoryPoint(350, 413.667173333887), + TrajectoryPoint(360, 411.263307782365), + TrajectoryPoint(370, 408.848980465945), + TrajectoryPoint(380, 406.421280484921), + TrajectoryPoint(390, 403.981568271791), + TrajectoryPoint(400, 401.528831121062), + TrajectoryPoint(410, 399.063101385507), + TrajectoryPoint(420, 396.584058174739), + TrajectoryPoint(430, 394.091655791379), + TrajectoryPoint(440, 391.584967236608), + TrajectoryPoint(450, 389.06521349376), + TrajectoryPoint(460, 386.529465349485), + TrajectoryPoint(470, 383.981656796214), + TrajectoryPoint(480, 381.415354934194), + TrajectoryPoint(490, 378.838762156147), + TrajectoryPoint(500, 376.240327259089), + TrajectoryPoint(510, 373.634193577772), + TrajectoryPoint(520, 371.001955412785), + TrajectoryPoint(530, 368.365288319669), + TrajectoryPoint(540, 365.697686735469), + TrajectoryPoint(550, 363.024425049035), + TrajectoryPoint(560, 360.324834659557), + TrajectoryPoint(570, 357.808821406912), + TrajectoryPoint(580, 355.603230874743), + TrajectoryPoint(590, 353.416686222753), + TrajectoryPoint(600, 351.24346987129), + TrajectoryPoint(610, 349.096897323424), + TrajectoryPoint(620, 346.958552408028), + TrajectoryPoint(630, 344.849789732894), + TrajectoryPoint(640, 342.752264375336), + TrajectoryPoint(650, 340.675343241069), + TrajectoryPoint(660, 338.618689890455), + TrajectoryPoint(670, 336.573222940984), + TrajectoryPoint(680, 334.557297568576), + TrajectoryPoint(690, 332.551327106871), + TrajectoryPoint(700, 330.567304717794), + TrajectoryPoint(710, 328.601864352275), + TrajectoryPoint(720, 326.647713871543), + TrajectoryPoint(730, 324.72225219659), + TrajectoryPoint(740, 322.807515758115), + TrajectoryPoint(750, 320.911194954742), + TrajectoryPoint(760, 319.035686994102), + TrajectoryPoint(770, 317.171380787399), + TrajectoryPoint(780, 315.330158137077), + TrajectoryPoint(790, 313.504066141523), + TrajectoryPoint(800, 311.689474913661), + TrajectoryPoint(810, 309.900502040529), + TrajectoryPoint(820, 308.122902829243), + TrajectoryPoint(830, 306.358974339333), + TrajectoryPoint(840, 304.617335759212), + TrajectoryPoint(850, 302.886986586766), + TrajectoryPoint(860, 301.170997114872), + TrajectoryPoint(870, 299.475179912819), + TrajectoryPoint(880, 297.790586310029), + TrajectoryPoint(890, 296.119719419639), + TrajectoryPoint(900, 294.468148168004), + TrajectoryPoint(910, 292.827627756767), + TrajectoryPoint(920, 291.199156396652), + TrajectoryPoint(930, 289.590103474277), + TrajectoryPoint(940, 287.991842642884), + TrajectoryPoint(950, 286.404529551622), + TrajectoryPoint(960, 284.834787639717), + TrajectoryPoint(970, 283.276889858344), + TrajectoryPoint(980, 281.729570741622), + TrajectoryPoint(990, 280.195925471571), + TrajectoryPoint(1000, 278.676451184232), + TrajectoryPoint(1010, 277.167143793967), + TrajectoryPoint(1020, 275.668055063775), + TrajectoryPoint(1030, 274.184304743214), + TrajectoryPoint(1040, 272.71102938647), + TrajectoryPoint(1050, 271.247505003057), + TrajectoryPoint(1060, 269.794379637349), + TrajectoryPoint(1070, 268.355181814537), + TrajectoryPoint(1080, 266.925254447926), + TrajectoryPoint(1090, 265.504584331959), + TrajectoryPoint(1100, 264.093762465101), + TrajectoryPoint(1110, 262.695515003384), + TrajectoryPoint(1120, 261.306024771372), + TrajectoryPoint(1130, 259.925250701435), + TrajectoryPoint(1140, 258.553139777871), + TrajectoryPoint(1150, 257.192576013266), + TrajectoryPoint(1160, 255.840625720184), + TrajectoryPoint(1170, 254.496826251001), + TrajectoryPoint(1180, 253.161107656844), + TrajectoryPoint(1190, 251.834115762726), + TrajectoryPoint(1200, 250.516873518626), + TrajectoryPoint(1210, 249.207209492411), + TrajectoryPoint(1220, 247.90504257648), + TrajectoryPoint(1230, 246.610285361939), + TrajectoryPoint(1240, 245.323200473145), + TrajectoryPoint(1250, 244.044944484838), + TrajectoryPoint(1260, 242.773610988068), + TrajectoryPoint(1270, 241.509107304524), + TrajectoryPoint(1280, 240.251336568219), + TrajectoryPoint(1290, 239.00019823826), + TrajectoryPoint(1300, 237.756168981327), + TrajectoryPoint(1310, 236.519356079147), + TrajectoryPoint(1320, 235.28871404392), + TrajectoryPoint(1330, 234.064141989958), + TrajectoryPoint(1340, 232.845536720993), + TrajectoryPoint(1350, 231.632793073893), + TrajectoryPoint(1360, 230.425804233165), + TrajectoryPoint(1370, 229.224941876566), + TrajectoryPoint(1380, 228.030002854653), + TrajectoryPoint(1390, 226.840393574009), + TrajectoryPoint(1400, 225.656010232137), + TrajectoryPoint(1410, 224.476748138883), + TrajectoryPoint(1420, 223.302501922764), + TrajectoryPoint(1430, 222.133165718442), + TrajectoryPoint(1440, 220.968633336768), + TrajectoryPoint(1450, 219.808798418717), + TrajectoryPoint(1460, 218.653687783351), + TrajectoryPoint(1470, 217.503351156827), + TrajectoryPoint(1480, 216.357336236767), + TrajectoryPoint(1490, 215.215541600524), + TrajectoryPoint(1500, 214.077865959229), + TrajectoryPoint(1510, 212.944208254951), + TrajectoryPoint(1520, 211.814467747675), + TrajectoryPoint(1530, 210.688544092908), + TrajectoryPoint(1540, 209.566337410641), + TrajectoryPoint(1550, 208.447748346367), + TrajectoryPoint(1560, 207.332678124779), + TrajectoryPoint(1570, 206.221028596742), + TrajectoryPoint(1580, 205.112702280078), + TrajectoryPoint(1590, 204.007602394669), + TrajectoryPoint(1600, 202.90563289234), + TrajectoryPoint(1610, 201.806698481948), + TrajectoryPoint(1620, 200.710704650078), + TrajectoryPoint(1630, 199.617557677701), + TrajectoryPoint(1640, 198.527164653146), + TrajectoryPoint(1650, 197.439433481671), + TrajectoryPoint(1660, 196.354272891944), + TrajectoryPoint(1670, 195.271592439683), + TrajectoryPoint(1680, 194.191302508698), + TrajectoryPoint(1690, 193.113314309558), + TrajectoryPoint(1700, 192.0375398761), + TrajectoryPoint(1710, 190.963892059942), + TrajectoryPoint(1720, 189.892284523207), + TrajectoryPoint(1730, 188.82263172959), + TrajectoryPoint(1740, 187.754848933928), + TrajectoryPoint(1750, 186.688852170404), + TrajectoryPoint(1760, 185.62455823951), + TrajectoryPoint(1770, 184.561884693882), + TrajectoryPoint(1780, 183.500749823105), + TrajectoryPoint(1790, 182.441092124742), + TrajectoryPoint(1800, 181.382898598308), + TrajectoryPoint(1810, 180.325995390523), + TrajectoryPoint(1820, 179.270302887053), + TrajectoryPoint(1830, 178.21574215079), + TrajectoryPoint(1840, 177.162234900164), + TrajectoryPoint(1850, 176.109703487055), + TrajectoryPoint(1860, 175.058070874361), + TrajectoryPoint(1870, 174.007260613263), + TrajectoryPoint(1880, 172.957273278608), + TrajectoryPoint(1890, 171.907945437882), + TrajectoryPoint(1900, 170.85919970078), + TrajectoryPoint(1910, 169.810961296547), + TrajectoryPoint(1920, 168.763155936466), + TrajectoryPoint(1930, 167.715713881046), + TrajectoryPoint(1940, 166.668582634656), + TrajectoryPoint(1950, 165.621646744611), + TrajectoryPoint(1960, 164.57483323541), + TrajectoryPoint(1970, 163.528069491258), + TrajectoryPoint(1980, 162.48127784464), + TrajectoryPoint(1990, 161.434367871891), + TrajectoryPoint(2000, 160.387271536359), + TrajectoryPoint(2010, 159.339917073519), + TrajectoryPoint(2020, 158.292215230168), + TrajectoryPoint(2030, 157.244045923679), + TrajectoryPoint(2040, 156.195382174117), + TrajectoryPoint(2050, 155.146152651484), + TrajectoryPoint(2060, 154.096201957997), + TrajectoryPoint(2070, 153.045475682509), + TrajectoryPoint(2080, 151.993945974813), + TrajectoryPoint(2090, 150.941470727309), + TrajectoryPoint(2100, 149.887915298549), + TrajectoryPoint(2110, 148.833316488452), + TrajectoryPoint(2120, 147.777504714374), + TrajectoryPoint(2130, 146.720338285409), + TrajectoryPoint(2140, 145.661885388165), + TrajectoryPoint(2150, 144.601874691968), + TrajectoryPoint(2160, 143.540297849069), + TrajectoryPoint(2170, 142.477159931246), + TrajectoryPoint(2180, 141.41206426564), + TrajectoryPoint(2190, 140.345257222658), + TrajectoryPoint(2200, 139.276374682147), + TrajectoryPoint(2210, 138.205462328844), + TrajectoryPoint(2220, 137.132384142624), + TrajectoryPoint(2230, 136.056946192636), + TrajectoryPoint(2240, 134.979211611432), + TrajectoryPoint(2250, 133.898815397383), + TrajectoryPoint(2260, 132.815938524625), + TrajectoryPoint(2270, 131.730138048489), + TrajectoryPoint(2280, 130.641606988911), + TrajectoryPoint(2290, 129.549941866577), + TrajectoryPoint(2300, 128.455217639162), + TrajectoryPoint(2310, 127.357211939182), + TrajectoryPoint(2320, 126.255727160004), + TrajectoryPoint(2330, 125.15088813489), + TrajectoryPoint(2340, 124.042045471977), + TrajectoryPoint(2350, 122.929571584419), + TrajectoryPoint(2360, 121.813032577904), + TrajectoryPoint(2370, 120.692227258067), + TrajectoryPoint(2380, 119.567267873082), + TrajectoryPoint(2390, 118.437673700185), + TrajectoryPoint(2400, 117.30331805144), + TrajectoryPoint(2410, 116.164227158845), + TrajectoryPoint(2420, 115.02012489874), + TrajectoryPoint(2430, 113.870472164399), + TrajectoryPoint(2440, 112.715438900117), + TrajectoryPoint(2450, 111.554789511499), + TrajectoryPoint(2460, 110.388278182147), + TrajectoryPoint(2470, 109.215422632291), + TrajectoryPoint(2480, 108.036091567496), + TrajectoryPoint(2490, 106.850123693671), + TrajectoryPoint(2500, 105.657231483005), + TrajectoryPoint(2510, 104.457114960015), + TrajectoryPoint(2520, 103.249461128895), + TrajectoryPoint(2530, 102.033943358115), + TrajectoryPoint(2540, 100.810220719813), + TrajectoryPoint(2550, 99.5779372812867), + TrajectoryPoint(2560, 98.336721345563), + TrajectoryPoint(2570, 97.0861846377244), + TrajectoryPoint(2580, 95.8259214333161), + TrajectoryPoint(2590, 94.5555076247842), + TrajectoryPoint(2600, 93.2744997214876), + TrajectoryPoint(2610, 91.9824337783719), + TrajectoryPoint(2620, 90.6788242479101), + TrajectoryPoint(2630, 89.3627645931361), + TrajectoryPoint(2640, 88.0338520938974), + TrajectoryPoint(2650, 86.6916854615471), + TrajectoryPoint(2660, 85.3356022780388), + TrajectoryPoint(2670, 83.9641210828783), + TrajectoryPoint(2680, 82.5773764191885), + TrajectoryPoint(2690, 81.1740049783589), + TrajectoryPoint(2700, 79.7531856090451), + TrajectoryPoint(2710, 78.3139848376293), + TrajectoryPoint(2720, 76.8553033971801), + TrajectoryPoint(2730, 75.3756741369541), + TrajectoryPoint(2740, 73.8743969486829), + TrajectoryPoint(2750, 72.3494739135721), + TrajectoryPoint(2760, 70.7993393961434), + TrajectoryPoint(2770, 69.2225768518375), + TrajectoryPoint(2780, 67.6171685312658), + TrajectoryPoint(2790, 65.9809050490019), + TrajectoryPoint(2800, 64.3113630153795), + TrajectoryPoint(2810, 62.60587938855), + TrajectoryPoint(2820, 60.8615219771788), + TrajectoryPoint(2830, 59.074103465051), + TrajectoryPoint(2840, 57.2400961559979), + TrajectoryPoint(2850, 55.3548690078386), + TrajectoryPoint(2860, 53.4128401051064), + TrajectoryPoint(2870, 51.4069128813601), + TrajectoryPoint(2880, 49.329964842355), + TrajectoryPoint(2890, 47.1725020336528), + TrajectoryPoint(2900, 44.92237268972), + TrajectoryPoint(2910, 42.5649719968482), + TrajectoryPoint(2920, 40.0813316665653), + TrajectoryPoint(2930, 37.4466751235382), + TrajectoryPoint(2940, 34.6258179202231), + TrajectoryPoint(2950, 31.5691761853542), + TrajectoryPoint(2960, 28.2010221004294), + TrajectoryPoint(2970, 24.3898027714716), + TrajectoryPoint(2980, 19.8863031618382), + TrajectoryPoint(2990, 14.0387664881145), + TrajectoryPoint(3000, 0), +}; +TrajectoryPoint t7_open[] = { + TrajectoryPoint(0, 486.660814948149), + TrajectoryPoint(10, 484.596148511444), + TrajectoryPoint(20, 482.52584171389), + TrajectoryPoint(30, 480.447515471832), + TrajectoryPoint(40, 478.369038909708), + TrajectoryPoint(50, 476.273006098312), + TrajectoryPoint(60, 474.176973286915), + TrajectoryPoint(70, 472.06956262566), + TrajectoryPoint(80, 469.95544171111), + TrajectoryPoint(90, 467.836248290991), + TrajectoryPoint(100, 465.703646383332), + TrajectoryPoint(110, 463.571044475673), + TrajectoryPoint(120, 461.420599655275), + TrajectoryPoint(130, 459.269112047477), + TrajectoryPoint(140, 457.105272345394), + TrajectoryPoint(150, 454.93448202887), + TrajectoryPoint(160, 452.756591610395), + TrajectoryPoint(170, 450.566068765502), + TrajectoryPoint(180, 448.373438683061), + TrajectoryPoint(190, 446.162740143029), + TrajectoryPoint(200, 443.952041602997), + TrajectoryPoint(210, 441.723315153173), + TrajectoryPoint(220, 439.491983839771), + TrajectoryPoint(230, 437.246561303749), + TrajectoryPoint(240, 434.994125632891), + TrajectoryPoint(250, 432.731191860915), + TrajectoryPoint(260, 430.457165116247), + TrajectoryPoint(270, 428.175862910846), + TrajectoryPoint(280, 425.879742583239), + TrajectoryPoint(290, 423.579170226921), + TrajectoryPoint(300, 421.26043731761), + TrajectoryPoint(310, 418.93964592728), + TrajectoryPoint(320, 416.597764212217), + TrajectoryPoint(330, 414.25575490623), + TrajectoryPoint(340, 411.890170159039), + TrajectoryPoint(350, 409.524585411847), + TrajectoryPoint(360, 407.136030192172), + TrajectoryPoint(370, 404.746169362869), + TrajectoryPoint(380, 402.333643363933), + TrajectoryPoint(390, 399.918913710364), + TrajectoryPoint(400, 397.481228332273), + TrajectoryPoint(410, 395.041016500959), + TrajectoryPoint(420, 392.576918635716), + TrajectoryPoint(430, 390.110589688523), + TrajectoryPoint(440, 387.618757629711), + TrajectoryPoint(450, 385.125252606899), + TrajectoryPoint(460, 382.604693055793), + TrajectoryPoint(470, 380.081292831057), + TrajectoryPoint(480, 377.53257121215), + TrajectoryPoint(490, 374.977746614056), + TrajectoryPoint(500, 372.400130691078), + TrajectoryPoint(510, 369.812265520399), + TrajectoryPoint(520, 367.204995645349), + TrajectoryPoint(530, 364.582380820962), + TrajectoryPoint(540, 361.944668541655), + TrajectoryPoint(550, 359.285495776845), + TrajectoryPoint(560, 356.616522355015), + TrajectoryPoint(570, 354.399260232196), + TrajectoryPoint(580, 352.240015989844), + TrajectoryPoint(590, 350.108572817777), + TrajectoryPoint(600, 347.988707954534), + TrajectoryPoint(610, 345.888757179014), + TrajectoryPoint(620, 343.808587335196), + TrajectoryPoint(630, 341.739888168349), + TrajectoryPoint(640, 339.699514299151), + TrajectoryPoint(650, 337.668349362137), + TrajectoryPoint(660, 335.661060592562), + TrajectoryPoint(670, 333.669826368116), + TrajectoryPoint(680, 331.692546673794), + TrajectoryPoint(690, 329.740890301969), + TrajectoryPoint(700, 327.799442690578), + TrajectoryPoint(710, 325.880507175304), + TrajectoryPoint(720, 323.978161400915), + TrajectoryPoint(730, 322.087479895422), + TrajectoryPoint(740, 320.223555536362), + TrajectoryPoint(750, 318.370351952941), + TrajectoryPoint(760, 316.53420424058), + TrajectoryPoint(770, 314.718495753322), + TrajectoryPoint(780, 312.913838302188), + TrajectoryPoint(790, 311.129488975498), + TrajectoryPoint(800, 309.361191045715), + TrajectoryPoint(810, 307.604115421654), + TrajectoryPoint(820, 305.868779915492), + TrajectoryPoint(830, 304.146769553572), + TrajectoryPoint(840, 302.436010374018), + TrajectoryPoint(850, 300.74691901707), + TrajectoryPoint(860, 299.069818245982), + TrajectoryPoint(870, 297.40387571384), + TrajectoryPoint(880, 295.758318910417), + TrajectoryPoint(890, 294.124555340981), + TrajectoryPoint(900, 292.501756649291), + TrajectoryPoint(910, 290.897115535511), + TrajectoryPoint(920, 289.304977213173), + TrajectoryPoint(930, 287.723530368441), + TrajectoryPoint(940, 286.157296490286), + TrajectoryPoint(950, 284.604979378008), + TrajectoryPoint(960, 283.063018684483), + TrajectoryPoint(970, 281.532805518535), + TrajectoryPoint(980, 280.018453229286), + TrajectoryPoint(990, 278.514076613715), + TrajectoryPoint(1000, 277.019738746315), + TrajectoryPoint(1010, 275.539361250464), + TrajectoryPoint(1020, 274.070660114859), + TrajectoryPoint(1030, 272.611557127073), + TrajectoryPoint(1040, 271.162068089096), + TrajectoryPoint(1050, 269.726876316377), + TrajectoryPoint(1060, 268.301100607484), + TrajectoryPoint(1070, 266.884462673618), + TrajectoryPoint(1080, 265.477019365918), + TrajectoryPoint(1090, 264.082706095692), + TrajectoryPoint(1100, 262.697051061193), + TrajectoryPoint(1110, 261.320021188148), + TrajectoryPoint(1120, 259.951571152876), + TrajectoryPoint(1130, 258.594452650838), + TrajectoryPoint(1140, 257.246109934625), + TrajectoryPoint(1150, 255.905851075749), + TrajectoryPoint(1160, 254.573612681246), + TrajectoryPoint(1170, 253.250139342003), + TrajectoryPoint(1180, 251.93635082744), + TrajectoryPoint(1190, 250.630093692621), + TrajectoryPoint(1200, 249.331292376066), + TrajectoryPoint(1210, 248.039864754323), + TrajectoryPoint(1220, 246.756416471113), + TrajectoryPoint(1230, 245.481491213966), + TrajectoryPoint(1240, 244.213463050712), + TrajectoryPoint(1250, 242.952243743747), + TrajectoryPoint(1260, 241.697740646122), + TrajectoryPoint(1270, 240.44985722207), + TrajectoryPoint(1280, 239.209632109046), + TrajectoryPoint(1290, 237.976100333045), + TrajectoryPoint(1300, 236.748734462669), + TrajectoryPoint(1310, 235.52743696283), + TrajectoryPoint(1320, 234.312107813031), + TrajectoryPoint(1330, 233.102644858798), + TrajectoryPoint(1340, 231.899148143101), + TrajectoryPoint(1350, 230.70210125475), + TrajectoryPoint(1360, 229.510497033724), + TrajectoryPoint(1370, 228.32423530846), + TrajectoryPoint(1380, 227.143214659562), + TrajectoryPoint(1390, 225.967332653146), + TrajectoryPoint(1400, 224.796486053632), + TrajectoryPoint(1410, 223.6305710175), + TrajectoryPoint(1420, 222.469483269394), + TrajectoryPoint(1430, 221.313573631851), + TrajectoryPoint(1440, 220.162320333145), + TrajectoryPoint(1450, 219.015517101023), + TrajectoryPoint(1460, 217.873064097935), + TrajectoryPoint(1470, 216.734861427814), + TrajectoryPoint(1480, 215.600809249083), + TrajectoryPoint(1490, 214.470807876416), + TrajectoryPoint(1500, 213.344757872134), + TrajectoryPoint(1510, 212.222560128032), + TrajectoryPoint(1520, 211.104115938381), + TrajectoryPoint(1530, 209.989327064803), + TrajectoryPoint(1540, 208.878095793658), + TrajectoryPoint(1550, 207.770324986526), + TrajectoryPoint(1560, 206.665918124355), + TrajectoryPoint(1570, 205.564779345768), + TrajectoryPoint(1580, 204.466813479996), + TrajectoryPoint(1590, 203.371926074892), + TrajectoryPoint(1600, 202.280052476617), + TrajectoryPoint(1610, 201.191064672811), + TrajectoryPoint(1620, 200.104859932958), + TrajectoryPoint(1630, 199.021348750639), + TrajectoryPoint(1640, 197.940442312883), + TrajectoryPoint(1650, 196.86205562593), + TrajectoryPoint(1660, 195.786137099552), + TrajectoryPoint(1670, 194.712569311271), + TrajectoryPoint(1680, 193.641264899292), + TrajectoryPoint(1690, 192.572137303969), + TrajectoryPoint(1700, 191.505100762284), + TrajectoryPoint(1710, 190.440070300606), + TrajectoryPoint(1720, 189.376961725873), + TrajectoryPoint(1730, 188.315691615355), + TrajectoryPoint(1740, 187.256177305101), + TrajectoryPoint(1750, 186.198336877204), + TrajectoryPoint(1760, 185.142089145986), + TrajectoryPoint(1770, 184.0873536432), + TrajectoryPoint(1780, 183.034050602341), + TrajectoryPoint(1790, 181.982100942149), + TrajectoryPoint(1800, 180.931426249375), + TrajectoryPoint(1810, 179.881952264116), + TrajectoryPoint(1820, 178.833692019705), + TrajectoryPoint(1830, 177.786465792625), + TrajectoryPoint(1840, 176.740197073365), + TrajectoryPoint(1850, 175.69480994722), + TrajectoryPoint(1860, 174.650229072231), + TrajectoryPoint(1870, 173.606379656859), + TrajectoryPoint(1880, 172.563187437423), + TrajectoryPoint(1890, 171.520621497372), + TrajectoryPoint(1900, 170.478573071639), + TrajectoryPoint(1910, 169.43694699576), + TrajectoryPoint(1920, 168.39567047863), + TrajectoryPoint(1930, 167.354671149829), + TrajectoryPoint(1940, 166.313879971939), + TrajectoryPoint(1950, 165.273227305364), + TrajectoryPoint(1960, 164.232618979775), + TrajectoryPoint(1970, 163.191983715932), + TrajectoryPoint(1980, 162.151250534376), + TrajectoryPoint(1990, 161.110325488039), + TrajectoryPoint(2000, 160.069129163946), + TrajectoryPoint(2010, 159.027602941595), + TrajectoryPoint(2020, 157.985676466675), + TrajectoryPoint(2030, 156.943218845248), + TrajectoryPoint(2040, 155.900167480302), + TrajectoryPoint(2050, 154.856483100845), + TrajectoryPoint(2060, 153.812078919316), + TrajectoryPoint(2070, 152.76675790669), + TrajectoryPoint(2080, 151.72056936332), + TrajectoryPoint(2090, 150.673442925454), + TrajectoryPoint(2100, 149.625109367937), + TrajectoryPoint(2110, 148.575655930408), + TrajectoryPoint(2120, 147.525027091347), + TrajectoryPoint(2130, 146.472876870746), + TrajectoryPoint(2140, 145.419381345343), + TrajectoryPoint(2150, 144.364375488945), + TrajectoryPoint(2160, 143.307631266869), + TrajectoryPoint(2170, 142.249297524064), + TrajectoryPoint(2180, 141.189003542312), + TrajectoryPoint(2190, 140.126853059969), + TrajectoryPoint(2200, 139.062690870546), + TrajectoryPoint(2210, 137.996317707886), + TrajectoryPoint(2220, 136.927851187692), + TrajectoryPoint(2230, 135.856837786742), + TrajectoryPoint(2240, 134.783606516015), + TrajectoryPoint(2250, 133.707522851733), + TrajectoryPoint(2260, 132.629041457479), + TrajectoryPoint(2270, 131.547444083197), + TrajectoryPoint(2280, 130.46320134647), + TrajectoryPoint(2290, 129.375632335805), + TrajectoryPoint(2300, 128.285090070687), + TrajectoryPoint(2310, 127.191075855452), + TrajectoryPoint(2320, 126.093667564109), + TrajectoryPoint(2330, 124.992717666221), + TrajectoryPoint(2340, 123.887846971164), + TrajectoryPoint(2350, 122.779296861176), + TrajectoryPoint(2360, 121.666491476579), + TrajectoryPoint(2370, 120.549506439508), + TrajectoryPoint(2380, 119.428318792048), + TrajectoryPoint(2390, 118.30230731804), + TrajectoryPoint(2400, 117.171621151242), + TrajectoryPoint(2410, 116.03615107118), + TrajectoryPoint(2420, 114.895484945392), + TrajectoryPoint(2430, 113.749352150098), + TrajectoryPoint(2440, 112.597790206159), + TrajectoryPoint(2450, 111.440563380015), + TrajectoryPoint(2460, 110.277409434154), + TrajectoryPoint(2470, 109.107763053155), + TrajectoryPoint(2480, 107.931706963597), + TrajectoryPoint(2490, 106.748965503704), + TrajectoryPoint(2500, 105.559251121256), + TrajectoryPoint(2510, 104.362263839322), + TrajectoryPoint(2520, 103.157690681642), + TrajectoryPoint(2530, 101.945205055464), + TrajectoryPoint(2540, 100.724466089362), + TrajectoryPoint(2550, 99.4951179233155), + TrajectoryPoint(2560, 98.2567889480153), + TrajectoryPoint(2570, 97.0090909900587), + TrajectoryPoint(2580, 95.7516184393428), + TrajectoryPoint(2590, 94.4839473145945), + TrajectoryPoint(2600, 93.2056342625679), + TrajectoryPoint(2610, 91.9162154859886), + TrajectoryPoint(2620, 90.6152055948366), + TrajectoryPoint(2630, 89.3018017230889), + TrajectoryPoint(2640, 87.9753903933219), + TrajectoryPoint(2650, 86.6356777546464), + TrajectoryPoint(2660, 85.2820705869692), + TrajectoryPoint(2670, 83.9129745012814), + TrajectoryPoint(2680, 82.5285387830767), + TrajectoryPoint(2690, 81.127520563678), + TrajectoryPoint(2700, 79.7089122698112), + TrajectoryPoint(2710, 78.2719627848807), + TrajectoryPoint(2720, 76.8153949307389), + TrajectoryPoint(2730, 75.3379142968893), + TrajectoryPoint(2740, 73.8387339229663), + TrajectoryPoint(2750, 72.3157762393546), + TrajectoryPoint(2760, 70.7676349973495), + TrajectoryPoint(2770, 69.1928131049419), + TrajectoryPoint(2780, 67.5892925064193), + TrajectoryPoint(2790, 65.9548635684414), + TrajectoryPoint(2800, 64.2871027085788), + TrajectoryPoint(2810, 62.5833467444262), + TrajectoryPoint(2820, 60.8406633936496), + TrajectoryPoint(2830, 59.0549231118858), + TrajectoryPoint(2840, 57.2224785882852), + TrajectoryPoint(2850, 55.3388130681981), + TrajectoryPoint(2860, 53.3982348495599), + TrajectoryPoint(2870, 51.3937506119402), + TrajectoryPoint(2880, 49.3181844314639), + TrajectoryPoint(2890, 47.1620417419014), + TrajectoryPoint(2900, 44.9132095361844), + TrajectoryPoint(2910, 42.5570003205028), + TrajectoryPoint(2920, 40.0745212467583), + TrajectoryPoint(2930, 37.4409551943101), + TrajectoryPoint(2940, 34.6211441018107), + TrajectoryPoint(2950, 31.5654688067431), + TrajectoryPoint(2960, 28.1982210345552), + TrajectoryPoint(2970, 24.3878176075679), + TrajectoryPoint(2980, 19.8850692701429), + TrajectoryPoint(2990, 14.0382019377923), + TrajectoryPoint(3000, 0), +}; +TrajectoryPoint t8_open[] = { + TrajectoryPoint(0, 482.432419304485), + TrajectoryPoint(10, 480.366734302352), + TrajectoryPoint(20, 478.294316452994), + TrajectoryPoint(30, 476.215266067988), + TrajectoryPoint(40, 474.134094650682), + TrajectoryPoint(50, 472.037285712667), + TrajectoryPoint(60, 469.940476774652), + TrajectoryPoint(70, 467.829882625219), + TrajectoryPoint(80, 465.714932467905), + TrajectoryPoint(90, 463.592104004629), + TrajectoryPoint(100, 461.458618557657), + TrajectoryPoint(110, 459.322957317805), + TrajectoryPoint(120, 457.170530643401), + TrajectoryPoint(130, 455.018103968997), + TrajectoryPoint(140, 452.849622088485), + TrajectoryPoint(150, 450.677835894419), + TrajectoryPoint(160, 448.494801852423), + TrajectoryPoint(170, 446.303224979792), + TrajectoryPoint(180, 444.104932186964), + TrajectoryPoint(190, 441.893120071231), + TrajectoryPoint(200, 439.678826185846), + TrajectoryPoint(210, 437.446320289432), + TrajectoryPoint(220, 435.213814393017), + TrajectoryPoint(230, 432.961572391933), + TrajectoryPoint(240, 430.707899606545), + TrajectoryPoint(250, 428.437567964323), + TrajectoryPoint(260, 426.162239981063), + TrajectoryPoint(270, 423.872940427329), + TrajectoryPoint(280, 421.575453072472), + TrajectoryPoint(290, 419.26626184561), + TrajectoryPoint(300, 416.946094379777), + TrajectoryPoint(310, 414.616039522768), + TrajectoryPoint(320, 412.272653901052), + TrajectoryPoint(330, 409.920712365718), + TrajectoryPoint(340, 407.553552456125), + TrajectoryPoint(350, 405.178647000026), + TrajectoryPoint(360, 402.787137757371), + TrajectoryPoint(370, 400.388133616109), + TrajectoryPoint(380, 397.971680208288), + TrajectoryPoint(390, 395.547381524325), + TrajectoryPoint(400, 393.105368407635), + TrajectoryPoint(410, 390.654514394909), + TrajectoryPoint(420, 388.186304334802), + TrajectoryPoint(430, 385.707565156403), + TrajectoryPoint(440, 383.212498189762), + TrajectoryPoint(450, 380.704470523691), + TrajectoryPoint(460, 378.181862858394), + TrajectoryPoint(470, 375.643065123916), + TrajectoryPoint(480, 373.092207971077), + TrajectoryPoint(490, 370.521075185409), + TrajectoryPoint(500, 367.941233519292), + TrajectoryPoint(510, 365.336111751268), + TrajectoryPoint(520, 362.725790765554), + TrajectoryPoint(530, 360.085663375322), + TrajectoryPoint(540, 357.553510846317), + TrajectoryPoint(550, 355.399919575575), + TrajectoryPoint(560, 353.259978150606), + TrajectoryPoint(570, 351.137314015269), + TrajectoryPoint(580, 349.035622353165), + TrajectoryPoint(590, 346.943812828319), + TrajectoryPoint(600, 344.880724895773), + TrajectoryPoint(610, 342.826004985817), + TrajectoryPoint(620, 340.795244480765), + TrajectoryPoint(630, 338.779602829698), + TrajectoryPoint(640, 336.778853448289), + TrajectoryPoint(650, 334.802152841558), + TrajectoryPoint(660, 332.835028657664), + TrajectoryPoint(670, 330.892917978247), + TrajectoryPoint(680, 328.964554963966), + TrajectoryPoint(690, 327.050964496887), + TrajectoryPoint(700, 325.160850064674), + TrajectoryPoint(710, 323.281048259448), + TrajectoryPoint(720, 321.42270538191), + TrajectoryPoint(730, 319.580459832752), + TrajectoryPoint(740, 317.748982703256), + TrajectoryPoint(750, 315.943331810125), + TrajectoryPoint(760, 314.148472022709), + TrajectoryPoint(770, 312.368171217432), + TrajectoryPoint(780, 310.60904621147), + TrajectoryPoint(790, 308.860727503621), + TrajectoryPoint(800, 307.129105042963), + TrajectoryPoint(810, 305.415307677264), + TrajectoryPoint(820, 303.712384189747), + TrajectoryPoint(830, 302.026749556044), + TrajectoryPoint(840, 300.357015948813), + TrajectoryPoint(850, 298.698102828426), + TrajectoryPoint(860, 297.055811835381), + TrajectoryPoint(870, 295.428678110227), + TrajectoryPoint(880, 293.812210186811), + TrajectoryPoint(890, 292.210697767046), + TrajectoryPoint(900, 290.624552800927), + TrajectoryPoint(910, 289.048836953628), + TrajectoryPoint(920, 287.485638719373), + TrajectoryPoint(930, 285.938770588338), + TrajectoryPoint(940, 284.402030655887), + TrajectoryPoint(950, 282.875528100405), + TrajectoryPoint(960, 281.365431448771), + TrajectoryPoint(970, 279.865845567304), + TrajectoryPoint(980, 278.376113045761), + TrajectoryPoint(990, 276.898681542691), + TrajectoryPoint(1000, 275.43441238126), + TrajectoryPoint(1010, 273.979583400678), + TrajectoryPoint(1020, 272.534220866898), + TrajectoryPoint(1030, 271.101990660837), + TrajectoryPoint(1040, 269.680217618205), + TrajectoryPoint(1050, 268.267458376922), + TrajectoryPoint(1060, 266.863702540813), + TrajectoryPoint(1070, 265.472477601669), + TrajectoryPoint(1080, 264.09050330695), + TrajectoryPoint(1090, 262.717059300963), + TrajectoryPoint(1100, 261.352108217842), + TrajectoryPoint(1110, 259.998076662371), + TrajectoryPoint(1120, 258.653182809509), + TrajectoryPoint(1130, 257.316302548955), + TrajectoryPoint(1140, 255.987379283775), + TrajectoryPoint(1150, 254.667085321076), + TrajectoryPoint(1160, 253.356588638433), + TrajectoryPoint(1170, 252.053573705757), + TrajectoryPoint(1180, 250.757970719773), + TrajectoryPoint(1190, 249.469703043619), + TrajectoryPoint(1200, 248.189575128404), + TrajectoryPoint(1210, 246.917814074136), + TrajectoryPoint(1220, 245.65292254615), + TrajectoryPoint(1230, 244.394816921711), + TrajectoryPoint(1240, 243.14340893698), + TrajectoryPoint(1250, 241.898606215616), + TrajectoryPoint(1260, 240.661893975167), + TrajectoryPoint(1270, 239.431472135603), + TrajectoryPoint(1280, 238.207209705201), + TrajectoryPoint(1290, 236.989012631021), + TrajectoryPoint(1300, 235.776784191496), + TrajectoryPoint(1310, 234.57042535596), + TrajectoryPoint(1320, 233.370641788231), + TrajectoryPoint(1330, 232.176745727493), + TrajectoryPoint(1340, 230.988301496816), + TrajectoryPoint(1350, 229.8052115384), + TrajectoryPoint(1360, 228.627376906451), + TrajectoryPoint(1370, 227.454697507523), + TrajectoryPoint(1380, 226.287072320119), + TrajectoryPoint(1390, 225.12439959503), + TrajectoryPoint(1400, 223.967199778985), + TrajectoryPoint(1410, 222.814701736747), + TrajectoryPoint(1420, 221.666778010186), + TrajectoryPoint(1430, 220.52333070547), + TrajectoryPoint(1440, 219.384261651317), + TrajectoryPoint(1450, 218.249472529422), + TrajectoryPoint(1460, 217.118864992508), + TrajectoryPoint(1470, 215.992340770928), + TrajectoryPoint(1480, 214.869801768683), + TrajectoryPoint(1490, 213.751150149674), + TrajectoryPoint(1500, 212.636288414936), + TrajectoryPoint(1510, 211.525119471543), + TrajectoryPoint(1520, 210.417733039504), + TrajectoryPoint(1530, 209.3138269912), + TrajectoryPoint(1540, 208.213293837029), + TrajectoryPoint(1550, 207.116041366406), + TrajectoryPoint(1560, 206.021977859575), + TrajectoryPoint(1570, 204.931012128332), + TrajectoryPoint(1580, 203.84305355147), + TrajectoryPoint(1590, 202.758012105371), + TrajectoryPoint(1600, 201.675798390122), + TrajectoryPoint(1610, 200.59632365152), + TrajectoryPoint(1620, 199.519499799284), + TrajectoryPoint(1630, 198.445239421789), + TrajectoryPoint(1640, 197.373455797593), + TrajectoryPoint(1650, 196.304062904022), + TrajectoryPoint(1660, 195.23697542306), + TrajectoryPoint(1670, 194.172108744745), + TrajectoryPoint(1680, 193.109378968298), + TrajectoryPoint(1690, 192.048702901159), + TrajectoryPoint(1700, 190.989998056105), + TrajectoryPoint(1710, 189.933182646619), + TrajectoryPoint(1720, 188.878198737529), + TrajectoryPoint(1730, 187.825008931333), + TrajectoryPoint(1740, 186.773465699824), + TrajectoryPoint(1750, 185.723489081294), + TrajectoryPoint(1760, 184.674999812504), + TrajectoryPoint(1770, 183.627919313434), + TrajectoryPoint(1780, 182.582169671262), + TrajectoryPoint(1790, 181.537673623624), + TrajectoryPoint(1800, 180.494354541248), + TrajectoryPoint(1810, 179.452136409997), + TrajectoryPoint(1820, 178.410943812389), + TrajectoryPoint(1830, 177.370725174022), + TrajectoryPoint(1840, 176.331440980936), + TrajectoryPoint(1850, 175.29294821838), + TrajectoryPoint(1860, 174.255173153992), + TrajectoryPoint(1870, 173.218042569694), + TrajectoryPoint(1880, 172.181483739586), + TrajectoryPoint(1890, 171.145424407669), + TrajectoryPoint(1900, 170.109817008199), + TrajectoryPoint(1910, 169.074575339921), + TrajectoryPoint(1920, 168.03960330826), + TrajectoryPoint(1930, 167.004829928339), + TrajectoryPoint(1940, 165.970184577777), + TrajectoryPoint(1950, 164.935596157115), + TrajectoryPoint(1960, 163.900981744439), + TrajectoryPoint(1970, 162.866266920333), + TrajectoryPoint(1980, 161.831381939927), + TrajectoryPoint(1990, 160.796257301571), + TrajectoryPoint(2000, 159.760767437266), + TrajectoryPoint(2010, 158.724873467251), + TrajectoryPoint(2020, 157.688511580146), + TrajectoryPoint(2030, 156.651606632146), + TrajectoryPoint(2040, 155.61398018234), + TrajectoryPoint(2050, 154.575656235319), + TrajectoryPoint(2060, 153.536565658177), + TrajectoryPoint(2070, 152.49653209329), + TrajectoryPoint(2080, 151.455507984514), + TrajectoryPoint(2090, 150.413485421677), + TrajectoryPoint(2100, 149.37028128537), + TrajectoryPoint(2110, 148.325804102124), + TrajectoryPoint(2120, 147.280093676593), + TrajectoryPoint(2130, 146.232899901482), + TrajectoryPoint(2140, 145.184199881882), + TrajectoryPoint(2150, 144.134028009305), + TrajectoryPoint(2160, 143.08197577587), + TrajectoryPoint(2170, 142.028263812445), + TrajectoryPoint(2180, 140.97265036563), + TrajectoryPoint(2190, 139.915005993894), + TrajectoryPoint(2200, 138.855418961864), + TrajectoryPoint(2210, 137.793438922855), + TrajectoryPoint(2220, 136.72938857102), + TrajectoryPoint(2230, 135.662711664391), + TrajectoryPoint(2240, 134.593727140872), + TrajectoryPoint(2250, 133.521936658692), + TrajectoryPoint(2260, 132.447585887956), + TrajectoryPoint(2270, 131.370188059917), + TrajectoryPoint(2280, 130.290024994876), + TrajectoryPoint(2290, 129.206499745392), + TrajectoryPoint(2300, 128.120011668018), + TrajectoryPoint(2310, 127.029863000871), + TrajectoryPoint(2320, 125.936406895458), + TrajectoryPoint(2330, 124.839223882823), + TrajectoryPoint(2340, 123.738204301365), + TrajectoryPoint(2350, 122.633458586322), + TrajectoryPoint(2360, 121.524270121248), + TrajectoryPoint(2370, 120.410989412811), + TrajectoryPoint(2380, 119.293417062541), + TrajectoryPoint(2390, 118.170918912305), + TrajectoryPoint(2400, 117.043791173909), + TrajectoryPoint(2410, 115.911832382551), + TrajectoryPoint(2420, 114.774496155249), + TrajectoryPoint(2430, 113.631777118127), + TrajectoryPoint(2440, 112.483581852022), + TrajectoryPoint(2450, 111.329674494512), + TrajectoryPoint(2460, 110.169664062161), + TrajectoryPoint(2470, 109.003241349627), + TrajectoryPoint(2480, 107.830361960994), + TrajectoryPoint(2490, 106.65075018957), + TrajectoryPoint(2500, 105.464118461849), + TrajectoryPoint(2510, 104.270166801199), + TrajectoryPoint(2520, 103.068582251414), + TrajectoryPoint(2530, 101.859038257902), + TrajectoryPoint(2540, 100.64119400404), + TrajectoryPoint(2550, 99.4146936999291), + TrajectoryPoint(2560, 98.1791658205251), + TrajectoryPoint(2570, 96.9342222897745), + TrajectoryPoint(2580, 95.6794576070614), + TrajectoryPoint(2590, 94.4144479118905), + TrajectoryPoint(2600, 93.1387499823229), + TrajectoryPoint(2610, 91.8519001622385), + TrajectoryPoint(2620, 90.5534132120059), + TrajectoryPoint(2630, 89.2425876277869), + TrajectoryPoint(2640, 87.918603855618), + TrajectoryPoint(2650, 86.5812730936994), + TrajectoryPoint(2660, 85.2300023137453), + TrajectoryPoint(2670, 83.8632890123968), + TrajectoryPoint(2680, 82.4810946715773), + TrajectoryPoint(2690, 81.0823614150301), + TrajectoryPoint(2700, 79.6658996781679), + TrajectoryPoint(2710, 78.2311363210671), + TrajectoryPoint(2720, 76.7766205630051), + TrajectoryPoint(2730, 75.3012265183905), + TrajectoryPoint(2740, 73.8040824780579), + TrajectoryPoint(2750, 72.2830332295862), + TrajectoryPoint(2760, 70.7368279249012), + TrajectoryPoint(2770, 69.1638909264375), + TrajectoryPoint(2780, 67.5622038809035), + TrajectoryPoint(2790, 65.9295569133427), + TrajectoryPoint(2800, 64.2635262525964), + TrajectoryPoint(2810, 62.5614485776395), + TrajectoryPoint(2820, 60.8203915151314), + TrajectoryPoint(2830, 59.0362817765735), + TrajectoryPoint(2840, 57.2053555670495), + TrajectoryPoint(2850, 55.3232074092806), + TrajectoryPoint(2860, 53.3840387173703), + TrajectoryPoint(2870, 51.3809566746338), + TrajectoryPoint(2880, 49.3067333411177), + TrajectoryPoint(2890, 47.1518735542573), + TrajectoryPoint(2900, 44.9043020177021), + TrajectoryPoint(2910, 42.5492507851539), + TrajectoryPoint(2920, 40.0679004069758), + TrajectoryPoint(2930, 37.4353943110974), + TrajectoryPoint(2940, 34.6166001004217), + TrajectoryPoint(2950, 31.5618642795822), + TrajectoryPoint(2960, 28.195497580552), + TrajectoryPoint(2970, 24.3858873695873), + TrajectoryPoint(2980, 19.8838694619109), + TrajectoryPoint(2990, 14.0376529473327), + TrajectoryPoint(3000, 0), +}; +TrajectoryPoint t9_open[] = { + TrajectoryPoint(0, 478.278547728422), + TrajectoryPoint(10, 476.211500029465), + TrajectoryPoint(20, 474.136178146084), + TrajectoryPoint(30, 472.056290888838), + TrajectoryPoint(40, 469.971428207939), + TrajectoryPoint(50, 467.873729866974), + TrajectoryPoint(60, 465.776031526009), + TrajectoryPoint(70, 463.661251221006), + TrajectoryPoint(80, 461.545357958572), + TrajectoryPoint(90, 459.417885897606), + TrajectoryPoint(100, 457.283402422459), + TrajectoryPoint(110, 455.142624434551), + TrajectoryPoint(120, 452.989143536112), + TrajectoryPoint(130, 450.834414906302), + TrajectoryPoint(140, 448.661516964976), + TrajectoryPoint(150, 446.48861902365), + TrajectoryPoint(160, 444.299413213795), + TrajectoryPoint(170, 442.106665685941), + TrajectoryPoint(180, 439.901675280017), + TrajectoryPoint(190, 437.688632156), + TrajectoryPoint(200, 435.467096158021), + TrajectoryPoint(210, 433.233297391626), + TrajectoryPoint(220, 430.994416183029), + TrajectoryPoint(230, 428.739387090409), + TrajectoryPoint(240, 426.482320202574), + TrajectoryPoint(250, 424.205570828753), + TrajectoryPoint(260, 421.928821454933), + TrajectoryPoint(270, 419.63045901318), + TrajectoryPoint(280, 417.331483463991), + TrajectoryPoint(290, 415.012599629394), + TrajectoryPoint(300, 412.690875366555), + TrajectoryPoint(310, 410.350474773329), + TrajectoryPoint(320, 408.005461870203), + TrajectoryPoint(330, 405.64249694696), + TrajectoryPoint(340, 403.273637302319), + TrajectoryPoint(350, 400.887005100071), + TrajectoryPoint(360, 398.493721607004), + TrajectoryPoint(370, 396.082260397478), + TrajectoryPoint(380, 393.663956064328), + TrajectoryPoint(390, 391.226441689245), + TrajectoryPoint(400, 388.782498709209), + TrajectoryPoint(410, 386.317640659335), + TrajectoryPoint(420, 383.847419425095), + TrajectoryPoint(430, 381.353856625769), + TrajectoryPoint(440, 378.856694685211), + TrajectoryPoint(450, 376.332990962789), + TrajectoryPoint(460, 373.805968806575), + TrajectoryPoint(470, 371.252841112584), + TrajectoryPoint(480, 368.693298395491), + TrajectoryPoint(490, 366.111094150961), + TrajectoryPoint(500, 363.517366273052), + TrajectoryPoint(510, 360.905319867744), + TrajectoryPoint(520, 358.562139740762), + TrajectoryPoint(530, 356.417404465994), + TrajectoryPoint(540, 354.296432124676), + TrajectoryPoint(550, 352.182400328728), + TrajectoryPoint(560, 350.098117929582), + TrajectoryPoint(570, 348.021765758857), + TrajectoryPoint(580, 345.967569559375), + TrajectoryPoint(590, 343.929185229801), + TrajectoryPoint(600, 341.904841222673), + TrajectoryPoint(610, 339.904516207286), + TrajectoryPoint(620, 337.913030082638), + TrajectoryPoint(630, 335.947352483533), + TrajectoryPoint(640, 333.994057160077), + TrajectoryPoint(650, 332.057057505269), + TrajectoryPoint(660, 330.141626498005), + TrajectoryPoint(670, 328.235987061237), + TrajectoryPoint(680, 326.354774939281), + TrajectoryPoint(690, 324.486565633175), + TrajectoryPoint(700, 322.632388337983), + TrajectoryPoint(710, 320.800978853921), + TrajectoryPoint(720, 318.979858035), + TrajectoryPoint(730, 317.177903945648), + TrajectoryPoint(740, 315.39272865858), + TrajectoryPoint(750, 313.618163296168), + TrajectoryPoint(760, 311.865872492707), + TrajectoryPoint(770, 310.126201386254), + TrajectoryPoint(780, 308.397764262136), + TrajectoryPoint(790, 306.692075701567), + TrajectoryPoint(800, 304.996879116948), + TrajectoryPoint(810, 303.314191679415), + TrajectoryPoint(820, 301.651720428767), + TrajectoryPoint(830, 299.999726346608), + TrajectoryPoint(840, 298.360209912748), + TrajectoryPoint(850, 296.739598904127), + TrajectoryPoint(860, 295.12934855463), + TrajectoryPoint(870, 293.530491690323), + TrajectoryPoint(880, 291.950229677145), + TrajectoryPoint(890, 290.380128186566), + TrajectoryPoint(900, 288.820350627951), + TrajectoryPoint(910, 287.277976945634), + TrajectoryPoint(920, 285.746337475045), + TrajectoryPoint(930, 284.224713492855), + TrajectoryPoint(940, 282.717148462183), + TrajectoryPoint(950, 281.222229413559), + TrajectoryPoint(960, 279.736972575034), + TrajectoryPoint(970, 278.262073646057), + TrajectoryPoint(980, 276.802109176751), + TrajectoryPoint(990, 275.351421485093), + TrajectoryPoint(1000, 273.910047568257), + TrajectoryPoint(1010, 272.480388665787), + TrajectoryPoint(1020, 271.062482861403), + TrajectoryPoint(1030, 269.653462081901), + TrajectoryPoint(1040, 268.253325414814), + TrajectoryPoint(1050, 266.864743598368), + TrajectoryPoint(1060, 265.486307834605), + TrajectoryPoint(1070, 264.116303320306), + TrajectoryPoint(1080, 262.754700911756), + TrajectoryPoint(1090, 261.403407410393), + TrajectoryPoint(1100, 260.061814759537), + TrajectoryPoint(1110, 258.728161864122), + TrajectoryPoint(1120, 257.402399165612), + TrajectoryPoint(1130, 256.084953948957), + TrajectoryPoint(1140, 254.777597184355), + TrajectoryPoint(1150, 253.477669500875), + TrajectoryPoint(1160, 252.185107069754), + TrajectoryPoint(1170, 250.899838946819), + TrajectoryPoint(1180, 249.622722774112), + TrajectoryPoint(1190, 248.353968216479), + TrajectoryPoint(1200, 247.092053232479), + TrajectoryPoint(1210, 245.836898993923), + TrajectoryPoint(1220, 244.588421789969), + TrajectoryPoint(1230, 243.346763457361), + TrajectoryPoint(1240, 242.113049645146), + TrajectoryPoint(1250, 240.885574207344), + TrajectoryPoint(1260, 239.664249970017), + TrajectoryPoint(1270, 238.44898649968), + TrajectoryPoint(1280, 237.23969050265), + TrajectoryPoint(1290, 236.036397006985), + TrajectoryPoint(1300, 234.839931940379), + TrajectoryPoint(1310, 233.649019685451), + TrajectoryPoint(1320, 232.463567205621), + TrajectoryPoint(1330, 231.283479659242), + TrajectoryPoint(1340, 230.108660669765), + TrajectoryPoint(1350, 228.939012573411), + TrajectoryPoint(1360, 227.774436645889), + TrajectoryPoint(1370, 226.615445809232), + TrajectoryPoint(1380, 225.461388458994), + TrajectoryPoint(1390, 224.31202484224), + TrajectoryPoint(1400, 223.167259415197), + TrajectoryPoint(1410, 222.026996108553), + TrajectoryPoint(1420, 220.891138477002), + TrajectoryPoint(1430, 219.759589835196), + TrajectoryPoint(1440, 218.632253381067), + TrajectoryPoint(1450, 217.509032307502), + TrajectoryPoint(1460, 216.389829903194), + TrajectoryPoint(1470, 215.274735584944), + TrajectoryPoint(1480, 214.163565474396), + TrajectoryPoint(1490, 213.056083062091), + TrajectoryPoint(1500, 211.952196148293), + TrajectoryPoint(1510, 210.851812805912), + TrajectoryPoint(1520, 209.754841443641), + TrajectoryPoint(1530, 208.661190862187), + TrajectoryPoint(1540, 207.570770304126), + TrajectoryPoint(1550, 206.483489497888), + TrajectoryPoint(1560, 205.399258696307), + TrajectoryPoint(1570, 204.317988710172), + TrajectoryPoint(1580, 203.239590937173), + TrajectoryPoint(1590, 202.16397738659), + TrajectoryPoint(1600, 201.091060700075), + TrajectoryPoint(1610, 200.020754168828), + TrajectoryPoint(1620, 198.952971747463), + TrajectoryPoint(1630, 197.887628064821), + TrajectoryPoint(1640, 196.824638431975), + TrajectoryPoint(1650, 195.763918847664), + TrajectoryPoint(1660, 194.705386001358), + TrajectoryPoint(1670, 193.648957274144), + TrajectoryPoint(1680, 192.594550737615), + TrajectoryPoint(1690, 191.542085150937), + TrajectoryPoint(1700, 190.491479956223), + TrajectoryPoint(1710, 189.442655272378), + TrajectoryPoint(1720, 188.395531887526), + TrajectoryPoint(1730, 187.350031250149), + TrajectoryPoint(1740, 186.306075459043), + TrajectoryPoint(1750, 185.263587252192), + TrajectoryPoint(1760, 184.22257834641), + TrajectoryPoint(1770, 183.182884088986), + TrajectoryPoint(1780, 182.144423437366), + TrajectoryPoint(1790, 181.107120862674), + TrajectoryPoint(1800, 180.070901435236), + TrajectoryPoint(1810, 179.035690806653), + TrajectoryPoint(1820, 178.001415191414), + TrajectoryPoint(1830, 176.968001348094), + TrajectoryPoint(1840, 175.935376560164), + TrajectoryPoint(1850, 174.903521457037), + TrajectoryPoint(1860, 173.872318583998), + TrajectoryPoint(1870, 172.841676899671), + TrajectoryPoint(1880, 171.8115251387), + TrajectoryPoint(1890, 170.781792472125), + TrajectoryPoint(1900, 169.75240848545), + TrajectoryPoint(1910, 168.723316718141), + TrajectoryPoint(1920, 167.694435952139), + TrajectoryPoint(1930, 166.665678587122), + TrajectoryPoint(1940, 165.636975283328), + TrajectoryPoint(1950, 164.608257008322), + TrajectoryPoint(1960, 163.579443098681), + TrajectoryPoint(1970, 162.550450918036), + TrajectoryPoint(1980, 161.52121932179), + TrajectoryPoint(1990, 160.491679949716), + TrajectoryPoint(2000, 159.461745815048), + TrajectoryPoint(2010, 158.431297695513), + TrajectoryPoint(2020, 157.400316749897), + TrajectoryPoint(2030, 156.368734921188), + TrajectoryPoint(2040, 155.336415481238), + TrajectoryPoint(2050, 154.303276223903), + TrajectoryPoint(2060, 153.26930941469), + TrajectoryPoint(2070, 152.234418560403), + TrajectoryPoint(2080, 151.198390692574), + TrajectoryPoint(2090, 150.161306216899), + TrajectoryPoint(2100, 149.12307544443), + TrajectoryPoint(2110, 148.083413521095), + TrajectoryPoint(2120, 147.042462786841), + TrajectoryPoint(2130, 146.000074817725), + TrajectoryPoint(2140, 144.956016169875), + TrajectoryPoint(2150, 143.910432507446), + TrajectoryPoint(2160, 142.86302085654), + TrajectoryPoint(2170, 141.813783074681), + TrajectoryPoint(2180, 140.762708157439), + TrajectoryPoint(2190, 139.709426568294), + TrajectoryPoint(2200, 138.654204582747), + TrajectoryPoint(2210, 137.596549855736), + TrajectoryPoint(2220, 136.53670532252), + TrajectoryPoint(2230, 135.474304678838), + TrajectoryPoint(2240, 134.409420927981), + TrajectoryPoint(2250, 133.341806276512), + TrajectoryPoint(2260, 132.271453577915), + TrajectoryPoint(2270, 131.198131677988), + TrajectoryPoint(2280, 130.121866247956), + TrajectoryPoint(2290, 129.04231767556), + TrajectoryPoint(2300, 127.959680582777), + TrajectoryPoint(2310, 126.873358481043), + TrajectoryPoint(2320, 125.783735788258), + TrajectoryPoint(2330, 124.690203065621), + TrajectoryPoint(2340, 123.592919112812), + TrajectoryPoint(2350, 122.491752178433), + TrajectoryPoint(2360, 121.386180834529), + TrajectoryPoint(2370, 120.276493648523), + TrajectoryPoint(2380, 119.162336533532), + TrajectoryPoint(2390, 118.043336129891), + TrajectoryPoint(2400, 116.919660689373), + TrajectoryPoint(2410, 115.791108518486), + TrajectoryPoint(2420, 114.657000788222), + TrajectoryPoint(2430, 113.517594025613), + TrajectoryPoint(2440, 112.37266542314), + TrajectoryPoint(2450, 111.221978998853), + TrajectoryPoint(2460, 110.065017028763), + TrajectoryPoint(2470, 108.901722568979), + TrajectoryPoint(2480, 107.731925939518), + TrajectoryPoint(2490, 106.5553513929), + TrajectoryPoint(2500, 105.371711337064), + TrajectoryPoint(2510, 104.18070579714), + TrajectoryPoint(2520, 102.982021837292), + TrajectoryPoint(2530, 101.775332940371), + TrajectoryPoint(2540, 100.560298342896), + TrajectoryPoint(2550, 99.3365623225769), + TrajectoryPoint(2560, 98.1037534353411), + TrajectoryPoint(2570, 96.8614836984831), + TrajectoryPoint(2580, 95.6093477162258), + TrajectoryPoint(2590, 94.3469217436098), + TrajectoryPoint(2600, 93.0737626842191), + TrajectoryPoint(2610, 91.7894070168044), + TrajectoryPoint(2620, 90.4933696453812), + TrajectoryPoint(2630, 89.185048184399), + TrajectoryPoint(2640, 87.8634215534808), + TrajectoryPoint(2650, 86.5284036778613), + TrajectoryPoint(2660, 85.1794017123534), + TrajectoryPoint(2670, 83.8150029297168), + TrajectoryPoint(2680, 82.4349853164742), + TrajectoryPoint(2690, 81.0384716850518), + TrajectoryPoint(2700, 79.6240947661602), + TrajectoryPoint(2710, 78.1914551614109), + TrajectoryPoint(2720, 76.7389326509665), + TrajectoryPoint(2730, 75.2655658027758), + TrajectoryPoint(2740, 73.7704001911862), + TrajectoryPoint(2750, 72.2512048964613), + TrajectoryPoint(2760, 70.7068806270656), + TrajectoryPoint(2770, 69.1357751310688), + TrajectoryPoint(2780, 67.5358697659312), + TrajectoryPoint(2790, 65.9049544211068), + TrajectoryPoint(2800, 64.2406051406011), + TrajectoryPoint(2810, 62.5401584666845), + TrajectoryPoint(2820, 60.8006819350896), + TrajectoryPoint(2830, 59.0181570553473), + TrajectoryPoint(2840, 57.1887065593569), + TrajectoryPoint(2850, 55.308033353097), + TrajectoryPoint(2860, 53.370234757043), + TrajectoryPoint(2870, 51.3685158229248), + TrajectoryPoint(2880, 49.2955979533709), + TrajectoryPoint(2890, 47.1419854043448), + TrajectoryPoint(2900, 44.8956395842352), + TrajectoryPoint(2910, 42.5417142333501), + TrajectoryPoint(2920, 40.0614613401445), + TrajectoryPoint(2930, 37.4299859314421), + TrajectoryPoint(2940, 34.612180581639), + TrajectoryPoint(2950, 31.5583583824579), + TrajectoryPoint(2960, 28.1928485568192), + TrajectoryPoint(2970, 24.384009809099), + TrajectoryPoint(2980, 19.8827023441736), + TrajectoryPoint(2990, 14.0371188822043), + TrajectoryPoint(3000, 0), +}; +TrajectoryPoint t10_open[] = { + TrajectoryPoint(0, 473.862370607181), + TrajectoryPoint(10, 471.812107673286), + TrajectoryPoint(20, 469.75170401644), + TrajectoryPoint(30, 467.689754885253), + TrajectoryPoint(40, 465.618663319797), + TrajectoryPoint(50, 463.539204598359), + TrajectoryPoint(60, 461.456156906346), + TrajectoryPoint(70, 459.358814578742), + TrajectoryPoint(80, 457.261472251139), + TrajectoryPoint(90, 455.147626991193), + TrajectoryPoint(100, 453.032015978972), + TrajectoryPoint(110, 450.904644445322), + TrajectoryPoint(120, 448.770368161546), + TrajectoryPoint(130, 446.628828002124), + TrajectoryPoint(140, 444.475477882792), + TrajectoryPoint(150, 442.319095057522), + TrajectoryPoint(160, 440.146250068972), + TrajectoryPoint(170, 437.97340508042), + TrajectoryPoint(180, 435.781543214765), + TrajectoryPoint(190, 433.588769335547), + TrajectoryPoint(200, 431.380166966152), + TrajectoryPoint(210, 429.167016641793), + TrajectoryPoint(220, 426.940879549478), + TrajectoryPoint(230, 424.706891118391), + TrajectoryPoint(240, 422.4623850352), + TrajectoryPoint(250, 420.207082123903), + TrajectoryPoint(260, 417.943330423789), + TrajectoryPoint(270, 415.666221309441), + TrajectoryPoint(280, 413.382302540208), + TrajectoryPoint(290, 411.08287947831), + TrajectoryPoint(300, 408.777824722146), + TrajectoryPoint(310, 406.455563237102), + TrajectoryPoint(320, 404.128353285884), + TrajectoryPoint(330, 401.782711421941), + TrajectoryPoint(340, 399.432273752213), + TrajectoryPoint(350, 397.062691282078), + TrajectoryPoint(360, 394.68789681321), + TrajectoryPoint(370, 392.293794401449), + TrajectoryPoint(380, 389.893454018892), + TrajectoryPoint(390, 387.474232336979), + TrajectoryPoint(400, 385.047093160835), + TrajectoryPoint(410, 382.602131950451), + TrajectoryPoint(420, 380.146873327645), + TrajectoryPoint(430, 377.675530408554), + TrajectoryPoint(440, 375.190759604773), + TrajectoryPoint(450, 372.692369823294), + TrajectoryPoint(460, 370.176617388514), + TrajectoryPoint(470, 367.650491502265), + TrajectoryPoint(480, 365.10220628103), + TrajectoryPoint(490, 362.547629775254), + TrajectoryPoint(500, 359.96517352999), + TrajectoryPoint(510, 357.455093724086), + TrajectoryPoint(520, 355.348197134573), + TrajectoryPoint(530, 353.252393456111), + TrajectoryPoint(540, 351.175078400194), + TrajectoryPoint(550, 349.115878760635), + TrajectoryPoint(560, 347.068068456201), + TrajectoryPoint(570, 345.045800289188), + TrajectoryPoint(580, 343.031547422433), + TrajectoryPoint(590, 341.042113320263), + TrajectoryPoint(600, 339.065240520618), + TrajectoryPoint(610, 337.104510448929), + TrajectoryPoint(620, 335.16489310986), + TrajectoryPoint(630, 333.234438315107), + TrajectoryPoint(640, 331.329820650795), + TrajectoryPoint(650, 329.436465099355), + TrajectoryPoint(660, 327.559156619376), + TrajectoryPoint(670, 325.702428142714), + TrajectoryPoint(680, 323.85557052489), + TrajectoryPoint(690, 322.03120515252), + TrajectoryPoint(700, 320.22034174233), + TrajectoryPoint(710, 318.42156035764), + TrajectoryPoint(720, 316.645977843989), + TrajectoryPoint(730, 314.880556091739), + TrajectoryPoint(740, 313.131088455255), + TrajectoryPoint(750, 311.399977152901), + TrajectoryPoint(760, 309.679234135061), + TrajectoryPoint(770, 307.976559372075), + TrajectoryPoint(780, 306.289002002157), + TrajectoryPoint(790, 304.611889946481), + TrajectoryPoint(800, 302.953480918199), + TrajectoryPoint(810, 301.30831584618), + TrajectoryPoint(820, 299.673558817451), + TrajectoryPoint(830, 298.056926497617), + TrajectoryPoint(840, 296.452799902787), + TrajectoryPoint(850, 294.858947677273), + TrajectoryPoint(860, 293.281672151523), + TrajectoryPoint(870, 291.717086660583), + TrajectoryPoint(880, 290.162563165204), + TrajectoryPoint(890, 288.622314355422), + TrajectoryPoint(900, 287.095672187055), + TrajectoryPoint(910, 285.578817365454), + TrajectoryPoint(920, 284.073367989725), + TrajectoryPoint(930, 282.583007864105), + TrajectoryPoint(940, 281.102112770061), + TrajectoryPoint(950, 279.630758236028), + TrajectoryPoint(960, 278.173573340556), + TrajectoryPoint(970, 276.726908807597), + TrajectoryPoint(980, 275.289399903134), + TrajectoryPoint(990, 273.861933024617), + TrajectoryPoint(1000, 272.447772545876), + TrajectoryPoint(1010, 271.042363211029), + TrajectoryPoint(1020, 269.645713857881), + TrajectoryPoint(1030, 268.259416145023), + TrajectoryPoint(1040, 266.884388927358), + TrajectoryPoint(1050, 265.517689457257), + TrajectoryPoint(1060, 264.159297075147), + TrajectoryPoint(1070, 262.810401456445), + TrajectoryPoint(1080, 261.471973382954), + TrajectoryPoint(1090, 260.141407378488), + TrajectoryPoint(1100, 258.818661167124), + TrajectoryPoint(1110, 257.50374196031), + TrajectoryPoint(1120, 256.19938316929), + TrajectoryPoint(1130, 254.902397498311), + TrajectoryPoint(1140, 253.612727313536), + TrajectoryPoint(1150, 252.330307574502), + TrajectoryPoint(1160, 251.055901535551), + TrajectoryPoint(1170, 249.790004566058), + TrajectoryPoint(1180, 248.530914611193), + TrajectoryPoint(1190, 247.278557822622), + TrajectoryPoint(1200, 246.032855218356), + TrajectoryPoint(1210, 244.79409852499), + TrajectoryPoint(1220, 243.563189267312), + TrajectoryPoint(1230, 242.338504308903), + TrajectoryPoint(1240, 241.119960447176), + TrajectoryPoint(1250, 239.907471011398), + TrajectoryPoint(1260, 238.700946270742), + TrajectoryPoint(1270, 237.500795833456), + TrajectoryPoint(1280, 236.307150610324), + TrajectoryPoint(1290, 235.11906179317), + TrajectoryPoint(1300, 233.936439330976), + TrajectoryPoint(1310, 232.7591912061), + TrajectoryPoint(1320, 231.587223712272), + TrajectoryPoint(1330, 230.420441709896), + TrajectoryPoint(1340, 229.259148539798), + TrajectoryPoint(1350, 228.103232170912), + TrajectoryPoint(1360, 226.952123313007), + TrajectoryPoint(1370, 225.805729230627), + TrajectoryPoint(1380, 224.663956382881), + TrajectoryPoint(1390, 223.526710593903), + TrajectoryPoint(1400, 222.393897208411), + TrajectoryPoint(1410, 221.265421233403), + TrajectoryPoint(1420, 220.141187467015), + TrajectoryPoint(1430, 219.021233023768), + TrajectoryPoint(1440, 217.905588185767), + TrajectoryPoint(1450, 216.793848586491), + TrajectoryPoint(1460, 215.685923056781), + TrajectoryPoint(1470, 214.581720479421), + TrajectoryPoint(1480, 213.481149872129), + TrajectoryPoint(1490, 212.384120462279), + TrajectoryPoint(1500, 211.290541753955), + TrajectoryPoint(1510, 210.20032358792), + TrajectoryPoint(1520, 209.113376195043), + TrajectoryPoint(1530, 208.029610243676), + TrajectoryPoint(1540, 206.94893688144), + TrajectoryPoint(1550, 205.871267771864), + TrajectoryPoint(1560, 204.796515126263), + TrajectoryPoint(1570, 203.724591731232), + TrajectoryPoint(1580, 202.655410972087), + TrajectoryPoint(1590, 201.588886852589), + TrajectoryPoint(1600, 200.524934011226), + TrajectoryPoint(1610, 199.463467734333), + TrajectoryPoint(1620, 198.404403966303), + TrajectoryPoint(1630, 197.347659317119), + TrajectoryPoint(1640, 196.293151067417), + TrajectoryPoint(1650, 195.240797171292), + TrajectoryPoint(1660, 194.190516257014), + TrajectoryPoint(1670, 193.142227625834), + TrajectoryPoint(1680, 192.095851249037), + TrajectoryPoint(1690, 191.051307763377), + TrajectoryPoint(1700, 190.008518465042), + TrajectoryPoint(1710, 188.967405302252), + TrajectoryPoint(1720, 187.927890866627), + TrajectoryPoint(1730, 186.889898383407), + TrajectoryPoint(1740, 185.853351700636), + TrajectoryPoint(1750, 184.818175277385), + TrajectoryPoint(1760, 183.784294171116), + TrajectoryPoint(1770, 182.751634024235), + TrajectoryPoint(1780, 181.720168609434), + TrajectoryPoint(1790, 180.689812288416), + TrajectoryPoint(1800, 179.66044924951), + TrajectoryPoint(1810, 178.632006730962), + TrajectoryPoint(1820, 177.604412501373), + TrajectoryPoint(1830, 176.57759484109), + TrajectoryPoint(1840, 175.55148252326), + TrajectoryPoint(1850, 174.526004794586), + TrajectoryPoint(1860, 173.501115239535), + TrajectoryPoint(1870, 172.476743847208), + TrajectoryPoint(1880, 171.452783953506), + TrajectoryPoint(1890, 170.429166085466), + TrajectoryPoint(1900, 169.405821153207), + TrajectoryPoint(1910, 168.382680428381), + TrajectoryPoint(1920, 167.359680378797), + TrajectoryPoint(1930, 166.336739340616), + TrajectoryPoint(1940, 165.31378142889), + TrajectoryPoint(1950, 164.290738799321), + TrajectoryPoint(1960, 163.267543862616), + TrajectoryPoint(1970, 162.244094930694), + TrajectoryPoint(1980, 161.220331329289), + TrajectoryPoint(1990, 160.196194585778), + TrajectoryPoint(2000, 159.171617585945), + TrajectoryPoint(2010, 158.14646984128), + TrajectoryPoint(2020, 157.1206950169), + TrajectoryPoint(2030, 156.094257982536), + TrajectoryPoint(2040, 155.067091728417), + TrajectoryPoint(2050, 154.038970284744), + TrajectoryPoint(2060, 153.009962311022), + TrajectoryPoint(2070, 151.980000993778), + TrajectoryPoint(2080, 150.94886791541), + TrajectoryPoint(2090, 149.916563606587), + TrajectoryPoint(2100, 148.883079016713), + TrajectoryPoint(2110, 147.848156860492), + TrajectoryPoint(2120, 146.811814586722), + TrajectoryPoint(2130, 145.774061504007), + TrajectoryPoint(2140, 144.734524178334), + TrajectoryPoint(2150, 143.693383873525), + TrajectoryPoint(2160, 142.650473942006), + TrajectoryPoint(2170, 141.605569649245), + TrajectoryPoint(2180, 140.558850193436), + TrajectoryPoint(2190, 139.509842015929), + TrajectoryPoint(2200, 138.458798527447), + TrajectoryPoint(2210, 137.405390288739), + TrajectoryPoint(2220, 136.349620653461), + TrajectoryPoint(2230, 135.29136881595), + TrajectoryPoint(2240, 134.230458681574), + TrajectoryPoint(2250, 133.166895549986), + TrajectoryPoint(2260, 132.100417427986), + TrajectoryPoint(2270, 131.031050298988), + TrajectoryPoint(2280, 129.958562568277), + TrajectoryPoint(2290, 128.882872666284), + TrajectoryPoint(2300, 127.803918477935), + TrajectoryPoint(2310, 126.721359680572), + TrajectoryPoint(2320, 125.635456837382), + TrajectoryPoint(2330, 124.545463115329), + TrajectoryPoint(2340, 123.451804366283), + TrajectoryPoint(2350, 122.354086491803), + TrajectoryPoint(2360, 121.252046620846), + TrajectoryPoint(2370, 120.145847002057), + TrajectoryPoint(2380, 119.035001936047), + TrajectoryPoint(2390, 117.919396404239), + TrajectoryPoint(2400, 116.799071770053), + TrajectoryPoint(2410, 115.673701911932), + TrajectoryPoint(2420, 114.542850038388), + TrajectoryPoint(2430, 113.406658493024), + TrajectoryPoint(2440, 112.264900901334), + TrajectoryPoint(2450, 111.11731252657), + TrajectoryPoint(2460, 109.963336845355), + TrajectoryPoint(2470, 108.803079371893), + TrajectoryPoint(2480, 107.636275642949), + TrajectoryPoint(2490, 106.462649873934), + TrajectoryPoint(2500, 105.281914456613), + TrajectoryPoint(2510, 104.093769419095), + TrajectoryPoint(2520, 102.897901846072), + TrajectoryPoint(2530, 101.693985257039), + TrajectoryPoint(2540, 100.481678939984), + TrajectoryPoint(2550, 99.2606272377635), + TrajectoryPoint(2560, 98.030458784094), + TrajectoryPoint(2570, 96.7907856857777), + TrajectoryPoint(2580, 95.5412026474347), + TrajectoryPoint(2590, 94.28128603465), + TrajectoryPoint(2600, 93.0105928710332), + TrajectoryPoint(2610, 91.7286597642455), + TrajectoryPoint(2620, 90.4350017555611), + TrajectoryPoint(2630, 89.1291110869938), + TrajectoryPoint(2640, 87.8097765047788), + TrajectoryPoint(2650, 86.4770054736807), + TrajectoryPoint(2660, 85.1302076335847), + TrajectoryPoint(2670, 83.7680579887443), + TrajectoryPoint(2680, 82.3901552061626), + TrajectoryPoint(2690, 80.9957986190593), + TrajectoryPoint(2700, 79.5834474013435), + TrajectoryPoint(2710, 78.1528718006597), + TrajectoryPoint(2720, 76.7022861821182), + TrajectoryPoint(2730, 75.2308896339259), + TrajectoryPoint(2740, 73.7376469781135), + TrajectoryPoint(2750, 72.2202534538853), + TrajectoryPoint(2760, 70.6777576179105), + TrajectoryPoint(2770, 69.1084324674704), + TrajectoryPoint(2780, 67.5102590787228), + TrajectoryPoint(2790, 65.8810271113061), + TrajectoryPoint(2800, 64.2183124281507), + TrajectoryPoint(2810, 62.5194514367167), + TrajectoryPoint(2820, 60.7815115819673), + TrajectoryPoint(2830, 59.0005277688878), + TrajectoryPoint(2840, 57.1725121532777), + TrajectoryPoint(2850, 55.2932732404973), + TrajectoryPoint(2860, 53.356806940717), + TrajectoryPoint(2870, 51.3564136402496), + TrajectoryPoint(2880, 49.2847653908511), + TrajectoryPoint(2890, 47.1323658813152), + TrajectoryPoint(2900, 44.8872122583775), + TrajectoryPoint(2910, 42.5343820041368), + TrajectoryPoint(2920, 40.0551966620442), + TrajectoryPoint(2930, 37.4247238668615), + TrajectoryPoint(2940, 34.607880499359), + TrajectoryPoint(2950, 31.554947121852), + TrajectoryPoint(2960, 28.1902709533103), + TrajectoryPoint(2970, 24.3821827987399), + TrajectoryPoint(2980, 19.8815665988451), + TrajectoryPoint(2990, 14.0365991419119), + TrajectoryPoint(3000, 0), +}; +Trajectory t_closed[] = { + Trajectory{0.0, t0_closed, 301}, Trajectory{0.0, t1_closed, 301}, + Trajectory{0.0, t2_closed, 301}, Trajectory{0.0, t3_closed, 301}, + Trajectory{0.0, t4_closed, 301}, Trajectory{0.0, t5_closed, 301}, + Trajectory{0.0, t6_closed, 301}, Trajectory{0.0, t7_closed, 301}, + Trajectory{0.0, t8_closed, 301}, Trajectory{0.0, t9_closed, 301}, + Trajectory{0.0, t10_closed, 301}, +}; +Trajectory t_open[] = { + Trajectory{0.0, t0_open, 301}, Trajectory{0.0, t1_open, 301}, + Trajectory{0.0, t2_open, 301}, Trajectory{0.0, t3_open, 301}, + Trajectory{0.0, t4_open, 301}, Trajectory{0.0, t5_open, 301}, + Trajectory{0.0, t6_open, 301}, Trajectory{0.0, t7_open, 301}, + Trajectory{0.0, t8_open, 301}, Trajectory{0.0, t9_open, 301}, + Trajectory{0.0, t10_open, 301}, +}; +// ============================================= +// WARNING: GEMINI ROCCARASO TRAJECTORIES +// REMOVE THESE!!! +// ============================================= + +TrajectorySet Main::Data::ABK::CLOSED_TRAJECTORY_SET{t_closed, 11}; +TrajectorySet Main::Data::ABK::OPEN_TRAJECTORY_SET{t_open, 11}; diff --git a/src/boards/Main/Data/ABKTrajectorySet.h b/src/boards/Main/Data/ABKTrajectorySet.h new file mode 100644 index 0000000000000000000000000000000000000000..760b7c3732293b242305b6ac46ffc367320852ae --- /dev/null +++ b/src/boards/Main/Data/ABKTrajectorySet.h @@ -0,0 +1,43 @@ +/* Copyright (c) 2024 Skyward Experimental Rocketry + * Author: Davide Mor + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#pragma once + +#include <algorithms/AirBrakes/TrajectorySet.h> + +namespace Main +{ + +namespace Data +{ + +namespace ABK +{ + +extern Boardcore::TrajectorySet CLOSED_TRAJECTORY_SET; +extern Boardcore::TrajectorySet OPEN_TRAJECTORY_SET; + +} // namespace ABK + +} // namespace Data + +} // namespace Main \ No newline at end of file diff --git a/src/boards/Main/Radio/Radio.cpp b/src/boards/Main/Radio/Radio.cpp index c71ceed70a8c354d844271fe074f86486bb7a594..7379f569c536edf644b0de6feada5cef8f57aeaa 100644 --- a/src/boards/Main/Radio/Radio.cpp +++ b/src/boards/Main/Radio/Radio.cpp @@ -611,6 +611,7 @@ bool Radio::enqueueSystemTm(uint8_t tmId) ADAController* ada = getModule<ADAController>(); NASController* nas = getModule<NASController>(); MEAController* mea = getModule<MEAController>(); + ABKController* abk = getModule<ABKController>(); Actuators* actuators = getModule<Actuators>(); StatsRecorder* recorder = getModule<StatsRecorder>(); @@ -655,7 +656,7 @@ bool Radio::enqueueSystemTm(uint8_t tmId) // FMM states tm.ada_state = static_cast<uint8_t>(ada->getState()); tm.fmm_state = static_cast<uint8_t>(fmm->getState()); - tm.abk_state = 255; // TODO + tm.abk_state = static_cast<uint8_t>(abk->getState()); tm.nas_state = static_cast<uint8_t>(nas->getState()); tm.mea_state = static_cast<uint8_t>(mea->getState()); diff --git a/src/boards/Main/Radio/Radio.h b/src/boards/Main/Radio/Radio.h index 4a77c99b27b796be68d02bcabc572037ea82947b..fff2e20e830532f1aaa9243fa827a4a16d4e1d7d 100644 --- a/src/boards/Main/Radio/Radio.h +++ b/src/boards/Main/Radio/Radio.h @@ -30,6 +30,7 @@ #include <Main/Configs/RadioConfig.h> #include <Main/PinHandler/PinHandler.h> #include <Main/Sensors/Sensors.h> +#include <Main/StateMachines/ABKController/ABKController.h> #include <Main/StateMachines/ADAController/ADAController.h> #include <Main/StateMachines/FlightModeManager/FlightModeManager.h> #include <Main/StateMachines/MEAController/MEAController.h> @@ -49,7 +50,7 @@ using MavDriver = Boardcore::MavlinkDriver<Boardcore::SX1278Fsk::MTU, class Radio : public Boardcore::InjectableWithDeps< Buses, BoardScheduler, Actuators, PinHandler, CanHandler, Sensors, FlightModeManager, ADAController, NASController, - MEAController, StatsRecorder, AlgoReference> + MEAController, ABKController, StatsRecorder, AlgoReference> { public: Radio() {} diff --git a/src/boards/Main/StateMachines/ABKController/ABKController.cpp b/src/boards/Main/StateMachines/ABKController/ABKController.cpp new file mode 100644 index 0000000000000000000000000000000000000000..585448bfdd26306e56c06080a3920e63595cdf5a --- /dev/null +++ b/src/boards/Main/StateMachines/ABKController/ABKController.cpp @@ -0,0 +1,232 @@ +/* Copyright (c) 2024 Skyward Experimental Rocketry + * Author: Davide Mor + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#include "ABKController.h" + +#include <Main/Configs/ABKConfig.h> +#include <Main/Configs/SchedulerConfig.h> +#include <Main/Data/ABKTrajectorySet.h> +#include <common/Events.h> +#include <common/Topics.h> +#include <events/EventBroker.h> + +using namespace Boardcore; +using namespace Main; +using namespace miosix; +using namespace Common; + +ABKController::ABKController() + : FSM(&ABKController::state_init, STACK_DEFAULT_FOR_PTHREAD, + Config::Scheduler::ABK_PRIORITY), + abk{[this]() { + return TimedTrajectoryPoint{ + getModule<NASController>()->getNASState()}; + }, + Data::ABK::OPEN_TRAJECTORY_SET, + Data::ABK::CLOSED_TRAJECTORY_SET, + Config::ABK::BULLSHIT_RANDOM_CONFIG_REMOVE_ME_PLEASE, + Config::ABK::CONFIG, + [this](float position) + { getModule<Actuators>()->setAbkPosition(position); }} + +{ + EventBroker::getInstance().subscribe(this, TOPIC_ABK); + EventBroker::getInstance().subscribe(this, TOPIC_FLIGHT); +} + +bool ABKController::start() +{ + TaskScheduler& scheduler = getModule<BoardScheduler>()->getAbkScheduler(); + + uint8_t result = + scheduler.addTask([this]() { update(); }, Config::ABK::UPDATE_RATE); + + if (result == 0) + { + LOG_ERR(logger, "Failed to add ABK update task"); + return false; + } + + if (!FSM::start()) + { + LOG_ERR(logger, "Failed to start ABK FSM"); + return false; + } + + return true; +} + +ABKControllerState ABKController::getState() { return state; } + +void ABKController::update() +{ + ABKControllerState curState = state; + + if (!abk.isRunning() && curState == ABKControllerState::ACTIVE) + { + // We transitioned into ACTIVE, start up the algorithm + abk.begin(getModule<MEAController>()->getMEAState().estimatedMass); + } + + if (abk.isRunning() && curState == ABKControllerState::END) + { + // We transitioned into END, shut down the algorithm + abk.end(); + } + + if (curState == ABKControllerState::ACTIVE) + { + // Normal update + abk.update(); + } +} + +void ABKController::state_init(const Event& event) +{ + switch (event) + { + case EV_ENTRY: + { + updateAndLogStatus(ABKControllerState::INIT); + + // Immediately transition to ready + transition(&ABKController::state_ready); + break; + } + } +} + +void ABKController::state_ready(const Event& event) +{ + switch (event) + { + case EV_ENTRY: + { + updateAndLogStatus(ABKControllerState::READY); + break; + } + + case FLIGHT_ARMED: + { + transition(&ABKController::state_armed); + break; + } + } +} + +void ABKController::state_armed(const Event& event) +{ + switch (event) + { + case EV_ENTRY: + { + updateAndLogStatus(ABKControllerState::ARMED); + break; + } + + case FLIGHT_DISARMED: + { + transition(&ABKController::state_ready); + break; + } + + case FLIGHT_MOTOR_SHUTDOWN: + { + // Enable only after motor shutdown + transition(&ABKController::state_shadow_mode); + break; + } + } +} + +void ABKController::state_shadow_mode(const Event& event) +{ + switch (event) + { + case EV_ENTRY: + { + updateAndLogStatus(ABKControllerState::SHADOW_MODE); + + shadowModeTimeoutEvent = EventBroker::getInstance().postDelayed( + ABK_SHADOW_MODE_TIMEOUT, TOPIC_ABK, + Config::ABK::SHADOW_MODE_TIMEOUT); + break; + } + + case EV_EXIT: + { + EventBroker::getInstance().removeDelayed(shadowModeTimeoutEvent); + break; + } + + case ABK_SHADOW_MODE_TIMEOUT: + { + transition(&ABKController::state_active); + break; + } + + case FLIGHT_APOGEE_DETECTED: + case FLIGHT_LANDING_DETECTED: + { + transition(&ABKController::state_end); + break; + } + } +} + +void ABKController::state_active(const Event& event) +{ + switch (event) + { + case EV_ENTRY: + { + updateAndLogStatus(ABKControllerState::ACTIVE); + break; + } + + case FLIGHT_APOGEE_DETECTED: + case FLIGHT_LANDING_DETECTED: + { + transition(&ABKController::state_end); + break; + } + } +} + +void ABKController::state_end(const Event& event) +{ + switch (event) + { + case EV_ENTRY: + { + updateAndLogStatus(ABKControllerState::END); + break; + } + } +} + +void ABKController::updateAndLogStatus(ABKControllerState state) +{ + this->state = state; + ABKControllerStatus data = {TimestampTimer::getTimestamp(), state}; + sdLogger.log(data); +} \ No newline at end of file diff --git a/src/boards/Main/StateMachines/ABKController/ABKController.h b/src/boards/Main/StateMachines/ABKController/ABKController.h new file mode 100644 index 0000000000000000000000000000000000000000..949244d0f42d91b3eb004d0026b8653e9798166c --- /dev/null +++ b/src/boards/Main/StateMachines/ABKController/ABKController.h @@ -0,0 +1,72 @@ +/* Copyright (c) 2024 Skyward Experimental Rocketry + * Author: Davide Mor + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#pragma once + +#include <Main/Actuators/Actuators.h> +#include <Main/BoardScheduler.h> +#include <Main/StateMachines/ABKController/ABKControllerData.h> +#include <Main/StateMachines/MEAController/MEAController.h> +#include <Main/StateMachines/NASController/NASController.h> +#include <algorithms/AirBrakes/AirBrakesInterp.h> +#include <events/FSM.h> +#include <utils/DependencyManager/DependencyManager.h> + +namespace Main +{ + +class ABKController + : public Boardcore::FSM<ABKController>, + public Boardcore::InjectableWithDeps<BoardScheduler, Actuators, + NASController, MEAController> +{ +public: + ABKController(); + + [[nodiscard]] bool start() override; + + ABKControllerState getState(); + +private: + void update(); + + // FSM states + void state_init(const Boardcore::Event& event); + void state_ready(const Boardcore::Event& event); + void state_armed(const Boardcore::Event& event); + void state_shadow_mode(const Boardcore::Event& event); + void state_active(const Boardcore::Event& event); + void state_end(const Boardcore::Event& event); + + void updateAndLogStatus(ABKControllerState state); + + std::atomic<ABKControllerState> state{ABKControllerState::INIT}; + + Boardcore::Logger& sdLogger = Boardcore::Logger::getInstance(); + Boardcore::PrintLogger logger = Boardcore::Logging::getLogger("abk"); + + uint16_t shadowModeTimeoutEvent = 0; + + Boardcore::AirBrakesInterp abk; +}; + +} // namespace Main \ No newline at end of file diff --git a/src/boards/Main/StateMachines/ABKController/ABKControllerData.h b/src/boards/Main/StateMachines/ABKController/ABKControllerData.h new file mode 100644 index 0000000000000000000000000000000000000000..c4d17d0b21ddc16589f6e72085a5c107476f6c7b --- /dev/null +++ b/src/boards/Main/StateMachines/ABKController/ABKControllerData.h @@ -0,0 +1,55 @@ +/* Copyright (c) 2024 Skyward Experimental Rocketry + * Author: Davide Mor + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#pragma once + +#include <cstdint> +#include <ostream> +#include <string> + +namespace Main +{ + +enum class ABKControllerState : uint8_t +{ + INIT = 0, + READY, + ARMED, + SHADOW_MODE, + ACTIVE, + END +}; + +struct ABKControllerStatus +{ + uint64_t timestamp = 0; + ABKControllerState state = ABKControllerState::INIT; + + static std::string header() { return "timestamp,state\n"; } + + void print(std::ostream& os) const + { + os << timestamp << "," << static_cast<int>(state) << "\n"; + } +}; + +} // namespace Main \ No newline at end of file diff --git a/src/boards/Main/StateMachines/FlightModeManager/FlightModeManager.cpp b/src/boards/Main/StateMachines/FlightModeManager/FlightModeManager.cpp index c9a5ccfea876690e9cf7795e455121bb77d48317..cd0b24a7f7e642b5cf60920671b05e91cf746cde 100644 --- a/src/boards/Main/StateMachines/FlightModeManager/FlightModeManager.cpp +++ b/src/boards/Main/StateMachines/FlightModeManager/FlightModeManager.cpp @@ -143,7 +143,8 @@ State FlightModeManager::state_init_error(const Event& event) } case TMTC_FORCE_INIT: { - getModule<CanHandler>()->sendEvent(CanConfig::EventId::FORCE_INIT); + // This doesn't make much sense + // getModule<CanHandler>()->sendEvent(CanConfig::EventId::FORCE_INIT); return transition(&FlightModeManager::state_init_done); } default: diff --git a/src/entrypoints/Main/main-entry.cpp b/src/entrypoints/Main/main-entry.cpp index 63e2ceadef0d8005723330409eaafce400a63a90..b12d5c46198826e399136a8d7a66df5850f95f7c 100644 --- a/src/entrypoints/Main/main-entry.cpp +++ b/src/entrypoints/Main/main-entry.cpp @@ -28,6 +28,7 @@ #include <Main/PinHandler/PinHandler.h> #include <Main/Radio/Radio.h> #include <Main/Sensors/Sensors.h> +#include <Main/StateMachines/ABKController/ABKController.h> #include <Main/StateMachines/ADAController/ADAController.h> #include <Main/StateMachines/FlightModeManager/FlightModeManager.h> #include <Main/StateMachines/MEAController/MEAController.h> @@ -68,6 +69,7 @@ int main() ADAController *ada = new ADAController(); NASController *nas = new NASController(); MEAController *mea = new MEAController(); + ABKController *abk = new ABKController(); StatsRecorder *recorder = new StatsRecorder(); Logger &sdLogger = Logger::getInstance(); @@ -95,6 +97,7 @@ int main() manager.insert<ADAController>(ada) && manager.insert<NASController>(nas) && manager.insert<MEAController>(mea) && + manager.insert<ABKController>(abk) && manager.insert<StatsRecorder>(recorder) && manager.inject(); manager.graphviz(std::cout); @@ -183,6 +186,12 @@ int main() std::cout << "Error failed to start MEAController" << std::endl; } + if (!abk->start()) + { + initResult = false; + std::cout << "Error failed to start ABKController" << std::endl; + } + if (!fmm->start()) { initResult = false;