20210203

Dependencies:   mbed FastPWM

Revision:
224:985dba42f261
Parent:
223:e26830fbaffd
Child:
225:9c0becc196ba
--- a/main.cpp	Mon Dec 28 12:10:50 2020 +0000
+++ b/main.cpp	Mon Dec 28 14:27:11 2020 +0000
@@ -1,4 +1,13 @@
-//201228_2
+//Hydraulic Control Board
+//distributed by Sungwoo Kim
+//       2020/12/28
+
+
+// 유의사항
+// 소수 적을때 뒤에 f 꼭 붙이기
+// CAN 선은 ground까지 있는 3상 선으로 써야함.
+// 전원은 12~24V 인가.
+
 #include "mbed.h"
 #include "FastPWM.h"
 #include "INIT_HW.h"
@@ -16,8 +25,6 @@
 using namespace std;
 Timer t;
 
-///191008////
-
 // dac & check ///////////////////////////////////////////
 DigitalOut check(PC_2);
 DigitalOut check_2(PC_3);
@@ -27,20 +34,18 @@
 AnalogIn adc2(PB_0); //pressure_2
 AnalogIn adc3(PC_1); //current
 
-
 // PWM ///////////////////////////////////////////
 float dtc_v=0.0f;
 float dtc_w=0.0f;
 
 // I2C ///////////////////////////////////////////
 I2C i2c(PC_9,PA_8); // SDA, SCL (for K22F)
-const int i2c_slave_addr1 =  0x56;
+const int i2c_slave_addr1 =  0x56;  // AS5510 address
 unsigned int value; // 10bit output of reading sensor AS5510
 
 // SPI ///////////////////////////////////////////
 SPI eeprom(PB_15, PB_14, PB_13); // EEPROM //(SPI_MOSI, SPI_MISO, SPI_SCK);
 DigitalOut eeprom_cs(PB_12);
-//FlashWriter writer(6);//2부터 7까지 되는듯 아마 sector
 SPI enc(PC_12,PC_11,PC_10);
 DigitalOut enc_cs(PD_2);
 DigitalOut LED(PA_15);
@@ -85,22 +90,16 @@
 extern int CID_TX_VALVE_POSITION;
 
 
-
-
-// =============================================================================
-// =============================================================================
-// =============================================================================
-
 /*******************************************************************************
  *  REFERENCE MODE
  ******************************************************************************/
 enum _REFERENCE_MODE {
     MODE_REF_NO_ACT = 0,                                //0
-    MODE_REF_DIRECT,                                //1
-    MODE_REF_COS_INC,                                  //2
-    MODE_REF_LINE_INC,                                 //3
+    MODE_REF_DIRECT,                                    //1
+    MODE_REF_COS_INC,                                   //2
+    MODE_REF_LINE_INC,                                  //3
     MODE_REF_SIN_WAVE,                                  //4
-    MODE_REF_SQUARE_WAVE,                                  //5
+    MODE_REF_SQUARE_WAVE,                               //5
 };
 
 /*******************************************************************************
@@ -126,7 +125,7 @@
     MODE_CURRENT_CONTROL,                               //11
     MODE_JOINT_POSITION_TORQUE_CONTROL_CURRENT,         //12
     MODE_JOINT_POSITION_PRES_CONTROL_CURRENT,           //13
-    MODE_VALVE_POSITION_TORQUE_CONTROL_LEARNING,                                            //14
+    MODE_VALVE_POSITION_TORQUE_CONTROL_LEARNING,        //14
 
     //utility
     MODE_TORQUE_SENSOR_NULLING = 20,                    //20
@@ -137,7 +136,7 @@
     MODE_PRESSURE_SENSOR_CALIB,                         //25
     MODE_ROTARY_FRICTION_TUNING,                        //26
 
-    MODE_DDV_POS_VS_PWM_ID = 30,                           //30
+    MODE_DDV_POS_VS_PWM_ID = 30,                        //30
     MODE_DDV_DEADZONE_AND_CENTER,                       //31
     MODE_DDV_POS_VS_FLOWRATE,                           //32
     MODE_SYSTEM_ID,                                     //33
@@ -152,11 +151,11 @@
     RCC_OscInitTypeDef RCC_OscInitStruct = {0};
     RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
 
-    /** Configure the main internal regulator output voltage
+    /* Configure the main internal regulator output voltage
     */
     __HAL_RCC_PWR_CLK_ENABLE();
     __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
-    /** Initializes the CPU, AHB and APB busses clocks
+    /* Initializes the CPU, AHB and APB busses clocks
     */
     RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
     RCC_OscInitStruct.HSIState = RCC_HSI_ON;
@@ -190,687 +189,16 @@
     }
 }
 
