В этом разделе описываются оси датчиков, базовые датчики и составные датчики (активности, положения, некалиброванные и взаимодействия).
Оси датчиков
Значения событий датчиков от многих датчиков выражаются в определенном кадре, который статичен относительно устройства.
Оси мобильных устройств
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 объекта sensor_event_t.acceleration.
Все значения указаны в единицах СИ (м/с^2) и измеряют ускорение устройства за вычетом силы тяжести по трем осям датчика.
Вот примеры:
- Норма (x, y, z) должна быть близка к 0 при свободном падении.
- Когда устройство лежит на столе и его толкают с левой стороны вправо, значение ускорения x положительно.
- Когда устройство лежит плашмя на столе, значение ускорения по оси z составляет +9,81 аллометра, что соответствует ускорению устройства (0 м/с^2) за вычетом силы тяжести (-9,81 м/с^2).
- Когда устройство лежит на столе и его толкают к небу, значение ускорения превышает +9,81, что соответствует ускорению устройства (+A м/с^2) минус сила тяжести (-9,81 м/с^2).
Показания калибруются с использованием:
- Температурная компенсация
- Онлайн-калибровка смещения
- Онлайн-калибровка весов
Калибровку смещения и шкалы следует обновлять только при отключенном датчике, чтобы избежать скачков значений во время потоковой передачи.
Акселерометр также сообщает ожидаемую точность показаний через 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)
возвращает датчик, не активирующий функцию пробуждения
Датчик сердечного ритма сообщает текущую частоту сердечных сокращений человека, прикоснувшегося к устройству.
Текущая частота сердечных сокращений в ударах в минуту (BPM) отображается в поле 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
на соответствующее разрешение для обеспечения совместимости. Фреймворк использует разрешение SENSOR_PERMISSION_READ_HEART_RATE
для Android 16 и более поздних версий и разрешение SENSOR_PERMISSION_BODY_SENSORS
для Android 15 и более ранних версий.
Свет
Режим отчетности: по изменению
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)
возвращает неактивный датчик
Датчик линейного ускорения сообщает линейное ускорение устройства в рамке датчика, не включая силу тяжести.
Концептуально выходные данные представляют собой: выходные данные акселерометра за вычетом выходных данных датчика силы тяжести . Они представлены в м/с^2 в полях x, y и z элемента sensors_event_t.acceleration
.
Показания по всем осям должны быть близки к 0, когда устройство неподвижно.
Если устройство оснащено гироскопом, датчик линейного ускорения должен использовать гироскоп и акселерометр в качестве входных данных.
Если устройство не оснащено гироскопом, датчик линейного ускорения должен использовать в качестве входных данных акселерометр и магнитометр.
Значительное движение
Основной физический датчик: акселерометр (или другой, с низким энергопотреблением)
Режим отчетности: одноразовый
Низкая мощность
Реализуйте только пробуждающую версию этого датчика.
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 шагов) система на кристалле может быть пробуждена, чтобы драйвер мог выполнить обслуживание счётчика.
Как указано в разделе «Взаимодействие» , во время работы данного датчика он не должен мешать работе других датчиков, в частности акселерометра, который вполне может использоваться.
Если конкретное устройство не поддерживает эти режимы работы, то 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)
возвращает неактивный датчик
Датчик силы тяжести сообщает направление и величину силы тяжести в системе координат устройства.
Компоненты вектора силы тяжести указываются в м/с^2 в полях 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
: шаг, вращение вокруг оси X (-180<=pitch<=180
), с положительными значениями, когда ось Z движется к оси Y. -
sensors_event_t.orientation.z
: крен, вращение вокруг оси Y (-90<=roll<=90
), с положительными значениями, когда ось X движется к оси Z.
Обратите внимание: по историческим причинам угол крена положителен в направлении по часовой стрелке. (С математической точки зрения, он должен быть положительным в направлении против часовой стрелки):

Рисунок 3. Ориентация относительно устройства
Это определение отличается от рыскания, тангажа и крена, используемых в авиации, где ось X проходит вдоль длинной стороны самолета (от хвоста к носу).
Датчик ориентации также сообщает ожидаемую точность показаний через поле sensors_event_t.orientation.status
. Подробнее о возможных значениях этого поля см. в константах SENSOR_STATUS_*
объекта SensorManager
.
Некалиброванные датчики
Некалиброванные датчики дают более сырые результаты и могут содержать некоторую погрешность, но также содержат меньше «скачков» из-за корректировок, внесённых при калибровке. Некоторым приложениям такие некалиброванные результаты могут быть более предпочтительны, поскольку они более плавные и надёжные. Например, если приложение пытается выполнить собственное объединение данных датчиков, калибровка может фактически исказить результаты.
Акселерометр некалиброванный
Базовый физический датчик: акселерометр
Режим отчетности: Непрерывный
getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_UNCALIBRATED)
возвращает неактивный датчик
Некалиброванный акселерометр измеряет ускорение устройства по трём осям без коррекции смещения (к некалиброванным измерениям применяются заводское смещение и температурная компенсация), а также оценку смещения. Все значения указаны в единицах системы СИ (м/с^2) и представлены в полях 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)
возвращает датчик пробуждения
Датчик угла поворота шарнира измеряет угол в градусах между двумя составными частями устройства. Ожидается, что движение шарнира, измеряемое этим типом датчика, изменит способы взаимодействия пользователя с устройством, например, разворачивание или открытие дисплея.
Взаимодействие композитных датчиков
Некоторые датчики в основном используются для обнаружения взаимодействия с пользователем. Мы не определяем, как именно должны быть реализованы эти датчики, но они должны быть маломощными, и производитель устройства обязан проверить их качество с точки зрения пользовательского опыта.
Жест пробуждения
Базовые физические датчики: Не определено (все маломощные)
Режим отчетности: одноразовый
Маломощный
Реализуйте только пробуждающую версию этого датчика.
getDefaultSensor(SENSOR_TYPE_WAKE_GESTURE)
возвращает датчик пробуждения
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
Маломощный
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
Маломощный
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 |
---|---|---|
значения[0] | -0,065 | -0,065 |
values[1] | 0,078 | 0,078 |
values[2] | 9.808 | 9.808 |
values[3] | Н/Д | 1.0 |
values[4] | Н/Д | 1.0 |
values[5] | Н/Д | 1.0 |
Автомобильные датчики
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.