Добрыи день. Вот математичекие (геометрические) выкладки компенсации «показания на север» в зависимости от углов наклона… H = atan(Y/X) где H — угол отклонения стрелки компаса от северного направления; X,Y — калиброванные значения магнитометра. Решить проблемуотклонения в зависимости от наклона поможет геометрия. Нам нужно всего лишь повернуть магнитный вектор в систему координат, заданную инклинометром. Для этого, поочередно перемножим две матрицы косинусов на вектор: Vcal2 = Ry*Rx*Vcal где Vcal — магнитный вектор, очищенный от Hard и Soft искажений; Rx и Ry — матрицы поворота вокруг осей X и Y; Vcal2 — магнитный вектор, очищенный от влияния крена и тангажа. Пригодная для программы контроллера формула будет иметь вид: Xcal2 = Xcal*cos(pitch) + Ycal*sin(roll)*sin(pitch) + Zcal*cos(roll)*sin(pitch) Ycal2 = Ycal*cos(roll) — Zcal*sin(roll) H = atan2( -Ycal2, Xcal2 ) где roll и pitch — наклоны вокруг осей X и Y; Xcal,Ycal,Zcal — вектор магнитометра (Vcal); Ycal2, Ycal2 — калиброванные значения магнитометра (Zcal2 не считаем — он нам не пригодится); H — угол между севером и стрелкой компаса. Сломал голову…Как будет выглядеть уравнение где с однои стороны показания магнетометра XYZ а с другои углы наклона (roll , pitch и допустим - pitchZ). Идея расчета какая –определить постоянную велечину показани магнетометра (вектора), которая (при неизменных внешних fакторов) будет оставаться постояннои. Которая будет компенсироваться углами наклона по всем осям. Но если идет воздеиствия внешнего актора (приблизили магнит, к примеру), то показание соответственно изменятся...
Чьёрт побьери! (с) Занимаюсь точно такой же задачей И тоже пока в пролете. Предлагаю ломать дальше голову вместе. Приведенная вами формула встречается в сети в нескольких модификациях. Видел H = atan2( -Ycal2, Xcal2 ) и H = atan2( Ycal2, Xcal2 ) а также Ycal2 = Ycal*cos(roll) — Zcal*sin(roll) и Ycal2 = Ycal*cos(roll) + Zcal*sin(roll). Но ни с одним вариантом у меня не заработало. Похоже, что данные по каким-то осям нужно умножить на -1. А напишите какие значения с магнитометра и акселерометра у вас выходят при определенных положениях (на север в горизонте, на север нос вверх, на север левое крыло вверх, на восток в горизонте). И питч при подъеме носа идет в плюс или минус? А то у разных авторов почему-то все по разному. Хотя ведь есть "стандартная" схема NED (X-север, Y-восток, Z-низ), все повороты увеличиваются по часовой, но этот вариант не для всех стандарт. Я ковыряюсь с MPU9250. Калибровку магнитометра и акселя делали?
Пока только теоретический подход... Схемку ещё не собрал, но если компас в смартфон показывает на север в независимо от наклоном, то это полюбому решаемая задача...
Если все по плану, то сегодня мож поиграюсь с MPU, а вот видели? https://www.radiokot.ru/forum/viewtopic.php?p=2948150
Я нашел предыдущие замеры свои.... (сейчас пипец нет времени.... срочная командировка). Правда в каком направлении (северили не север) изначально был повернут -не знаю... Естественно северное направление не учитывал... А так все повороты на 360 градусов вокруг осей поочередно...Есть файл ексель, но он не прикрепляется...