-float u_past[num_array_u_past] = {0.0f};
-float x_past[num_array_x_past] = {0.0f};
-float x_future[num_array_x_future] = {0.0f};
-float f_past[num_array_f_past] = {0.0f};
-float f_future[num_array_f_future] = {0.0f};
-
-float input_NN[num_input] = { 0.0f };
-
-const float h1[num_input][16] = {
-    {-1.6017948389053345f,1.2721383571624756f,0.1310378611087799f,-0.9444252848625183f,-1.9589552879333496f,1.1329879760742188f,-0.17743819952011108f,-0.19157131016254425f,-0.39761483669281006f,0.02001183293759823f,0.5025057196617126f,-2.509382724761963f,-0.2675858736038208f,0.27560269832611084f,-0.2611466646194458f,-0.9627107977867126f},
-{-1.2710213661193848f,0.9135757684707642f,-0.3988758325576782f,-0.7979171872138977f,-1.4895585775375366f,0.5568610429763794f,-0.4116867780685425f,-0.261433482170105f,-0.22742684185504913f,0.2772603929042816f,0.118864506483078f,-1.5505203008651733f,0.23985113203525543f,-0.2809593081474304f,-0.21292872726917267f,-0.6193060874938965f},
-{-1.1586071252822876f,0.7516070604324341f,0.36955419182777405f,-0.9032031297683716f,-0.9722328782081604f,0.5363096594810486f,0.2916664779186249f,-0.016872992739081383f,-0.34971633553504944f,0.2836141288280487f,-0.054457396268844604f,-0.9038598537445068f,-0.0020234500989317894f,0.19621078670024872f,0.056768983602523804f,-1.1061573028564453f},
-{-0.7506084442138672f,0.1879994422197342f,0.40358296036720276f,0.12524257600307465f,-0.5177642107009888f,-0.18764258921146393f,-0.11764177680015564f,0.31180232763290405f,-0.20574431121349335f,0.42218565940856934f,0.16467393934726715f,0.3004089593887329f,-0.1665881872177124f,0.09486014395952225f,-0.3007376194000244f,-0.8816207051277161f},
-{0.7436127662658691f,-0.604726254940033f,-0.005224883556365967f,0.9320474863052368f,0.5615028142929077f,-0.8275365829467773f,0.13140985369682312f,0.018719080835580826f,-0.24859893321990967f,0.23700864613056183f,-0.41653650999069214f,1.252004861831665f,-0.0686110407114029f,0.23053120076656342f,-0.39249828457832336f,-0.6377205848693848f},
-{3.0718040466308594f,-3.262662887573242f,0.22110894322395325f,2.670456647872925f,2.9312491416931152f,-3.062858819961548f,0.16770240664482117f,-0.1752457618713379f,-0.304975301027298f,0.24974356591701508f,-2.912475347518921f,3.297006845474243f,-0.2682695984840393f,0.3757273256778717f,-0.4196912348270416f,1.0734145641326904f},
-{-1.2198433876037598f,1.5182578563690186f,-0.2540779709815979f,-1.8283756971359253f,-1.570626139640808f,1.7989088296890259f,0.06107431650161743f,-0.7636352777481079f,0.3089294731616974f,-0.09506343305110931f,2.775860548019409f,0.7932590246200562f,-0.17504744231700897f,0.2239564061164856f,-0.15860587358474731f,-0.7237789630889893f},
-{0.7539365291595459f,-0.9152541160583496f,-0.2703247666358948f,0.3871593773365021f,0.3573713004589081f,-0.712091326713562f,-0.18203827738761902f,-0.5724472999572754f,-0.17589353024959564f,-0.025821663439273834f,0.3012785017490387f,0.5540553331375122f,0.3776646554470062f,0.029355080798268318f,0.0436977744102478f,1.1350784301757812f},
-{0.6773941516876221f,-0.1407381296157837f,0.10406997799873352f,-0.31886449456214905f,0.2701631486415863f,-0.2895267903804779f,-0.07359349727630615f,-0.522844135761261f,-0.4761183261871338f,0.22720466554164886f,-0.11068277060985565f,0.17022143304347992f,0.23315370082855225f,0.15179778635501862f,-0.31029027700424194f,0.851940393447876f},
-{0.11661386489868164f,-0.3948979079723358f,0.18748918175697327f,-0.2878238558769226f,0.28554558753967285f,0.11674453318119049f,-0.3036908507347107f,-0.1508290320634842f,-0.14107836782932281f,-0.5925581455230713f,0.2786004841327667f,-1.0318316221237183f,0.37844526767730713f,-0.270053893327713f,0.35390153527259827f,0.38183316588401794f},
-{0.4711846709251404f,0.11557799577713013f,0.3775894343852997f,0.0314268134534359f,0.03386480361223221f,0.016547810286283493f,-0.20654654502868652f,-0.06258935481309891f,-0.4769713580608368f,-0.07612045109272003f,0.6390635967254639f,-0.8360038995742798f,-0.06711658090353012f,-0.030321964994072914f,0.2710213363170624f,-0.054686423391103745f},
-{-0.37094420194625854f,-0.2944038212299347f,-0.40945154428482056f,-0.18097494542598724f,0.14135384559631348f,0.021318335086107254f,0.15575703978538513f,0.29287639260292053f,-0.12214788794517517f,0.1086469367146492f,-0.14901117980480194f,-0.15198558568954468f,0.1470927745103836f,-0.03396562486886978f,0.10656675696372986f,0.06443876773118973f},
-{0.025174643844366074f,-0.12816596031188965f,0.2015570104122162f,0.1076304167509079f,0.45414742827415466f,0.19509439170360565f,-0.24415965378284454f,0.013022400438785553f,-0.10836649686098099f,-0.29661229252815247f,0.09127697348594666f,-0.21214918792247772f,0.09341105818748474f,0.01174785103648901f,-0.22613362967967987f,-0.3625008761882782f},
-{-0.04146391525864601f,-0.02673570066690445f,0.41918185353279114f,-0.1233106479048729f,-0.07927072793245316f,-0.1876136064529419f,-0.32497477531433105f,-0.4840133786201477f,-0.044291287660598755f,-0.3259299099445343f,0.04178468510508537f,-0.0003480979357846081f,-0.31783685088157654f,-0.05072624981403351f,0.04871204495429993f,-0.08137178421020508f},
-{0.1422140747308731f,0.18844546377658844f,0.20596781373023987f,-0.2328251153230667f,0.34344229102134705f,0.06260570883750916f,0.042680561542510986f,0.07508613914251328f,0.4000869691371918f,-0.010638000443577766f,0.13212932646274567f,-0.657844066619873f,0.10472581535577774f,-0.038563571870326996f,0.06784489750862122f,-0.2556094229221344f},
-{0.15386898815631866f,-0.49337783455848694f,-0.4106670916080475f,-0.4150790572166443f,-0.05264211446046829f,-0.05708514153957367f,-0.15809619426727295f,-0.20627009868621826f,0.27094385027885437f,-0.09812130033969879f,-0.3514001667499542f,-0.9586353898048401f,-0.275861918926239f,0.02052518166601658f,-0.08373728394508362f,-0.0018482634332031012f},
-};
-
-const float h2[16][16] = {
-    {-0.9739745259284973f,3.579744815826416f,-0.06966331601142883f,0.8622938990592957f,-0.21907491981983185f,2.2829554080963135f,-0.13155855238437653f,-0.014519207179546356f,-0.43008196353912354f,-0.1415480375289917f,0.17231711745262146f,-4.9480390548706055f,-0.02454538829624653f,-1.7999197244644165f,-0.38519009947776794f,1.4918317794799805f},
-{0.03609159216284752f,-0.6491178274154663f,0.057057321071624756f,-0.5475255846977234f,-0.35503754019737244f,-3.0916311740875244f,-0.5200656652450562f,-0.42126399278640747f,-0.33757925033569336f,0.2895788848400116f,-0.4909915030002594f,-1.1257127523422241f,0.18442146480083466f,1.348382830619812f,-0.5171104669570923f,-2.655162811279297f},
-{-0.22745239734649658f,0.003037691116333008f,-0.061119019985198975f,0.35696902871131897f,0.05568113923072815f,0.011741191148757935f,-0.20225946605205536f,-0.08465918898582458f,0.3489862382411957f,0.0687277615070343f,0.31964078545570374f,0.3004753887653351f,0.36063823103904724f,-0.42892736196517944f,0.08652284741401672f,0.027493387460708618f},
-{0.15409719944000244f,0.4271918833255768f,-0.2894435524940491f,0.4524352252483368f,0.08946844935417175f,-0.24254196882247925f,-0.5646932125091553f,0.2643083930015564f,0.26211628317832947f,0.2953031361103058f,0.0909804254770279f,0.8597109913825989f,-0.5144365429878235f,-2.37484073638916f,-0.026095986366271973f,0.29753774404525757f},
-{-0.7763098478317261f,2.959994316101074f,-0.25313520431518555f,0.5777999758720398f,0.036378175020217896f,0.7788732051849365f,-0.5079860091209412f,-0.20636579394340515f,-0.024399548768997192f,-0.39465832710266113f,-0.4901541471481323f,-3.3827083110809326f,-0.013386494480073452f,-1.876047134399414f,-0.6391417384147644f,0.6140359044075012f},
-{0.020159810781478882f,0.545926034450531f,-0.3519742488861084f,-0.17923703789710999f,-0.3015052080154419f,-1.5342668294906616f,-0.7026005387306213f,-0.12369749695062637f,-0.23047015070915222f,0.3579089343547821f,-0.2382185161113739f,-5.193862438201904f,-0.3443910777568817f,1.945488691329956f,0.014947117306292057f,-1.2414220571517944f},
-{-0.1828227937221527f,-0.02554568648338318f,-0.3260969817638397f,0.08422836661338806f,-0.38453540205955505f,-0.25432005524635315f,0.285016268491745f,0.12387624382972717f,-0.0982072651386261f,0.13111665844917297f,-0.03692615032196045f,-0.32796353101730347f,-0.21546880900859833f,0.049302369356155396f,-0.27088475227355957f,-0.4124959409236908f},
-{0.3839884400367737f,0.6259503960609436f,0.33083590865135193f,0.04438639059662819f,-0.14358049631118774f,0.12416914105415344f,-0.09043094515800476f,-0.3003333508968353f,0.2600560486316681f,-0.37898191809654236f,0.4972154498100281f,-0.2750113010406494f,-0.31673234701156616f,-0.015966646373271942f,-0.08780939131975174f,0.328056275844574f},
-{-0.4527643918991089f,0.3202667832374573f,-0.11379697918891907f,0.0684560090303421f,0.041274964809417725f,-0.40635451674461365f,-0.2745489478111267f,0.031847670674324036f,0.06103590130805969f,-0.38046833872795105f,-0.45007404685020447f,-0.5276026725769043f,-0.37024784088134766f,-0.3135625123977661f,-0.3714982867240906f,-0.12828999757766724f},
-{0.2802984118461609f,0.5001301765441895f,-0.13502129912376404f,0.6260269284248352f,0.12987366318702698f,0.6041213870048523f,0.2711336314678192f,-0.3632148504257202f,-0.13619378209114075f,0.16938945651054382f,0.5018476247787476f,0.3686026930809021f,0.3811538517475128f,-0.5396527647972107f,-0.19131632149219513f,0.09156869351863861f},
-{-1.5928384065628052f,0.23942683637142181f,0.0457797646522522f,-0.6350169777870178f,-0.03321319818496704f,0.08973085880279541f,-0.18186365067958832f,-0.3142535090446472f,-0.050184011459350586f,0.12480869889259338f,-0.5123732089996338f,-4.090933799743652f,-0.4121001660823822f,1.199095368385315f,-0.18886037170886993f,-0.7048641443252563f},
-{0.03677457198500633f,0.4954114556312561f,0.3954955041408539f,0.2689988911151886f,0.0033026933670043945f,1.278443694114685f,-0.4117635190486908f,-0.24394789338111877f,0.3487861454486847f,-0.32520344853401184f,0.14627091586589813f,-0.9104770421981812f,-0.07545550167560577f,-1.3930959701538086f,0.008092201314866543f,-1.8283593654632568f},
-{-0.31720414757728577f,-0.21001535654067993f,-0.15798500180244446f,0.3665239214897156f,-0.37393757700920105f,0.37094148993492126f,0.11292675137519836f,-0.2947862446308136f,-0.3764709532260895f,0.2424570620059967f,-0.1080506220459938f,-0.2837170362472534f,0.41839322447776794f,-0.01957082748413086f,-0.12957632541656494f,0.10856001079082489f},
-{0.03818705305457115f,0.27717405557632446f,-0.2018718123435974f,0.06585641950368881f,0.07545611262321472f,0.05265878140926361f,-0.11297860741615295f,-0.21416273713111877f,-0.24509364366531372f,0.19522181153297424f,0.351835161447525f,-0.2859584093093872f,-0.16718891263008118f,0.23180222511291504f,-0.23956191539764404f,-0.07242263853549957f},
-{0.4138670265674591f,0.1604653298854828f,0.056746453046798706f,0.036025404930114746f,0.3228367865085602f,-0.07083973288536072f,0.018455177545547485f,0.0059362053871154785f,0.40515169501304626f,0.014240056276321411f,-0.07738298177719116f,0.1407785713672638f,-0.13024571537971497f,-0.29546058177948f,-0.11976784467697144f,-0.35825538635253906f},
-{-1.0752074718475342f,-2.8200089931488037f,0.12081471085548401f,-0.12609876692295074f,0.29976895451545715f,0.4510769844055176f,-0.2826606035232544f,0.18327592313289642f,-0.3893685042858124f,-0.02222958207130432f,-0.19482164084911346f,-0.37641236186027527f,-0.19991017878055573f,-1.0054714679718018f,0.06622982025146484f,1.2732210159301758f},
-};
-
-const float h3[16][16] = {
-    {-0.36079341173171997f,0.5496202707290649f,-0.6524567604064941f,-1.0138130187988281f,-0.7639057636260986f,0.5781964063644409f,0.3332441747188568f,0.3036012351512909f,-0.2405819296836853f,0.04891335964202881f,-0.11870327591896057f,0.4001283347606659f,-0.533208429813385f,0.9845144152641296f,0.32505926489830017f,-0.19595709443092346f},
-{0.047732532024383545f,0.017954785376787186f,-0.18629395961761475f,-0.9162130951881409f,-0.43290695548057556f,-4.281400680541992f,-0.3198729455471039f,0.06247803568840027f,-0.19349214434623718f,-0.9508686065673828f,0.2572092115879059f,-0.41319137811660767f,-0.35956844687461853f,-0.5297766327857971f,0.10103966295719147f,-0.7109990119934082f},
-{0.07903262972831726f,0.2790505588054657f,-0.07798504829406738f,0.04248586297035217f,-0.1963958442211151f,-0.19260792434215546f,-0.4038352966308594f,0.015906542539596558f,0.15353140234947205f,0.030178606510162354f,0.2488909661769867f,0.13805970549583435f,-0.0816211998462677f,-0.20733052492141724f,-0.3036302626132965f,0.054825395345687866f},
-{-0.30922991037368774f,-0.05632366985082626f,-1.3186177015304565f,-0.9530683755874634f,-0.49597063660621643f,0.2564902603626251f,0.20021501183509827f,0.07002416253089905f,-0.4060443043708801f,-0.4593014717102051f,0.13192829489707947f,0.41021624207496643f,-0.2266009896993637f,0.25329798460006714f,0.28113701939582825f,-0.15740571916103363f},
-{-0.39607733488082886f,-0.05481579899787903f,0.1976260244846344f,0.022423356771469116f,0.16892847418785095f,-0.27518749237060547f,0.16012099385261536f,0.3626593053340912f,-0.08640444278717041f,-0.11053556203842163f,-0.10529157519340515f,-0.31317979097366333f,-0.1530032455921173f,-0.1336749792098999f,0.22959044575691223f,0.19986507296562195f},
-{-0.37449589371681213f,-0.02029903419315815f,-2.5072414875030518f,-12.973404884338379f,0.2337467223405838f,1.0865919589996338f,-0.18732719123363495f,0.22384825348854065f,-0.850281298160553f,-0.4489060342311859f,-0.23735009133815765f,0.05998014658689499f,0.23774290084838867f,0.08863037824630737f,0.5211813449859619f,-1.1956897974014282f},
-{0.4110594093799591f,0.2715781033039093f,-0.12724249064922333f,0.37246426939964294f,-0.06906148046255112f,-0.05251416191458702f,-0.08670487999916077f,-0.25336313247680664f,-0.030661463737487793f,-0.06259563565254211f,-0.1344406008720398f,0.35313835740089417f,0.13369451463222504f,0.2011522799730301f,0.3126353323459625f,-0.3391006588935852f},
-{-0.40892091393470764f,0.04420051723718643f,-0.26215535402297974f,0.25968697667121887f,0.4493691027164459f,-0.16038022935390472f,-0.23312048614025116f,-0.390264093875885f,0.28059282898902893f,-0.1559126079082489f,-0.14134526252746582f,-0.0003446042537689209f,-0.17052586376667023f,-0.4737553000450134f,0.08030081540346146f,0.005298197269439697f},
-{0.10697010159492493f,-0.12228584289550781f,-0.37870171666145325f,0.21184906363487244f,-0.37222859263420105f,-0.17138728499412537f,-0.1382003128528595f,0.3493293821811676f,-0.360889196395874f,-0.3875247836112976f,0.42142823338508606f,-0.3482915461063385f,-0.3289247751235962f,-0.2186824083328247f,0.09620395302772522f,-0.06898030638694763f},
-{0.2847062647342682f,0.018552124500274658f,0.11435768008232117f,0.36562982201576233f,-0.047046810388565063f,0.30447837710380554f,0.2430230677127838f,0.2909286320209503f,-0.2802048921585083f,0.18043199181556702f,0.41849127411842346f,-0.287167489528656f,0.24394884705543518f,-0.14084559679031372f,-0.10168051719665527f,0.010465055704116821f},
-{0.15459725260734558f,0.3123319149017334f,0.10377500206232071f,-0.044353384524583817f,-0.2320195883512497f,0.12762269377708435f,-0.08742031455039978f,0.05785742402076721f,-0.07219423353672028f,-0.2943510413169861f,0.1268840730190277f,-0.30447322130203247f,-0.044554103165864944f,-0.20284022390842438f,0.5049844980239868f,0.23406195640563965f},
-{-0.408692330121994f,0.7442746162414551f,-0.3166918158531189f,-0.5923694968223572f,-2.5536251068115234f,2.459355354309082f,0.03285527229309082f,0.38763079047203064f,-0.20705322921276093f,-0.25883403420448303f,0.12809070944786072f,0.03996849060058594f,1.5557342767715454f,2.810499429702759f,0.883807361125946f,-0.5292647480964661f},
-{-0.2991822361946106f,0.3794580399990082f,-0.07897943258285522f,-0.05932474136352539f,-0.019097916781902313f,0.10188531875610352f,-0.11253207921981812f,0.34576353430747986f,0.04814547300338745f,-0.35770976543426514f,-0.044228196144104004f,-0.36229726672172546f,0.015840977430343628f,-0.13475483655929565f,0.36124154925346375f,-0.16869547963142395f},
-{-0.2675279378890991f,-0.4076881408691406f,0.6109089851379395f,1.124742865562439f,0.791110098361969f,-1.8034776449203491f,-0.32875844836235046f,-0.31893211603164673f,-0.6889935731887817f,-1.1343306303024292f,-0.5256567001342773f,-0.8404866456985474f,1.0291988849639893f,-1.3514559268951416f,0.12213380634784698f,0.17103822529315948f},
-{-0.015470266342163086f,-0.23503242433071136f,0.13451209664344788f,0.36471807956695557f,-0.08753460645675659f,-0.20316985249519348f,0.05196094512939453f,-0.008358269929885864f,-0.4239840805530548f,-0.38441595435142517f,0.13179203867912292f,-0.11511552333831787f,0.07671336829662323f,0.1646096110343933f,0.19001242518424988f,-0.29890790581703186f},
-{0.1863725483417511f,-0.07918193191289902f,-0.8252384066581726f,-36.685184478759766f,1.862860083580017f,1.8086168766021729f,0.04860696196556091f,0.17769548296928406f,-0.32842522859573364f,-0.40967434644699097f,-0.3929237127304077f,-0.0008496989612467587f,2.3736817836761475f,1.629492998123169f,-0.45149895548820496f,-0.32196617126464844f},
-};
-
-const float hout[16] = { 0.45773375034332275f,0.3443804383277893f,-0.43964359164237976f,-0.21056394279003143f,0.19662600755691528f,0.7040731906890869f,0.0030125975608825684f,0.15066689252853394f,0.10095822811126709f,-0.13003124296665192f,0.18801097571849823f,0.0785079076886177f,-0.15748845040798187f,0.1868625432252884f,0.18598346412181854f,-0.9022102355957031f };
-
-const float b1[16] = { 0.7107149362564087f,1.0883506536483765f,-1.7145336866378784f,0.09724511206150055f,1.4542453289031982f,1.417521595954895f,-0.058932315558195114f,0.9398505687713623f,0.4389953017234802f,-0.9609658718109131f,0.8672975301742554f,1.5156910419464111f,-0.3718140721321106f,-0.886523962020874f,-1.087764859199524f,2.5278995037078857f };
-
-const float b2[16] = { -0.4577406942844391f,-0.4344789981842041f,-1.4564176797866821f,-0.6435210704803467f,-0.6939148902893066f,-0.16397996246814728f,-0.013260572217404842f,-0.43840786814689636f,-1.20063054561615f,-1.912178635597229f,-0.1346415877342224f,0.10342646390199661f,-0.23722384870052338f,0.9154923558235168f,-0.1802087128162384f,1.0650097131729126f };
-
-const float b3[16] = { -1.963319182395935f,-0.7180035710334778f,0.7040019035339355f,-0.4437018930912018f,-0.7515134811401367f,1.0377838611602783f,-0.45353031158447266f,-0.6562485098838806f,0.04508165270090103f,0.06766403466463089f,-0.29913392663002014f,-0.09212813526391983f,-1.5836485624313354f,0.42195138335227966f,-1.3884198665618896f,-0.511356770992279f };
-
-const float bout[1] = { 0.09115694463253021f };
-
-/////////////////////////////////////////////////////////////////////////////////////////////RL
-float input_RL[num_input_RL] = { 0.0f };
-
-//Critic Networks
-float hc1[num_input_RL][num_hidden_unit1] = {0.0f};
-float bc1[num_hidden_unit1] = {0.0f};
-float hc2[num_hidden_unit1][num_hidden_unit2] = {0.0f};
-float bc2[num_hidden_unit2] = {0.0f};
-float hc3[num_hidden_unit2] = {0.0f};
-float bc3 = 0.0f;
-
-//Critic Networks Temporary
-float hc1_temp[num_input_RL][num_hidden_unit1] = {0.0f};
-float bc1_temp[num_hidden_unit1] = {0.0f};
-float hc2_temp[num_hidden_unit1][num_hidden_unit2] = {0.0f};
-float bc2_temp[num_hidden_unit2] = {0.0f};
-float hc3_temp[num_hidden_unit2] = {0.0f};
-float bc3_temp = 0.0f;
-
-//Actor Networks
-float ha1[num_input_RL][num_hidden_unit1] = {0.0f};
-float ba1[num_hidden_unit1] = {0.0f};
-float ha2[num_hidden_unit1][num_hidden_unit2] = {0.0f};
-float ba2[num_hidden_unit2] = {0.0f};
-float ha3[num_hidden_unit2][2] = {0.0f};
-float ba3[2] = {0.0f};
-
-//Actor Networks Temporary
-float ha1_temp[num_input_RL][num_hidden_unit1] = {0.0f};
-float ba1_temp[num_hidden_unit1] = {0.0f};
-float ha2_temp[num_hidden_unit1][num_hidden_unit2] = {0.0f};
-float ba2_temp[num_hidden_unit2] = {0.0f};
-float ha3_temp[num_hidden_unit2][2] = {0.0f};
-float ba3_temp[2] = {0.0f};
-
-float VALVE_POS_RAW_NN = 0.0f;
-float DDV_JOINT_POS_FF(float REF_JOINT_VEL);
-
-/////////////////////////////////////////////RL tuning
-float Gradient_Limit = 0.5f;
-float gradient_rate_actor = 0.001f;
-float gradient_rate_critic = 0.001f;
-//////////////////////////////////////////////////////////////////////////////
-
-float Critic_Network_Temp(float *arr)
-{
-    float output1[num_hidden_unit1] = { 0.0f };
-    float output2[num_hidden_unit2] = { 0.0f };
-    float output = 0.0f;
-    for (int index2 = 0; index2 < num_hidden_unit1; index2++) {
-        for (int index1 = 0; index1 < num_input_RL; index1++) {
-            output1[index2] = output1[index2] + hc1_temp[index1][index2] * arr[index1];
-        }
-        //ReLU
-        output1[index2] = output1[index2] + bc1_temp[index2];
-        hx_c_sum[index2] = output1[index2];
-        if (output1[index2] < 0) {
-            output1[index2] = 0;
-        }
-        //tanh
-        //output1[index2] = tanh(output1[index2] + bc1_temp[index2]);
-    }
-    for (int index2 = 0; index2 < num_hidden_unit2; index2++) {
-        for (int index1 = 0; index1 < num_hidden_unit1; index1++) {
-            output2[index2] = output2[index2] + hc2_temp[index1][index2] * output1[index1];
-        }
-        //ReLU
-        output2[index2] = output2[index2] + bc2_temp[index2];
-        hxh_c_sum[index2] = output2[index2];
-        if (output2[index2] < 0) {
-            output2[index2] = 0;
-        }
-        //tanh
-        //output2[index2] = tanh(output2[index2] + bc2_temp[index2]);
-    }
-    for (int index2 = 0; index2 < 1; index2++) {
-        for (int index1 = 0; index1 < num_hidden_unit2; index1++) {
-            output = output + hc3_temp[index1] * output2[index1];
-        }
-        output = output + bc3_temp;
-        hxhh_c_sum = output;
-    }
-    return output;
-}
-
-
-void Actor_Network(float *arr)
-{
-    float output1[num_hidden_unit1] = {0.0f};
-    float output2[num_hidden_unit2] = {0.0f};
-    float output[2] = {0.0f};
-
-    for (int index2 = 0; index2 < num_hidden_unit1; index2++) {
-        for (int index1 = 0; index1 < num_input_RL; index1++) {
-            output1[index2] = output1[index2] + ha1_temp[index1][index2] * arr[index1];
-        }
-        output1[index2] = output1[index2] + ba1_temp[index2];
-        hx_a_sum[index2] = output1[index2];
-        if (output1[index2] < 0) {
-            output1[index2] = 0;
-        }
-    }
-    for (int index2 = 0; index2 < num_hidden_unit2; index2++) {
-        for (int index1 = 0; index1 < num_hidden_unit1; index1++) {
-            output2[index2] = output2[index2] + ha2_temp[index1][index2] * output1[index1];
-        }
-        output2[index2] = output2[index2] + ba2_temp[index2];
-        hxh_a_sum[index2] = output2[index2];
-        if (output2[index2] < 0) {
-            output2[index2] = 0;
-        }
-    }
-    for (int index2 = 0; index2 < 2; index2++) {
-        for (int index1 = 0; index1 < num_hidden_unit2; index1++) {
-            output[index2] = output[index2] + ha3_temp[index1][index2] * output2[index1];
-        }
-        hxhh_a_sum[index2] = output[index2] + ba3_temp[index2];
-    }
-
-    mean_before_SP = output[0] + ba3_temp[0];    //SP = softplus
-    deviation_before_SP = output[1] + ba3_temp[1];
-    //Softplus
-    mean = log(1.0f+exp(mean_before_SP));
-    deviation = log(1.0f+exp(deviation_before_SP));
-    logging2 = mean;
-    logging4 = deviation;
-}
-
-
-void Actor_Network_Old(float *arr)
-{
-    float output1[num_hidden_unit1] = {0.0f};
-    float output2[num_hidden_unit2] = {0.0f};
-    float output[2] = {0.0f};
-
-    for (int index2 = 0; index2 < num_hidden_unit1; index2++) {
-        for (int index1 = 0; index1 < num_input_RL; index1++) {
-            output1[index2] = output1[index2] + ha1[index1][index2] * arr[index1];
-        }
-        output1[index2] = output1[index2] + ba1[index2];
-        if (output1[index2] < 0) {
-            output1[index2] = 0;
-        }
-    }
-    for (int index2 = 0; index2 < num_hidden_unit2; index2++) {
-        for (int index1 = 0; index1 < num_hidden_unit1; index1++) {
-            output2[index2] = output2[index2] + ha2[index1][index2] * output1[index1];
-        }
-        output2[index2] = output2[index2] + ba2[index2];
-        if (output2[index2] < 0) {
-            output2[index2] = 0;
-        }
-    }
-    for (int index2 = 0; index2 < 2; index2++) {
-        for (int index1 = 0; index1 < num_hidden_unit2; index1++) {
-            output[index2] = output[index2] + ha3[index1][index2] * output2[index1];
-        }
-    }
-    mean_old = output[0] + ba3[0];
-    deviation_old = output[1] + ba3[1];
-    //Softplus
-    mean_old = log(1.0f+exp(mean_old));
-    deviation_old = log(1.0f+exp(deviation_old));
-}
-
-float Grad_Normal_Dist_Mean(float mean, float deviation, float action)
-{
-    float grad_mean = 0.0f;
-    grad_mean = (action-mean)*exp(-(action-mean)*(action-mean)/(2.0f*deviation*deviation))/(sqrt(2.0f*PI)*deviation*deviation*deviation);
-    return grad_mean;
-}
-
-float Grad_Normal_Dist_Deviation(float mean, float deviation, float action)
-{
-    float grad_dev = 0.0f;
-    grad_dev = exp(-(action-mean)*(action-mean)/(2.0f*deviation*deviation))*(-1.0f/(sqrt(2.0f*PI)*deviation*deviation) + (action-mean)*(action-mean)/(sqrt(2.0f*PI)*deviation*deviation*deviation*deviation));
-    return grad_dev;
-}
-
-float ReLU(float x)
-{
-    if (x >= 0) {
-        return x;
-    } else {
-        return 0.0f;
-    }
-}
-
-void update_Critic_Networks(float (*arr)[num_input_RL])
-{
-    float G_hc1[num_input_RL][num_hidden_unit1] = {0.0f};
-    float G_bc1[num_hidden_unit1] = {0.0f};
-    for (int index2 = 0; index2 < num_hidden_unit1; index2++) {
-        for (int index1 = 0; index1 < num_input_RL; index1++) {
-            for (int n=0; n<batch_size; n++) {
-                float d_V_d_hc1 = 0.0f;
-                for(int k=0; k<num_hidden_unit2; k++) {
-                    if (hxh_c_sum_array[n][k] >= 0) {
-                        if (hx_c_sum_array[n][index2] > 0) {
-                            d_V_d_hc1 = d_V_d_hc1 + arr[n][index1]*hc2_temp[index2][k]*hc3_temp[k];
-                        }
-                    }
-                }
-                G_hc1[index1][index2] = G_hc1[index1][index2] + 2.0f*(return_G[n]-V[n])*(-d_V_d_hc1);
-            }
-            G_hc1[index1][index2] = G_hc1[index1][index2] / batch_size;
-            if(G_hc1[index1][index2] > Gradient_Limit) G_hc1[index1][index2] = Gradient_Limit;
-            else if (G_hc1[index1][index2] < -Gradient_Limit) G_hc1[index1][index2] = -Gradient_Limit;
-            //hc1_temp[index1][index2] = hc1_temp[index1][index2] - gradient_rate_critic * G_hc1[index1][index2];
-        }
-        for (int n=0; n<batch_size; n++) {
-            float d_V_d_bc1 = 0.0f;
-            for(int k=0; k<num_hidden_unit2; k++) {
-                if (hxh_c_sum_array[n][k] >= 0) {
-                    if (hx_c_sum_array[n][index2] > 0) {
-                        d_V_d_bc1 = d_V_d_bc1 + hc2_temp[index2][k]*hc3_temp[k];
-                    }
-                }
-            }
-            G_bc1[index2] = G_bc1[index2] + 2.0f*(return_G[n]-V[n])*(-d_V_d_bc1);
-        }
-        G_bc1[index2] = G_bc1[index2] / batch_size;
-        if(G_bc1[index2] > Gradient_Limit) G_bc1[index2] = Gradient_Limit;
-        else if (G_bc1[index2] < -Gradient_Limit) G_bc1[index2] = -Gradient_Limit;
-        //bc1_temp[index2] = bc1_temp[index2] - gradient_rate_critic * G_bc1[index2];
-    }
-
-
-    float G_hc2[num_hidden_unit1][num_hidden_unit2] = {0.0f};
-    float G_bc2[num_hidden_unit2] = {0.0f};
-    for (int index2 = 0; index2 < num_hidden_unit2; index2++) {
-        for (int index1 = 0; index1 < num_hidden_unit1; index1++) {
-            for (int n=0; n<batch_size; n++) {
-                float d_V_d_hc2 = 0.0f;
-                if (hxh_c_sum_array[n][index2] >= 0) {
-                    if (hx_c_sum_array[n][index1] > 0) {
-                        d_V_d_hc2 = hx_c_sum_array[n][index1]*hc3_temp[index2];
-                    }
-                }
-                G_hc2[index1][index2] = G_hc2[index1][index2] + 2.0f*(return_G[n]-V[n])*(-d_V_d_hc2);
-            }
-            G_hc2[index1][index2] = G_hc2[index1][index2] / batch_size;
-            if(G_hc2[index1][index2] > Gradient_Limit) G_hc2[index1][index2] = Gradient_Limit;
-            else if (G_hc2[index1][index2] < -Gradient_Limit) G_hc2[index1][index2] = -Gradient_Limit;
-            //hc2_temp[index1][index2] = hc2_temp[index1][index2] - gradient_rate_critic * G_hc2[index1][index2];
-        }
-        for (int n=0; n<batch_size; n++) {
-            float d_V_d_bc2 = 0.0f;
-            if (hxh_c_sum_array[n][index2] >= 0) {
-                d_V_d_bc2 = hc3_temp[index2];
-            }
-            G_bc2[index2] = G_bc2[index2] + 2.0f*(return_G[n]-V[n])*(-d_V_d_bc2);
-        }
-        G_bc2[index2] = G_bc2[index2] / batch_size;
-        if(G_bc2[index2] > Gradient_Limit) G_bc2[index2] = Gradient_Limit;
-        else if (G_bc2[index2] < -Gradient_Limit) G_bc2[index2] = -Gradient_Limit;
-        //bc2_temp[index2] = bc2_temp[index2] - gradient_rate_critic * G_bc2[index2];
-    }
-
-    float G_hc3[num_hidden_unit2]= {0.0f};
-    float G_bc3 = 0.0f;
-    for (int index2 = 0; index2 < 1; index2++) {
-        for (int index1 = 0; index1 < num_hidden_unit2; index1++) {
-            for (int n=0; n<batch_size; n++) {
-                float d_V_d_hc3 = 0.0f;
-                if (hxh_c_sum_array[n][index1] >= 0) {
-                    d_V_d_hc3 = d_V_d_hc3 + hxh_c_sum_array[n][index1];
-                }
-                G_hc3[index1] = G_hc3[index1] + 2.0f*(return_G[n]-V[n])*(-d_V_d_hc3);
-            }
-            G_hc3[index1] = G_hc3[index1] / batch_size;
-            if(G_hc3[index1] > Gradient_Limit) G_hc3[index1] = Gradient_Limit;
-            else if (G_hc3[index1] < -Gradient_Limit) G_hc3[index1] = -Gradient_Limit;
-            //hc3_temp[index1] = hc3_temp[index1] - gradient_rate_critic * G_hc3[index1];
-        }
-        for (int n=0; n<batch_size; n++) {
-            float d_V_d_bc3 = 0.0f;
-            d_V_d_bc3 = 1.0f;
-            G_bc3 = G_bc3 + 2.0f*(return_G[n]-V[n])*(-d_V_d_bc3);
-        }
-        G_bc3 = G_bc3 / batch_size;
-        if(G_bc3 > Gradient_Limit) G_bc3 = Gradient_Limit;
-        else if (G_bc3 < -Gradient_Limit) G_bc3 = -Gradient_Limit;
-        //bc3_temp = bc3_temp - gradient_rate_critic * G_bc3;
-    }
-
-    // Simultaneous Update
-    for (int index2 = 0; index2 < num_hidden_unit1; index2++) {
-        for (int index1 = 0; index1 < num_input_RL; index1++) {
-            hc1_temp[index1][index2] = hc1_temp[index1][index2] - gradient_rate_critic * G_hc1[index1][index2];
-        }
-        bc1_temp[index2] = bc1_temp[index2] - gradient_rate_critic * G_bc1[index2];
-    }
-    for (int index2 = 0; index2 < num_hidden_unit2; index2++) {
-        for (int index1 = 0; index1 < num_hidden_unit1; index1++) {
-            hc2_temp[index1][index2] = hc2_temp[index1][index2] - gradient_rate_critic * G_hc2[index1][index2];
-        }
-        bc2_temp[index2] = bc2_temp[index2] - gradient_rate_critic * G_bc2[index2];
-    }
-    for (int index2 = 0; index2 < 1; index2++) {
-        for (int index1 = 0; index1 < num_hidden_unit2; index1++) {
-            hc3_temp[index1] = hc3_temp[index1] - gradient_rate_critic * G_hc3[index1];
-        }
-        bc3_temp = bc3_temp - gradient_rate_critic * G_bc3;
-    }
-}
-
-///////////////////////////Softplus//////////////////////////////////
-void update_Actor_Networks(float (*arr)[num_input_RL])
-{
-
-
-    float G_ha1[num_input_RL][num_hidden_unit1] = {0.0f};
-    float G_ba1[num_hidden_unit1] = {0.0f};
-
-    for (int index2 = 0; index2 < num_hidden_unit1; index2++) {
-        for (int index1 = 0; index1 < num_input_RL; index1++) {
-            for (int n=0; n<batch_size; n++) {
-                float d_x_d_ha1 = 0.0f;
-                float d_y_d_ha1 = 0.0f;
-                if((advantage[n] >= 0.0f && ratio[n] >= 1.0f + epsilon) || (advantage[n] < 0.0f && ratio[n] < 1.0f - epsilon)) {
-                    G_ha1[index1][index2] = G_ha1[index1][index2];
-                } else {
-                    for(int k=0; k<num_hidden_unit2; k++) {
-                        if (hxh_a_sum_array[n][k] >= 0) {
-                            if (hx_a_sum_array[n][index2] > 0) {
-                                d_x_d_ha1 = d_x_d_ha1 + arr[n][index1]*ha2_temp[index2][k]*ha3_temp[k][0];
-                                d_y_d_ha1 = d_y_d_ha1 + arr[n][index1]*ha2_temp[index2][k]*ha3_temp[k][1];
-                            }
-                        }
-                    }
-                    float d_mean_d_ha1 = 0.0f;
-                    float d_dev_d_ha1 = 0.0f;
-                    d_mean_d_ha1 = exp(hxhh_a_sum_array[n][0])/(1.0f+exp(hxhh_a_sum_array[n][0]))*d_x_d_ha1;
-                    d_dev_d_ha1 = exp(hxhh_a_sum_array[n][1])/(1.0f+exp(hxhh_a_sum_array[n][1]))*d_y_d_ha1;
-
-                    G_ha1[index1][index2] = G_ha1[index1][index2] + advantage[n]/pi_old[n]*(d_mean_d_ha1*Grad_Normal_Dist_Mean(mean_array[n],deviation_array[n],action_array[n])+d_dev_d_ha1*Grad_Normal_Dist_Deviation(mean_array[n],deviation_array[n],action_array[n]));
-                }
-            }
-            G_ha1[index1][index2] = -G_ha1[index1][index2] / batch_size;
-            if(G_ha1[index1][index2] > Gradient_Limit) G_ha1[index1][index2] = Gradient_Limit;
-            else if (G_ha1[index1][index2] < -Gradient_Limit) G_ha1[index1][index2] = -Gradient_Limit;
-            //ha1_temp[index1][index2] = ha1_temp[index1][index2] - gradient_rate_actor * G_ha1[index1][index2];
-        }
-
-        for (int n=0; n<batch_size; n++) {
-            float d_x_d_ba1 = 0.0f;
-            float d_y_d_ba1 = 0.0f;
-            if((advantage[n] >= 0.0f && ratio[n] >= 1.0f + epsilon) || (advantage[n] < 0.0f && ratio[n] < 1.0f - epsilon))  {
-                G_ba1[index2] = G_ba1[index2];
-            } else {
-                for(int k=0; k<num_hidden_unit2; k++) {
-                    if (hxh_a_sum_array[n][k] >= 0) {
-                        if (hx_a_sum_array[n][index2] > 0) {
-                            d_x_d_ba1 = d_x_d_ba1 + ha2_temp[index2][k]*ha3_temp[k][0];
-                            d_y_d_ba1 = d_y_d_ba1 + ha2_temp[index2][k]*ha3_temp[k][1];
-                        }
-                    }
-                }
-                float d_mean_d_ba1 = 0.0f;
-                float d_dev_d_ba1 = 0.0f;
-                d_mean_d_ba1 = exp(hxhh_a_sum_array[n][0])/(1.0f+exp(hxhh_a_sum_array[n][0]))*d_x_d_ba1;
-                d_dev_d_ba1 = exp(hxhh_a_sum_array[n][1])/(1.0f+exp(hxhh_a_sum_array[n][1]))*d_y_d_ba1;
-
-                G_ba1[index2] = G_ba1[index2] + advantage[n]/pi_old[n]*(d_mean_d_ba1*Grad_Normal_Dist_Mean(mean_array[n],deviation_array[n],action_array[n])+d_dev_d_ba1*Grad_Normal_Dist_Deviation(mean_array[n],deviation_array[n],action_array[n]));
-            }
-        }
-        G_ba1[index2] = -G_ba1[index2] / batch_size;
-        if(G_ba1[index2] > Gradient_Limit) G_ba1[index2] = Gradient_Limit;
-        else if (G_ba1[index2] < -Gradient_Limit) G_ba1[index2] = -Gradient_Limit;
-        //ba1_temp[index2] = ba1_temp[index2] - gradient_rate_actor * G_ba1[index2];
-    }
-
-    float G_ha2[num_hidden_unit1][num_hidden_unit2] = {0.0f};
-    float G_ba2[num_hidden_unit2] = {0.0f};
-
-    for (int index2 = 0; index2 < num_hidden_unit2; index2++) {
-        for (int index1 = 0; index1 < num_hidden_unit1; index1++) {
-            for (int n=0; n<batch_size; n++) {
-                float d_x_d_ha2 = 0.0f;
-                float d_y_d_ha2 = 0.0f;
-                if((advantage[n] >= 0.0f && ratio[n] >= 1.0f + epsilon) || (advantage[n] < 0.0f && ratio[n] < 1.0f - epsilon)) {
-                    G_ha2[index1][index2] = G_ha2[index1][index2];
-                } else {
-                    if (hxh_a_sum_array[n][index2] >= 0) {
-                        if (hx_a_sum_array[n][index1] > 0) {
-                            d_x_d_ha2 = hx_a_sum_array[n][index1]*ha3_temp[index2][0];
-                            d_y_d_ha2 = hx_a_sum_array[n][index1]*ha3_temp[index2][1];
-                        }
-                    }
-
-                    float d_mean_d_ha2 = 0.0f;
-                    float d_dev_d_ha2 = 0.0f;
-                    d_mean_d_ha2 = exp(hxhh_a_sum_array[n][0])/(1.0f+exp(hxhh_a_sum_array[n][0]))*d_x_d_ha2;
-                    d_dev_d_ha2 = exp(hxhh_a_sum_array[n][1])/(1.0f+exp(hxhh_a_sum_array[n][1]))*d_y_d_ha2;
-
-                    G_ha2[index1][index2] = G_ha2[index1][index2] + advantage[n]/pi_old[n]*(d_mean_d_ha2*Grad_Normal_Dist_Mean(mean_array[n],deviation_array[n],action_array[n])+d_dev_d_ha2*Grad_Normal_Dist_Deviation(mean_array[n],deviation_array[n],action_array[n]));
-                }
-            }
-            G_ha2[index1][index2] = -G_ha2[index1][index2] / batch_size;
-            if(G_ha2[index1][index2] > Gradient_Limit) G_ha2[index1][index2] = Gradient_Limit;
-            else if (G_ha2[index1][index2] < -Gradient_Limit) G_ha2[index1][index2] = -Gradient_Limit;
-            //ha2_temp[index1][index2] = ha2_temp[index1][index2] - gradient_rate_actor * G_ha2[index1][index2];
-        }
-
-        for (int n=0; n<batch_size; n++) {
-            float d_x_d_ba2 = 0.0f;
-            float d_y_d_ba2 = 0.0f;
-            if((advantage[n] >= 0.0f && ratio[n] >= 1.0f + epsilon) || (advantage[n] < 0.0f && ratio[n] < 1.0f - epsilon))  {
-                G_ba2[index2] = G_ba2[index2];
-            } else {
-
-                if (hxh_a_sum_array[n][index2] >= 0) {
-                    d_x_d_ba2 = ha3_temp[index2][0];
-                    d_y_d_ba2 = ha3_temp[index2][1];
-                }
-                float d_mean_d_ba2= 0.0f;
-                float d_dev_d_ba2= 0.0f;
-                d_mean_d_ba2 = exp(hxhh_a_sum_array[n][0])/(1.0f+exp(hxhh_a_sum_array[n][0]))*d_x_d_ba2;
-                d_dev_d_ba2 = exp(hxhh_a_sum_array[n][1])/(1.0f+exp(hxhh_a_sum_array[n][1]))*d_y_d_ba2;
-
-                G_ba2[index2] = G_ba2[index2] + advantage[n]/pi_old[n]*(d_mean_d_ba2*Grad_Normal_Dist_Mean(mean_array[n],deviation_array[n],action_array[n])+d_dev_d_ba2*Grad_Normal_Dist_Deviation(mean_array[n],deviation_array[n],action_array[n]));
-            }
-        }
-        G_ba2[index2] = -G_ba2[index2] / batch_size;
-        if(G_ba2[index2] > Gradient_Limit) G_ba2[index2] = Gradient_Limit;
-        else if (G_ba2[index2] < -Gradient_Limit) G_ba2[index2] = -Gradient_Limit;
-        //ba2_temp[index2] = ba2_temp[index2] - gradient_rate_actor * G_ba2[index2];
-    }
-
-    float G_ha3[num_hidden_unit2][2] = {0.0f};
-    float G_ba3[2] = {0.0f};
-
-    for (int index2 = 0; index2 < 2; index2++) {
-        for (int index1 = 0; index1 < num_hidden_unit2; index1++) {
-            for (int n=0; n<batch_size; n++) {
-                float d_x_d_ha3 = 0.0f;
-                float d_y_d_ha3 = 0.0f;
-                if((advantage[n] >= 0.0f && ratio[n] >= 1.0f + epsilon) || (advantage[n] < 0.0f && ratio[n] < 1.0f - epsilon)) {
-                    G_ha3[index1][index2] = G_ha3[index1][index2];
-                } else {
-                    if (hxh_a_sum_array[n][index1] >= 0) {
-                        if (hx_a_sum_array[n][index1] > 0) {
-                            d_x_d_ha3 = hxh_a_sum_array[n][index1];
-                            d_y_d_ha3 = hxh_a_sum_array[n][index1];
-                        }
-                    }
-                    float d_mean_d_ha3 = 0.0f;
-                    float d_dev_d_ha3 = 0.0f;
-                    d_mean_d_ha3 = exp(hxhh_a_sum_array[n][0])/(1.0f+exp(hxhh_a_sum_array[n][0]))*d_x_d_ha3;
-                    d_dev_d_ha3 = exp(hxhh_a_sum_array[n][1])/(1.0f+exp(hxhh_a_sum_array[n][1]))*d_y_d_ha3;
-
-                    G_ha3[index1][index2] = G_ha3[index1][index2] + advantage[n]/pi_old[n]*(d_mean_d_ha3*Grad_Normal_Dist_Mean(mean_array[n],deviation_array[n],action_array[n])+d_dev_d_ha3*Grad_Normal_Dist_Deviation(mean_array[n],deviation_array[n],action_array[n]));
-                }
-            }
-            G_ha3[index1][index2] = -G_ha3[index1][index2] / batch_size;
-            if(G_ha3[index1][index2] > Gradient_Limit) G_ha3[index1][index2] = Gradient_Limit;
-            else if (G_ha3[index1][index2] < -Gradient_Limit) G_ha3[index1][index2] = -Gradient_Limit;
-            //ha3_temp[index1][index2] = ha3_temp[index1][index2] - gradient_rate_actor * G_ha3[index1][index2];
-        }
-
-        for (int n=0; n<batch_size; n++) {
-            float d_x_d_ba3 = 0.0f;
-            float d_y_d_ba3 = 0.0f;
-            if((advantage[n] >= 0.0f && ratio[n] >= 1.0f + epsilon) || (advantage[n] < 0.0f && ratio[n] < 1.0f - epsilon))  {
-                G_ba3[index2] = G_ba3[index2];
-            } else {
-
-                d_x_d_ba3 = 1.0f;
-                d_y_d_ba3 = 1.0f;
-
-                float d_mean_d_ba3= 0.0f;
-                float d_dev_d_ba3= 0.0f;
-                d_mean_d_ba3 = exp(hxhh_a_sum_array[n][0])/(1.0f+exp(hxhh_a_sum_array[n][0]))*d_x_d_ba3;
-                d_dev_d_ba3 = exp(hxhh_a_sum_array[n][1])/(1.0f+exp(hxhh_a_sum_array[n][1]))*d_y_d_ba3;
-
-                G_ba3[index2] = G_ba3[index2] + advantage[n]/pi_old[n]*(d_mean_d_ba3*Grad_Normal_Dist_Mean(mean_array[n],deviation_array[n],action_array[n])+d_dev_d_ba3*Grad_Normal_Dist_Deviation(mean_array[n],deviation_array[n],action_array[n]));
-            }
-        }
-        G_ba3[index2] = -G_ba3[index2] / batch_size;
-        if(G_ba3[index2] > Gradient_Limit) G_ba3[index2] = Gradient_Limit;
-        else if (G_ba3[index2] < -Gradient_Limit) G_ba3[index2] = -Gradient_Limit;
-        //ba3_temp[index2] = ba3_temp[index2] - gradient_rate_actor * G_ba3[index2];
-    }
-
-    // Simultaneous Update
-    for (int index2 = 0; index2 < num_hidden_unit1; index2++) {
-        for (int index1 = 0; index1 < num_input_RL; index1++) {
-            ha1_temp[index1][index2] = ha1_temp[index1][index2] - gradient_rate_actor * G_ha1[index1][index2];
-        }
-        ba1_temp[index2] = ba1_temp[index2] - gradient_rate_actor * G_ba1[index2];
-    }
-    for (int index2 = 0; index2 < num_hidden_unit2; index2++) {
-        for (int index1 = 0; index1 < num_hidden_unit1; index1++) {
-            ha2_temp[index1][index2] = ha2_temp[index1][index2] - gradient_rate_actor * G_ha2[index1][index2];
-        }
-        ba2_temp[index2] = ba2_temp[index2] - gradient_rate_actor * G_ba2[index2];
-    }
-    for (int index2 = 0; index2 < 2; index2++) {
-        for (int index1 = 0; index1 < num_hidden_unit2; index1++) {
-            ha3_temp[index1][index2] = ha3_temp[index1][index2] - gradient_rate_actor * G_ha3[index1][index2];
-        }
-        ba3_temp[index2] = ba3_temp[index2] - gradient_rate_actor * G_ba3[index2];
-    }
-}
-
-float rand_normal(double mean, double stddev)
-{
-    //Box muller method
-    static double n2 = 0.0f;
-    static int n2_cached = 0;
-    if (!n2_cached) {
-        double x, y, r;
-        do {
-            x = 2.0f*rand()/RAND_MAX - 1;
-            y = 2.0f*rand()/RAND_MAX - 1;
-
-            r = x*x + y*y;
-        } while (r == 0.0f || r > 1.0f);
-        {
-            double d = sqrt(-2.0f*log(r)/r);
-            double n1 = x*d;
-            n2 = y*d;
-            double result = n1*stddev + mean;
-            n2_cached = 1;
-            return result;
-        }
-    } else {
-        n2_cached = 0;
-        return n2*stddev + mean;
-    }
-}
-
-float mean_adv(float x[], int size)
-{
-    float add = 0.0f;
-    float result;
-
-    for (int i=0; i<size; i++) {
-        add += x[i];
-    }
-    result = (float) add/size;
-    return result;
-}
-float deviation_adv(float x[], int size)
-{
-    float sigma = 0.0f;
-    float resultDeb = 0.0f;
-
-    for (int k=0; k<size; k++) {
-        sigma = pow((float)x[k]-mean_adv(x,size), (float)2.0f)/(size-1);
-        resultDeb += sqrt(sigma);
-    }
-    return resultDeb;
-}
-
-
-void Overwirte_Critic_Networks()
-{
-    for (int index2 = 0; index2 < num_hidden_unit1; index2++) {
-        for (int index1 = 0; index1 < num_input_RL; index1++) {
-            hc1[index1][index2] = hc1_temp[index1][index2];
-        }
-        bc1[index2] = bc1_temp[index2];
-    }
-    for (int index2 = 0; index2 < num_hidden_unit2; index2++) {
-        for (int index1 = 0; index1 < num_hidden_unit1; index1++) {
-            hc2[index1][index2] = hc2_temp[index1][index2];
-        }
-        bc2[index2] = bc2_temp[index2];
-        hc3[index2] = hc3_temp[index2];
-    }
-    bc3 = bc3_temp;
-}
-void Overwirte_Actor_Networks()
-{
-    for (int index2 = 0; index2 < num_hidden_unit1; index2++) {
-        for (int index1 = 0; index1 < num_input_RL; index1++) {
-            ha1[index1][index2] = ha1_temp[index1][index2];
-        }
-        ba1[index2] = ba1_temp[index2];
-    }
-    for (int index2 = 0; index2 < num_hidden_unit2; index2++) {
-        for (int index1 = 0; index1 < num_hidden_unit1; index1++) {
-            ha2[index1][index2] = ha2_temp[index1][index2];
-        }
-        ba2[index2] = ba2_temp[index2];
-    }
-    for (int index2 = 0; index2 < 2; index2++) {
-        for (int index1 = 0; index1 < num_hidden_unit2; index1++) {
-            ha3[index1][index2] = ha3_temp[index1][index2];
-        }
-        ba3[index2] = ba3_temp[index2];
-    }
-}
-
 
 int main()
 {
-
-    HAL_Init();
-    SystemClock_Config();
-
     /*********************************
     ***     Initialization
     *********************************/
+    
+    HAL_Init();
+    SystemClock_Config();
+    
     LED = 0;
     pc.baud(9600);
 
@@ -881,14 +209,14 @@
     init_as5510(i2c_slave_addr1);
     make_delay();
 
-//    // spi init
+    // spi init
     eeprom.format(8,3);
     eeprom.frequency(5000000); //5M
     enc.format(8,0);
     enc.frequency(5000000); //5M
     make_delay();
 
-    //rom
+    // rom
     ROM_CALL_DATA();
     make_delay();
 
@@ -906,11 +234,6 @@
     TIM3->CR1 ^= TIM_CR1_UDIS;
     make_delay();
 
-    // TMR2 init
-//    Init_TMR2();
-//    TIM2->CR1 ^= TIM_CR1_UDIS;
-//    make_delay();
-
     // CAN
     can.attach(&CAN_RX_HANDLER);
     CAN_ID_INIT();
@@ -918,7 +241,6 @@
 
     //Timer priority
     NVIC_SetPriority(TIM3_IRQn, 2);
-    //NVIC_SetPriority(TIM2_IRQn, 3);
     NVIC_SetPriority(TIM4_IRQn, 3);
 
     //can.reset();
@@ -945,258 +267,30 @@
             ID_index_array[i] =  (i+1) * 0.5f;
     }
 
