Калибровка гироскопа: почему не работает, как включить, установить и настроить

Содержание

почему не работает, как включить, установить и настроить

Смартфоны оснащаются большим количеством датчиков, которые делают взаимодействие с гаджетом более комфортным. В частности, на мобильные устройства устанавливается гироскоп. Он является неотъемлемой частью большинства моделей и нуждается в периодическом обслуживании. В процессе обслуживания выполняется калибровка гироскопа на операционной системе Android.

СОДЕРЖАНИЕ СТАТЬИ:

Что такое гироскоп и для чего он нужен

Чтобы понять, для чего требуется калибровка, достаточно сказать несколько слов о самом датчике. Гироскоп представляет собой устройство, которое определяет положение тела относительно земли. На Андроиде он используется в качестве средства реализации таких функций, как автоповорот экрана.

Gsensor понимает, что вы держите телефон горизонтально, а потому меняет ориентацию интерфейса в соответствии с вашим положением. Аналогичным образом интерфейс возвращается в вертикальное положение. Также гироскоп находит свое применение в играх, чье управление базируется на изменении угла наклона. Яркий пример – Real Racing 3 и другие гонки.

Как устроен и принцип работы

Гироскоп появился еще в 1817 году, когда мир даже не догадывался о том, что когда-то в руках каждого человека будет средство связи в лице смартфона. С тех пор принцип работы датчика сильно изменился. Gsensor представлял собой круг с установленным посередине волчком. Он всегда остается на месте, в отличие от опоясывающих его рам. Именно изменение их положения позволяет определить положение тела в пространстве.

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

Как проверить наличие гироскопа в телефоне

Несмотря на то, что Gsensor является одним из основных датчиков смартфона, на некоторых моделях он может отсутствовать. В таком случае нет необходимости проводить калибровку, а потому важно определить присутствие сенсора. Сделать это можно при помощи стороннего софта. Например, через бенчмарк AnTuTu. Он не только определяет производительность смартфона, но и показывает его характеристики. В разделе «Мое устройство» вы найдете пункт «Гироскоп». Если здесь стоит значение «Не поддерживается», то Gsensor отсутствует.

Похожим образом проверить наличие гироскопа можно через AIDA64. В отличие от AnTuTu, это приложение доступно для скачивания с помощью Play Маркет. Еще один пример – Sensor Sense, программа, демонстрирующая список всех поддерживаемых датчиков.

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

Включение и отключение функции

По умолчанию гироскоп всегда активен, и вы не можете отключить датчик. Впрочем, у вас есть возможность активации и деактивации функций, которые используют Gsensor. Яркий пример – автоповорот экрана. Чтобы включить или выключить ее, потребуется:

  • Открыть настройки телефона.
  • Перейти в раздел «Экран», а затем – «При повороте устройства» (в зависимости от модели смартфона этот пункт может называться иначе).
  • Установить значение «Выключить».

Также регулировка функции осуществляется через центр управления. Он вызывается свайпом от верхней части экрана вниз. Вы увидите перед собой около десятка иконок, каждая из которой отвечает за ту или иную опцию. Как правило, под значком с функцией, использующей гироскоп, присутствует надпись «Автоповорот». Если значок подсвечивается – опция работает. Если он серый, то функция отключена.

Помимо включения и отключения автоповорота экрана вы можете откалибровать гироскоп. Правда, для этого понадобится установить специализированный софт.  Оптимальный вариант – приложение Accelerometer Calibration. Несмотря на то, что оно направлено для калибровки акселерометра, программа также используется для настройки G-сенсора:

  • Используя Play Маркет, установите на телефон Accelerometer Calibration.
  • Положите смартфон на ровную поверхность.
  • Запустите программу.
  • Убедитесь, что красная точка находится в центре квадрата.
  • Нажмите кнопку «Откалибровать».

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

Почему может не работать

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

Другое дело, когда в центре управления есть опция «Автоповорот», а в камере есть режим панорамной съемки. Это косвенные свидетельства присутствия Gsensor. В таком случае выход датчика из строя может быть вызван механическими повреждениями гаджета. К сожалению, решить подобную проблему можно только заменой сенсора. Но не торопитесь переходить к радикальным мерам. Попробуйте откалибровать гироскоп. Не исключено, что после этого датчик заработает.

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

