For phase and frequency correct mode (probably better if your using pwm to control your robot) here is what you need to do. First you need to determine what you want your base frequency to be, how long do you want each PWM cycle to last? Then you need to decide how long you want the pulse to last for that cycle. For example for a servo you probably want a cycle of 50hz (a cycle of 20ms). Then if you want the servo to center itself, you'll usually want to send a pulse of 1.5ms, so of that 20ms for 1.5 seconds the wave will be high and 17.5 the wave will be low. To get the right base frequency you'll have to select a prescaler, use guess and check to find the one that will give you the highest resolution, and still give you the base frequency you need. Then once you have a prescaler, you can solve for the value you need to get a 20ms PWM cycle. For phase and frequency correct mode, for one cycle the counter will count from zero, to the TOP value, then decrease from TOP back down to zero. So the equations you need for the first two steps are these:
Resolution = log(top value + 1)/log(2)
PWM freq. = clock freq. / (prescaler * 2 * top)
top = clock freq. / (PWM freq. * 2 * prescaler)
In the AtMega128 I set the registers to store the top value will be stored in ICR1, but in the AtMega168 it looks like you'll use the OCRA as top.
ICR1 = CLOCK_FREQUENCY / (baseFrequency * 2 * prescaler); // ICR1 is the top value.
You'll want to make sure you set both outputs A and B to set on compare, then set their values to generate the size pulse you want. For example I set the TOP value to 20000, then I set OCR1A to 1500 and OCR1B to 1500 as a default (1.5ms pulse). I hope this is helpful. Let me know what your putting in the registers and I can tell you if it's right. You shouldn't have to use any interrupts or active processing to generate your PWM signals.