Servo problems...

  for (unsigned long start = millis(); millis() - start < 1000;)
  {
    while (ss.available())
    {
      char c = ss.read();
      // Serial.write(c); // uncomment this line if you want to see the GPS data flowing
      if (gps.encode(c)) // Did a new valid sentence come in?
        newData = true;
    }
  }

Using a while loop where appropriate, instead of twisting a for loop out of shape, would be a good idea.

float distanceangle;
  if (distance <= 100){
  distanceangle =int(-0.6*distance + 120);

Declare a variable of type float. Compute a float value. Cast it to an int and store in the float. I wonder why more people don't do that.

The indenting of
your code makes
it really
hard to
follow. Use the Tools + Auto Format
menu item to do something
about it.

Simplifying your output would be useful. Print millis(), distanceangle, and courseangle only. If you are not changing the value written to the servo on any given pass through loop, but the servo still moves, it is underpowered or undersized.

How are you powering the servos?