Вам помогло? Поделитесь с друзьями — помогите и нам!

Твитнуть

Поделиться

Поделиться

Отправить

Класснуть

Линкануть

Вотсапнуть

Запинить

Читайте нас в Яндекс Дзен

Наш Youtube-канал

Канал Telegram

Поисковая система вакансий

Adblock
detector

Как правильно откалибровать акселерометр на смартфоне

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

Один из таких встроенных датчиков называется G-Sensor – он же акселерометр. Его наличие нигде не видно явно, однако используется он постоянно. Неправильная его работа может вызвать странную работу гаджета, а неопытные пользователи могут даже решить, что он сломался. Давайте разберёмся, для чего он нужен и что можно сделать в случае неполадок, связанных с этим устройством.

Для чего нужен датчик

Без акселерометра смартфоны не были бы такими удобными и были бы похожи на сенсорные мобильники, которые появились более 10 лет назад. У них не было некоторых функций, к которым мы все уже привыкли, и они стали возможны именно благодаря G-сенсору.

Так как основное назначение этого датчика – определение положения гаджета в пространстве, то это позволило реализовать функцию поворота. Она срабатывает при повороте смартфона, и экран автоматически переворачивается. Это настолько удобная и естественная функция при фото- и видеосъёмке или при просмотре видео, что воспринимается, как естественная. Однако ей мы обязаны именно акселерометру.

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

Как работает акселерометр

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

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

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

Всё остальное – дело программистов, которые на основе показаний акселерометра внедряют разные полезные функции в операционную систему или в приложения.

Акселерометр можно в любой момент выключить. Для этого под верхней шторкой Android есть функция «Автоповорот», которая по умолчанию включена. Но иногда она может мешать, например, при чтении книги, и её можно легко отключить, а потом также легко включить.

Калибровка акселерометра G-Sensor

Иногда бывает, что поворот экрана или другие приложения, использующие акселерометр, начинают вести себя неправильно. Например, экран не переворачивается при наклоне, управление в играх не срабатывает…

Так бывает, если данные с датчика неправильно обрабатываются. Ломаться в нём практически нечему, так что это обычно чисто программная проблема.

Решается она также программно – просто системе нужно указать, какие данные даёт акселерометр в ровном, горизонтальном положении. Это будет использоваться, как точка отсчёта, нулевой уровень, и в дальнейшем расчёт положения происходит нормально.

Такая настройка называется калибровкой акселерометра. Сложно в этом ничего нет, и с процедурой может справиться любой пользователь:

  • Из магазина Play Market нужно скачать и установить утилиту GPS Status&Toolbox.
  • Запустить установленную программу.
  • Положить смартфон на ровную поверхность – на окно, стол и т. п.
  • Не перемещая устройство, открыть в программе раздел «Tools» — инструменты.
  • Выбрать пункт «Калибровка акселерометра» и подтвердить это действие нажатием «Ок».
  • Выбрать «Откалибровать». Будут предложены также пункты «Усреднить» и «Сбросить» — ими пользоваться не следует.

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

В смартфонах Xiaomi есть встроенная возможность калибровки. Она находится в настройках дисплея. Никакое приложение при этом скачивать не нужно.

Вот таким нехитрым способом можно очень быстро настроить гироскоп – акселерометр на Android. Напишите в комментариях, встречались ли вам проблемы с этим датчиком, как они проявлялись и как вы решили эту проблему. Кому-нибудь из читателей наверняка пригодится ваш опыт.

Как откалибровать гироскоп на устройствах Android — Technobezz

Автор Technobezz

В мире технологий гироскоп обычно называют G-сенсором. Так что это датчик, который поможет вам с

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

Что такое гироскоп ?

Гироскоп — это  устройство, используемое для измерения или поддержания ориентации и угловой скорости . Другими словами, это помогает с ориентацией объекта. Внешний вид гироскопа напоминает нам Fidget Spinner, игрушку, которую можно балансировать и вращать.

Теперь давайте перейдем к делу и объясним, как вы можете откалибровать это устройство на своем телефоне или планшете Android.

В мире технологий гироскоп обычно называют G-Senso 9.0010 р. Это датчик, который поможет вам с ориентацией. Это устройство доступно на новых телефонах Android.

См. также: Как очистить кеш TikTok На устройствах Android и iOS

 

