Using IMU's other than BMI160 with the Isaac imu calibration package

I found an IMU calibration package inside isaac/sdk/apps/samples. I connected the BMI160 directly to Xavier using jumpers as instructed here(Wire the BMI160 IMU to the Jetson Nano or Xavier — ISAAC 2020.2 documentation). The nodes and edges were customized to work with bmi160 imu.iio binaries. Since, there isn’t a lot of documentation regarding this, I wanted to know more about

1. Algorithm behind the method (Calibration).
2. How to use this package to calibrate other IMU. Changes that are needed? ( Providing samples codelets to accomplish that will be very helpful). 
3. Are there any built in tools to visualize IMU orientation output?

Essentially I would like to known how to use this package to calibrate other IMU’s ?

The methodology behind the IMU calibration is determining the bias as a rolling average on a window of readings for acceleration and gyroscopic orientation for a stationary IMU. The user configures the parameters in the ImuCalibration2d codelet for the length of that window and the variance target to satisfy as “stationary.” When enough windows have been collected and the variance is below this target, the calibration is complete and you have the bias values for acceleration and gyroscopic orientation to use going further.

This calibration package should work fine for other IMUs too. You would just need to make sure that the codelet reading from any other IMU publishes the readings as an ImuProto like the IioBmi160 codelet. There are no tools readily available I can think of to easy visualize the IMU orientation but you could write it to a pose in a Pose Tree and visualize in Sight perhaps.

1 Like