Прочитал, но без вникания в каждую формулу.
Собственно, описана БИНС без коррекции по GNSS сигналам. При отсутствии магнитометров такая система может работать как гировертикаль, при наличии магнитометров как система ориентации с привязкой не к реальному Северу, а к локальному магнитному.
По первому взгляду система нормально построена. При нормальных датчиках работать будет, для объектов с низкой динамикой. Основной недостаток схемы free IMU, на мой взгляд, отсутствие динамической корректировки параметров оборудования и собственного магнитного поля, не с любыми датчиками и носителями пойдет.
Немного по терминологии, базовым понятиям, ну и кое-какие предложения.
1)чтобы привязаться к реальному Северу нам нужно, как минимум, магнитное склонение. Но лучше знать вектор магнитного поля в точке работы.
Если не нужна особая точность (а при работе на МЕМСах и не нужна) достаточно использовать модели WMM2010, IGRF.
2)но если мы получаем азимут от магнитометров и наклоны от акселерометров, то зачем нам вообще гироскопы? дело в том, что в наклоны от акселерометров будет влазить ошибка от линейных ускорений, а магнитометры обладают приличной латентностью (я теорией погрешностей магнитометров не владею, но те что у меня были реально запаздывали, на сотни милисекунд). вот и появляются гироскопы (ДУС, датчики угловой скорости). По данным измерений ДУС прогнозируется значения углов ориентации (или кватерниона ориентации, что удобнее), по данным акселерометров и магнитометров значения корректируются. В такой схеме гироскопы "сглаживают" ориентацию от акселерометров/магнитометров, так что погрешности от линейных ускорений в акселерометрах, погрешности и запаздывание в магнитометрах идет просто как шум. Это и реализовано в free IMU.
3)почему эта схема может работать плохо? имхо, две основные причины: неточности датчиков и возмущения магнитного поля.
4)датчики. я уже упоминал о том, что, возможно, нужно их калибровать. для гироскопов и акселерометров нужно проверить нули и коэффициенты пропорциональности. минимально можно сделать так:
a)нули гироскопов: просто смотрим в статике, среднее секунд за 30. Если совпадает с фабричным нулем, то все хорошо и для этих датчиков нуль калибровать не нужно (или внутри датчика спрятана автокалибровка).

к-т пропорциональности для гироскопов: для каждого датчика (оси) вращаем вокруг одной оси и интегрируем, т.е. sum((g_i-g_0)*dt_i), где g_i -- i-тое измерение от гироскопа, dt_i -- интервал времени от i-1 -го измерения, g_0 -- нуль гироскопа. Смотрим что получилось и получаем коэффициент, на который нужно домножать. Выполняем это несколько раз и усредняем. Опять же если получается 1, то все и так хорошо.
c)нули акселерометров: ориентируем акселерометр сначала вниз, потом вврех. Полусумма -- это и есть нуль.
d)коэффициент пропорциональности получим, помяряв g и получив его из какой-либо формулы для Ваших координат.
Ну и нужно помнить, что коэффициенты плывут от времени и температуры. А может и не плывут, или не сильно плывут. От конкретных датчиков зависит.
5)магнитное поле и магнитометры -- это, имхо, здесь будет самое муторное. Прежде всего стоит проверить, а нужно ли все это. минимально -- повернуть Вашу плату на углы 0, 90, 180, 270 гр (для прямоугольной платы это не сложно) для нескольких начальных положений и посмотреть, к чему сходятся показания устройства. Если изменения углов будут похожи на 90, 180, 270, то все и так нормально, если нет, то придется помучиться. Если чуть сложнее -- рассчитать значение вектора магнитного поля по WMM/IGRFЕ для заданных координат на заданную дату (есть онлайн калькуляторы) и сравнить с тем, что выдают датчики.
Описание возможных алгоритмов коррекции показаний магнитометров оставим на следующую итерацию.
6)по параметру beta -- он, по большому счету, зависит от соотношения точностей модели и датчиков. Придется подбирать.
7)предлагаю Вам попробовать реализовать пункты 4 и 5, ну и посмотреть/сообщить результаты.
PS. Ну и желательно знать, а что и с какими характеристиками хочется получить? От этого многое зависит при выборе схемы решения задачи, в частности, подойдет ли Вам free Imu. Свой код предоставить не могу, он заказной. Но на вопросы, если смогу, отвечу, может что полезным будет.