-    for (int index2 = 0; index2 < num_hidden_unit1; index2++) {
-        for (int index1 = 0; index1 < num_input_RL; index1++) {
-            hc1_temp[index1][index2] = (float) (rand()%100) * 0.007f ;
-        }
-        bc1_temp[index2] = (float) (rand()%100) * 0.007f;
-    }
-    for (int index2 = 0; index2 < num_hidden_unit2; index2++) {
-        for (int index1 = 0; index1 < num_hidden_unit1; index1++) {
-            hc2_temp[index1][index2] = (float) (rand()%100) * 0.007f;
-        }
-        bc2_temp[index2] = (float) (rand()%100) * 0.007f;
-        hc3_temp[index2] = (float) (rand()%100) * 0.007f;
-    }
-    bc3_temp = (float) (rand()%100) * 0.007f;
-
-    for (int index2 = 0; index2 < num_hidden_unit1; index2++) {
-        for (int index1 = 0; index1 < num_input_RL; index1++) {
-            ha1_temp[index1][index2] = (float) (rand()%100) * 0.007f;
-        }
-        ba1_temp[index2] = (float) (rand()%100) * 0.007f;
-    }
-    for (int index2 = 0; index2 < num_hidden_unit2; index2++) {
-        for (int index1 = 0; index1 < num_hidden_unit1; index1++) {
-            ha2_temp[index1][index2] = (float) (rand()%100) * 0.007f;
-        }
-        ba2_temp[index2] = (float) (rand()%100) * 0.007f;
-    }
-    for (int index2 = 0; index2 < 2; index2++) {
-        for (int index1 = 0; index1 < num_hidden_unit2; index1++) {
-            ha3_temp[index1][index2] = (float) (rand()%100) * 0.007f;
-        }
-        ba3_temp[index2] = (float) (rand()%100) * 0.007f;
-    }
-
-    Overwirte_Critic_Networks();
-    Overwirte_Actor_Networks();
-
     /************************************
     ***     Program is operating!
     *************************************/
     while(1) {
 
-//        if(timer_while==27491) {
+        // UART example
+//        if(timer_while==100000) {
 //            timer_while = 0;
-//            pc.printf("ref : %f     virt_pos : %f  mean : %f    deviation : %f       Last_pos_of_batch : %f      reward_sum : %f\n", pos.sen/(float)(ENC_PULSE_PER_POSITION), logging3, logging2, logging4, logging1, logging5);
-//            //pc.printf("%f\n", virt_pos);
-//            //pc.printf("%f\n", pos.sen/(float)(ENC_PULSE_PER_POSITION));
-//            //pc.printf("ref : %f     virt_pos : %f\n", pos.sen/(float)(ENC_PULSE_PER_POSITION), virt_pos);
+//            pc.printf("%f\n", value);
 //        }
-
-
-        //i2c
-        read_field(i2c_slave_addr1);
-        if(DIR_VALVE_ENC < 0) value = 1023 - value;
-
-        //timer_while ++;
-
-        ///////////////////////////////////////////////////////Neural Network
-
-        if(NN_Control_Flag == 0) {
-            LED = 0;
-        }
-
-        else if(NN_Control_Flag == 1) {
-
-            int ind = 0;
-            for(int i=0; i<numpast_u; i++) {
-                input_NN[ind] = u_past[time_interval*i];
-                ind = ind + 1;
-            }
-
-            for(int i=0; i<numpast_x; i++) {
-                input_NN[ind] = x_past[time_interval*i] / 60.0f;
-                ind = ind + 1;
-            }
-            input_NN[ind] = (pos.sen / ENC_PULSE_PER_POSITION) / 60.0f;
-            ind = ind + 1;
-
-//            for(int i=0; i<numfuture_x; i++) {
-//                input_NN[ind] = x_future[time_interval*i+time_interval] / 60.0f;
-//                ind = ind + 1;
-//            }
-
-            for(int i=0; i<numpast_f; i++) {
-//                input_NN[ind] = f_past[time_interval*i] / 10000.0f * 8.0f + 0.5f;
-                input_NN[ind] = f_past[time_interval*i] / 10000.0f + 0.5f;
-                ind = ind + 1;
-            }
-//            input_NN[ind] = torq.sen / 10000.0f * 8.0f + 0.5f;
-            input_NN[ind] = torq.sen / 10000.0f + 0.5f;
-            ind = ind + 1;
-            for(int i=0; i<numfuture_f-1; i++) {
-//                input_NN[ind] = (f_future[time_interval*i+time_interval] - torq.sen)/10000.0f * 8.0f + 0.5f;
-//                input_NN[ind] = (f_future[time_interval*i+time_interval] - torq.sen)/10000.0f + 0.5f;
-//                input_NN[ind] = (f_future[time_interval*i+time_interval])/10000.0f*8.0f+0.5f;
-                input_NN[ind] = (f_future[time_interval*i+time_interval])/10000.0f + 0.5f;
-                ind = ind + 1;
-            }
-
-            float output1[16] = { 0.0f };
-            float output2[16] = { 0.0f };
-            float output3[16] = { 0.0f };
-            float output = 0.0f;
-
-            for (int index2 = 0; index2 < 16; index2++) {
-                for (int index1 = 0; index1 < num_input; index1++) {
-                    output1[index2] = output1[index2]
-                                      + h1[index1][index2] * input_NN[index1];
-                }
-                output1[index2] = output1[index2] + b1[index2];
-                if (output1[index2] < 0) {
-                    output1[index2] = 0;
-                }
-            }
-
-            for (int index2 = 0; index2 < 16; index2++) {
-                for (int index1 = 0; index1 < 16; index1++) {
-                    output2[index2] = output2[index2]
-                                      + h2[index1][index2] * output1[index1];
-                }
-                output2[index2] = output2[index2] + b2[index2];
-                if (output2[index2] < 0) {
-                    output2[index2] = 0;
-                }
-            }
-
-            for (int index2 = 0; index2 < 16; index2++) {
-                for (int index1 = 0; index1 < 16; index1++) {
-                    output3[index2] = output3[index2]
-                                      + h3[index1][index2] * output2[index1];
-                }
-                output3[index2] = output3[index2] + b3[index2];
-                if (output3[index2] < 0) {
-                    output3[index2] = 0;
-                }
-            }
-
-            for (int index2 = 0; index2 < 1; index2++) {
-                for (int index1 = 0; index1 < 16; index1++) {
-                    output = output + hout[index1] * output3[index1];
-                }
-                output = output + bout[index2];
+//        timer_while ++;
 
-            }
-            output = 1.0f/(1.0f+exp(-output));
-            output_normalized = output;
-            output = output * 20000.0f - 10000.0f;
-
-            if(output>=0) {
-                valve_pos.ref = output*0.0001f*((double)VALVE_MAX_POS - (double) VALVE_CENTER) + (double) VALVE_CENTER;
-            } else {
-                valve_pos.ref = -output*0.0001f*((double)VALVE_MIN_POS - (double) VALVE_CENTER) + (double) VALVE_CENTER;
-            }
-
-
-            if(LED==1) {
-                LED=0;
-            } else
-                LED = 1;
-
-        }
-
-
-        /////////////////////////////////////////////////////////////////////RL
-        switch (Update_Case) {
-            case 0: {
-                break;
-            }
-            case 1: {
-                //Network Update(just update and hold network)
-                for (int epoch = 0; epoch < num_epoch; epoch++) {
-                    float loss_sum = 0.0f;
-                    for (int n=batch_size-1; n>=0; n--) {
-                        //Calculate Estimated V
-                        //float temp_array[3] = {state_array[n][0], state_array[n][1], state_array[n][2]};
-                        float temp_array[2] = {state_array[n][0], state_array[n][1]};
-                        V[n] = Critic_Network_Temp(temp_array);
-                        for (int i=0; i<num_hidden_unit1; i++) {
-                            hx_c_sum_array[n][i] = hx_c_sum[i];
-                        }
-                        for (int i=0; i<num_hidden_unit2; i++) {
-                            hxh_c_sum_array[n][i] = hxh_c_sum[i];
-                        }
-                        hxhh_c_sum_array[n] = hxhh_c_sum;
-
-                        pi[n] = exp(-(action_array[n]-mean_array[n])*(action_array[n]-mean_array[n])/(2.0f*deviation_array[n]*deviation_array[n]))/(sqrt(2.0f*PI)*deviation_array[n]);
-                        Actor_Network_Old(temp_array);
-                        pi_old[n] = exp(-(action_array[n]-mean_old)*(action_array[n]-mean_old)/(2.0f*deviation_old*deviation_old))/(sqrt(2.0f*PI)*deviation_old);
-                        r[n] = exp(-0.25f * 5.0f * state_array[n][1] * state_array[n][1]);
-                        if(n == batch_size-1) return_G[n] = 0.0f;
-                        else return_G[n] = gamma * return_G[n+1] + r[n];
-                        if(n == batch_size-1) td_target[n] = r[n];
-                        else td_target[n] = r[n] + gamma * V[n+1];
-                        delta[n] = td_target[n] - V[n];
-                        if(n == batch_size-1) advantage[n] = 0.0f;
-                        else advantage[n] = gamma * lmbda * advantage[n+1] + delta[n];
-//                        return_G[n] = advantage[n] + V[n];
-                        ratio[n] = pi[n]/pi_old[n];
-                    }
-                    float mean_advantage = 0.0f;
-                    float dev_advantage = 0.0f;
-                    mean_advantage = mean_adv(advantage, batch_size);
-                    dev_advantage = deviation_adv(advantage, batch_size);
-                    for (int n=batch_size-1; n>=0; n--) {
-                        //advantage[n] = (advantage[n]-mean_advantage)/dev_advantage;
-                        surr1[n] = ratio[n] * advantage[n];
-                        if (ratio[n] > 1.0f + epsilon) {
-                            surr2[n] = (1.0f + epsilon)*advantage[n];
-                        } else if( ratio[n] < 1.0f - epsilon) {
-                            surr2[n] = (1.0f - epsilon)*advantage[n];
-                        } else {
-                            surr2[n] = ratio[n]*advantage[n];
-                        }
-                        loss[n] = -min(surr1[n], surr2[n]);
-                        loss_sum = loss_sum + loss[n];
-                    }
-                    reward_sum = 0.0f;
-                    for (int i=0; i<batch_size; i++) {
-                        reward_sum = reward_sum + r[i];
-                    }
-                    logging5 = reward_sum;
-
-
-                    //loss_batch = loss_sum / (float) batch_size;
-                    loss_batch = loss_sum;
-                    //Update Networks
-                    update_Critic_Networks(state_array);
-                    update_Actor_Networks(state_array);
-                }
-                Update_Done_Flag = 1;
-                Update_Case = 0;
-                //logging1 = V[0];
-
-                break;
-            }
-            case 2: {
-                //Network apply to next Network
-                Overwirte_Critic_Networks();
-                Overwirte_Actor_Networks();
-                virt_pos = 10.0f;
-                Update_Done_Flag = 1;
-                Update_Case = 0;
-                break;
-            }
-
+        //i2c for SW valve
+        if(OPERATING_MODE == 5){
+            read_field(i2c_slave_addr1);
+            if(DIR_VALVE_ENC < 0) value = 1023 - value;
         }
     }
 }
 
