This is probably not the best forum to ask this question in, but I will make an attempt.
This probably requires a multi-layered solution. Odometry on the drive wheels will be useful, but cannot detect slippage between wheel and hull. So some sort of additional sensing is required, independent of the wheel motion.
A flow camera, or a sensor similar to that of an optical computer mouse, would be a good addition, located to see the surface of the hull orthogonal to the robot's motion path. This is not free from error, but combined with the wheel odometry should reduce errors.
However, a flow camera may not detect rotation of the robot -- for example, if one wheel slips but the other does not. An IMU or multi-axis gyro, as used in most modern smartphones, would detect this. IMUs are very useful, but can only detect acceleration, which means that using IMU along for location relies on double integration of the detected accelerations over time. This leads to an accumulation of errors. So most IMUs in real-world use rely on being "reset" periodically using some sort of external navigational reference to reliably update the robot's real position.
The best positional data would be to use GPS, or a "local" equivalent -- DGPS, Indoor GPS, or some other beacon-based system. DSLAM might be an alternative.
Most modern mobile robots use a hierarchical combination of all these navigation methods, in a sort of "sensor fusion". The details of which sensor's data is treated as most or least reliable is situational, and usually must be tuned for each robot application.