Шаги по калибровке G-Sensor на вашем телефоне:
  • Откройте «Настройки» вашего Android-устройства.
  • В зависимости от того, какое Android-устройство вы используете в данный момент, найдите параметр «Дисплей» или «Дополнительные функции» и коснитесь его.
  • Коснитесь «Движения и жесты»
  • Найдите опцию «G-сенсор».
  • Когда вы его найдете, вам нужно будет положить телефон на плоскую поверхность, например на стол.
  • Нажмите на опцию « Calibrate » и постарайтесь не двигать телефон, пока это действие не будет завершено. Сам процесс не займет много времени и будет завершен за несколько секунд.

Поскольку существует больше способов калибровки гироскопа, мы покажем их все здесь.

Для этого можно использовать другие приложения. В магазине доступно множество различных приложений.

 

Калибровка с помощью приложения GPS Status
  • Откройте магазин приложений Google.
  • Когда вы откроете его, перейдите в «Поиск» и введите «Статус GPS». Например, статус GPS и панель инструментов
  • .
  • Найдите и загрузите одно из приложений «Статус GPS». Если вы хотите использовать другое приложение, любое из них будет хорошо выполнять свою работу, поэтому выбирайте то, что хотите.

Примечание. Не все из этих приложений будут доступны и совместимы с вашим устройством. Найдите нужное в магазине приложений Google.

  • После установки приложения GPS Status вам необходимо разрешить ему доступ к определенным файлам на вашем мобильном телефоне. Разрешить и продолжить.
  • Вам нужно будет найти опцию «Калибровка тангажа и крена». Он будет находиться в разных местах в зависимости от того, что вы используете. Поскольку мы здесь показываем вам, как использовать приложение Gps Status & Toolbox, вам нужно будет найти на экране опцию «Калибровать тангаж и крен».

  • После нажатия кнопки «Калибровать» положите телефон на плоскую поверхность, стол, пол и т. д. Не используйте его и не перемещайте в течение определенного времени. Этот процесс будет длиться всего несколько секунд.

После завершения калибровки вы снова сможете регулярно пользоваться телефоном.

Примечание: Некоторые мобильные телефоны Android, например телефоны Samsung, имеют быстрое и скрытое меню. Если вы хотите получить доступ к быстрому меню и активировать калибровку таким образом, вы должны перейти к номеронабирателю телефона и набрать этот код *#*# для доступа к нему. Затем нажмите «Система», положите телефон на плоскую поверхность и дождитесь завершения калибровочного теста.

Мы надеемся, что эта статья помогла вам откалибровать ваше устройство. До скорого!

 

 

Калибровка гироскопа и акселерометра с помощью Raspberry Pi — Maker Portal

«Как участник программы Amazon Associates, переход по ссылкам может привести к тому, что Maker Portal получит небольшую комиссию, которая поможет поддержать будущие проекты».

Введение
Общие сведения о MPU9250 9-DoF IMU
Калибровка гироскопа в устойчивых условиях
Проверка калибровки гироскопа путем численного интегрирования
Калибровка акселерометра с использованием силы тяжести
Проверка калибровки акселерометра с помощью численного интегрирования
Заключение и продолжение

Это вторая запись в серии под названием «Калибровка инерциального измерительного блока (IMU) с помощью Raspberry Pi» ( Ссылка на часть I ), где гироскоп и акселерометр калибруются с использованием нашего калибровочного блока

. Python используется в качестве языка кодирования на Raspberry Pi для определения калибровочных коэффициентов для двух датчиков. Методы проверки также используются для интеграции переменных IMU для проверки калибровки каждого датчика. Гироскоп показывает довольно точный отклик при калибровке и интегрировании, и оказалось, что он находится в пределах градуса от фактического теста вращения. Акселерометр был немного менее точным, вероятно, из-за двойного интегрирования, необходимого для аппроксимации смещения, и несбалансированного стола, на котором калибровался IMU. Также введены методы фильтрации для сглаживания данных акселерометра для интегрирования. Конечный датчик, магнитометр (АК8963), будет откалиброван в следующей итерации этой серии.

Общие сведения о MPU9250 9-DoF IMU

MPU9250 представляет собой инерциальный измерительный блок (IMU) с 9 степенями свободы (9-DoF), который включает в себя комбинированный датчик акселерометра/гироскопа (MPU6050) и датчик магнитометра.

