For the Raspberry Pi to communicate reliably using I2C to the DI/ModRobotics Inertial Measurement Unit (IMU), which is Bosch BNO055 based, the Raspberry Pi must implement I2C clock stretching.
It has been reported that the Raspberry Pi does not implement the clock stretching fully, and indeed I found that trying to use the Raspberry Pi hardware I2C to communicate with either the DI/BNO055 IMU or the Ivensense MPU-9250 IMU will fail miserably.
Supposedly users can make it work by configuring a slower I2C clock speed as in https://learn.adafruit.com/circuitpython-on-raspberrypi-linux/i2c-clock-stretching
DI/ModRobotics has supplied interface code that automagically implements the clock stretching in software in di_I2c.py and extends the I2C bus onto the two configurable connectors AD1 and AD2. The DI IMU interface defaults to the AD1 connector.
There will still be some soft errors so users should use a try/except block to catch the errors and retry the operation. (If you see a zero temperature value when running the DI IMU example a soft error occurred.)
P.s. This concludes the full extent of my knowledge on this clock stretching issue.