Боремся с ошибками акселерометра, гироскопа, M7, цифрового компаса и других датчиков в iPhone 5S и не только / Хабр

kak nastroit kompas DF Новости

Боремся с ошибками акселерометра, гироскопа, m7, цифрового компаса и других датчиков в iphone 5s и не только

Боремся с ошибками акселерометра, гироскопа, M7, цифрового компаса и других датчиков в iPhone 5S и не только / Хабр

Многие наслышаны о проблеме с неоткалиброванными датчиками в новом iPhone 5S – инструмент «уровень», встроенный в родной компас iOS 7 показывает отклонение в несколько градусов, если устройство положить на плоскую поверхность, например, стол.

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

Я разрабатываю приложения с использованием датчиков акселерометра, гироскопа и цифрового компаса, ровно с тех самых пор, как разработчикам стал доступен API, практически с самого начала – будучи автором одного из самых популярных компасов для iOS с проблемами калибровки акселерометра и точности других датчиков я столкнулся еще несколько лет назад.

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

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

Как все было

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

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

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

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

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

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

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

Акселерометр

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

Оказалось, что помимо того, что в каждом устройстве акселерометр имеет небольшое отклонение, в рамках одного и того же физического устройства это отклонение различно для разной ориентации устройства – например, в обычной портретной ориентации отклонение от реальной оси гравитации может быть в 1°, при этом, при повороте на 180°, в перевернутой портретной может быть и 4°.

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

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

В «уровне» встроенном в компас iOS 7 калибровка осуществляется просто нажатием на экран – достаточно коснуться экрана и текущее положение устройства будет считаться опорным или «нулевым» положением.

Компас и GPS/GLONASS (хотя казалось бы)

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

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

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

Даже калибровка компаса и постоянная фильтрация данных особо не помогут в условиях неоднородного магнитного поля – ведь обычно после калибровки компаса человек поворачивается вокруг собственной оси, а не вокруг оси устройства, что при повороте на 90° смещает устройство в пространстве примерно на полметра, где могут быть другие магнитные условия.

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

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

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

Направление на северный полюс наиболее точно определяется при хорошей точности GPS, также обычно на улице.

Для дальнейшего повышения точности, где она требуется, например, если нужно правильно нацелить друг на друга антенны Wi-Fi или радиосвязи, или произвести какие-либо точные измерения, уже нужна более глубокая поддержка на стороне приложения, о чем ниже.

Гироскоп, гирокомпас и автомобильный режим

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

Соответственно, в своем приложении я реализовал обе эти возможности – для использования в различных средствах передвижения есть «автомобильный» режим и режим «гирокомпаса» для всего остального.

С автомобильным режимом все просто – используется курс движения, что зависит только от точности GPS и GLONASS, и, соответственно, достаточно точно определяется направление во время движения пешком, на велосипедах авто, лодках, самолетах и так далее.

С гирокомпасом ситуация одновременно и легче, и несколько сложнее.

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

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

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

Казалось бы гирокомпас является идеальным решением проблемы точности компаса и ориентации по сторонам света, но здесь есть и свои подводные камни.

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

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

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

Приведенное ниже видео иллюстрирует проблему.

На видео снят компас в режиме «гирокомпаса» настроенный точно на сервер запущен на устройстве, которое неподвижно лежит на столе. Несмотря на то, что устройство неподвижно с течением времени происходит смещение. На 00:09 смещается с 0° на 359°. На 01:21 уменьшается до 358°. На 03:03 мы уже видим азимут 357°.

Накопление ошибки происходит из-за дискретности датчиков, которые в некоторые моменты могут пропускать события, как, например, на видео выше на показания гироскопа влияют мельчайшие вибрации вентиляторов блоков питания в мониторе и компьютере находящимися рядом на столе. Датчики, конечно, прогрессируют со временем, получают более высокое разрешение, но дискретность данных остается. Соответственно, на показания могут влиять и такие незначительные вещи, как сердцебиение и пульс.

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

При этом ориентация по гироскопу намного точнее, чем по датчику компаса – при развороте на 180° сенсор сообщает, что поворот составил те же 180°, а не 150°, как, например, может сказать компас в условиях помех.

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

А как же новый сопроцессор движения M7?

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

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

Например, на видео иллюстрирующем ситуацию с накоплением ошибки в гироскопе, приведенном выше, компас в режиме гирокомпаса работает на новом iPhone 5S уже с использованием M7.

Можно ли доверять мобильным устройствам?

Ответ – да, зная и учитывая особенности используемых датчиков.

Разработчики сделают собственные выводы самостоятельно.

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

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

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

Во всех актуальных приложениях реализующих инструмент «уровень» должна быть калибровка задающая «нулевое» положение – естественно, она есть и во встроенном приложении.

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

При использовании магнитного компаса помните, что показания актуальны только сразу после калибровки, пока устройство не было перемещено на какое-либо значительное расстояние – поворот на 90° по оси позвоночника уже может потребовать повторной калибровки.

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

P.S. Овечаю на вопросы в комментариях.

Зачем нужен компас в телефоне?

Для начала разберемся, зачем нужен компас в смартфоне. Он помогает ориентироваться в пространстве даже при отсутствии карты местности. Если знать примерное расположение населенного пункта или конкретного объекта, этот прибор в умелых руках поможет его найти.

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

Функция компаса доступна в предустановленных приложениях на многих Android-устройствах и работает через технологию GPS и геомагнитный датчик. Чтобы увидеть заветную стрелочку, всегда указывающую на север, просто откройте приложение Google Maps (Карты Google) или Яндекс.Навигатор.

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

Калибровка на miui

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

Процесс калибровки выглядит так:

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

Для повышения точности калибровать датчик рекомендуется в отдалении от источников электромагнитного излучения, включая линии электропередач и электрические приборы. Оптимальный вариант – на улице, ещё лучше – на пустыре. Если ни одна методика не привела встроенный компас в рабочее состояние, можно попробовать использовать для калибровки приложение GPS Status & Toolbox.

Калибровка с помощью google maps

Google Maps — это навигационное приложение, которое позволяет пользоваться картами одноименного сервера.

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

Чтобы провести настройку:

Калибровка с помощью специального кода

Проверить, правильно ли функционирует Ваш датчик можно с помощью инженерного меню.

Данный способ, в зависимости от модели телефона, может не работать без root-прав.

Итак, для этого:

  1. Введите на клавиатуре телефона команду *#0*# и нажмите кнопку вызова.
  2. На экране откроется сервисное меню (но без рут-прав может и не открыться).
  3. В меню выберите один из пунктов: «Датчик» или «Сенсор».
  4. На экране смартфона Вы увидите данные датчиков Вашего телефона.
  5. Если до этого компас был откалиброван правильно, то справа, в пункте «Magnetic sensor», Вы увидите небольшой черный круг с прямой синей линией и латинской буквой E рядом с ней.

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

Калибровка с помощью сторонних приложений

Самый простой способ — установка специализированного приложения из Play Market. Такие программы находятся в свободном доступе и легки в использовании.

Приложение «калибровка»:

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

Проверка точности направления google карт

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

Откройте приложение Google Карты на устройстве Android, а затем найдите синий круг, показывающий Ваше местоположение. Если он не виден, нажмите круглый значок мишени в правом нижнем углу.

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

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

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

https://www.youtube.com/watch?v=7E0WX0kmZ7I

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

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

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

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

Приложение использует компас (если он есть в вашем устройстве) для определения направления. В навигации (в движении) используются данные GPS, а если вы стоите на месте или двигаетесь с низкой скоростью (менее 3,6 км/ч) вне режима навигации, используется компас.

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

На Android чтобы откалибровать компас, по-очереди поверните устройство 1-2 раза по 3-м осям. Также можно воспользоваться сторонними приложениями, чтобы откалибровать компас, например, GPS Status для Android (в меню приложения выбрать пункт калибровка компаса).

Если не работает компас в версии 8.3.6 Android, пожалуйста, обновите приложение.

На iOS система сама предложит откалибровать компас в случае, если это необходимо. Для того, чтобы включить/отключить калибровку компаса, откройте Настройки → Конфиденциальность → Службы геолокации → Системные службы → Калибровка компаса.

Этот метод включает в себя использование одного из сервисных кодов Android для доступа к информации о датчике. Однако, в зависимости от вашего производителя, он может не работать или требовать root-прав.

Программа «gps essentials»:

  1. Скачиваем и устанавливаем программу на смартфон.
  2. Запускаем ее и переходим в режим «Compass».
  3. Если компас отказывается правильно показывать направление, выбираем пункт «Calibrate» в настройках.
  4. Кладем телефон экраном вверх и начинаем вращать его вокруг своей оси.
  5. Переворачиваем смартфон вниз экраном и снова вращаем.
  6. Затем проделываем тоже самое, но установив гаджет боком.
  7. Настройка компаса окончена.

Способ 2: стороннее приложение

Если метод с картами Гугл для вас не подходит, на помощь придёт средство от сторонних разработчиков. Использование такового покажем на примере программы Compass от melon soft.

    Разрешите софту получение геолокационных данных.

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

После указанных действий датчик должен быть откалиброван.

Многие сторонние приложения компаса поддерживают опцию калибровки, которая подобна описанной в этой инструкции.

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

Вместо заключения

Счётчик Гейгера – самый неожиданный датчик, правда? Это японская тема. И насколько есть информация в интернете, такой датчик был только в телефоне Sharp Pantone 5, который вышел после аварии на атомной станции Фукусима-1. 

Современный смартфон должен иметь на борту: акселерометр, гироскоп, датчик приближения и освещения. Также обязательно наличие компаса. Если без гироскопа можно обойтись, то точка на карте без направления раздражает. A-GPS уже есть во всех смартфонах.

Оцените статью
Huawei Devices
Добавить комментарий