Arduino wont start unless COM Port is open, works as intended afterwards

MorganS:
With delay(100) I can assure you that you're not getting 10 packets per second. Maybe 9.99, maybe slower. The code below uses a better way to send exactly 10 packets per second (well, within the limitation of accuracy on the Arduino's resonator which will drift by a few parts per million.)

While working on that code, I also stopped it overrruning the 15-character buffer.

Remember that Serial data has no built-in 'start'. You never know if you've received the start or middle or end of a message unless you include that in the message itself. It looks like you are expecting messages which contain either a single 'S' or 4 numbers separated by commas. What if you only got 3 numbers? How does your code know to wait? What if you got the last 3 numbers from the previous message and the next character is an 'S'?

My modifications to your code don't cope with all of those what-if's. Without seeing the full format of all the message types you're sending, I can't make any meaningful guesses.

The use of big-S String is unnecessary. There are small-s string functions that do the same thing. I did not entirely remove the String processing, just to keep this example simple.

I'm not clear on what getData() does. I don't know if you want to run that only 10 times per second.

For future reference, I managed to completely rewrite how I handle the serial parsing through the 'Serial Input Basics' before seeing this post. It looks like arduino doesnt like the string class at all. The way that parsing is done in 'Serial Input Basics' post on this forum worked so much better for me.

getData just returns IMU sensor readings and puts them in the proper arrays for gyro/accel X Y and Z.

In matlab, I'm using a timer to loop a function that gets the IMU data transmitted from arduino and splitting those values. Based on the accel X Y & gyro Y readings I developed an MPC controller to use the values and find the required PWM values for each motor. These 4 integers will always be processed as int1,int2,int3,int4, unless 'stop button' is pressed in which matlab writes an 's' and the motors stop.

I will definitely try out the new 10 times per second transmission, thanks so much for that! I had no idea just setting a delay(100) wouldnt work.