Поддержка датчиков в Windows 8

Последние усовершенствования в сенсорных технологиях послужили катализатором для эволюции способов управления компьютерами. Способности реагировать на изменение освещенности, расстояние от человека, расположение и движение все чаще становятся элементами компьютерных систем. Даже что-то столь простое, как датчик освещения для изменения яркости монитора в комнате с меняющимся освещением, становится стандартом для настольных компьютеров. Конечно, мы также хотим, чтобы вы могли полностью управлять всеми эти периферийными устройствами, так как различные датчики предоставляют возможности для несанкционированного использования, что может не понравиться многим пользователям. В этой статье рассматриваются датчики, поддерживаемые в Windows 8. Ее написал Гевин Гир (Gavin Gear) , руководитель проекта в группе подключения устройств.
-- Стивен


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

Адаптивная регулировка яркости

Первой была система автоматического управления яркостью монитора, которую мы называем «адаптивная регулировка яркости». Эта возможность была впервые представлена в Windows 7, где использовался датчик освещения, и она была предназначена для мобильных компьютеров — планшетных, конвертируемых компьютеров и ноутбуков. Современные мониторы поддерживают уровни яркости, в два раза превышающие показатели, которые считались стандартными всего несколько лет назад, поэтому эта возможность важна, как никогда. За счет динамического контроля яркости на основе изменения условий освещения мы можем оптимизировать уровень комфортности при чтении и сэкономить заряд аккумулятора, так как яркость экрана будет изменяться при плохой освещенности.

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

Планшетный ПК с адаптивной регулировкой яркости (слева) и без нее (справа) в условиях яркого солнечного света

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

Автоматический поворот экрана

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

Экран «Пуск» Windows 8 на планшетном ПК, расположенном горизонтально Экран «Пуск» Windows 8 на планшетном ПК, расположенном вертикально

Экран «Пуск» Windows 8 на планшетном ПК с альбомной и книжной ориентацией

Поддержка датчиков для разработчиков

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

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

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

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

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

Вращение вокруг оси X, Y и Z

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

Инженерные трудности

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

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

Ускорение по оси X — зубчатая линия рядом с 0; ускорение по оси Y — зубчатая линия рядом с 0; ускорение по оси Z — зубчатая линия рядом с -1

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

Следующим экспериментом стала реализация возможности «смотреть влево» и «смотреть вправо» в нашем приложении с трехмерной виртуальной средой. Мы использовали решение с 6-осевым компасом (трехмерный датчик ускорения и трехмерный магнитометр) для поддержки такого типа движения. Хотя система почти работала, движение не было согласованным из-за общей нестабильности 6-осевого компаса. Также было трудно совместить движение вверх и вниз с движением влево и вправо.

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

Создание «синтеза датчиков»

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

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

Оборудование (трехмерный датчик ускорения, трехмерный магнитометр и трехмерный гироскоп) со стрелками, указывающими на «Сквозной проход» (Pass-through) и «Синтез датчиков» (Sensor Fusion), и стрелками, идущими к выходным данным датчиков (трехмерный датчик ускорения, трехмерный гирометр, трехмерный компас, трехмерный креномер, ориентация устройства)
9-осевая сенсорная система на основе синтеза датчиков

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

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

Ускорение по осям X, Y и Z показано как линии на диаграмме с регулярным отклонением, представляющим движение на каждом шаге.

 

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

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

Вот снимок экрана из примера трехмерной игры:

Простая трехмерная игра, в которой цели показаны в смоделированной трехмерной комнате

Пример трехмерной игры со стрельбой от первого лица (представлен на конференции //Build/)

Эти приложения должны использовать данные синтеза датчиков для поддержки реализуемых функций. «Магия» синтеза датчиков заключается в математическом совмещении данных от всех датчиков для получения более сложных результатов, например показаний компаса с компенсацией наклона, креномера (с вращением по осям X, Y и Z) и расширенного представления ориентации устройства. С такими данными более интеллектуальные приложения могут быстро и гибко реагировать на естественные движения.

За счет интеграции синтеза датчиков Windows 8 сможет предоставить необходимые функции для всего спектра приложений. Синтез датчиков в Windows решает проблемы дрожания и резких переходов, минимизирует проблемы целостности данных и дает данные для оптимального представления движения устройства в трехмерном пространстве (без каких-либо непредсказуемых переходов).

Работа с партнерами, производящими оборудование

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

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

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

Чтобы ускорить внедрение этого драйвера класса, корпорация Майкрософт вместе с партнерами разработала спецификацию для открытых стандартов. В июле 2011 г. стандарт для датчиков был представлен в спецификации HID USB-IF (спецификация HID версии 1.12, представленная с запросом редактирования 39). Такая стандартизация позволяет любому производителю датчиков создать комплект, совместимый с Windows 8, следуя требованиям открытого стандарта USB-IF для совместимого микропрограммного обеспечения устройств. Это сокращает время и затраты на интеграцию датчиков в компьютеры с Windows 8. К другим преимуществам относятся меньшая стоимость поддержки и более согласованные аппаратные возможности для компьютеров с Windows 8, оснащенных датчиками.

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

1. Сенсорные интерфейсы в Windows 8 позволяют выполнять большую часть обработки данных датчиков на аппаратном уровне. Это означает, что ресурсоемкие алгоритмы могут выполняться не в основном процессоре, что экономит энергию и циклы процессора.

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

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

Чтобы объединить все эти возможности, на последнем этапе мы должны были сделать возможности синтеза датчиков доступными для приложений в стиле Metro. Для этого мы разработали интерфейс API датчиков как часть нового WinRT. С помощью этих интерфейсов API разработчики могут получать доступ к возможностям синтеза датчиков в любом приложении в стиле Metro. API просты и понятны, но в то же время они дают разработчикам доступ к данным, необходимым для поддержки всего — от казуальных игр до приложений виртуальной реальности. Конечно, эти возможности доступны в интерфейсах Win32 API для разработчиков игр. Они также могут применяться и для других целей в приложениях, предназначенных для настольных компьютеров.

В следующем фрагменте кода JavaScript показано, как просто получить доступ к датчику ускорения и подписаться на события с помощью среды выполнения Windows:

 var accelerometer;
accelerometer = Windows.Devices.Sensors.Accelerometer.getDefault();
accelerometer.addEventListener("readingchanged",onAccReadingChanged);

function onAccReadingChanged(e) {
    var accelX = e.reading.accelerationX;
    var accelY = e.reading.accelerationY;
    var accelZ = e.reading.accelerationZ;
}

Дополнительные сведения о поддержке датчиков в среде выполнения Windows см. в этом сеансе //build/, посвященном использованию данных о местоположении и датчиков в приложении.

Сейчас вы можете думать, как опробовать синтез датчиков в Windows 8 или даже написать приложения, использующие эти возможности. Разработчики, посетившие конференцию //build/ в 2011 г., получили планшетный компьютер Samsung с версией Windows 8 Developer Preview, оснащенный полным комплектом датчиков. Их всего было 4 000, поэтому не у всех была возможность получить такое устройство. Хорошая новость состоит в том, что такая же 9-осевая сенсорная система, которая встроена в устройство с версией Windows Developer Preview, теперь продается компанией ST Microelectronics. Плата разработки ST Microelectronics eMotion для Windows 8 (модель STEVAL-MKI119V1) подключается по USB и работает с включенным в Windows 8 HID-драйвером класса для сенсоров. Если вы загрузили Windows 8 Developer Preview и вам хочется быстрее поэкспериментировать с датчиками, рассмотрите возможность приобретения такого устройства.

Печатная плата с USB-адаптером

Плата разработки ST Microelectronics eMotion для Windows 8

Теперь посмотрим на синтез датчиков в действии.

Ваш браузер не поддерживает HTML5-видео.

Загрузите это видео, чтобы просмотреть его в предпочитаемом мультимедиа-проигрывателе:
MP4, высокое качество | MP4, низкое качество

-- Гевин