(АК8963). Данные, считываемые акселерометром/гироскопом (MPU6050) и магнитом (AK8963), лучше всего понять, если сначала изучить конфигурацию системы координат каждого датчика. Ниже приведен состав координат для обоих датчиков:

Система координат акселерометра использует несколько традиционную декартову систему координат. Точно так же гироскоп использует вращение против часовой стрелки в качестве положительного направления вращения. Магнитометр переключает направления x и y, изменяя направление амплитуды в направлении z на противоположное. Эти соглашения вступят в силу во время калибровки и будут разъяснены и обсуждены для каждого из трех датчиков.

Ссылки на координаты будут необходимы для понимания данных, считываемых MPU9.250 и разработка методов калибровки IMU.

Диапазон каждого датчика:

  • Акселерометр — будет откалиброван в диапазоне 0G -2G

  • Гироскоп — будет откалиброван в диапазоне 0dp — 250dps

  • . в диапазоне 0 мкТл — 4800 мкТл

-примечание по частоте дискретизации-

Используемая частота дискретизации составляет 8 кГц, что является самой высокой частотой обновления для гироскопа. Частота акселерометра приближается к 1 кГц, а максимальная частота магнитометра составляет 100 Гц. Эффективная частота дискретизации &приблизительно; 400 Гц, что приводит к повторяющимся значениям для AK89.63 датчик.

MPU9250 будет присоединен к нашему калибровочному блоку, который позволит выполнять вращение вдоль каждой оси и гарантирует, что датчики откалиброваны для наилучшего совмещения с гравитацией (акселерометр) и вращением вокруг каждой оси (магнитометр).

Комплект калибровочных блоков IMU с MPU9250

Купить в нашем магазине

Калибровка гироскопа в установившихся условиях

Простейшая калибровка IMU состоит из расчета смещения для каждой оси гироскопа. Гироскоп является самой простой калибровкой из-за ожидаемых показаний, выводимых в стабильных условиях. Каждая из трех осей гироскопа должна показывать 0 градусов в секунду (dps, °/s), когда IMU не движется. Смещения можно измерить, сначала сделав некоторые показания, когда IMU не движется, а затем используя эти значения в качестве «смещений» при считывании значений гироскопа в будущем. Это всего лишь простейший метод калибровки для IMU, и его достаточно для большинства случайных применений гироскопа и IMU. Существует ряд процедур калибровки гироскопов более высокого порядка, которые можно найти по следующим ссылкам (с описанием приложений):

  • «Калибровка нательных гироскопов в процессе эксплуатации для анализа походки» Sergio Scapellato et al. (2005)

  • «Новый метод калибровки трехосного МЭМС-гироскопа во всем диапазоне температур» Haotian Yang et al. (2018)

  • «Улучшенная многопозиционная калибровка инерциальных измерительных блоков» Хунлян Чжан (2009)

  • «Алгоритм калибровки в полевых условиях MEMS IMU» Умар Куреши и Фарид Голнараги (2017 )

Смещения гироскопа MPU6050 можно найти, записав выборку данных по каждой оси и используя среднее значение каждой выборки. Процедуру калибровки гироскопа (и все другие коды, используемые в этом руководстве) можно найти на странице этого проекта на GitHub:

.

https://github.com/makerportal/mpu92-калибровка

Образец кода расчета смещения гироскопа также приведен ниже:

Выходные данные приведенного выше кода отображают трехосный гироскоп как для некалиброванных, так и для калиброванных значений для ряда выборок, заданных в переменной «cal_size» (выбрано как 500 образцы в нашем случае). Пример вывода для нашего гироскопа показан ниже:

Легко видеть, что смещения необходимы для минимизации ожидаемых минимальных значений в устойчивых условиях IMU.

Проверка калибровки гироскопа с помощью численного интегрирования

Мы можем дополнительно проверить калибровку гироскопа, интегрируя массив значений угловой скорости во времени при известном вращении. Например, мы можем повернуть калибровочный блок IMU на 180° и интегрировать гироскоп с течением времени, чтобы убедиться, что гироскоп работает правильно.

Интегрируя угловую скорость гироскопа, можно получить аппроксимацию углового смещения:

Для дискретных точек требуется метод численного интегрирования, для которого мы используем трапециевидное численное интегрирование:

В пакете scipy на Python реализована отличная реализация трапециевидного численного интегрирования, что позволяет легко аппроксимировать вращение IMU путем интегрирования гироскопа. Пример реализации интеграции гироскопа приведен ниже на графике:

Гироскоп приближает поворот на 180° примерно к 179,8°, что довольно точно. Это также говорит нам о том, что направленность IMU является точной, так как в случае выше вращение осуществлялось в направлении против часовой стрелки. Таким образом, мы имеем достаточно точную калибровку гироскопа на MPU9250 (MPU6050). Конечно, приведенная выше проверка предназначена для очень устойчивого и идеализированного вращения.

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

Калибровка акселерометра с использованием силы тяжести

Калибровка акселерометра требует использования ускорения силы тяжести, которое мы можем использовать в положительной и отрицательной ориентации IMU. Кроме того, мы также можем расположить IMU перпендикулярно силе тяжести, чтобы получить третью точку калибровки. Это приводит к трем уникальным значениям, которые можно комбинировать, чтобы сформулировать линейную подгонку между тремя значениями и значениями, выдаваемыми каждой осью акселерометра.

Процедура калибровки акселерометра следующая (для каждой оси):

1. Направьте IMU вверх против силы тяжести (1 г)

2. Направьте IMU вниз, в сторону силы тяжести (-1g)

3. Направьте IMU перпендикулярно силе тяжести (0g)

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

Код Python, используемый для калибровки акселерометра, приведен ниже:

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

Приведенная выше калибровка представляет IMU, прикрепленный к калибровочному блоку с направлением z вверх. Вот почему мы видим ускорение 1 g в направлении z и почти нулевые значения в двух других направлениях.

Мы снова можем увидеть преимущество калибровки для каждой оси с точки зрения линейной подгонки ниже:

Линейная посадка для всех осей акселерометра до -1g, 0g, +1g

Затем выполняется проверка акселерометра путем перемещения калибровочного блока IMU на известное расстояние в выбранном направлении. Соответствующее ускорение, измеренное акселерометром, будет дважды интегрировано для приблизительного смещения.

Проверка калибровки акселерометра путем численного интегрирования

Калибровка акселерометра может быть проверена так же, как и гироскоп — путем численного интегрирования. Разница между интеграцией гироскопа и интеграцией акселерометра заключается в том, что значения ускорения будут интегрироваться дважды для вывода приблизительного смещения IMU в соответствии со следующей интеграцией:

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

Затем массив скоростей должен быть интегрирован для приблизительного смещения:

В Python мы сначала используем «intergrate. cumtrapz», который реализует трапециевидное численное интегрирование с пошаговым приращением. Первое интегрирование дает вектор скорости, а второе интегрирование дает массив перемещений.

Двойное интегрирование теста ускорения делает несколько предположений:

  1. Объект (калибровочный блок IMU) находится в состоянии покоя

  2. Известно время между замерами (вероятно, неравномерное для IMU)

  3. IMU скользит в одном направлении перпендикулярно силе тяжести (влияние силы тяжести 0 g)

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

MPU9250 Тестирование смещения акселерометра

Приведенный ниже код либо калибрует акселерометр, либо принимает в качестве входных данных коэффициенты калибровки (из предыдущей калибровки). Затем он использует цифровой фильтр Баттерворта 4-го порядка для сглаживания сигнала и, в конечном итоге, выводит ускорение, скорость и смещение для отображения результатов интегрирования:

 ##################### ######################################
# Copyright (c) 2021 ООО «Мейкер Портал»
# Автор: Джошуа Хриско
################################################### ####
#
# Этот код считывает данные с MPU9Плата 250/MPU9265
# (MPU6050 - ускорение/гироскоп, AK8963 - магазин)
# и вычисляет калибровочные коэффициенты для
# акселерометр и возможность интеграции для тестирования
#
#
################################################### ####
#
# подождите 5 секунд, пока IMU подключится
время импорта, систем
sys.path.append('../')
t0 = время.время()
start_bool = False # если запуск IMU не удался - остановить калибровку
в то время как время.время()-t0<5:
    пытаться:
        из импорта mpu9250_i2c *
        start_bool = Истина
        ломать
    кроме:
        Продолжать
