Constant battery voltage
It is not a good idea to rely on voltage to control a motor accurately, you need some sort of feedback. The ordinary way to do this for DC motors (as opposed to steppers or servos) is by using a rotary encoder. Even if your motor does not have one integrated, it should be easy to build an optical encoder yourself: you print the stripe pattern on a transparent disk, attach said disc to the axle and attach a light source and detector in such a way that the light path gets interrupted by the dark parts. 

With this signal you measure how much the motor actually turned and control it accordingly. A rather simple yet most likely sufficient way to do this is called PID controller. For fast driving it is probably better to control the speed, for slow and accurate driving the distance. 



Regulating the voltage is indeed important for many circuits, but does probably not make sense for motors; you have nothing to gain from it if you employ feedback anyway, but it has losses. 
Generally you want to use buck converters for large differences in voltage (low losses but moderate ripples) and linear converters for small differences (much heat is generated but the voltage is very smooth (good for analog circuits and such). 



The usage of NI-MH smells a bit fishy to me: depending on how much current the motors draw they might suffer quite high internal losses (look up 'equivalent series resistance' in the datasheet). If that is the case you can either put more batteries in parallel or use Li-ion batteries.