What happened to INAV horizon drift?

INAV suffers from horizon drift since day one. It's not that Betaflight does not suffer from it (both Betaflight and INAV originate from the same parent: Cleanflight). In Betaflight it just does not matter at all. In INAV it's a real-life problem tho.

So far, we somehow managed to mitigate horizon drift on airplanes but it's not really fixing the problem. It's there and it's irritating as hell.

Last month I published a post that describes my intent to use the external board as a secondary IMU for INAV. It is "of the shelf" Bosch BNO055. Today I finally put it into a test and to be honest, the results are very optimistic!

More about INAV horizon drift:

INAV secondary IMU with Bosch BNO055

INAV is great, but INAV is not the best in everything. For example, INAVs internal IMU (Inertial Measurement Unit) algorithm is suffering from the infamous artificial horizon drift. I explained this phenomenon already in one of the videos, you can watch it over here. We somehow mitigated this on fixed-wing airplanes in INAV 2.2.1, but it's not gone yet and there is no fix for multirotors for example.

Last weekend I started hacking something that might, or might not, help. Technology progressed quite a lot in the last few years, and right now we have much more advanced all-in-one IMU chips than when the workhorse MPU6000 changed RC hobby forever.

The idea behind the hack is simple: use secondary, hardware IMU, to help INAV correct horizon drift and some of the magnetometer related problems as well. There are pretty amazing IMUs like Vector Nav VN-100, VN-200, and VN-300. But they cost more than most RC hobby airplanes. The cheapest VN-100 is $500 for the chip only. Or $800 for a ready to use version. Nobody would buy something like that for a foam airplane. There are, however, much cheaper (and less capable) integrated IMUs. One of them is Bosch BNO055.

Bosch BNO055 has an integrated accelerometer, gyroscope and magnetometer. It allows getting data from each sensor separately or to use sensor fusion (probably relatively simple Kalman) to combine data from 3 sensors into roll, pitch and yaw (including absolute magnetic heading) Euler angles or quaternions.

So far, so good. After a few days of work, I was able to connect GY-955 which contains BNO055 plus some extra electronics to INAV via I2C and get basic data from it. The next step is to check is this whole secondary IMU idea makes sense. The idea is to switch the OSD artificial horizon and heading to a new data source. If it will work and data obtained from BNO055 will be good quality, to switch other navigation-related functions of INAV to secondary IMU. Bear in mind that stabilization and main PID look will still be fed by the data obtained from primary IMU.