импортировать numpy как np
импортировать csv, дату и время
импортировать matplotlib. pyplot как plt
из scipy.optimize импорта curve_fit
из scipy.integrate импортировать cumtrapz
из сигнала импорта scipy
time.sleep(2) # ждем, пока MPU загрузится и установится
#
######################################
# Калибровка ускорения (гравитация)
######################################
#
def accel_fit (x_input, m_x, b):
    return (m_x*x_input)+b # подходящее уравнение для калибровки ускорения
#
защита get_accel():
    ax,ay,az,_,_,_ = mpu6050_conv() # чтение и преобразование данных ускорения
    возвратный топор, ау, аз
    
защита accel_cal():
    печать("-"*50)
    print("Калибровка акселерометра")
    mpu_offsets = [[],[],[]] # массив смещений для печати
    axis_vec = ['z','y','x'] # метки осей
    cal_directions = ["вверх","вниз","перпендикулярно гравитации"] # направление для IMU cal
    cal_indices = [2,1,0] # индексы осей
    для qq,ax_qq в перечислении(axis_vec):
        ax_offsets = [[],[],[]]
        печать("-"*50)
        для direc_ii, direc в перечислении (cal_directions):
            input("-"*8+" Нажмите Enter и держите IMU устойчивым, чтобы откалибровать акселерометр с помощью -"+\
              ax_qq+"-ось указала"+direct)
            [mpu6050_conv() for ii in range(0,cal_size)] # очистить буфер между показаниями
            mpu_array = []
            в то время как len(mpu_array) append([ax,ay,az]) # добавить в массив
                кроме:
                    Продолжать
            ax_offsets[direc_ii] = np.array(mpu_array)[:,cal_indices[qq]] # смещения для направления
        # Используйте три калибровки (+1g, -1g, 0g) для линейной подгонки
        popts,_ = curve_fit (accel_fit, np.append (np.append (ax_offsets [0],
                                 ax_offsets[1]),ax_offsets[2]),
                   np.append (np.append (1,0 * np.ones (np.shape (ax_offsets [0])),
                    -1.0*np.ones(np.shape(ax_offsets[1]))),
                        0.0*np.ones(np.shape(ax_offsets[2]))),
                            максфев=10000)
        mpu_offsets[cal_indices[qq]] = popts # поместить уклон и точку пересечения в массив смещения
    print('Калибровка акселерометра завершена')
    вернуть mpu_offsets
определение imu_integrator():
    ##############################
    # Основной цикл для интеграции IMU
    ##############################
    #
    data_indx = 1 # индекс переменной для интегрирования
    dt_stop = 5 # секунд для записи и интегрирования
    plt. style.use('ggplot')
    плт.ион()
    рис, оси = plt.subplots (3,1, figsize = (12,9))
    break_bool = Ложь
    пока верно:
        #
        ####################################
        # Чтение и печать значений IMU
        ####################################
        #
        accel_array,t_array = [],[]
        print("Начало сбора данных")
        [axs[ii].clear() для ii в диапазоне (0,3)]
        t0 = время.время()
        loop_bool = Ложь
        пока верно:
            пытаться:
                ax,ay,az,wx,wy,wz = mpu6050_conv() # чтение и преобразование данных mpu6050
                мх, мой, мз = АК8963_conv() # чтение и преобразование данных магнитометра AK8963
                t_array.append(время.время()-t0)
                data_array = [ax,ay,az,wx,wy,wz,mx,my,mz]
                accel_array.append(accel_fit(data_array[data_indx],
                                             *accel_coeffs[data_indx]))
                если не loop_bool:
                    loop_bool = Истина
                    print("Начать перемещение IMU. ..")
            кроме:
                Продолжать
            если time.time()-t0>dt_stop:
                print("Сбор данных остановлен")
                ломать
            
        если break_bool:
            ломать
        #
        ####################################
        # Фильтрация сигналов
        ####################################
        #
        Fs_приблизительно = len(accel_array)/dt_stop
        b_filt,a_filt = signal.butter(4,5,'low',fs=Fs_приблизительно)
        accel_array = signal.filtfilt(b_filt, a_filt, accel_array)
        accel_array = np.multiply (accel_array, 9.80665)
        #
        ####################################
        # Печать частоты дискретизации и ускорения
        # Значение интеграции
        ####################################
        #
        print("Частота дискретизации: {0:2.0f}Hz".format(len(accel_array)/dt_stop))
        veloc_array = np.append (0,0, cumtrapz (accel_array, x = t_array))
        dist_ приблизительно = np.trapz (veloc_array, x = t_array)
        dist_array = np. {-1}$]',fontsize=16)
        axs[2].set_ylabel('Смещение [м]',fontsize=16)
        axs[2].set_xlabel('Время [с]',размер шрифта=18)
        axs[0].set_title("MPU9Интеграция акселерометра 250", размер шрифта = 18)
        пл.пауза(0,01)
        plt.savefig("accel_veloc_displace_integration.png", dpi=300,
                    bbox_inches='tight',facecolor="#FCFCFC")
