2017-01-30 8 views
0

Я использую C++ реализацию алгоритма Madgwick Algorithim, имея свои датчики (акселерометр, магнитометр и гироскоп), откалиброванные. Кажется, что все работает хорошо, но когда я помещаю датчик в вертикальное положение (шаг до 90 градусов), другие углы начинают делать странные вещи. Это то, что я получаю: Matlab plot problemMadgwick IMU 90 градусов Angles

Фактически, углы, которые я получаю, являются правильными, но выражаются по-другому. Я должен получить только:

  • Рулон: 0
  • Высота: 90
  • рыскания: -150

Но я получаю:

  • Рулон: -180
  • Шаг: 90
  • Yaw: 50

Оба результата те же, верно? Мои вопросы:

  • Является ли это проблемой Gimbal Lock?
  • Насколько я знаю, Gimbal Lock должен получать ошибки в углах, но я получаю их в порядке. Алгоритм Madgwick пытается избежать этого Gimbal Lock?

ответ

0

Нет, вы не можете заблокировать датчик Gimbal, так как это физический объект, который вы переместили.

Gimbal lock относится к состоянию, на котором, если вы хотите переместить 2 угла, они будут иметь тот же эффект на вращение. Это не ошибка, а конкретное состояние вращения. Но если вы лично перемещаете объект вручную, блокировка Gimbal невозможна. В Википедии есть блестящий GIF:

enter image description here

Gimbal запертого самолет. Когда шары (зеленый) и рыскание (пурпурный) выравниваются, изменения в рулоне (синий) и рыскании применяют тот же поворот к самолету.

Однако обратите внимание, что причиной блокировки кармана может быть причина ваших данных: в углах эйлера имеется несколько наборов углов, которые дают точно такую ​​же конечную точку. Какой из них дает вам ваша система? вы не можете знать. Зависит от датчика и алгоритма, используемого для предоставления вам данных.

Хороший способ обеспечить вашу дальнейшую математику согласованно и зная, что 2 оборота одинаковы, чтобы преобразовать ваши измерения в кватернионы. Они уникальны для каждого поворота и помогут вам лучше понять, что произошло.