If you're planning on using an IMU on a non-default I2C port, you can specify the port in the constructor of your IMU, for example:
You can also use Hybrid IMU's, which means you can add any supported magnetometer to any supported IMU by using theIMU_HYBRID
class as follows:
AccelData
Contains all three axis of Accelerometer data, these are namedaccelX
,accelY
andaccelZ
GyroData
Contains all three axis of Gyroscope data, these are namedgyroX
,gyroY
andgyroZ
MagData
Contains all three axis of Magnetometer data, these are namedmagX
,magY
andmagZ
Quaternion
Contains Quaternion data, the components are namedqW
,qX
,qY
andqZ
CalData
Contains a boolean component namedvalid
that must be set totrue
if the data is valid, it contains float array namedaccelBias
for accelerometer biases, one namedgyroBias
for gyroscope bias, one namedmagBias
for magnetometer biases and one namedmagScale
for magnetometer scaling.
init
Takes in acalData
function and an optionalbyte
address, this function initializes the IMU, it defaults to the maximum ranges allowed by the IMU. This function will return a 0 if initialization was successful and a negative number if it failed to connect to the IMU. if no address is provided, the default for the selected IMU will be used.
update
Reads new IMU data if available.
getAccel
Takes in a pointer toAccelData
and copies new accelerometer data to it, should be called after update.
getGyro
Takes in a pointer toGyroData
and copies new gyroscope data to it, should be called after update.
getMag
Takes in a pointer toMagData
and copies new magnetometer data to it, should be called after update. Will only return new magnetometer data if the IMU has a magnetometer.
getQuat
Takes in a pointer to aQuaternion
and copies new quaternion data to it, should be called after update. Will only return new Quaternion data if the IMU has a Quaternion output.
getTemp
Returns temperature float data in °C, should be called after update, isn't very accurate.
setGyroRange
Takes in an integer with the dps range wanted, (for example 2000 for ±2000dps), returns 0 if successful, returns -1 if the input range is not valid.
setAccelRange
Takes in an integer with the dps range wanted, (for example 8 for ±8g), returns 0 if successful, returns -1 if the input range is not valid.
setIMUGeometry
Takes in an integer with the wanted geometry index, rotates IMU measurements to match vr headset IMU mount. (see chart below).
calibrateAccelGyro
Takes in a pointer to calibration data and runs a Accelerometer and Gyroscope calibration, storing the new accelerometer and gyroscope calibration data in it. the IMU should be kept completely still and level during this.
calibrateMag
Takes in a pointer to Calibration data and runs a Accelerometer and Gyroscope calibration, storing the new accelerometer and gyroscope calibration data in it. the IMU should be moved in a figure eight pattern while calibrating, calibration takes around 15 seconds.
hasMagnetometer
Returns true if the IMU has a magnetometer.
hasTemperature
Returns true if the IMU has a thermometer.
hasQuatOutput
Returns true if the IMU has a direct quaternion output.
IMUName
Returns a string containing the IMU's name.
IMUType
Returns a string containing the IMU's type.
IMUManufacturer
Returns a string containing the IMU's manufacturer.