+
+// Velocity feedforward for SW valve
 float DDV_JOINT_POS_FF(float REF_JOINT_VEL)
 {
-
     int i = 0;
     float Ref_Valve_Pos_FF = 0.0f;
     for(i=0; i<VALVE_POS_NUM; i++) {
@@ -1223,12 +317,11 @@
         Ref_Valve_Pos_FF = (float) VALVE_MIN_POS;
     }
 
-    Ref_Valve_Pos_FF = (float) VELOCITY_COMP_GAIN * 0.01f * (float) (Ref_Valve_Pos_FF - (float) VALVE_CENTER);
+    Ref_Valve_Pos_FF = (float) VELOCITY_COMP_GAIN * 0.01f * (float) (Ref_Valve_Pos_FF - (float) VALVE_CENTER);  //VELOCITY_COMP_GAIN : 0~100
     return Ref_Valve_Pos_FF;
-
 }
 
-
+// Valve feedforward for SW valve
 void VALVE_POS_CONTROL(float REF_VALVE_POS)
 {
     int i = 0;
@@ -1238,7 +331,6 @@
     } else if(REF_VALVE_POS < VALVE_MIN_POS) {
         REF_VALVE_POS = VALVE_MIN_POS;
     }
-
     valve_pos_err = (float) (REF_VALVE_POS - value);
     valve_pos_err_diff = valve_pos_err - valve_pos_err_old;
     valve_pos_err_old = valve_pos_err;
@@ -1261,6 +353,7 @@
     Vout.ref = VALVE_PWM_RAW_FF + VALVE_PWM_RAW_FB;
 }
 
+// PWM duty vs. voltage output of L6205 in STM board
 #define LT_MAX_IDX  57
 float LT_PWM_duty[LT_MAX_IDX] = {-100.0f, -80.0f, -60.0f, -50.0f, -40.0f, -35.0f, -30.0f, -25.0f, -20.0f,
                                  -19.0f, -18.0f, -17.0f, -16.0f, -15.0f, -14.0f, -13.0f, -12.0f, -11.0f, -10.0f,
@@ -1303,8 +396,6 @@
 
 
 
-
-
 /*******************************************************************************
                             TIMER INTERRUPT
 *******************************************************************************/
@@ -1327,26 +418,18 @@
         }
 
         ADC1->CR2  |= 0x40000000;
+        // Torque Sensing =============================================
         if (SENSING_MODE == 0) {
-            // Torque Sensing (0~210)bar =============================================
             float pres_A_new = (((float) ADC1->DR) - 2047.5f);
-            double alpha_update_ft = 1.0f / (1.0f + FREQ_TMR4 / (2.0f * 3.14f * 100.0f)); // f_cutoff : 200Hz
+            double alpha_update_ft = 1.0f / (1.0f + FREQ_TMR4 / (2.0f * 3.14f * 100.0f)); // f_cutoff : 100Hz
             pres_A.sen = (1.0f - alpha_update_ft) * pres_A.sen + alpha_update_ft * pres_A_new;
             torq.sen = -pres_A.sen / TORQUE_SENSOR_PULSE_PER_TORQUE;
 
-
-//        float alpha_update_pres_A = 1.0f/(1.0f + FREQ_TMR4/(2.0f*3.14f*100.0f));
-////        float pres_A_new = ((float)ADC1->DR - PRES_A_NULL)  / PRES_SENSOR_A_PULSE_PER_BAR;
-//        float pres_A_new = ((float)ADC1->DR);
-//        pres_A.sen = pres_A.sen*(1.0f-alpha_update_pres_A)+pres_A_new*(alpha_update_pres_A);
-//        torq.sen = - (pres_A.sen-2048.0f); //pulse -2047~2047
-
-
+        // Pressure Sensing (0~210)bar =============================================
         } else if (SENSING_MODE == 1) {
-            // Pressure Sensing (0~210)bar =============================================
             float pres_A_new = (((float)ADC1->DR) - PRES_A_NULL);
             float pres_B_new = (((float)ADC2->DR) - PRES_B_NULL);
-            double alpha_update_pres = 1.0f / (1.0f + FREQ_TMR4 / (2.0f * 3.14f * 200.0f)); // f_cutoff : 500Hz
+            double alpha_update_pres = 1.0f / (1.0f + FREQ_TMR4 / (2.0f * 3.14f * 200.0f)); // f_cutoff : 200Hz
             pres_A.sen = (1.0f - alpha_update_pres) * pres_A.sen + alpha_update_pres * pres_A_new;
             pres_B.sen = (1.0f - alpha_update_pres) * pres_B.sen + alpha_update_pres * pres_B_new;
             CUR_PRES_A_BAR = pres_A.sen / PRES_SENSOR_A_PULSE_PER_BAR;
@@ -1359,30 +442,11 @@
             }
         }
 
-//        //Pressure sensor A
-//        ADC1->CR2  |= 0x40000000;                        // adc _ 12bit
-//        //while((ADC1->SR & 0b10));
-//        float alpha_update_pres_A = 1.0f/(1.0f + FREQ_TMR4/(2.0f*3.14f*100.0f));
-//        float pres_A_new = ((float)ADC1->DR);
-//        pres_A.sen = pres_A.sen*(1.0f-alpha_update_pres_A)+pres_A_new*(alpha_update_pres_A);
-//        torq.sen = - (pres_A.sen-2048.0f); //pulse -2047~2047    //SW just changed the sign to correct the direction of loadcell on LIGHT. Correct later.
-//
-//
-//        //Pressure sensor B
-//        float alpha_update_pres_B = 1.0f/(1.0f + FREQ_TMR4/(2.0f*3.14f*100.0f));
-//        float pres_B_new = ((float)ADC2->DR);
-//        pres_B.sen = pres_B.sen*(1.0f-alpha_update_pres_B)+pres_B_new*(alpha_update_pres_B);
-//        //torq.sen = pres_A.sen * (float) PISTON_AREA_A - pres_B.sen * (float) PISTON_AREA_B;
-
-
         //Current
         //ADC3->CR2  |= 0x40000000;                        // adc _ 12bit
-        //int raw_cur = ADC3->DR;
-        //while((ADC3->SR & 0b10));
         float alpha_update_cur = 1.0f/(1.0f + FREQ_TMR4/(2.0f*3.14f*500.0f)); // f_cutoff : 500Hz
         float cur_new = ((float)ADC3->DR-2048.0f)*20.0f/4096.0f; // unit : mA
         cur.sen=cur.sen*(1.0f-alpha_update_cur)+cur_new*(alpha_update_cur);
-        //cur.sen = raw_cur;
 
         CNT_TMR4++;
     }
@@ -1448,7 +512,6 @@
 
 
         // UTILITY MODE ------------------------------------------------------------
-
         switch (UTILITY_MODE) {
             case MODE_NO_ACT: {
                 break;
@@ -1467,8 +530,6 @@
 
                         if (TORQUE_VREF > 3.3f) TORQUE_VREF = 3.3f;
                         if (TORQUE_VREF < 0.0f) TORQUE_VREF = 0.0f;
-
-                        //spi_eeprom_write(RID_TORQUE_SENSOR_VREF, (int16_t) (TORQUE_VREF * 1000.0));
                         dac_1 = TORQUE_VREF / 3.3f;
                     }
                 } else {
@@ -1477,7 +538,6 @@
                     CUR_TORQUE_sum = 0;
                     CUR_TORQUE_mean = 0;
 
-//                    ROM_RESET_DATA();
                     spi_eeprom_write(RID_TORQUE_SENSOR_VREF, (int16_t) (TORQUE_VREF * 1000.0f));
 
                     dac_1 = TORQUE_VREF / 3.3f;
@@ -1551,7 +611,7 @@
 //                        }
 //                        V_out = 0;
 //
-//                        ROM_RESET_DATA();
+//                      
 //
 //                        //spi_eeprom_write(RID_VALVE_DEADZONE_PLUS, VALVE_DEADZONE_PLUS);
 //                        //spi_eeprom_write(RID_VALVE_DEADZONE_MINUS, VALVE_DEADZONE_MINUS);
@@ -1568,7 +628,6 @@
                 if (FINDHOME_STAGE == FINDHOME_INIT) {
                     cnt_findhome = 0;
                     cnt_vel_findhome = 0;
-                    //REFERENCE_MODE = MODE_REF_NO_ACT; // Stop taking reference data from PODO
                     pos.ref = pos.sen;
                     vel.ref = 0.0f;
                     FINDHOME_STAGE = FINDHOME_GOTOLIMIT;
@@ -1588,23 +647,14 @@
                     }
 
                     if ((cnt_vel_findhome < 3*TMR_FREQ_5k) &&  cnt_findhome < 10*TMR_FREQ_5k) { // wait for 3sec
-                        //REFERENCE_MODE = MODE_REF_NO_ACT;
                         if (HOMEPOS_OFFSET > 0) pos.ref = pos.ref + 12.0f;
                         else pos.ref = pos.ref - 12.0f;
 
-//                        pos.err = pos.ref_home_pos - pos.sen;
-//                        float VALVE_POS_RAW_POS_FB = 0.0f;
-//                        VALVE_POS_RAW_POS_FB = (float) P_GAIN_JOINT_POSITION * pos.err/(float) ENC_PULSE_PER_POSITION * 0.01f;
-//                        valve_pos.ref = VALVE_POS_RAW_POS_FB + (float) VALVE_CENTER;
-//                        VALVE_POS_CONTROL(valve_pos.ref);
-
                         CONTROL_MODE = MODE_JOINT_CONTROL;
                         alpha_trans = 0.0f;
 
-
                     } else {
                         ENC_SET(HOMEPOS_OFFSET);
-//                        ENC_SET_ZERO();
                         INIT_REF_POS = HOMEPOS_OFFSET;
                         REF_POSITION = 0;
                         REF_VELOCITY = 0;
@@ -1621,20 +671,11 @@
                         vel.ref = 0.0f;
                         pos.ref_home_pos = 0.0f;
                         vel.ref_home_pos = 0.0f;
-                        //FINDHOME_STAGE = FINDHOME_INIT;
-                        //CONTROL_UTILITY_MODE = MODE_JOINT_CONTROL;
-
-
                     }
                 } else if (FINDHOME_STAGE == FINDHOME_ZEROPOSE) {
                     int T_move = 2*TMR_FREQ_5k;
                     pos.ref = (0.0f - (float)INIT_REF_POS)*0.5f*(1.0f - cos(3.14159f * (float)cnt_findhome / (float)T_move)) + (float)INIT_REF_POS;
-                    //pos.ref = 0.0f;
                     vel.ref = 0.0f;
-
-                    // input for position control
-
-//                    CONTROL_MODE = MODE_JOINT_CONTROL;
                     alpha_trans = 0.0f;
 
                     double torq_ref = 0.0f;
@@ -1664,8 +705,6 @@
 
                         I_REF = I_REF_POS;
 
-
-
                     } else {
                         float VALVE_POS_RAW_FORCE_FB = 0.0f;
                         VALVE_POS_RAW_FORCE_FB = DDV_JOINT_POS_FF(vel.sen) + (P_GAIN_JOINT_POSITION * 0.01f * pos.err + DDV_JOINT_POS_FF(vel.ref));
@@ -1682,18 +721,8 @@
 
                     }
 
-
-
-
-//                    pos.err = pos.ref - (float)pos.sen;
-//                    float VALVE_POS_RAW_POS_FB = 0.0f;
-//                    VALVE_POS_RAW_POS_FB = (float) P_GAIN_JOINT_POSITION * 0.01f * pos.err/(float) ENC_PULSE_PER_POSITION;
-//                    valve_pos.ref = VALVE_POS_RAW_POS_FB + (float) VALVE_CENTER;
-//                    VALVE_POS_CONTROL(valve_pos.ref);
-
                     cnt_findhome++;
                     if (cnt_findhome >= T_move) {
-                        //REFERENCE_MODE = MODE_REF_DIRECT;
                         cnt_findhome = 0;
                         pos.ref = 0.0f;
                         vel.ref = 0.0f;
@@ -1755,7 +784,7 @@
 //                    }
 //                    if (fl_temp_cnt2 == 100) {
 //
-//                        ROM_RESET_DATA();
+//                       
 //
 //                        //spi_eeprom_write(RID_VALVE_GAIN_PLUS_1 + flag_flowrate, (int16_t) (VALVE_GAIN_LPM_PER_V[flag_flowrate] * 100.0f));
 //                        cur_vel_sum = 0;
@@ -1810,13 +839,11 @@
                     CUR_PRES_A_mean = 0;
                     CUR_PRES_B_mean = 0;
 
-//                    ROM_RESET_DATA();
                     spi_eeprom_write(RID_PRES_A_SENSOR_VREF, (int16_t) (PRES_A_VREF * 1000.0f));
                     spi_eeprom_write(RID_PRES_B_SENSOR_VREF, (int16_t) (PRES_B_VREF * 1000.0f));
 
                     dac_1 = PRES_A_VREF / 3.3f;
                     dac_2 = PRES_B_VREF / 3.3f;
-                    //pc.printf("nulling end");
                 }
                 TMR3_COUNT_PRES_NULL++;
                 break;
@@ -1846,7 +873,7 @@
 //                    CUR_PRES_A_mean = 0;
 //                    CUR_PRES_B_mean = 0;
 //
-//                    ROM_RESET_DATA();
+//                   
 //
 //                    //spi_eeprom_write(RID_PRES_SENSOR_A_PULSE_PER_BAR, (int16_t) (PRES_SENSOR_A_PULSE_PER_BAR * 100.0f));
 //                    //spi_eeprom_write(RID_PRES_SENSOR_B_PULSE_PER_BAR, (int16_t) (PRES_SENSOR_B_PULSE_PER_BAR * 100.0f));
@@ -1904,7 +931,6 @@
                             VALVE_POS_AVG_OLD = VALVE_MIN_POS;
                         }
                     }
