Поделиться через


Выбор правильных датчиков (HTML)

[ Эта статья адресована разработчикам приложений среды выполнения Windows для Windows 8.x и Windows Phone 8.x. При разработке приложений для Windows 10 см. раздел последняя документация]

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

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

Пакетная обработка датчика

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

Пакетный сбор датчика

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

Вы можете влиять на то, как часто датчик отправляет пакеты, регулируя задержку. Например, датчик Accelerometer имеет свойство ReportLatency. Если для приложения установлено это свойство, датчик будет отправлять данные по истечении указанного промежутка времени. Вы можете управлять объемом данных, накапливаемых за эту задержку, установив свойство ReportInterval.

Есть несколько предупреждений относительно установки задержки, которые необходимо помнить. Во-первых, каждый датчик имеет свойство MaxBatchSize, которое он может поддерживать в зависимости от самого датчика. Это число событий, которые датчик может кэшировать, прежде чем он будет вынужден их отправить. Если умножить MaxBatchSize на ReportInterval, будет определено максимальное значение ReportLatency. Если указать значение выше этого, будет использоваться максимальная задержка, чтобы избежать потери данных. Кроме того, нужную задержку можно установить для нескольких приложений отдельно. Для соответствия требованиям всех приложений будет использоваться самый короткий период задержки. В связи с перечисленными выше фактами задержка, которую вы установили в приложении, может не соответствовать наблюдаемой задержке.

Если датчик использует пакетное создание отчетов, в результате вызова GetCurrentReading будет удален текущий пакет данных и запущен новый период задержки.

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

Датчик Accelerometer измеряет величину ускорения силы тяжести по осям X, Y и Z для устройства и идеально подходит для простых приложений, основанных на движениях. Обратите внимание, что величина "ускорение силы тяжести" включает ускорение под действием силы притяжения. Если устройство находится в SimpleOrientation при FaceUp на поверхности стола, то показание акселерометра по оси Z будет равно –1 G. Таким образом акселерометр не обязательно измеряет только ускорение по координатам, то есть темп изменения скорости. При использовании акселерометра необходимо понимать разницу между вектором ускорения силы тяжести (тяготение) и вектором линейного ускорения (движение). Обратите внимание, что для неподвижного устройства вектор ускорения силы тяжести следует привести к 1.

На следующих схемах показаны:

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

АкселерометрРабота акселерометра

Пример приложения, использующего акселерометр — игра, в которой шарик на экране перекатывается в сторону, в которую наклоняется устройство (вектор ускорения силы тяжести). Такой принцип работы очень напоминает функциональность датчика Inclinometer. Действие может выполняться при помощи этого датчика с использованием комбинации поворотов по оси X и по оси Y. Использование вектора ускорения силы тяжести акселерометра облегчает задачу, так как предоставляет простой математически управляемый вектор для наклона устройства. Еще один пример — приложение, которое издает звук удара хлыстом, когда пользователь резко встряхивает устройство (линейный вектор ускорения).

Гирометр

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

Действие гирометра при повороте относительно осей Y, X и Z

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

Компас

Датчик Compass возвращает значение двухмерного направления относительно северного магнитного полюса в горизонтальной плоскости земли. Датчик Compass не следует использовать для определения конкретного положения устройства в пространстве или для представления чего-либо в трехмерном пространстве. Географические объекты могут стать причиной естественного уклонения от направления, поэтому некоторые системы поддерживают одновременно HeadingMagneticNorth и HeadingTrueNorth. Подумайте о том, какое значение лучше использовать в вашем приложении, но не забывайте, что не все системы могут сообщить значение географического севера. Направление по компасу определяется путем объединения данных датчиков гирометра и магнитометра (устройство, измеряющее величину напряженности магнитного поля), что в результате стабилизирует данные (величина напряженности магнитного поля очень нестабильна из-за компонентов электрической системы).

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

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

Инклинометр

Датчик Inclinometer определяет угол поворота устройства по осям X, Y и Z и лучше всего подходит для приложений, которые используют данные о положении устройства в пространстве. Значения углов поворота по осям X и Y определяются по вектору ускорения силы тяжести акселерометра и данным гирометра. Значение поворота по оси Z устанавливается по данным магнитометра и гирометра (как направление по компасу). Инклинометры предоставляют расширенные данные о положении устройства в пространстве понятным способом. Если вам нужны данные о положении устройства в пространстве, но не требуется обработка данных датчиков, используйте инклинометры.

Действие инклинометра при повороте относительно осей Y, X и Z

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

Датчик положения в пространстве

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

Данные датчика положения в пространстве

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

Простое положение в пространстве

Датчик SimpleOrientationSensor определяет положение определенного устройства (его лицевой или задней поверхности) в текущем квадранте. Он имеет шесть возможных состояний SimpleOrientation (NotRotated, Rotated90, Rotated180, Rotated270, FaceUp, FaceDown).

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

Связанные разделы

Данные датчиков и ориентация экрана