Прошивка 3Stab для EvvGC | UStab 

Современная качественная видеосъемка в движении невозможна без систем активной стабилизации. 3-х осевые подвесы для камер, работающие на бесшумных бесколлекторных моторах под управлением мощного 32-битного микроконтроллера, в режиме реального времени реагируют на малейшие отклонения камеры от выбранного направления с частотой более 1000 Гц и являются надежными помощниками видео операторов. Используя широко доступные электронные компоненты, постоянно экспериментируя и совершенствуя программный код, нам удалось добиться высокого качества стабилизации при относительно низкой стоимости, что и вдохновило нас на создание данного проекта.

Stable firmware for EvvGC

3Stb GUI for EvvGC and UStab 3/2axis controller

UStab HiEnd 3axis stabilization controller

Определение ориентации датчика MPU для 3-х осевого подвеса

C этого момента наша команда будет делиться с Вами не только конечным продуктом (скомпилированным ПО для управления 3-х осевыми подвесами на безколлекторных моторах), но и своими текущими наработками, теоретическими выкладками и размышлениями. Наша цель - получение наилучшего результата, безукоризненная работа всех компонентов системы. Именно поэтому нам так важно Ваше мнение и обратная связь. 

То каким образом датчики расположены на камере и раме трех осевого подвеса является критически важным для корректной его работы. В данной статье мы обсуждаем этот вопрос и ищем на него ответ. Материал содержит как теоретическую часть, так и практическую - реализацию решения в виде программного кода на QT.

Определение ориентации датчика MPU в пространстве

Для определения положения камеры и рамы подвеса мы используем датчики mpu-6050 и mpu-6500, которые содержат 3-х осевой гироскоп и 3-х осевой акселерометр. Чтобы корректно обрабатывать данные, которые выдает датчик, необходимо знать его ориентацию - т.е. положение его осей относительно некоторой заданной системы координат. Зная это положение, можно сказать, например, что ось X датчика совпадает с осью Z в требуемой системе координат, ось Y датчика c осью -X в требуемой системе координат, поэтому необходимо выполнить соответствующие преобразования.

Мы пересчитываем показания датчиков в систему координат, которая приведена в документации к датчикам mpu-6050 и mpu-6500. В этой системе координат оси X и Y направлены горизонтально относительно поверхности, а ось Z направлена вертикально вверх. В "нормальном" положении ось X совпадает с осью мотора pitch, ось Y - с осью мотора roll, а ось Z - с осью мотора yaw.

Если датчик расположен не так, как приведено на рисунке, положение его осей не будет совпадать с положением осей в требуемой нам системе координат. Мы рассматриваем только такие положения датчика, при которых каждая ось датчика в новом положении параллельна одной из осей в исходном положении. Всего таких положений датчика - 24.

Чтобы описать ориентацию датчика будем использовать матрицу направляющих косинусов (DCM - direct cosine matrix). Для рассматриваемых нами случаев элементы такой матрицы могут иметь значения только 0, 1 или -1. При этом в каждом столбце и каждой строке матрицы есть только один элемент отличный от 0, а столбцы (или строки) матрицы связаны между собой соотношениями XY=Z, YZ=X, Z*X=Y (DCM = [XYZ], X, Y, Z - вектор, равный соответствующему столбцу матрицы, * - векторное произведение).

Зная матрицу направляющих косинусов для текущего положения датчика, мы можем легко получать соответствие между осями датчика и осями в требуемой нам системе координат. Ось X в текущей системе координат датчика - это вектор [1 0 0]. Выполнив умножение DCM*[1 0 0], мы получаем проекцию этой оси в требуемой нам системе координат. Выполнив аналогичные действия для осей Y [0 1 0] и Z [0 0 1], мы получим нужный нам результат для всех трех осей.

Такую матрицу можно описать массивом int8_t orientation[6], где

  • orientation[0] определяет, какой элемент в первом столбце матрицы не равен 0 (0, 1 или 2)
  • orientation[1] определяет знак ненулевого элемента в первом столбце матрицы
  • orientation[2] определяет, какой элемент во втором столбце матрицы не равен 0 (0, 1 или 2)
  • orientation[3] определяет знак ненулевого элемента во втором столбце матрицы
  • orientation[4] определяет, какой элемент в третьем столбце матрицы не равен 0 (0, 1 или 2)
  • orientation[5] определяет знак ненулевого элемента в третьем столбце матрицы.

Перейдем от теории к практике. Для определения ориентации датчика будем использовать только показания акселерометра. Высокая точность нам не требуется, поскольку в "нормальных" условиях у нас есть только ускорение g вдоль оси Z.

Будем находить текущую ориентацию датчика в два этапа. На первом этапе определим ось датчика, которая параллельна оси Z в требуемой нам системе координат ( и параллельна направлению ускорения g). На втором этапе повернем датчик в положительном направлении вокруг оси (см. рисунок в datasheet), совпадающей с осью мотора pitch (в требуемой нам системе координат - это ось X), и определим ось датчика, которая параллельна оси Y в требуемой нам системе координат. Направление третьей оси датчика найдем из соотношения Y*Z=X.

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

Если есть вопросы, не стесняйтесь их задавать.

Вложения:
ФайлРазмер файла:Изменено
Скачать этот файл (IMUOrientationDef.zip)IMU Orientation Defenition QT205 Кб2016-04-12
Наша команда состоит из неравнодушных и увлеченных людей, которых объединяет работа над уникальным проектом - создание системы качественной стабилизации камеры 3Stab и контроллера UStab. Мы используем наш опыт и профессиональные навыки, чтобы воплотить действительно хорошие идеи в жизнь! Будем рады общению с Вами!
  • Team Player Andrew
     

    Андрей

    Талантливый конструктор, идеолог

  • Maxim
     

    Максим

    Наш лучший схемотехник

  • Team Player Rinat
     

    Ринат

    Руководитель проекта

  • Team Player Iness
     

    Инесса

    Маркетинг директор

Напишите Нам

Если у вас есть какие либо вопросы или комментарии,
не стесняйтесь писать нам, для нас важен каждый новый взгляд.

НАПИСАТЬ СООБЩЕНИЕ