Выбор правильного датчика

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

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

 
Загрузите видеоролик для просмотра в предпочитаемом медиапроигрывателе. 
MP4 высокого качества
 | MP4 низкого качества

Для получения более подробной информации о датчиках обратитесь к статье Aligning sensors with your app’s orientation

Сценарии для различных датчиков

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

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

Акселерометр измеряет ускорение силы тяжести по осям X, Y и Z устройства и прекрасно подходит для простых приложений, основанных на движении. Обратите внимание, что «значение ускорения силы тяжести» отражает ускорение из-за гравитации. Если устройство лежит на столе экраном вверх (см. Simple Orientation (Простое руководство по ориентации)), то акселерометр покажет значение –1 G по оси Z. Таким образом, акселерометр не обязательно измеряет «ускорение по координатам» — темп изменения скорости. При использовании акселерометра не забудьте делать различие между гравитационным вектором и гравитацией, а также между вектором линейного ускорения и движением. Обратите внимание, что нормальное значение гравитационного вектора для планшета в состоянии покоя должно равняться 1.

На следующей диаграмме показано, что акселерометр напоминает подвешенный на пружине груз:

Вы видите, что:

  • V1 = вектор 1 = сила из-за гравитации.
  • V2 = вектор 2 = ось –Z корпуса устройства (выходит из задней части экрана).
  • Θi = угол наклона = угол между осью –Z корпуса устройства и вектором гравитации.

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

Снимок экрана из примера с лабиринтом

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

Гирометр

Гирометр (гироскоп) измеряет угловую скорость по осям X, Y и Z. Он очень полезен для простых, основанных на движении приложений, где важна не ориентация устройства в пространстве, а его вращение с разной скоростью. Гирометр подвержен помехам в данных и (или) систематическим ошибкам по одной или нескольким осям. Лучше всего запрашивать данные акселерометра, чтобы подтвердить движение устройства и определить, есть ли ошибки в данных гирометра. Затем можно компенсировать эти данные в приложении.

Здесь показано отношение координат устройств для гирометра

Пример: приложение, вращающее рулетку при резком круговом движении планшета.

Компас

Датчик компаса возвращает двухмерный курс по отношению к магнитному северу, основываясь на горизонтальной плоскости земли. Этот датчик идеально подходит для приложений, где нужно выяснить, в каком направлении смотрит пользователь, и где необходимо нарисовать компасную розу или стрелку. Однако мы не рекомендуем использовать его определения ориентации устройства или представления чего бы то ни было в трехмерном пространстве. Особенности географии могут вызвать естественное магнитное склонение курса, поэтому некоторые системы поддерживают как «магнитный север», так и «истинный север». Подумайте, какой из них нужен вашему приложению, но помните, что не все системы предоставляют значение «истинного севера». Гирометр и магнитометр (устройство, измеряющее величину магнитного поля) комбинируют собственные данные и вычисляют курс компаса, что в совокупности стабилизирует данные (величина магнитного поля нестабильна из-за электрических компонентов системы).

Здесь показана разница между магнитным и истинным севером

Пример: приложение, отображающее розу компаса, или навигатор.

Инклинометр

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

На этом рисунке показан диапазон значений инклинометра

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

Ориентация

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

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

Пример: продвинутое приложение с функцией дополненной реальности, которое накладывает рисунок поверх окружения исходя из направления задней стороны устройства.

Простая ориентация устройства в пространстве

Этот датчик определяет текущую ориентацию заданного устройства по квадрантам, а также позволяет понять, вверх или вниз направлен экран. Всего доступно шесть возможных состояний: NotRotated (не повернуто), Rotated90 (повернуто на 90), Rotated180 (повернуто на 180), Rotated270 (повернуто на 270), FaceUp (экраном вверх), FaceDown (экраном вниз).

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

Использование нескольких датчиков в одном приложении

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

Не забывайте, что объединенный датчик технически использует несколько датчиков: датчики компас, инклинометр, ориентация комбинируют и синтезируют данные из физических датчиков (акселерометра, гирометра и магнитометра). Поэтому мы рекомендуем использовать один из объединенных датчиков (а не акселерометр и гирометр) для создания псевдокомбинированного датчика или схемы управления другого типа. Мы уже сделали всю тяжелую работу за вас!

Подведем итоги

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

Брайан Роквелл (Brian Rockwell), руководитель программ для сенсоров в Windows