Need hint, time get lost...

It should be controlled by bluetooth (at the end) and also follow a defined route.

Manual control (via bluetooth) and autonomous action (following a defined route) are mutually exclusive modes.

  if(bolNeedTm == true)

Look like a real programmer, and lose the == true bit...

      iCurTicks1 = iCurTicks1 + 1;

You know, you aren't programming the Arduino using a language called C=C+1. Embrace the ++ operator, like a real programmer.

int fctGetReqTicks(unsigned int iMotorNr)
{
  <snip>
  float flReqTicks = flMaxAcc / 100 * iSpdDiff;
  unsigned int iReqTicks = int(flReqTicks);
  return iReqTicks;
}

The function says that it returns an int, yet the return statement returns an unsigned int formed from an int. Consistency is a good (even necessary) thing.

int fctGetSpeedAngle(unsigned int intSpeed)
{
  int res = map(intSpeed, 0, 100, 0, 180); 
  return res;
}

This is a pretty inefficient way to multiply by 1.8. The flopping between signed and unsigned values is not a good idea.

  //RunMotors();

Is your delete key broken? You KNOW that you shouldn't be executing ANY of the commented out code in an interrupt handler. Resist the temptation to uncomment statements by using the delete key.

  if (Serial.available())
  {
    //verschnaufpause
    delay(10);
    int i = 0;     
    while(i<5){
      sData[i] = Serial.read();

If there is at least one byte to read, read all 5 of them. I'm sure you can see that this is plain wrong.

    Serial.flush();

Why? 99.99999% of the time, this statement is added by totally clueless idiots. That isn't you, is it?

    iRes = atoi(sData);

Wrong! The atoi() function expects a NULL terminated array of chars. You're array is NOT NULL terminated.