Code:
#define INIT 0
#define CRUISE 1
#define ESCAPE 2
#define OBSTACLE_LEFT 1
#define OBSTACLE_RIGHT -1
#define OBSTACLE_FRONT 1

uint8_t dir_of_obstacle;
uint8_t state = INIT;

void bumpersStateChanged(void)
{
	if(bumper_left && bumper_right) // beide bumper
	{
		state = ESCAPE;
		dir_of_obstacle = OBSTACLE_FRONT;
	}
	else if(bumper_left)  // linker bumper
	{
		state = ESCAPE;
		dir_of_obstacle = OBSTACLE_LEFT;
	}
	else if(bumper_right) // rechter bumper
	{
		state = ESCAPE;
		dir_ob_obstacle = OBSTACLE_RIGHT;
	}
}


/*****************************************************************************/
// Main:

int main(void)
{
   initRobotBase(); 
   mSleep(200);

   // Set Bumpers state changed event handler:
   BUMPERS_setStateChangedHandler(bumpersStateChanged);
	
   powerON(); // Turn on Encoders, Current sensing, ACS and Power LED.

   // Main loop
   while(true) 
   {		
      task_RP6System();
      switch(state){
         case INIT: state = CRUISE; 
         break;

         case CRUISE:
            direction(fwd);
            moveAtSpeed(80,80);
         break;

         case ESCAPE:
            direction(bwd);
            moveAtSpeed(20+(10*direction_of_obstacle*-1), 20+(10*direction_of_obstacle));
				
            startStopwatch1();
            while(getStopwatch1() < 10000){
               task_RP6System();
            }
            state = CRUISE;
         break;
         }
	
   }
   return 0;
}
So in etwa könnte es klappen. Der RP6 fährt erstmal fein gradeaus. Wenn einer der Bumper gedrückt wird, wird state auf ESCAPE gesetzt und dir_ob_obstacle auf einen Wert der dem Bumper entspricht. Danach wird der Rückwärtsgang eingelegt und Normalgeschwindigkeit (ich hab für den Rückwärtsgang mal 20 angenommen da er ja immerhin 10sec fahren soll) + bzw. - die Differenz zwischen linker und rechter Kette als Geschwindigkeit gesetzt. Habs alle nich getestet da ich keine Lust hatte den Compiler anzuwerfen (bzw. zu installieren) und mein RP6 eh grad beim großen C ist.

Grüße,
Jan