если __name__ == '__main__':
    если не start_bool:
        print("IMU не запущен - проверьте проводку и I2C")
    еще:
        #
        #####################################
        # Калибровка гравитационного акселерометра
        #####################################
        #
        mpu_labels = ['a_x','a_y','a_z'] # метки гироскопа для графиков
        cal_size = 1000 # количество точек для калибровки
        old_vals_bool = True # True использует значения из другой калибровки
        если не old_vals_bool:
            accel_coeffs = accel_cal() # получение коэффициентов ускорения
        еще:
            accel_coeffs = [np. array([ 0,9978107 , -0,19471673]),
                            np.массив ([ 0,99740193, -0,56129248]),
                            np.массив([0.9893495, 0.20589886])]
#
        #####################################
        # Запись новых данных
        #####################################
        #
        data = np.array([get_accel() for ii in range(0,cal_size)]) # новые значения
        #
        #####################################
        # интеграция по времени
        #####################################
        #
        иму_интегратор()
 

Ниже также приведен пример вывода для тестового примера скольжения IMU в направлении +y на 0,5 м:

Для приведенного выше графика можно сделать несколько замечаний:

  • Ускорение не равно нулю даже после калибровки (вероятно, из-за несбалансированной таблицы) (замедление)

  • Скорость везде положительна (движение вперед)

  • Смещение положительное (движение вперед)

  • Скорость и смещение постоянно изменяются из-за неуравновешенного ускорения (несбалансированный стол) м тест. Эта неточность связана с двойным интегрированием и неопределенностью, связанной с датчиками, а также с несовершенной калибровкой. Это можно исправить, установив IMU перпендикулярно силе тяжести во время калибровки (с помощью уровня), а также убедившись, что проверка проводится на ровной поверхности.

    Заключение и продолжение

    В этом руководстве калибровка гироскопа и акселерометра на MPU9250 (MPU6050) изучалась различными методами. Гироскоп был откалиброван в стационарных условиях путем вычисления среднего отклонения от массива выборок измерений. Точность гироскопа была исследована путем первого интегрирования угловой скорости по времени и просмотра результата после известного вращения. Точность после поворота на 180 градусов оказалась менее 1 градуса, что вполне соответствует действительности. Это, конечно, при очень идеализированных условиях: плавный и малый угол поворота. Точно так же акселерометр был протестирован в диапазоне трех точек калибровки: +1g, -1g и 0g. Эти три точки были сопоставлены с линией с использованием метода наименьших квадратов. Акселерометр также был интегрирован, на этот раз дважды, чтобы аппроксимировать движение IMU по известному смещению. Было обнаружено, что точность этого метода весьма подвержена ошибкам, вероятно, из-за следующих факторов: IMU был помещен на стол, не идеально перпендикулярный силе тяжести, двойное интегрирование приводит к большим ошибкам. Акселерометр также был отфильтрован, чтобы сгладить сигнал (который был довольно шумным, особенно при скольжении по столу). Фильтрация также может быть выполнена на гироскопе. В части III, следующей и последней записи этой серии, будет откалиброван магнитометр. Магнитометр гораздо более сложен, чем калибровка гироскопа и акселерометра, из-за требования двух осевых компонентов для калибровки в магнитном поле Земли. Также будет введена ансамблевая калибровка с процедурой сохранения всех калибровочных коэффициентов для всех трех датчиков (для всех 9-ДоФ). Это позволит пользователям выполнить калибровку один раз и использовать калибровочные коэффициенты в своих приложениях.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *