магнетометр и углы наклона

Тема в разделе "Arduino & Shields", создана пользователем Artclonic, 18 май 2018.

  1. Artclonic

    Artclonic Гик

    Добрыи день. Вот математичекие (геометрические) выкладки
    компенсации «показания на север» в зависимости от углов наклона…
    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акторов) будет оставаться постояннои. Которая будет компенсироваться углами наклона по всем осям. Но если идет воздеиствия внешнего актора (приблизили магнит, к примеру), то показание соответственно изменятся...
     
  2. sslobodyan

    sslobodyan Гик

    Чьёрт побьери! (с) Занимаюсь точно такой же задачей :) И тоже пока в пролете.
    Предлагаю ломать дальше голову вместе.
    Приведенная вами формула встречается в сети в нескольких модификациях. Видел 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. Калибровку магнитометра и акселя делали?
     
  3. Artclonic

    Artclonic Гик

    Пока только теоретический подход... Схемку ещё не собрал, но если компас в смартфон показывает на север в независимо от наклоном, то это полюбому решаемая задача...
     
  4. Artclonic

    Artclonic Гик

    Вернее она у меня была собрана, я разобрал...Соберу, в екселе графики построю -увидим зависимости...
     
  5. sslobodyan

    sslobodyan Гик

    Ок, жду :)
     
  6. Artclonic

    Artclonic Гик

  7. sslobodyan

    sslobodyan Гик

    Нет, не видел. Спасибо, почитал. К сожалению, там ответа на наши вопросы нет.
     
  8. Artclonic

    Artclonic Гик

    К сожалению пока не смог уделить время. . .
     
  9. Artclonic

    Artclonic Гик

    Я нашел предыдущие замеры свои.... (сейчас пипец нет времени.... срочная командировка). Правда в каком направлении (северили не север) изначально был повернут -не знаю... Естественно северное направление не учитывал... А так все повороты на 360 градусов вокруг осей поочередно...Есть файл ексель, но он не прикрепляется...
     

    Вложения: