I've written a python script to extract and calibrate the sensor data from a Garmin Virb Ultra 30 fit file. As a test case, I recorded a video with the Virb in which I slowly rotate the camera horizontally, about its center axis, through one full revolution. I've attached plots of the data.
As shown in the data, the magnitude of the magnetometer vector swings by a factor of two, which is obviously non-physical. I tested the field strength in the same spot using my phone and got a fairly consistent 52 uT regardless of phone orientation.
I calibrated the magnetometer data using the same code that I used for the other 3d sensors. Is the Garmin reporting incorrect calibration values?