-//                    ROM_RESET_DATA();
                     spi_eeprom_write(RID_VALVE_MAX_POS, (int16_t) VALVE_MAX_POS);
                     spi_eeprom_write(RID_VALVE_MIN_POS, (int16_t) VALVE_MIN_POS);
                     for(int i=0; i<25; i++) {
@@ -1980,8 +1006,6 @@
                     if((DZ_case == -1 && DZ_NUM == 1) | (DZ_case == 1 && DZ_NUM == 1)) {
                         if(VALVE_DZ_timer < (int) (1.0 * (float) TMR_FREQ_5k)) {
                             Vout.ref = (float) P_GAIN_JOINT_POSITION * (0.5f * (float) pos_plus_end + 0.5f * (float) pos_minus_end - (float) pos.sen)/(float) ENC_PULSE_PER_POSITION;
-                            //pos.ref = 0.5f * (float) pos_plus_end + 0.5f * (float) pos_minus_end;
-                            //CONTROL_MODE = MODE_JOINT_CONTROL;
                         } else if(VALVE_DZ_timer == (int) (1.0f * (float) TMR_FREQ_5k)) {
                             START_POS = pos.sen;
                         } else if(VALVE_DZ_timer < (int) (2.0f * (float) TMR_FREQ_5k)) {
@@ -2018,8 +1042,6 @@
                     } else if((DZ_case == -1 && DZ_NUM == 2) | (DZ_case == 1 && DZ_NUM == 2)) {
                         if(VALVE_DZ_timer < (int) (1.0f * (float) TMR_FREQ_5k)) {
                             Vout.ref = (float) P_GAIN_JOINT_POSITION * (0.5f * (float) pos_plus_end + 0.5f * (float) pos_minus_end - (float) pos.sen)/(float) ENC_PULSE_PER_POSITION;
-                            //pos.ref = 0.5f * (float) pos_plus_end + 0.5f * (float) pos_minus_end;
-                            //CONTROL_MODE = MODE_JOINT_CONTROL;
                         } else if(VALVE_DZ_timer == (int) (1.0f * (float) TMR_FREQ_5k)) {
                             START_POS = pos.sen;
                         } else if(VALVE_DZ_timer < (int) (2.0f * (float) TMR_FREQ_5k)) {
@@ -2054,7 +1076,6 @@
                                 VALVE_DEADZONE_MINUS = (float) FIRST_DZ;
                                 VALVE_DEADZONE_PLUS = (float) SECOND_DZ;
 
-//                                ROM_RESET_DATA();
                                 spi_eeprom_write(RID_VALVE_CNETER, (int16_t) VALVE_CENTER);
                                 spi_eeprom_write(RID_VALVE_MAX_POS, (int16_t) VALVE_MAX_POS);
                                 spi_eeprom_write(RID_VALVE_MIN_POS, (int16_t) VALVE_MIN_POS);
@@ -2066,8 +1087,6 @@
                     } else if(DZ_case == 0 && DZ_NUM ==1) {
                         if(VALVE_DZ_timer < (int) (1.0f * (float) TMR_FREQ_5k)) {
                             Vout.ref = (float) P_GAIN_JOINT_POSITION * (0.5f * (float) pos_plus_end + 0.5f * (float) pos_minus_end - (float) pos.sen)/(float) ENC_PULSE_PER_POSITION;
-                            //pos.ref = 0.5f * (float) pos_plus_end + 0.5f * (float) pos_minus_end;
-                            //CONTROL_MODE = MODE_JOINT_CONTROL;
                         } else if(VALVE_DZ_timer == (int) (1.0f * (float) TMR_FREQ_5k)) {
                             START_POS = pos.sen;
                         } else if(VALVE_DZ_timer < (int) (2.0f * (float) TMR_FREQ_5k)) {
@@ -2103,8 +1122,6 @@
                     } else {
                         if(VALVE_DZ_timer < (int) (1.0f * (float) TMR_FREQ_5k)) {
                             Vout.ref = (float) P_GAIN_JOINT_POSITION * (0.5f * (float) pos_plus_end + 0.5f * (float) pos_minus_end - (float) pos.sen)/(float) ENC_PULSE_PER_POSITION;
-                            //pos.ref = 0.5f * (float) pos_plus_end + 0.5f * (float) pos_minus_end;
-                            //CONTROL_MODE = MODE_JOINT_CONTROL;
                         } else if(VALVE_DZ_timer == (int) (1.0f * (float) TMR_FREQ_5k)) {
                             START_POS = pos.sen;
                         } else if(VALVE_DZ_timer < (int) (2.0f * (float) TMR_FREQ_5k)) {
@@ -2138,8 +1155,7 @@
                                 first_check = 0;
                                 VALVE_DEADZONE_MINUS = (float) FIRST_DZ;
                                 VALVE_DEADZONE_PLUS = (float) SECOND_DZ;
-
-//                                ROM_RESET_DATA();
+                                
                                 spi_eeprom_write(RID_VALVE_CNETER, (int16_t) VALVE_CENTER);
                                 spi_eeprom_write(RID_VALVE_MAX_POS, (int16_t) VALVE_MAX_POS);
                                 spi_eeprom_write(RID_VALVE_MIN_POS, (int16_t) VALVE_MIN_POS);
@@ -2159,15 +1175,12 @@
                 if(first_check == 0) {
                     if(VALVE_FR_timer < (int) (1.0f * (float) TMR_FREQ_5k)) {
                         Vout.ref = VALVE_VOLTAGE_LIMIT * 1000.0f;
-                        //CAN_TX_PRES((int16_t) (VALVE_FR_timer), (int16_t) (6));
                     } else if(VALVE_FR_timer == (int) (1.0f * (float) TMR_FREQ_5k)) {
                         Vout.ref = VALVE_VOLTAGE_LIMIT * 1000.0f;
                         pos_plus_end = pos.sen;
-                        //                    CAN_TX_PRES((int16_t) (V_out), (int16_t) (7));
                     } else if(VALVE_FR_timer < (int) (2.0f * (float) TMR_FREQ_5k)) {
                         Vout.ref = -VALVE_VOLTAGE_LIMIT * 1000.0f;
                     } else if(VALVE_FR_timer == (int) (2.0f * (float) TMR_FREQ_5k)) {
-                        //                    CAN_TX_PRES((int16_t) (V_out), (int16_t) (8));
                         Vout.ref = -VALVE_VOLTAGE_LIMIT * 1000.0f;
                         pos_minus_end = pos.sen;
                         first_check = 1;
@@ -2179,7 +1192,6 @@
                     }
                 } else {
                     if(VALVE_FR_timer < (int) (1.0f * (float) TMR_FREQ_5k)) {
-                        //V_out = (float) P_GAIN_JOINT_POSITION * (0.5f * (float) pos_plus_end + 0.5f * (float) pos_minus_end - (float) pos.sen)/(float) ENC_PULSE_PER_POSITION;
                         pos.ref = 0.5f * (float) pos_plus_end + 0.5f * (float) pos_minus_end;
                         CONTROL_MODE = MODE_JOINT_CONTROL;
                     } else if(VALVE_FR_timer == (int) (1.0f * (float) TMR_FREQ_5k)) {
@@ -2219,7 +1231,6 @@
                     if(max_check == 1 && min_check == 1) {
 
                         VALVE_POS_NUM = ID_index;
-//                        ROM_RESET_DATA();
                         for(int i=0; i<100; i++) {
                             spi_eeprom_write(RID_VALVE_POS_VS_FLOWRATE_0 + i, (int16_t) (JOINT_VEL[i] & 0xFFFF));
                             spi_eeprom_write(RID_VALVE_POS_VS_FLOWRATE_0_1 + i, (int16_t) ((JOINT_VEL[i] >> 16) & 0xFFFF));
@@ -2228,7 +1239,6 @@
                         first_check = 0;
                         VALVE_FR_timer = 0;
                         CONTROL_UTILITY_MODE = MODE_NO_ACT;
-//                        CAN_TX_PRES((int16_t) (VALVE_FR_timer), (int16_t) (6));
                     }
                 }
                 break;
@@ -2324,12 +1334,6 @@
                     CONTROL_UTILITY_MODE = MODE_SEND_OVER;
                     CONTROL_MODE = MODE_NO_ACT;
                 }
-//                if (cnt_step_test > (int) (2.0f * (float) TMR_FREQ_5k))
-//                {
-//                    CONTROL_UTILITY_MODE = MODE_NO_ACT;
-//                    CONTROL_MODE = MODE_NO_ACT;
-//                    CAN_TX_PWM((int16_t) (1)); //1300
-//                }
 
                 break;
             }
@@ -2338,8 +1342,9 @@
                 break;
         }
 
+
+
         // CONTROL MODE ------------------------------------------------------------
-
         switch (CONTROL_MODE) {
             case MODE_NO_ACT: {
                 V_out = 0.0f;
@@ -2370,8 +1375,7 @@
                 K_LPF = K_LPF*(1.0f-alpha_K_D)+K_SPRING*(alpha_K_D);
                 D_LPF = D_LPF*(1.0f-alpha_K_D)+D_DAMPER*(alpha_K_D);
 
-//                torq_ref = torq.ref + K_LPF * pos.err - D_LPF * vel.sen / ENC_PULSE_PER_POSITION; //[N]
-                torq_ref = torq.ref;
+                torq_ref = torq.ref + K_LPF * pos.err - D_LPF * vel.sen / ENC_PULSE_PER_POSITION; //[N]
 
                 // torque feedback
                 torq.err = torq_ref - torq.sen; //[N]
@@ -2468,15 +1472,9 @@
                     }
 
                     VALVE_POS_CONTROL(valve_pos.ref);
-
-//                    Vout.ref = (float) P_GAIN_JOINT_POSITION * 0.01f * ((float) pos.err);
                     V_out = (float) Vout.ref;
-
                 }
-
                 torq_ref_past = torq_ref;
-
-
                 break;
             }
 
@@ -2549,16 +1547,6 @@
                 x_4_des_old = x_4_des;
                 float V_input = 0.0f;
                 V_out = (-f4 + x_4_des_dot - k4*(x_v-x_4_des)- rho3/rho4*gamma_hat*g3_prime*(-torq.err))/g4;
-//                //V_out LPF
-//                float alpha_V_out = 1.0f/(1.0f + 5000.0f/(2.0f*3.14f*50.0f)); // f_cutoff : 50Hz
-//                V_out = V_out*(1.0f-alpha_V_out)+V_input*(alpha_V_out);
-
-//                float rho_gamma = 5000.0f;//5000 for change //50000 for not change
-//                float gamma_hat_dot = rho3*(-torq.err)/rho_gamma*((-f3+torq_ref_dot-k3*(-torq.err))/gamma_hat + g3_prime*(x_v-x_4_des));
-//                gamma_hat = gamma_hat + gamma_hat_dot / (float) TMR_FREQ_5k;
-//
-//                if(gamma_hat > 10000.0f) gamma_hat = 10000.0f;
-//                else if(gamma_hat < 100.0f) gamma_hat = 100.0f;
 
                 float rho_a = 0.00001f;
                 float a_hat_dot = -rho3/rho_a*vel.sen/(float)(ENC_PULSE_PER_POSITION)*0.001f*(-torq.err);
@@ -2570,96 +1558,6 @@
                 break;
             }
 
-            case MODE_RL: {
-                //t.reset();
-                //t.start();
-
-//                if(LED == 0) LED = 1;
-//                else LED = 0;
-
-                if (Update_Done_Flag == 1) {
-                    //Gather Data on each loop
-//                  pos.err = (pos.ref - pos.sen)/(float)(ENC_PULSE_PER_POSITION); //[mm]
-//                  train_set_x[RL_timer] = pos.sen/(float)(ENC_PULSE_PER_POSITION)/35.0f - 1.0f;   //-1.0~1.0
-//                  train_set_error[RL_timer] = pos.err/70.0f;      //-1.0~1.0
-                    pos.err = pos.sen/(float)(ENC_PULSE_PER_POSITION)  - virt_pos; //[mm]
-                    train_set_x[RL_timer] = virt_pos/70.0f;   //-1.0~1.0
-                    train_set_error[RL_timer] = pos.err/70.0f;      //-1.0~1.0
-                    //train_set_count[RL_timer] = (float) RL_timer / (batch_size *num_batch);  //-1.0~1.0
-                    //float temp_array[3] = {train_set_x[RL_timer], train_set_error[RL_timer], train_set_count[RL_timer]};
-                    float temp_array[2] = {train_set_x[RL_timer], train_set_error[RL_timer]};
-                    Actor_Network(temp_array);
-                    for (int i=0; i<num_hidden_unit1; i++) {
-                        hx_a_sum_array[RL_timer][i] = hx_a_sum[i];
-                    }
-                    for (int i=0; i<num_hidden_unit2; i++) {
-                        hxh_a_sum_array[RL_timer][i] = hxh_a_sum[i];
-                    }
-                    hxhh_a_sum_array[RL_timer][0] = hxhh_a_sum[0];
-                    hxhh_a_sum_array[RL_timer][1] = hxhh_a_sum[1];
-                    mean_array[RL_timer] = mean;
-                    deviation_array[RL_timer] = deviation;
-                    action_array[RL_timer] = rand_normal(mean_array[RL_timer], deviation_array[RL_timer]);
-
-                    virt_pos = virt_pos + (action_array[RL_timer] - 5.0f) * 1000.0f * 0.0002f;
-                    if (virt_pos > 70 ) {
-                        virt_pos = 70.0f;
-                    } else if(virt_pos < -70) {
-                        virt_pos = -70.0f;
-                    }
-
-                    RL_timer++;
-
-
-                    if (RL_timer >= batch_size) {
-                        RL_timer = 0;
-                        batch++;
-                        for(int i=0; i<batch_size; i++) {
-                            state_array[i][0] = train_set_x[i];
-                            state_array[i][1] = train_set_error[i];
-                            //state_array[i][2] = train_set_count[i];
-                        }
-                        Update_Case = 1;
-                        Update_Done_Flag = 0;
-                        logging1 = virt_pos;
-
-                        if(batch >= num_batch) {
-                            batch = 0;
-                            RL_timer = 0;
-                            Update_Case = 2;
-                            Update_Done_Flag = 0;
-                            virt_pos = 10.0f;
-                        }
-                    }
-                }
-
-                else {
-                    pos.err = pos.sen/(float)(ENC_PULSE_PER_POSITION) - virt_pos; //[mm]
-                    float temp_array[3] = {0.0f};
-                    temp_array[0] = virt_pos/70.0f;   //-1.0~1.0
-                    temp_array[1] = pos.err/70.0f;      //-1.0~1.0
-                    //temp_array[2] = (float) RL_timer / (batch_size *num_batch);  //-1.0~1.0
-                    Actor_Network(temp_array);
-                    action = rand_normal(mean, deviation);
-                    //logging1 = action;
-                    //logging2 = mean;
-                    //logging4 = deviation;
-                    virt_pos = virt_pos + (action-5.0f) * 1000.0f * 0.0002f;
-                    if (virt_pos > 70) {
-                        virt_pos = 70.0f;
-                    } else if(virt_pos < -70) {
-                        virt_pos = -70.0f;
-                    }
-
-                    logging3 = virt_pos;
-                }
-
-                //t.stop();
-                //logging1 = t.read()*1000.0f;    //msec
-
-                break;
-            }
-
             default:
                 break;
         }
@@ -2697,7 +1595,6 @@
                 double FF_gain = 1.0f;
 
                 VALVE_PWM_RAW = KP_I * 2.0f * I_ERR + KI_I * 2.0f* I_ERR_INT;
-                //        VALVE_PWM_RAW = VALVE_PWM_RAW + FF_gain * (R_model*I_REF); // Unit : mV
                 I_REF_fil_diff = I_REF_fil - I_REF_fil_old;
                 I_REF_fil_old = I_REF_fil;
 //                VALVE_PWM_RAW = VALVE_PWM_RAW + FF_gain * (R_model * I_REF_fil + L_model * I_REF_fil_diff * 5000.0f); // Unit : mV
@@ -2754,15 +1651,12 @@
 //            else if (CUR_PWM_lin < 0) V_out = (float) (CUR_PWM_lin - 174.0f);
 //            else V_out = (float) (CUR_PWM_lin);
 
+            // Output Voltage Linearization & Dead Zone Cancellation (Electrical dead-zone) by SW
             if (V_out > 0 ) V_out = (V_out + 180.0f)/0.8588f;
             else if (V_out < 0) V_out = (V_out - 200.0f)/0.8651f;
             else V_out = 0.0f;
         }
 
-//        if(V_out > 0.0f) V_out = (float) (V_out + 169.0f);
-//        else if(V_out < 0.0f) V_out = (float) (V_out - 174.0f);
-//        else V_out = V_out;
-
         /*******************************************************
         ***     PWM
         ********************************************************/
@@ -2775,9 +1669,9 @@
         } else if(V_out<=-VALVE_VOLTAGE_LIMIT*1000.0f) {
             V_out = -VALVE_VOLTAGE_LIMIT*1000.0f;
         }
-        PWM_out= V_out/(SUPPLY_VOLTAGE*1000.0f); // Full duty : 12000.0mV
+        PWM_out= V_out/(SUPPLY_VOLTAGE*1000.0f);
 
-        // Saturation of output voltage to 12.0V
+        // Saturation of output voltage
         if(PWM_out > 1.0f) PWM_out=1.0f;
         else if (PWM_out < -1.0f) PWM_out=-1.0f;
 
@@ -2812,11 +1706,13 @@
                     }
                 }
             }
+            
+            // ID:1300
             if (flag_data_request[1] == HIGH) {
-                CAN_TX_TORQUE((int16_t) (return_G[0]*100.0f)); //1300
+                CAN_TX_TORQUE((int16_t) 7); //1300
             }
 
-
+            // ID:1400
             if (flag_data_request[2] == HIGH) {
                 double t_value = 0.0f;
                 if(value>=(float) VALVE_CENTER) {
@@ -2839,27 +1735,19 @@
             for (can_rest = 0; can_rest < 10000; can_rest++) {
                 ;
             }
-
+            
+            // ID:1500
             if (flag_data_request[3] == HIGH) {
                 //PWM
                 CAN_TX_PWM((int16_t) (torq.ref)); //1500
-//                CAN_TX_PWM((int16_t) (f_future[1])); //1500
             }
-
+            
+            // ID:1600
             if (flag_data_request[4] == HIGH) {
                 //valve position
-                //CAN_TX_VALVE_POSITION((int16_t) pos.sen/(float)(ENC_PULSE_PER_POSITION), (int16_t) virt_pos, (int16_t) (logging2*1000.0f), (int16_t) (logging4*1000.0f)); //1600
                 CAN_TX_VALVE_POSITION((int16_t) (a_hat*0.0001f), (int16_t) 0, (int16_t) 0, (int16_t) 0); //1600
             }
 
-            // Others : Reference position, Reference FT, PWM, Current  (ID:1300)
-//        if (flag_data_request[1] == HIGH) {
-//            CAN_TX_SOMETHING((int) (FORCE_VREF), (int16_t) (1), (int16_t) (2), (int16_t) (3));
-//        }
-            //if (flag_delay_test == 1){
-            //CAN_TX_PRES((int16_t) (0),(int16_t) torq_ref);
-            //}
-
             TMR2_COUNT_CAN_TX = 0;
         }
         TMR2_COUNT_CAN_TX++;