Turns overshooting, why isn't the IMU stopping at the correct degrees?

New to XRP and trying to get the drivetrain.turn(90, 0.5) to work. I have a new XRP robot and am using XRP Code Editor, which updated my robot when first connected. When I run drivetrain.turn(90, 0.5) it rotates about 107 degrees. If I add a drivetrain.turn(-90, 0.5) it returns to the starting position. I was under the impression turns were controlled by the IMU and therefore wheel slippage etc. should not be an issue, although I’m running on a mat with good traction. Am I doing something wrong? It seems like that much error is way too much to just try to correct using fudge factors.

I also see in the examples using differential_drive instead of drivetrain. Should I be using that instead?

I also tried

while True:
print(imu.get_yaw())
time.sleep(0.1)

which gives a 0 initially then when manually rotating the robot to 90 degrees it returns 103 degrees. So I don’t think it has anything to do with mechanical issues with the robot. Is there a hard IMU reset that might help? Thanks in advance for any help.

I recently purchased a 2nd XRP set, so I tried just the control board. It updated the software and then I loaded my program from above to display the yaw and found the exact same results, with a reading of 84 when it is at an actual 90 degrees and it reads 90 when at actual 103 degrees. So I don’t think I have a “bad” control board. Is the issue with software? What am I doing wrong?? Thanks!