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

Рисунок 1. Система координат (относительно мобильного устройства), используемая API датчика.
Автомобильные оси
В реализациях Android Automotive оси определяются относительно рамы кузова автомобиля. Начало координат системы отсчета автомобиля находится в центре задней оси. Система отсчета автомобиля ориентирована таким образом, чтобы:
- Ось X направлена вправо и находится в горизонтальной плоскости, перпендикулярной плоскости симметрии транспортного средства.
- Ось Y направлена вперед и находится в горизонтальной плоскости.

Рисунок 2. Система координат (относительно автомобильного устройства), используемая API датчика.
Система координат транспортного средства является правосторонней. Следовательно, ось Z направлена вверх.
Ось Z системы координат выровнена по направлению силы тяжести, а это значит, что оси X и Y горизонтальны. В результате ось Y не всегда может проходить через переднюю ось.
Базовые датчики
Базовые типы датчиков называются в честь физических датчиков, которые они представляют. Эти датчики передают данные от одного физического датчика (в отличие от составных датчиков, которые генерируют данные от других датчиков). Примеры базовых типов датчиков включают:
-
SENSOR_TYPE_ACCELEROMETER -
SENSOR_TYPE_GYROSCOPE -
SENSOR_TYPE_MAGNETOMETER
Однако базовые датчики не являются идентичными и не должны путаться с лежащим в их основе физическим датчиком. Данные с базового датчика не являются необработанным выходным сигналом физического датчика, поскольку к ним применяются поправки (такие как компенсация смещения и температурная компенсация).
Например, характеристики базового датчика могут отличаться от характеристик лежащего в его основе физического датчика в следующих сценариях использования:
- Микросхема гироскопа, рассчитанная на диапазон смещения 1 градус/сек.
- После заводской калибровки, температурной компенсации и компенсации смещения фактическое смещение датчика Android будет уменьшено, возможно, до уровня, гарантирующего, что смещение будет ниже 0,01 град/сек.
- В этой ситуации мы говорим, что датчик Android имеет погрешность менее 0,01 град/сек, даже если в технической документации на данный датчик указано 1 град/сек.
- Барометр с потребляемой мощностью 100 мкВт.
- Поскольку сгенерированные данные необходимо передавать с чипа на SoC, фактические затраты энергии на сбор данных с барометрического датчика Android могут быть значительно выше, например, 1000 мкВт.
- В этой ситуации мы говорим, что датчик Android потребляет 1000 мкВт энергии, хотя измеренное потребление энергии на выводах микросхемы барометра составляет 100 мкВт.
- Магнитометр, потребляющий 100 мкВт в калиброванном состоянии, но потребляющий больше во время калибровки.
- Процедура калибровки может потребовать активации гироскопа, потребляющего 5000 мкВт, и запуска некоторого алгоритма, затратившего еще 900 мкВт.
- В данной ситуации мы говорим, что максимальное энергопотребление датчика Android (магнитометра) составляет 6000 мкВт.
- В данном случае более полезным показателем является среднее энергопотребление, и именно оно отображается в статических характеристиках датчика через HAL.
Акселерометр
Режим отчетности: Непрерывный
getDefaultSensor(SENSOR_TYPE_ACCELEROMETER) возвращает датчик, не предназначенный для пробуждения.
Датчик акселерометра регистрирует ускорение устройства по трем осям датчика. Измеренное ускорение включает в себя как физическое ускорение (изменение скорости), так и ускорение свободного падения. Результаты измерения отображаются в полях x, y и z объекта sensors_event_t.acceleration.
Все значения приведены в единицах СИ (м/с²) и измеряют ускорение устройства за вычетом силы тяжести вдоль трех осей датчика.
Вот примеры:
- Норма (x, y, z) должна быть близка к 0 в состоянии свободного падения.
- Когда устройство лежит ровно на столе и его толкают левой стороной вправо, значение ускорения по оси x положительно.
- Когда устройство лежит плашмя на столе, значение ускорения вдоль оси z равно +9,81 м/с², что соответствует ускорению устройства (0 м/с²) минус сила тяжести (-9,81 м/с²).
- Когда устройство лежит плашмя на столе и его толкают вверх, значение ускорения превышает +9,81, что соответствует ускорению устройства (+A м/с²) минус сила тяжести (-9,81 м/с²).
Калибровка показаний производится с использованием следующих методов:
- Температурная компенсация
- Онлайн-калибровка смещения
- Онлайн-калибровка весов
Калибровку смещения и масштаба следует обновлять только при отключенном датчике, чтобы избежать скачков значений во время потоковой передачи.
Акселерометр также сообщает ожидаемую точность показаний через sensors_event_t.acceleration.status . Дополнительную информацию о возможных значениях этого поля см. в константах SENSOR_STATUS_* в SensorManager .
Температура окружающей среды
Режим отчетности: При изменении
getDefaultSensor(SENSOR_TYPE_AMBIENT_TEMPERATURE) возвращает значение датчика, не требующего пробуждения.
Этот датчик отображает температуру окружающей среды (в помещении) в градусах Цельсия.
Датчик магнитного поля
Режим отчетности: Непрерывный
getDefaultSensor(SENSOR_TYPE_MAGNETIC_FIELD) возвращает значение датчика, не являющегося сигналом пробуждения.
SENSOR_TYPE_GEOMAGNETIC_FIELD == SENSOR_TYPE_MAGNETIC_FIELD
Датчик магнитного поля (также известный как магнитометр) регистрирует окружающее магнитное поле, измеренное вдоль трех осей датчика.
Результаты измерений отображаются в полях x, y и z файла sensors_event_t.magnetic , и все значения приведены в микротеслах (мкТл).
Магнитометр также сообщает ожидаемую точность показаний через sensors_event_t.magnetic.status . Дополнительную информацию о возможных значениях этого поля см. в константах SENSOR_STATUS_* в SensorManager .
Калибровка показаний производится с использованием следующих методов:
- Температурная компенсация
- Заводская (или онлайн) калибровка мягкого железа
- Онлайн-калибровка чугуна
Гироскоп
Режим отчетности: Непрерывный
getDefaultSensor(SENSOR_TYPE_GYROSCOPE) возвращает датчик, не предназначенный для пробуждения.
Гироскопический датчик сообщает скорость вращения устройства вокруг трех осей датчика.
Вращение считается положительным в направлении против часовой стрелки (правило правой руки). То есть, наблюдатель, смотрящий из некоторой положительной точки на оси x, y или z на устройство, расположенное в начале координат, сообщит о положительном вращении, если устройство будет казаться вращающимся против часовой стрелки. Следует отметить, что это стандартное математическое определение положительного вращения, и оно не совпадает с аэрокосмическим определением крена.
Результаты измерений отображаются в полях x, y и z файла sensors_event_t.gyro , и все значения выражены в радианах в секунду (рад/с).
Калибровка показаний производится с использованием следующих методов:
- Температурная компенсация
- Компенсация по заводским (или онлайн) шкалам
- Онлайн-калибровка смещения (для устранения дрейфа)
Гироскоп также сообщает, насколько точными он ожидает свои показания, через sensors_event_t.gyro.status . Дополнительную информацию о возможных значениях этого поля см. в константах SENSOR_STATUS_* SensorManager .
Эмуляция гироскопа на основе магнитометров и акселерометров невозможна, поскольку это приведет к снижению локальной согласованности и быстродействия. Необходимо использовать обычный гироскопический чип.
Частота сердечных сокращений
Режим отчетности: При изменении
getDefaultSensor(SENSOR_TYPE_HEART_RATE) возвращает значение датчика, не являющегося датчиком пробуждения.
Датчик сердечного ритма сообщает текущую частоту сердечных сокращений человека, прикасающегося к устройству.
Текущая частота сердечных сокращений в ударах в минуту (уд/мин) отображается в файле sensors_event_t.heart_rate.bpm , а состояние датчика — в файле sensors_event_t.heart_rate.status . Дополнительную информацию о возможных значениях этого поля см. в константах SENSOR_STATUS_* объекта SensorManager . В частности, при первом срабатывании, если известно, что устройство не находится на теле, поле состояния первого события должно быть установлено в значение SENSOR_STATUS_UNRELIABLE . Поскольку этот датчик находится в состоянии «при изменении», события генерируются только тогда, когда heart_rate.bpm или heart_rate.status изменилось с момента последнего события. События генерируются не чаще, чем каждые sampling_period .
Для обеспечения совместимости платформа автоматически переопределяет sensor_t.requiredPermission , заменяя его соответствующим разрешением. Для Android 16 и выше используется разрешение SENSOR_PERMISSION_READ_HEART_RATE , а для Android 15 и ниже — разрешение SENSOR_PERMISSION_BODY_SENSORS .
Свет
Режим отчетности: При изменении
getDefaultSensor(SENSOR_TYPE_LIGHT) возвращает датчик, не предназначенный для пробуждения.
Датчик освещенности сообщает о текущей освещенности в единицах СИ люкс.
Результаты измерений отображаются в sensors_event_t.light .
Близость
Режим отчетности: При изменении
Обычно определяется как датчик пробуждения.
getDefaultSensor(SENSOR_TYPE_PROXIMITY) возвращает датчик пробуждения.
Датчик приближения сообщает расстояние от датчика до ближайшей видимой поверхности.
Вплоть до Android 4.4 датчики приближения всегда работали в режиме пробуждения, активируя SoC при обнаружении изменения расстояния. После Android 4.4 мы рекомендуем сначала реализовать версию этого датчика с функцией пробуждения, поскольку именно он используется для включения и выключения экрана во время телефонных звонков.
Измерения отображаются в сантиметрах в параметре sensors_event_t.distance . Обратите внимание, что некоторые датчики приближения поддерживают только бинарное измерение «близко» или «далеко». В этом случае датчик сообщает значение sensor_t.maxRange в состоянии «далеко» и значение меньше sensor_t.maxRange в состоянии «близко».
Давление
Режим отчетности: Непрерывный
Функция getDefaultSensor(SENSOR_TYPE_PRESSURE) возвращает значение датчика, не требующего пробуждения.
Датчик давления (также известный как барометр) измеряет атмосферное давление в гектопаскалях (гПа).
Показания калибруются с использованием
- Температурная компенсация
- Заводская калибровка смещения
- Заводская калибровка весов
Барометр часто используется для оценки изменений высоты. Для оценки абсолютной высоты в качестве эталона необходимо использовать атмосферное давление на уровне моря (изменяющееся в зависимости от погоды).
Относительная влажность
Режим отчетности: При изменении
getDefaultSensor(SENSOR_TYPE_RELATIVE_HUMIDITY) возвращает значение датчика, не требующего пробуждения.
Датчик относительной влажности измеряет относительную влажность окружающего воздуха и выдает значение в процентах.
Типы композитных датчиков
Составной датчик генерирует данные путем обработки и/или объединения данных от одного или нескольких физических датчиков. (Любой датчик, не являющийся базовым, называется составным датчиком.) Примеры составных датчиков включают:
- Датчики шагов и значительных движений обычно основаны на акселерометре, но могут быть основаны и на других датчиках, если энергопотребление и точность будут приемлемыми.
- Вектор вращения в игре , основанный на данных акселерометра и гироскопа.
- Некалиброванный гироскоп , аналогичный базовому датчику гироскопа, но с калибровкой смещения, результаты которой сообщаются отдельно, а не корректируются в процессе измерения.
Как и в случае с базовыми датчиками, характеристики составных датчиков определяются характеристиками получаемых ими данных. Например, энергопотребление вектора вращения в игре, вероятно, равно сумме энергопотребления микросхемы акселерометра, микросхемы гироскопа, микросхемы, обрабатывающей данные, и шин, передающих данные. В качестве другого примера, дрейф вектора вращения в игре зависит как от качества алгоритма калибровки, так и от физических характеристик датчика.
В таблице ниже перечислены доступные типы составных датчиков. Каждый составной датчик использует данные от одного или нескольких физических датчиков. Избегайте выбора других физических датчиков для получения приблизительных результатов, поскольку это ухудшает пользовательский опыт.
| Тип датчика | Категория | Базовые физические датчики | Режим формирования отчетов |
|---|---|---|---|
Отношение | Акселерометр, гироскоп, магнитометр использовать НЕЛЬЗЯ | Непрерывный | |
Отношение | Акселерометр, магнитометр, гироскоп использовать НЕЛЬЗЯ | Непрерывный | |
| Взгляд | Взаимодействие | Неопределенный | Одноразовый выпуск |
Отношение | Акселерометр, гироскоп (если присутствует) или магнитометр (если гироскоп отсутствует). | Непрерывный | |
Некалиброванный | Гироскоп | Непрерывный | |
Активность | Акселерометр, гироскоп (если присутствует) или магнитометр (если гироскоп отсутствует). | Непрерывный | |
Некалиброванный | Магнитометр | Непрерывный | |
Ориентация (устарело) | Отношение | Акселерометр, магнитометр, гироскоп (если имеется) | Непрерывный |
Взаимодействие | Неопределенный | Одноразовый выпуск | |
Отношение | Акселерометр, магнитометр, гироскоп (если имеется) | Непрерывный | |
Активность | Акселерометр (или другой датчик, работающий на очень малой мощности) | Одноразовый выпуск | |
Активность | Акселерометр | Изменения в порядке | |
Активность | Акселерометр | Особенный | |
Активность | Акселерометр | Особенный | |
Взаимодействие | Неопределенный | Одноразовый выпуск |
= Датчик малой мощности
составные датчики активности
Линейное ускорение
В основе системы лежат физические датчики: акселерометр и (при наличии) гироскоп (или магнитометр, если гироскоп отсутствует).
Режим отчетности: Непрерывный
getDefaultSensor(SENSOR_TYPE_LINEAR_ACCELERATION) возвращает датчик, не предназначенный для пробуждения.
Датчик линейного ускорения сообщает о линейном ускорении устройства в системе координат датчика, без учета силы тяжести.
Выходные данные концептуально представляют собой: значение на акселерометре минус значение на датчике гравитации . Они отображаются в м/с² в полях x, y и z объекта sensors_event_t.acceleration .
При неподвижном устройстве показания по всем осям должны быть близки к нулю.
Если устройство оснащено гироскопом, то датчик линейного ускорения должен использовать гироскоп и акселерометр в качестве входных данных.
Если устройство не оснащено гироскопом, датчик линейного ускорения должен использовать в качестве входных данных акселерометр и магнитометр.
Значительное движение
В основе устройства лежит физический датчик: акселерометр (или другой, если он маломощный).
Режим составления отчёта: Одноразовый
Низкая мощность
Реализуйте только версию этого датчика, отвечающую за пробуждение.
getDefaultSensor(SENSOR_TYPE_SIGNIFICANT_MOTION) возвращает значение датчика пробуждения.
Датчик значительного движения срабатывает при обнаружении значительного движения : движения, которое может привести к изменению местоположения пользователя.
Примерами таких значительных движений являются:
- Пешком или на велосипеде
- Сидя в движущемся автомобиле, автобусе или поезде.
Примеры ситуаций, которые не вызывают значительного движения:
- Телефон в кармане, а человек не двигается.
- Телефон лежит на столе, и стол немного трясется из-за проезжающих мимо машин или стиральной машины.
В общих чертах, детектор значимого движения используется для снижения энергопотребления при определении местоположения. Когда алгоритмы локализации обнаруживают, что устройство неподвижно, они могут переключиться в режим низкого энергопотребления, в котором они полагаются на значимое движение для активации устройства при изменении местоположения пользователя.
Этот датчик должен быть маломощным. Это компромисс в сторону энергопотребления, который может привести к небольшому количеству ложных отрицательных результатов. Это делается по нескольким причинам:
- Цель этого датчика — экономия энергии.
- Запуск события, когда пользователь не двигается (ложное срабатывание), обходится дорого с точки зрения энергопотребления, поэтому его следует избегать.
- Отсутствие срабатывания события во время движения пользователя (ложноотрицательный результат) допустимо, если это не повторяется неоднократно. Если пользователь ходит уже 10 секунд, отсутствие срабатывания события в течение этих 10 секунд недопустимо.
Каждое событие датчика сообщает 1 в sensors_event_t.data[0] .
детектор шагов
В основе устройства лежат следующие физические датчики: акселерометр (+ возможно, другие, если они маломощные).
Режим формирования отчетов: Специальный (одно событие на каждый пройденный шаг)
Низкая мощность
getDefaultSensor(SENSOR_TYPE_STEP_DETECTOR) возвращает датчик, не предназначенный для пробуждения.
Датчик шагов генерирует событие каждый раз, когда пользователь делает шаг.
Временная метка события sensors_event_t.timestamp соответствует моменту соприкосновения стопы с землей, что приводит к значительным колебаниям ускорения.
По сравнению со счетчиком шагов, датчик шагов должен иметь меньшую задержку (менее двух секунд). И датчик шагов, и счетчик шагов определяют, когда пользователь идет, бежит и поднимается по лестнице. Они не должны срабатывать, когда пользователь едет на велосипеде, едет за рулем или находится в другом транспортном средстве.
Этот датчик должен быть маломощным. То есть, если обнаружение шагов невозможно реализовать аппаратно, этот датчик не следует определять. В частности, когда датчик шагов активирован, а акселерометр не активирован, прерывания должны вызываться только при каждом шаге (а не при каждом считывании показаний акселерометра).
sampling_period_ns не влияет на детекторы шагов.
Каждое событие датчика сообщает 1 в sensors_event_t.data[0] .
Счетчик шагов
В основе устройства лежат следующие физические датчики: акселерометр (+ возможно, другие, если они маломощные).
Режим отчетности: При изменении
Низкое энергопотребление
getDefaultSensor(SENSOR_TYPE_STEP_COUNTER) возвращает значение датчика, не являющегося сигналом пробуждения.
Счетчик шагов показывает количество шагов, пройденных пользователем с момента последней перезагрузки устройства в активированном состоянии.
Результаты измерения передаются в виде значения типа uint64_t в sensors_event_t.step_counter и сбрасываются до нуля только при перезагрузке системы.
Временная метка события устанавливается на момент выполнения последнего шага в рамках этого события.
Для получения информации о времени выполнения шага см. тип датчика обнаружения шага .
По сравнению с датчиком шагов, счетчик шагов может иметь большую задержку (до 10 секунд). Благодаря этой задержке датчик обладает высокой точностью; количество шагов после целого дня измерений должно отличаться от фактического количества шагов не более чем на 10%. И датчик шагов, и счетчик шагов определяют, когда пользователь идет, бежит и поднимается по лестнице. Они не должны срабатывать, когда пользователь едет на велосипеде, едет за рулем или находится в другом транспортном средстве.
Аппаратное обеспечение должно гарантировать, что внутренний счетчик шагов никогда не переполнится. Минимальный размер внутреннего счетчика аппаратного обеспечения должен составлять 16 бит. В случае неизбежного переполнения (не чаще, чем каждые ~2^16 шагов) SoC может быть разбужен, чтобы драйвер мог выполнить обслуживание счетчика.
Как указано в разделе «Взаимодействие» , во время работы этого датчика он не должен мешать работе других датчиков, в частности, акселерометра, который вполне может быть задействован.
Если конкретное устройство не поддерживает эти режимы работы, то HAL не должен сообщать о данном типе датчика. То есть, «эмулировать» этот датчик в HAL недопустимо.
Этот датчик должен быть маломощным. То есть, если обнаружение шагов невозможно осуществить аппаратно, этот датчик не следует определять. В частности, когда счетчик шагов активирован, а акселерометр не активирован, прерывания должны вызывать только шаги (а не данные акселерометра).
Датчик наклона
В основе устройства лежат следующие физические датчики: акселерометр (+ возможно, другие, если они маломощные).
Режим отчетности: Специальный
Низкое энергопотребление
Реализуйте только версию этого датчика, отвечающую за пробуждение.
getDefaultSensor(SENSOR_TYPE_TILT_DETECTOR) возвращает значение датчика пробуждения.
Датчик наклона генерирует событие каждый раз, когда обнаруживается событие наклона.
Нарушение наклона определяется изменением направления средней силы тяжести в течение 2-секундного окна как минимум на 35 градусов с момента срабатывания или последнего события, сгенерированного датчиком. Вот алгоритм:
-
reference_estimated_gravity= среднее значение показаний акселерометра за первую секунду после активации или расчетная гравитация в момент последнего события наклона. -
current_estimated_gravity= среднее значение показаний акселерометра за последние 2 секунды. - Срабатывает, когда
angle(reference_estimated_gravity, current_estimated_gravity) > 35 degrees
Большие ускорения без изменения ориентации телефона не должны вызывать событие наклона. Например, резкий поворот или сильное ускорение во время вождения автомобиля не должны вызывать событие наклона, даже если угол среднего ускорения может изменяться более чем на 35 градусов. Обычно этот датчик реализуется с помощью только акселерометра. Могут использоваться и другие датчики, если они не значительно увеличивают энергопотребление. Это маломощный датчик, который должен позволять SoC переходить в режим ожидания. Не эмулируйте этот датчик в HAL. Каждое событие датчика сообщает 1 в sensors_event_t.data[0] .
Композитные датчики ориентации
Вектор вращения
В основе системы лежат физические датчики: акселерометр, магнитометр и гироскоп.
Режим отчетности: Непрерывный
getDefaultSensor(SENSOR_TYPE_ROTATION_VECTOR) возвращает датчик, не предназначенный для пробуждения.
Датчик вектора вращения сообщает об ориентации устройства относительно системы координат «Восток-Север-Вверх». Обычно она получается путем интегрирования показаний акселерометра, гироскопа и магнитометра. Система координат «Восток-Север-Вверх» определяется как прямой ортонормированный базис, где:
- Точка X направлена на восток и касательна к земле.
- Точка Y указывает на север и касательна к земле.
- Точка Z направлена вверх и перпендикулярна земле.
Ориентация телефона определяется поворотом, необходимым для выравнивания координат Восток-Север-Вверх с координатами телефона. То есть, применение поворота к мировой системе координат (X,Y,Z) выровняет их с координатами телефона (x,y,z).
Вращение можно рассматривать как поворот телефона на угол тета вокруг оси rot_axis для перехода из исходной (ориентации «восток-север-вверх») ориентации устройства в текущую ориентацию устройства. Вращение кодируется четырьмя безразмерными компонентами x, y, z, w единичного кватерниона:
-
sensors_event_t.data[0] = rot_axis.x*sin(theta/2) -
sensors_event_t.data[1] = rot_axis.y*sin(theta/2) -
sensors_event_t.data[2] = rot_axis.z*sin(theta/2) -
sensors_event_t.data[3] = cos(theta/2)
Где:
- Поля x, y и z переменной
rot_axisпредставляют собой координаты вектора единичной длины, ориентированного с востока на север и вверх, и обозначающего ось вращения. -
theta— это угол поворота.
Кватернион является единичным кватернионом: он должен иметь норму 1 Несоблюдение этого условия приведет к непредсказуемому поведению клиента.
Кроме того, этот датчик сообщает приблизительную точность определения направления:
sensors_event_t.data[4] = estimated_accuracy (в радианах)
Ошибка определения направления должна быть меньше estimated_accuracy в 95% случаев. В качестве основного датчика изменения ориентации этот датчик должен использовать гироскоп.
Этот датчик также использует входные данные акселерометра и магнитометра для компенсации дрейфа гироскопа, и его невозможно реализовать, используя только акселерометр и магнитометр.
Вектор вращения игры
В основе системы лежат физические датчики: акселерометр и гироскоп (магнитометр отсутствует).
Режим отчетности: Непрерывный
getDefaultSensor(SENSOR_TYPE_GAME_ROTATION_VECTOR) возвращает датчик, не являющийся датчиком пробуждения.
Датчик вектора вращения в играх похож на датчик вектора вращения, но не использует геомагнитное поле. Поэтому ось Y направлена не на север, а к некоторой другой точке отсчета. Эта точка отсчета может смещаться на тот же порядок величины, что и гироскоп вокруг оси Z.
Подробности о настройке sensors_event_t.data[0-3] см. в описании датчика вектора вращения . Этот датчик не сообщает оценочную точность направления: sensors_event_t.data[4] зарезервировано и должно быть установлено в 0 .
В идеальном случае, телефон, повернутый и возвращенный в то же реальное положение, должен показывать тот же вектор вращения в игре.
Этот датчик должен быть основан на гироскопе и акселерометре. Он не может использовать магнитометр в качестве входного сигнала, за исключением косвенного использования, посредством оценки смещения гироскопа.
Гравитация
В основе системы лежат физические датчики: акселерометр и (при наличии) гироскоп (или магнитометр, если гироскоп отсутствует).
Режим отчетности: Непрерывный
getDefaultSensor(SENSOR_TYPE_GRAVITY) возвращает датчик, не предназначенный для пробуждения.
Гравитационный датчик передает направление и величину силы тяжести в координатах устройства.
Компоненты вектора гравитации указываются в м/с² в полях x, y и z параметра sensors_event_t.acceleration .
Когда устройство находится в состоянии покоя, показания датчика гравитации должны быть идентичны показаниям акселерометра. На Земле их величина составляет около 9,8 м/с².
Если устройство оснащено гироскопом, то датчик гравитации должен использовать гироскоп и акселерометр в качестве входных данных.
Если устройство не оснащено гироскопом, датчик гравитации должен использовать в качестве входных данных акселерометр и магнитометр.
Вектор геомагнитного вращения
В основе системы лежат физические датчики: акселерометр и магнитометр (гироскоп отсутствует).
Режим отчетности: Непрерывный
Низкое энергопотребление
getDefaultSensor(SENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR) возвращает датчик, не предназначенный для пробуждения.
Геомагнитный вектор вращения аналогичен датчику вектора вращения, но использует магнитометр, а не гироскоп.
Этот датчик должен быть основан на магнитометре. Его нельзя реализовать с использованием гироскопа, и данный датчик не может использовать входные данные с гироскопа.
Подробности о настройке sensors_event_t.data[0-4] см. в разделе «Датчик вектора вращения» .
Как и в случае с датчиком вектора вращения, ошибка направления должна быть меньше расчетной точности ( sensors_event_t.data[4] ) в 95% случаев.
Этот датчик должен быть маломощным, поэтому его необходимо реализовать аппаратно.
Ориентация (устарело)
В основе системы лежат физические датчики: акселерометр, магнитометр и (при наличии) гироскоп.
Режим отчетности: Непрерывный
getDefaultSensor(SENSOR_TYPE_ORIENTATION) возвращает датчик, не предназначенный для пробуждения.
Примечание: Это более старый тип датчика, который устарел в Android SDK. Он был заменен датчиком вектора вращения, который имеет более четкое определение. По возможности используйте датчик вектора вращения вместо датчика ориентации.
Датчик ориентации сообщает о положении устройства. Измерения отображаются в градусах в полях x, y и z объекта sensors_event_t.orientation :
-
sensors_event_t.orientation.x: азимут, угол между направлением магнитного севера и осью Y относительно оси Z (0<=azimuth<360). 0 = север, 90 = восток, 180 = юг, 270 = запад. -
sensors_event_t.orientation.y: pitch, вращение вокруг оси X (-180<=pitch<=180), с положительными значениями, когда ось Z движется в сторону оси Y. -
sensors_event_t.orientation.z: roll, вращение вокруг оси Y (-90<=roll<=90), с положительными значениями, когда ось X движется в направлении оси Z.
Обратите внимание, что по историческим причинам угол крена положителен по часовой стрелке. (Математически говоря, он должен быть положительным против часовой стрелки):

Рисунок 3. Ориентация относительно устройства.
Это определение отличается от понятий рыскания, тангажа и крена, используемых в авиации, где ось X проходит вдоль длинной стороны самолета (от хвоста до носа).
Датчик ориентации также сообщает, насколько точными он ожидает получить свои показания, через sensors_event_t.orientation.status . Дополнительную информацию о возможных значениях этого поля см. в константах SENSOR_STATUS_* в SensorManager .
Некалиброванные датчики
Некалиброванные датчики дают больше исходных результатов и могут содержать некоторую погрешность, но при этом содержат меньше «скачков» от коррекций, применяемых в процессе калибровки. Некоторые приложения могут предпочитать эти некалиброванные результаты как более плавные и надежные. Например, если приложение пытается выполнить собственное объединение данных с датчиков, введение калибровок может фактически исказить результаты.
Акселерометр не откалиброван
В основе устройства лежит физический датчик: акселерометр.
Режим отчетности: Непрерывный
getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_UNCALIBRATED) возвращает значение датчика, не требующего пробуждения.
Некалиброванный акселерометр сообщает об ускорении устройства по трем осям датчика без какой-либо коррекции смещения (к некалиброванным измерениям применяются заводская компенсация смещения и температуры), а также оценку смещения. Все значения приведены в единицах СИ (м/с²) и отображаются в полях sensors_event_t.uncalibrated_accelerometer :
-
x_uncalib: ускорение (без компенсации смещения) вдоль оси X -
y_uncalib: ускорение (без компенсации смещения) вдоль оси Y -
z_uncalib: ускорение (без компенсации смещения) вдоль оси Z -
x_bias: оценочное смещение вдоль оси X -
y_bias: предполагаемое смещение по оси Y -
z_bias: оценочное смещение вдоль оси Z
Гироскоп не откалиброван
В основе системы лежит физический датчик: гироскоп.
Режим отчетности: Непрерывный
getDefaultSensor(SENSOR_TYPE_GYROSCOPE_UNCALIBRATED) возвращает значение датчика, не являющегося датчиком пробуждения.
Некалиброванный гироскоп сообщает скорость вращения вокруг осей датчика без применения компенсации смещения, а также оценку смещения. Все значения указаны в радианах в секунду и отображаются в полях sensors_event_t.uncalibrated_gyro :
-
x_uncalib: угловая скорость (без компенсации дрейфа) вокруг оси X. -
y_uncalib: угловая скорость (без компенсации дрейфа) вокруг оси Y -
z_uncalib: угловая скорость (без компенсации дрейфа) вокруг оси Z. -
x_bias: расчетное смещение вокруг оси X -
y_bias: расчетное смещение вокруг оси Y -
z_bias: расчетное смещение вокруг оси Z
В концептуальном плане некалиброванное измерение представляет собой сумму калиброванного измерения и оценки смещения: _uncalibrated = _calibrated + _bias .
Ожидается, что значения x_bias , y_bias и z_bias резко изменятся, как только изменится оценка смещения, и останутся стабильными в остальное время.
Подробную информацию об используемой системе координат см. в описании датчика гироскопа .
Для измерений необходимо применить заводскую калибровку и температурную компенсацию. Кроме того, необходимо реализовать оценку дрейфа гироскопа, чтобы в параметрах x_bias , y_bias и z_bias можно было получать достоверные оценки. Если реализация не позволяет оценить дрейф, то данный датчик не следует использовать.
Если этот датчик присутствует, то соответствующий датчик гироскопа также должен присутствовать, и оба датчика должны иметь одинаковые значения sensor_t.name и sensor_t.vendor .
Некалиброванное магнитное поле
В основе устройства лежит физический датчик: магнитометр.
Режим отчетности: Непрерывный
getDefaultSensor(SENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED) возвращает значение датчика, не являющегося сигналом пробуждения.
Некалиброванный датчик магнитного поля сообщает об окружающем магнитном поле вместе с оценкой калибровки с использованием твердого железа. Все значения указаны в микротеслах (мкТл) и отображаются в полях sensors_event_t.uncalibrated_magnetic :
-
x_uncalib: магнитное поле (без компенсации жесткого железа) вдоль оси X -
y_uncalib: магнитное поле (без компенсации жесткого железа) вдоль оси Y -
z_uncalib: магнитное поле (без компенсации жесткого железа) вдоль оси Z -
x_bias: расчетное смещение твердого железа вдоль оси X -
y_bias: расчетное смещение твердого железа вдоль оси Y -
z_bias: расчетное смещение твердого железа вдоль оси Z
В концептуальном плане некалиброванное измерение представляет собой сумму калиброванного измерения и оценки смещения: _uncalibrated = _calibrated + _bias .
Некалиброванный магнитометр позволяет алгоритмам более высокого уровня обрабатывать неверные оценки содержания твердого железа. Ожидается, что значения x_bias , y_bias и z_bias будут резко возрастать, как только изменится оценка содержания твердого железа, и оставаться стабильными в остальное время.
Для измерений необходимо применить калибровку по мягкому железу и температурную компенсацию. Кроме того, необходимо реализовать оценку по твердому железу, чтобы можно было получить достоверные оценки в x_bias , y_bias и z_bias . Если реализация не позволяет оценить смещение, то данный датчик не следует использовать.
Если этот датчик присутствует, то должен присутствовать и соответствующий датчик магнитного поля, и оба датчика должны иметь одинаковые значения sensor_t.name и sensor_t.vendor .
Угол шарнира
Режим отчетности: При изменении
getDefaultSensor(SENSOR_TYPE_HINGE_ANGLE) возвращает датчик пробуждения.
Датчик угла поворота шарнира измеряет угол в градусах между двумя неразрывными частями устройства. Ожидается, что движение шарнира, измеряемое этим типом датчика, изменит способы взаимодействия пользователя с устройством, например, путем разворачивания или открытия дисплея.
Взаимодействие композитных датчиков
Некоторые датчики в основном используются для обнаружения взаимодействий с пользователем. Мы не определяем, как именно должны быть реализованы эти датчики, но они должны быть энергоэффективными, и ответственность за проверку их качества с точки зрения удобства использования лежит на производителе устройства.
Жест пробуждения
Основные физические датчики: Не определено (любые датчики с низкой мощностью)
Reporting-mode: One-shot
Low-power
Implement only the wake-up version of this sensor.
getDefaultSensor(SENSOR_TYPE_WAKE_GESTURE) returns a wake-up sensor
A wake up gesture sensor enables waking up the device based on a device specific motion. When this sensor triggers, the device behaves as if the power button was pressed, turning the screen on. This behavior (turning on the screen when this sensor triggers) might be deactivated by the user in the device settings. Changes in settings don't impact the behavior of the sensor: only whether the framework turns the screen on when it triggers. The actual gesture to be detected isn't specified, and can be chosen by the manufacturer of the device.
This sensor must be low power, as it's likely to be activated 24/7.
Each sensor event reports 1 in sensors_event_t.data[0] .
Pick up gesture
Underlying physical sensors: Undefined (anything low power)
Reporting-mode: One-shot
Low-power
Implement only the wake-up version of this sensor.
getDefaultSensor(SENSOR_TYPE_PICK_UP_GESTURE) returns a wake-up sensor
A pick-up gesture sensor triggers when the device is picked up regardless of wherever it was before (desk, pocket, bag).
Each sensor event reports 1 in sensors_event_t.data[0] .
Glance gesture
Underlying physical sensors: Undefined (anything low power)
Reporting-mode: One-shot
Low-power
Implement only the wake-up version of this sensor.
getDefaultSensor(SENSOR_TYPE_GLANCE_GESTURE) returns a wake-up sensor
A glance gesture sensor enables briefly turning the screen on to enable the user to glance content on screen based on a specific motion. When this sensor triggers, the device will turn the screen on momentarily to allow the user to glance notifications or other content while the device remains locked in a non-interactive state (dozing), then the screen will turn off again. This behavior (briefly turning on the screen when this sensor triggers) might be deactivated by the user in the device settings. Changes in settings do not impact the behavior of the sensor: only whether the framework briefly turns the screen on when it triggers. The actual gesture to be detected isn't specified, and can be chosen by the manufacturer of the device.
This sensor must be low power, as it's likely to be activated 24/7. Each sensor event reports 1 in sensors_event_t.data[0] .
Limited axes IMU sensors
Available from Android 13, limited axes IMU sensors are sensors that support use cases where not all three axes (x, y, z) are available. Standard IMU types in Android (such as SENSOR_TYPE_ACCELEROMETER and SENSOR_TYPE_GYROSCOPE ) assume that all three axes are supported. However, not all form factors and devices support 3-axis accelerometers and 3-axis gyroscopes.
Accelerometer limited axes
Underlying physical sensors: Accelerometer
Reporting-mode: Continuous
getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES) returns a non-wake-up sensor
An accelerometer limited axes sensor is equivalent to TYPE_ACCELEROMETER but supports cases where one or two axes aren't supported.
The last three sensor event values reported by the sensor represent whether the acceleration value for the x, y, and z axes are supported. A value of 1.0 indicates that the axis is supported, and a value of 0 indicates it isn't supported. Device manufacturers identify the supported axes at build time and the values don't change during runtime.
Device manufacturers must set the acceleration values for unused axes to 0 , instead of having undefined values.
Gyroscope limited axes
Underlying physical sensors: Gyroscope
Reporting-mode: Continuous
getDefaultSensor(SENSOR_TYPE_GYROSCOPE_LIMITED_AXES) returns a non-wake-up sensor
A gyroscope limited axes sensor is equivalent to TYPE_GYROSCOPE but supports cases where one or two axes aren't supported.
The last three sensor event values reported by the sensor represent whether the angular speed value for the x, y, and z axes are supported. A value of 1.0 indicates that the axis is supported, and a value of 0 indicates it isn't supported. Device manufacturers identify the supported axes at build time and the values don't change during runtime.
Device manufacturers must set the angular speed values for unused axes to 0 .
Accelerometer limited axes uncalibrated
Underlying physical sensors: Accelerometer
Reporting-mode: Continuous
getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES_UNCALIBRATED) returns a non-wake-up sensor
An accelerometer limited axes uncalibrated sensor is equivalent to TYPE_ACCELEROMETER_UNCALIBRATED but supports cases where one or two axes aren't supported.
The last three sensor event values reported by the sensor represent whether the acceleration and bias values for the x, y, and z axes are supported. A value of 1.0 indicates that the axis is supported, and a value of 0 indicates it isn't supported. Device manufacturers identify the supported axes at build time and the values don't change during runtime.
Device manufacturers must set the acceleration and bias values for unused axes to 0 .
Gyroscope limited axes uncalibrated
Underlying physical sensors: Gyroscope
Reporting-mode: Continuous
getDefaultSensor(SENSOR_TYPE_GYROSCOPE_LIMITED_AXES_UNCALIBRATED) returns a non-wake-up sensor
A gyroscope limited axes uncalibrated sensor is equivalent to TYPE_GYROSCOPE_UNCALIBRATED but supports cases where one or two axes aren't supported.
The last three sensor event values reported by the sensor represent whether the angular speed and drift values for the x, y, and z axes are supported. A value of 1.0 indicates that the axis is supported, and a value of 0 indicates it isn't supported. Device manufacturers identify the supported axes at build time and the values don't change during runtime.
Device manufacturers must set the angular speed and drift values for unused axes to 0 .
Composite limited axes IMU
Underlying physical sensors: Any combination of 3-axis accelerometer, 3-axis gyroscope, 3-axis accelerometer uncalibrated, and 3-axis gyroscope uncalibrated sensors.
Reporting-mode: Continuous
A composite limited axes IMU sensor is equivalent to a limited axes IMU sensor but instead of being supported at the HAL, it converts the 3-axis sensor data into the equivalent limited axes variants. These composite sensors are only enabled for automotive devices.
The following table shows an example conversion from a standard 3-axis accelerometer to a composite limited axes accelerometer.
| SensorEvent Values for SENSOR_TYPE_ACCELEROMETER | Example SENSOR_TYPE_ACCELEROMETER SensorEvent | Composite SENSOR_TYPE_ACCELEROMETER_LIMITED_AXES SensorEvent |
|---|---|---|
| values[0] | -0.065 | -0.065 |
| values[1] | 0.078 | 0.078 |
| values[2] | 9.808 | 9.808 |
| values[3] | N/A | 1.0 |
| values[4] | N/A | 1.0 |
| values[5] | N/A | 1.0 |
Automotive sensors
Sensors to support automotive use cases.
Заголовок
Underlying physical sensors: Any combination of GPS, magnetometer, accelerometer, and gyroscope.
Reporting-mode: Continuous
getDefaultSensor(SENSOR_TYPE_HEADING) returns a non-wake-up sensor
Available from Android 13, a heading sensor measures the direction in which the device is pointing relative to true north in degrees. The heading sensor includes two SensorEvent values. One for the measured device heading and one for the accuracy of the provided heading value.
Heading values reported by this sensor must be between 0.0 (inclusive) and 360.0 (exclusive), with 0 indicating north, 90 east, 180 south, and 270 west.
Accuracy for this sensor is defined at 68 percent confidence. In the case where the underlying distribution is Gaussian normal, the accuracy is one standard deviation. For example, if the heading sensor returns a heading value of 60 degrees and an accuracy value of 10 degrees, there's a 68 percent probability of the true heading being between 50 degrees and 70 degrees.