센서 유형

이 섹션에서는 센서 축, 기본 센서 및 복합 센서(활동, 자세, 보정되지 않은 및 상호 작용)에 대해 설명합니다.

센서 축

많은 센서의 센서 이벤트 값은 장치에 대해 고정된 특정 프레임으로 표현됩니다.

모바일 장치 축

Sensor API는 화면의 자연스러운 방향에만 상대적입니다(기기의 화면 방향이 변경될 때 축이 바뀌지 않습니다.

모바일 기기용 센서 API의 좌표계

그림 1. Sensor API에서 사용하는 좌표계(모바일 장치 기준)

자동차 축

Android Automotive 구현에서 축은 차체 프레임과 관련하여 정의됩니다. 차량 기준 프레임의 원점은 리어 액슬의 중심입니다. 차량 기준 좌표계의 방향은 다음과 같습니다.

  • X축은 오른쪽을 가리키고 차량 대칭 평면에 수직인 수평 평면에 있습니다.
  • Y축은 앞쪽을 가리키며 수평면에 있습니다.
자동차 기기용 센서 API 좌표계

그림 2. Sensor API에서 사용하는 좌표계(자동차 기기 기준)

차량 기준 좌표계는 오른손 좌표계입니다. 따라서 Z축이 위쪽을 가리킵니다.

기준 좌표계의 Z축은 중력에 맞춰 정렬됩니다. 즉, X축과 Y축이 모두 수평입니다. 결과적으로 Y축이 항상 프론트 액슬을 통과하는 것은 아닙니다.

베이스 센서

기본 센서 유형은 해당 센서가 나타내는 물리적 센서의 이름을 따서 명명됩니다. 이러한 센서는 단일 물리적 센서의 데이터를 중계합니다(다른 센서에서 데이터를 생성하는 복합 센서와 반대). 기본 센서 유형의 예는 다음과 같습니다.

  • SENSOR_TYPE_ACCELEROMETER
  • SENSOR_TYPE_GYROSCOPE
  • SENSOR_TYPE_MAGNETOMETER

그러나 기본 센서는 기본 물리적 센서와 동일하지 않으며 혼동되어서도 안 됩니다. 보정(예: 바이어스 보정 및 온도 보정)이 적용되기 때문에 기본 센서의 데이터는 물리적 센서의 원시 출력이 아닙니다 .

예를 들어 기본 센서의 특성은 다음 사용 사례에서 기본 물리적 센서의 특성과 다를 수 있습니다.

  • 바이어스 범위가 1도/초인 것으로 평가된 자이로스코프 칩.
    • 공장 보정 후 온도 보상 및 바이어스 보상이 적용되면 Android 센서의 실제 바이어스가 감소되며 바이어스가 0.01 deg/sec 미만으로 보장되는 지점까지 될 수 있습니다.
    • 이 상황에서 우리는 기본 센서의 데이터 시트가 1deg/sec라고 말했음에도 불구하고 Android 센서의 바이어스가 0.01deg/sec 미만이라고 말합니다.
  • 소비 전력이 100uW인 기압계.
    • 생성된 데이터는 칩에서 SoC로 전송되어야 하기 때문에 기압계 Android 센서에서 데이터를 수집하는 실제 전력 비용은 훨씬 더 높을 수 있습니다(예: 1000uW).
    • 이 상황에서 안드로이드 센서는 기압계 칩 리드에서 측정한 소비전력이 100uW인데도 소비전력이 1000uW라고 한다.
  • 보정할 때 100uW를 소비하지만 보정할 때 더 많이 소비하는 자력계입니다.
    • 교정 루틴을 수행하려면 자이로스코프를 활성화해야 하며 5000uW를 소비하고 일부 알고리즘을 실행해야 하며 추가 비용은 900uW입니다.
    • 이 상황에서 (자력계) Android 센서의 최대 소비 전력은 6000uW라고 합니다.
    • 이 경우 평균 소비 전력이 더 유용한 척도이며 HAL을 통해 센서 정적 특성에 보고되는 것입니다.

가속도계

보고 모드: 연속

getDefaultSensor(SENSOR_TYPE_ACCELEROMETER) 는 non-wake-up 센서를 반환합니다.

가속도계 센서는 3개의 센서 축을 따라 장치의 가속도를 보고합니다. 측정된 가속도에는 물리적 가속도(속도 변화)와 중력이 모두 포함됩니다. 측정값은 sensor_event_t.acceleration의 x, y 및 z 필드에 보고됩니다.

모든 값은 SI 단위(m/s^2)이며 장치의 가속도에서 3개의 센서 축을 따라 중력을 뺀 값을 측정합니다.

다음은 예입니다.

  • (x, y, z)의 노름은 자유낙하 시 0에 가까워야 합니다.
  • 장치가 테이블에 평평하게 놓여 있고 왼쪽이 오른쪽으로 밀릴 때 x 가속도 값은 양수입니다.
  • 장치가 테이블 위에 평평하게 놓여 있을 때 z를 따른 가속도 값은 +9.81 alo이며, 이는 장치의 가속도(0 m/s^2)에서 중력(-9.81 m/s^2)을 뺀 값에 해당합니다.
  • 장치를 탁자 위에 평평하게 놓고 하늘을 향해 밀 때 가속도 값은 장치의 가속도(+A m/s^2)에서 중력(-9.81m)을 뺀 값에 해당하는 +9.81보다 큽니다. /s^2).

판독값은 다음을 사용하여 보정됩니다.

  • 온도 보상
  • 온라인 바이어스 교정
  • 온라인 스케일 교정

바이어스 및 스케일 보정은 스트리밍 중에 값이 점프하는 것을 방지하기 위해 센서가 비활성화된 동안에만 업데이트해야 합니다.

가속도계는 또한 sensors_event_t.acceleration.status 를 통해 판독값이 얼마나 정확할 것으로 예상하는지 보고합니다. 이 필드에 가능한 값에 대한 자세한 내용은 SensorManager의 SensorManager SENSOR_STATUS_* 상수를 참조하십시오.

주위 온도

보고 모드: 변경 시

getDefaultSensor(SENSOR_TYPE_AMBIENT_TEMPERATURE) 는 non-wake-up 센서를 반환합니다.

이 센서는 주변(실내) 온도를 섭씨로 제공합니다.

자기장 센서

보고 모드: 연속

getDefaultSensor(SENSOR_TYPE_MAGNETIC_FIELD) 는 non-wake-up 센서를 반환합니다.

SENSOR_TYPE_GEOMAGNETIC_FIELD == SENSOR_TYPE_MAGNETIC_FIELD

자기장 센서(자력계라고도 함)는 3개의 센서 축을 따라 측정된 주변 자기장을 보고합니다.

측정값은 sensors_event_t.magnetic 의 x, y 및 z 필드에 보고되며 모든 값은 마이크로 테슬라(uT)로 표시됩니다.

자력계는 또한 sensors_event_t.magnetic.status 를 통해 판독값이 얼마나 정확할 것으로 예상하는지 보고합니다. 이 필드에 가능한 값에 대한 자세한 내용은 SensorManager의 SensorManager SENSOR_STATUS_* 상수를 참조하십시오.

판독값은 다음을 사용하여 보정됩니다.

  • 온도 보상
  • 공장(또는 온라인) 연철 교정
  • 온라인 강철 교정

자이로스코프

보고 모드: 연속

getDefaultSensor(SENSOR_TYPE_GYROSCOPE) 는 non-wake-up 센서를 반환합니다.

자이로스코프 센서는 세 개의 센서 축을 중심으로 장치의 회전 속도를 보고합니다.

회전은 시계 반대 방향으로 양수입니다(오른손 법칙). 즉, 원점에 위치한 장치에서 x, y 또는 z축의 양수 위치에서 보는 관찰자는 장치가 시계 반대 방향으로 회전하는 것처럼 보이면 양의 회전을 보고합니다. 이것은 양의 회전에 대한 표준 수학적 정의이며 롤의 항공 우주 정의와 일치하지 않습니다.

측정값은 sensors_event_t.gyro 의 x, y 및 z 필드에 보고되며 모든 값은 초당 라디안(rad/s)입니다.

판독값은 다음을 사용하여 보정됩니다.

  • 온도 보상
  • 공장(또는 온라인) 스케일 보정
  • 온라인 바이어스 교정(드리프트 제거)

자이로스코프는 또한 sensors_event_t.gyro.status 를 통해 판독값이 얼마나 정확할 것으로 예상하는지 보고합니다. 이 필드에 가능한 값에 대한 자세한 내용은 SensorManager의 SensorManager SENSOR_STATUS_* 상수를 참조하십시오.

자이로스코프는 자력계와 가속도계를 기반으로 에뮬레이트할 수 없습니다. 이렇게 하면 로컬 일관성과 응답성이 감소하기 때문입니다. 일반적인 자이로스코프 칩을 기반으로 해야 합니다.

심박수

보고 모드: 변경 시

getDefaultSensor(SENSOR_TYPE_HEART_RATE) 는 non-wake-up 센서를 반환합니다.

심박수 센서는 장치를 만지는 사람의 현재 심박수를 보고합니다.

분당 비트 수(BPM)의 현재 심박수는 sensors_event_t.heart_rate.bpm 에 보고되고 센서의 상태는 sensors_event_t.heart_rate.status 에 보고됩니다. 이 필드에 가능한 값에 대한 자세한 내용은 SensorManager의 SensorManager SENSOR_STATUS_* 상수를 참조하십시오. 특히, 첫 번째 활성화 시 장치가 본체에 없는 것으로 알려진 경우가 아니면 첫 번째 이벤트의 상태 필드를 SENSOR_STATUS_UNRELIABLE 로 설정해야 합니다. 이 센서는 변경 시이므로 마지막 이벤트 이후 heart_rate.bpm 또는 heart_rate.status 가 변경된 경우에만 이벤트가 생성됩니다. 이벤트는 모든 sampling_period 보다 빠르게 생성되지 않습니다.

sensor_t.requiredPermission 은 항상 SENSOR_PERMISSION_BODY_SENSORS 입니다.

보고 모드: 변경 시

getDefaultSensor(SENSOR_TYPE_LIGHT) 는 non-wake-up 센서를 반환합니다.

광 센서는 SI 럭스 단위로 현재 조명을 보고합니다.

측정은 sensors_event_t.light 에 보고됩니다.

근접성

보고 모드: 변경 시

일반적으로 기상 센서로 정의

getDefaultSensor(SENSOR_TYPE_PROXIMITY) 는 기상 센서를 반환합니다.

근접 센서는 센서에서 가장 가까운 가시 표면까지의 거리를 보고합니다.

Android 4.4까지 근접 센서는 항상 웨이크업 센서였으며 근접의 변화를 감지할 때 SoC를 깨웁니다. Android 4.4 이후에는 이 센서의 wake-up 버전을 먼저 구현하는 것이 좋습니다. 이 센서는 전화를 걸 때 화면을 켜고 끄는 데 사용되는 센서이기 때문입니다.

측정값은 sensors_event_t.distance 의 센티미터 단위로 보고됩니다. 일부 근접 센서는 이진법 "근거리" 또는 "원거리" 측정만 지원합니다. 이 경우 센서는 "far" 상태에서 sensor_t.maxRange 값을 보고하고 "near" 상태에서 sensor_t.maxRange 보다 작은 값을 보고합니다.

압력

보고 모드: 연속

getDefaultSensor(SENSOR_TYPE_PRESSURE) 는 non-wake-up 센서를 반환합니다.

압력 센서(기압계라고도 함)는 대기압을 헥토파스칼(hPa) 단위로 보고합니다.

판독 값은 다음을 사용하여 보정됩니다.

  • 온도 보상
  • 공장 바이어스 교정
  • 공장 스케일 교정

기압계는 고도 변화를 추정하는 데 자주 사용됩니다. 절대 고도를 추정하려면 해수면 기압(날씨에 따라 변함)을 기준으로 사용해야 합니다.

상대 습도

보고 모드: 변경 시

getDefaultSensor(SENSOR_TYPE_RELATIVE_HUMIDITY) 는 non-wake-up 센서를 반환합니다.

상대 습도 센서는 상대 주변 공기 습도를 측정하고 값을 백분율로 반환합니다.

복합 센서 유형

복합 센서는 하나 또는 여러 개의 물리적 센서에서 데이터를 처리 및/또는 융합하여 데이터를 생성합니다. (기본 센서가 아닌 모든 센서를 복합 센서라고 합니다.) 복합 센서의 예는 다음과 같습니다.

  • 일반적으로 가속도계를 기반으로 하지만 전력 소비와 정확도가 허용되는 경우 다른 센서를 기반으로 할 수도 있는 단계 감지기중요한 동작 .
  • 가속도계와 자이로스코프를 기반으로 하는 게임 회전 벡터 .
  • 보정 되지 않은 자이로스코프 . 자이로스코프 베이스 센서와 유사하지만 측정에서 보정되는 대신 별도로 보고되는 바이어스 보정이 있습니다.

기본 센서와 마찬가지로 복합 센서의 특성은 최종 데이터의 특성에서 비롯됩니다. 예를 들어 게임 회전 벡터의 전력 소비는 가속도계 칩, 자이로스코프 칩, 데이터를 처리하는 칩 및 데이터를 전송하는 버스의 소비 전력의 합과 같을 수 있습니다. 다른 예로, 게임 회전 벡터의 드리프트는 물리적 센서 특성만큼 보정 알고리즘의 품질에 따라 달라집니다.

다음 표에는 사용 가능한 복합 센서 유형이 나열되어 있습니다. 각 복합 센서는 하나 이상의 물리적 센서의 데이터에 의존합니다. 열악한 사용자 경험을 제공하므로 대략적인 결과를 얻기 위해 다른 기본 물리적 센서를 선택하지 마십시오.

센서 유형 범주 기본 물리적 센서 보고 모드

게임 회전 벡터

태도

가속도계, 자이로스코프, 자력계를 사용하면 안 됩니다.

마디 없는

지자기 회전 벡터 저전력 센서

태도

가속도계, 자력계, 자이로스코프를 사용하면 안 됨

마디 없는

시선 제스처 저전력 센서

상호 작용

한정되지 않은

한 번의 기회

중력

태도

가속도계, 자이로스코프

마디 없는

보정되지 않은 자이로스코프

미보정

자이로스코프

마디 없는

선형 가속도

활동

가속도계, 자이로스코프(있는 경우) 또는 자력계(자이로가 없는 경우)

마디 없는

보정되지 않은 자기장

미보정

자력계

마디 없는

방향 (더 이상 사용되지 않음)

태도

가속도계, 자력계, 자이로스코프(있는 경우)

마디 없는

픽업 제스처 저전력 센서

상호 작용

한정되지 않은

한 번의 기회

회전 벡터

태도

가속도계, 자력계, 자이로스코프

마디 없는

중요한 움직임 저전력 센서

활동

가속도계(또는 매우 낮은 전력만큼 다른 것)

한 번의 기회

스텝 카운터 저전력 센서

활동

가속도계

변경 시

걸음 감지기 저전력 센서

활동

가속도계

특별한

기울기 감지기 저전력 센서

활동

가속도계

특별한

일어나 제스처 저전력 센서

상호 작용

한정되지 않은

한 번의 기회

저전력 센서 = 저전력 센서

활동 복합 센서

선형 가속도

기본 물리적 센서: 가속도계 및 (있는 경우) 자이로스코프(또는 자이로스코프가 없는 경우 자력계)

보고 모드: 연속

getDefaultSensor(SENSOR_TYPE_LINEAR_ACCELERATION) 는 non-wake-up 센서를 반환합니다.

선형 가속도 센서는 중력을 포함하지 않고 센서 프레임에서 장치의 선형 가속도를 보고합니다.

출력은 개념적으로 가속도계 의 출력에서 ​​중력 센서 의 출력을 뺀 값입니다. sensors_event_t.acceleration 의 x, y 및 z 필드에서 m/s^2로 보고됩니다.

장치가 움직이지 않을 때 모든 축의 판독값은 0에 가까워야 합니다.

장치에 자이로스코프가 있는 경우 선형 가속도 센서는 자이로스코프와 가속도계를 입력으로 사용해야 합니다.

장치에 자이로스코프가 없는 경우 선형 가속도 센서는 가속도계와 자력계를 입력으로 사용해야 합니다.

중요한 움직임

기본 물리적 센서: 가속도계(또는 저전력의 다른 센서)

보고 모드: 원샷

저전력

이 센서의 깨우기 버전만 구현하십시오.

getDefaultSensor(SENSOR_TYPE_SIGNIFICANT_MOTION) 는 기상 센서를 반환합니다.

중요한 동작 감지기는 사용자 위치의 변경으로 이어질 수 있는 동작인 중요한 동작 을 감지할 때 트리거됩니다.

그러한 중요한 움직임의 예는 다음과 같습니다.

  • 걷기 또는 자전거 타기
  • 움직이는 자동차, 코치 또는 기차에 앉아

중요한 움직임을 유발하지 않는 상황의 예:

  • 주머니에 전화를 넣고 사람이 움직이지 않음
  • 전화기가 탁자 위에 있고 근처 교통체증이나 세탁기로 인해 탁자가 약간 흔들립니다.

높은 수준에서 중요한 움직임 감지기는 위치 결정의 전력 소비를 줄이는 데 사용됩니다. 로컬라이제이션 알고리즘이 장치가 정적임을 감지하면 저전력 모드로 전환할 수 있습니다. 이 모드에서는 사용자가 위치를 변경할 때 장치를 깨우기 위해 상당한 동작에 의존합니다.

이 센서는 저전력이어야 합니다. 이는 전력 소비에 대한 절충점을 만들어 약간의 거짓 부정을 초래할 수 있습니다. 이것은 몇 가지 이유로 수행됩니다.

  • 이 센서의 목표는 전력을 절약하는 것입니다.
  • 사용자가 움직이지 않을 때(가양성) 이벤트를 트리거하는 것은 전력 측면에서 비용이 많이 들기 때문에 피해야 합니다.
  • 사용자가 이동할 때 이벤트를 트리거하지 않는 것(거짓음성)은 반복적으로 수행되지 않는 한 허용됩니다. 사용자가 10초 동안 걷고 있는 경우 해당 10초 이내에 이벤트를 트리거하지 않는 것은 허용되지 않습니다.

각 센서 이벤트는 sensors_event_t.data[0] 에서 1 을 보고합니다.

걸음 감지기

기본 물리적 센서: 가속도계(+ 저전력일 경우 기타 가능)

보고 모드: 특별 (한 단계당 하나의 이벤트)

저전력

getDefaultSensor(SENSOR_TYPE_STEP_DETECTOR) 는 non-wake-up 센서를 반환합니다.

걸음 감지기는 사용자가 걸음을 걸을 때마다 이벤트를 생성합니다.

sensors_event_t.timestamp 이벤트의 타임스탬프는 발이 지면에 닿았을 때 해당하며, 가속도에서 높은 변동을 생성합니다.

만보계에 비해 만보 감지기는 대기 시간이 짧아야 합니다(2초 미만). 걸음 감지기와 걸음 수 계수기는 사용자가 걷고, 뛰고, 계단을 올라갈 때를 감지합니다. 사용자가 자전거를 타거나 운전 중이거나 다른 차량에 있을 때 트리거되어서는 안 됩니다.

이 센서는 저전력이어야 합니다. 즉, 하드웨어에서 걸음 감지를 수행할 수 없는 경우 이 센서를 정의해서는 안 됩니다. 특히, 걸음 감지기가 활성화되고 가속도계가 활성화되지 않은 경우 걸음만 인터럽트를 트리거해야 합니다(모든 가속도계 판독이 아님).

sampling_period_ns _주기_ns는 단계 감지기에 영향을 미치지 않습니다.

각 센서 이벤트는 sensors_event_t.data[0] 에서 1 을 보고합니다.

스텝 카운터

기본 물리적 센서: 가속도계(+ 저전력일 경우 기타 가능)

보고 모드: 변경 시

저전력

getDefaultSensor(SENSOR_TYPE_STEP_COUNTER) 는 non-wake-up 센서를 반환합니다.

걸음 수 카운터는 활성화된 동안 마지막 재부팅 이후 사용자가 취한 걸음 수를 보고합니다.

측정은 uint64_t 에서 sensors_event_t.step_counter 로 보고되며 시스템 재부팅 시에만 0으로 재설정됩니다.

이벤트의 타임스탬프는 해당 이벤트의 마지막 단계가 수행된 시간으로 설정됩니다.

걸음 시간의 의미는 걸음 감지기 센서 유형을 참조하십시오.

걸음 수 감지기에 비해 걸음 수 카운터는 대기 시간이 더 길 수 있습니다(최대 10초). 이 대기 시간 덕분에 이 센서는 정확도가 높습니다. 하루 종일 측정한 후의 걸음 수는 실제 걸음 수의 10% 이내여야 합니다. 걸음 감지기와 걸음 수 계수기는 사용자가 걷고, 뛰고, 계단을 올라갈 때를 감지합니다. 사용자가 자전거를 타거나 운전 중이거나 다른 차량에 있을 때 트리거되어서는 안 됩니다.

하드웨어는 내부 단계 수가 절대 오버플로되지 않도록 해야 합니다. 하드웨어 내부 카운터의 최소 크기는 16비트입니다. 오버플로가 임박한 경우(최대 2^16 단계마다) SoC를 깨워 운전자가 카운터 유지 관리를 수행할 수 있습니다.

상호 작용 에 명시된 바와 같이 이 센서가 작동하는 동안 다른 센서, 특히 사용 중인 가속도계를 방해해서는 안 됩니다.

특정 장치가 이러한 작동 모드를 지원할 수 없는 경우 HAL에서 이 센서 유형을 보고해서는 안 됩니다. 즉, HAL에서 이 센서를 '에뮬레이트'하는 것은 허용되지 않습니다.

이 센서는 저전력이어야 합니다. 즉, 하드웨어에서 단계 감지를 수행할 수 없는 경우 이 센서를 정의해서는 안 됩니다. 특히, 걸음 수 카운터가 활성화되고 가속도계가 활성화되지 않은 경우 걸음 수만 인터럽트를 트리거해야 합니다(가속도계 데이터가 아님).

기울기 감지기

기본 물리적 센서: 가속도계(+ 저전력일 경우 기타 가능)

보고 모드: 특별

저전력

이 센서의 깨우기 버전만 구현하십시오.

getDefaultSensor(SENSOR_TYPE_TILT_DETECTOR) 는 기상 센서를 반환합니다.

기울기 감지기는 기울기 이벤트가 감지될 때마다 이벤트를 생성합니다.

기울기 이벤트는 활성화 또는 센서에 의해 생성된 마지막 이벤트 이후 최소 35도만큼 변하는 2초 창 평균 중력의 방향으로 정의됩니다. 알고리즘은 다음과 같습니다.

  • reference_estimated_gravity = 활성화 후 첫 1초 동안 가속도계 측정 평균 또는 마지막 기울기 이벤트가 생성되었을 때 추정된 중력.
  • current_estimated_gravity = 지난 2초 동안 가속도계 측정의 평균.
  • angle(reference_estimated_gravity, current_estimated_gravity) > 35 degrees 때 트리거

휴대전화 방향을 변경하지 않고 크게 가속하면 기울기 이벤트가 트리거되지 않아야 합니다. 예를 들어, 자동차를 운전하는 동안 급회전이나 강한 가속은 평균 가속 각도가 35도 이상 변할 수 있더라도 틸트 이벤트를 트리거해서는 안 됩니다. 일반적으로 이 센서는 가속도계의 도움으로만 구현됩니다. 전력 소비를 크게 증가시키지 않는 다른 센서도 사용할 수 있습니다. 이것은 SoC가 일시 중단 모드로 들어갈 수 있도록 하는 저전력 센서입니다. HAL에서 이 센서를 에뮬레이트하지 마십시오. 각 센서 이벤트는 sensors_event_t.data[0] 에서 1 을 보고합니다.

태도 합성 센서

회전 벡터

기본 물리적 센서: 가속도계, 자력계 및 자이로스코프

보고 모드: 연속

getDefaultSensor(SENSOR_TYPE_ROTATION_VECTOR) 는 non-wake-up 센서를 반환합니다.

회전 벡터 센서는 East-North-Up 좌표 프레임을 기준으로 장치의 방향을 보고합니다. 일반적으로 가속도계, 자이로스코프 및 자력계 판독값을 통합하여 얻습니다. East-North-Up 좌표계는 다음과 같은 직접 직교 기준으로 정의됩니다.

  • X는 동쪽을 가리키고 지면에 접합니다.
  • Y는 북쪽을 가리키며 지면에 접합니다.
  • Z는 하늘을 가리키고 지면에 수직입니다.

휴대전화의 방향은 동북위 좌표를 휴대전화 좌표와 정렬하는 데 필요한 회전으로 표시됩니다. 즉, 세계 프레임(X,Y,Z)에 회전을 적용하면 전화 좌표(x,y,z)에 맞춰 정렬됩니다.

회전은 기준(동북-위) 장치 방향에서 현재 장치 방향으로 이동하기 위해 축 rot_axis 를 중심으로 각도 세타만큼 전화기를 회전하는 것으로 볼 수 있습니다. 회전은 단위 쿼터니언의 4개의 단위 없는 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)

어디에:

  • rot_axis 의 x, y, z 필드는 회전축을 나타내는 단위길이 벡터의 East-North-Up 좌표입니다.
  • theta 는 회전 각도입니다.

쿼터니언은 단위 쿼터니언입니다. 이는 표준 1 이어야 합니다. 이를 확인하지 않으면 비정상적인 클라이언트 동작이 발생합니다.

또한 이 센서는 예상 방향 정확도를 보고합니다.

sensors_event_t.data[4] = estimated_accuracy (라디안)

표제 오류는 estimated_accuracy 시간의 95% 미만이어야 합니다. 이 센서는 주 방향 변경 입력으로 자이로스코프를 사용해야 합니다.

이 센서는 또한 가속도계와 자력계 입력을 사용하여 자이로스코프 드리프트를 보완하며 가속도계와 자력계만으로는 구현할 수 없습니다.

게임 회전 벡터

기본 물리적 센서: 가속도계 및 자이로스코프(자력계 없음)

보고 모드: 연속

getDefaultSensor(SENSOR_TYPE_GAME_ROTATION_VECTOR) 는 non-wake-up 센서를 반환합니다.

게임 회전 벡터 센서는 회전 벡터 센서와 유사하지만 지자기장을 사용하지 않습니다. 따라서 Y 축은 북쪽이 아니라 다른 참조를 가리킵니다. 이 기준은 자이로스코프가 Z축을 중심으로 드리프트하는 것과 같은 크기로 드리프트할 수 있습니다.

sensors_event_t.data[0-3] 설정 방법에 대한 자세한 내용은 회전 벡터 센서를 참조하세요. 이 센서는 예상 방향 정확도를 보고하지 않습니다. sensors_event_t.data[4] 는 예약되어 있으며 0 으로 설정해야 합니다.

이상적인 경우 휴대폰이 회전되어 동일한 실제 방향으로 돌아오면 동일한 게임 회전 벡터를 보고해야 합니다.

이 센서는 자이로스코프와 가속도계를 기반으로 해야 합니다. 자이로스코프 바이어스 추정을 통해 간접적으로 외에 자력계를 입력으로 사용할 수 없습니다.

중력

기본 물리적 센서: 가속도계 및 (있는 경우) 자이로스코프(또는 자이로스코프가 없는 경우 자력계)

보고 모드: 연속

getDefaultSensor(SENSOR_TYPE_GRAVITY) 는 non-wake-up 센서를 반환합니다.

중력 센서는 장치 좌표에서 중력의 방향과 크기를 보고합니다.

중력 벡터 구성요소는 sensors_event_t.acceleration 의 x, y 및 z 필드에서 m/s^2로 보고됩니다.

장치가 정지 상태일 때 중력 센서의 출력은 가속도계의 출력과 동일해야 합니다. 지구에서 크기는 약 9.8m/s^2입니다.

장치에 자이로스코프가 있는 경우 중력 센서는 자이로스코프와 가속도계를 입력으로 사용해야 합니다.

장치에 자이로스코프가 없는 경우 중력 센서는 가속도계와 자력계를 입력으로 사용해야 합니다.

지자기 회전 벡터

기본 물리적 센서: 가속도계 및 자력계(자이로스코프 없음)

보고 모드: 연속

저전력

getDefaultSensor(SENSOR_TYPE_GEOMAGNETIC_ROTATION_VECTOR) 는 non-wake-up 센서를 반환합니다.

지자기 회전 벡터는 회전 벡터 센서와 유사하지만 자력계를 사용하고 자이로스코프는 사용하지 않습니다.

이 센서는 자력계를 기반으로 해야 합니다. 자이로스코프를 사용하여 구현할 수 없으며 이 센서에서 자이로스코프 입력을 사용할 수 없습니다.

sensors_event_t.data[0-4] 설정 방법에 대한 자세한 내용은 회전 벡터 센서를 참조하세요.

회전 벡터 센서의 경우와 마찬가지로 방향 오류는 시간의 95% 예상 정확도( sensors_event_t.data[4] )보다 작아야 합니다.

이 센서는 저전력이어야 하므로 하드웨어로 구현해야 합니다.

방향(더 이상 사용되지 않음)

기본 물리적 센서: 가속도계, 자력계 및 (있는 경우) 자이로스코프

보고 모드: 연속

getDefaultSensor(SENSOR_TYPE_ORIENTATION) 는 non-wake-up 센서를 반환합니다.

참고: 이것은 Android SDK에서 더 이상 사용되지 않는 이전 센서 유형입니다. 보다 명확하게 정의된 회전 벡터 센서로 대체되었습니다. 가능하면 방향 센서보다 회전 벡터 센서를 사용하십시오.

방향 센서는 장치의 자세를 보고합니다. 측정값은 sensors_event_t.orientation 의 x, y 및 z 필드에서 도 단위로 보고됩니다.

  • sensors_event_t.orientation.x : 방위각, Z축을 중심으로 한 자북 방향과 Y축 사이의 각도( 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 를 통해 판독값이 얼마나 정확할 것으로 예상하는지 보고합니다. 이 필드에 가능한 값에 대한 자세한 내용은 SensorManager의 SensorManager SENSOR_STATUS_* 상수를 참조하십시오.

보정되지 않은 센서

보정되지 않은 센서는 더 많은 원시 결과를 제공하고 약간의 편향을 포함할 수 있지만 보정을 통해 적용된 보정에서 더 적은 "점프"도 포함합니다. 일부 앱은 이러한 보정되지 않은 결과를 더 부드럽고 안정적으로 선호할 수 있습니다. 예를 들어 앱이 자체 센서 융합을 시도하는 경우 보정을 도입하면 실제로 결과가 왜곡될 수 있습니다.

보정되지 않은 가속도계

기본 물리적 센서: 가속도계

보고 모드: 연속

getDefaultSensor(SENSOR_TYPE_ACCELEROMETER_UNCALIBRATED) 는 non-wake-up 센서를 반환합니다.

보정되지 않은 가속도계 센서는 바이어스 보정 없이 3개의 센서 축을 따라 장치의 가속도를 보고합니다(공장 바이어스 및 온도 보상은 보정되지 않은 측정에 적용됨). 모든 값은 SI 단위(m/s^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) 는 non-wake-up 센서를 반환합니다.

보정되지 않은 자이로스코프는 바이어스 추정과 함께 바이어스 보정을 적용하지 않고 센서 축 주위의 회전 속도를 보고합니다. 모든 값은 라디안/초 단위이며 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_biasz_bias 값은 바이어스 추정값이 변경되는 즉시 점프할 것으로 예상되며 나머지 시간에는 안정적이어야 합니다.

사용된 좌표계에 대한 자세한 내용은 자이로스코프 센서의 정의를 참조하십시오.

측정에 공장 교정 및 온도 보상을 적용해야 합니다. 또한 x_bias , y_biasz_bias 에서 합리적인 추정치를 보고할 수 있도록 자이로스코프 드리프트 추정을 구현해야 합니다. 구현이 드리프트를 추정할 수 없는 경우 이 센서를 구현해서는 안 됩니다.

이 센서가 있는 경우 해당 자이로스코프 센서도 있어야 하며 두 센서 모두 동일한 sensor_t.namesensor_t.vendor 값을 공유해야 합니다.

보정되지 않은 자기장

기본 물리적 센서: 자력계

보고 모드: 연속

getDefaultSensor(SENSOR_TYPE_MAGNETIC_FIELD_UNCALIBRATED) 는 non-wake-up 센서를 반환합니다.

보정되지 않은 자기장 센서는 단단한 철 보정 추정치와 함께 주변 자기장을 보고합니다. 모든 값은 마이크로 테슬라(uT) 단위이며 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_biasz_bias 값은 하드 아이언의 추정치가 변경되는 즉시 점프할 것으로 예상되며 나머지 시간에는 안정적이어야 합니다.

측정에는 연철 교정 및 온도 보상이 적용되어야 합니다. 또한 x_bias , y_biasz_bias 에서 합리적인 추정치를 보고할 수 있도록 hard-iron 추정을 구현해야 합니다. 구현이 편향을 추정할 수 없는 경우 이 센서를 구현해서는 안 됩니다.

이 센서가 있는 경우 해당 자기장 센서가 있어야 하며 두 센서 모두 동일한 sensor_t.namesensor_t.vendor 값을 공유해야 합니다.

힌지 각도

보고 모드: 변경 시

getDefaultSensor(SENSOR_TYPE_HINGE_ANGLE) 는 기상 센서를 반환합니다.

힌지 각도 센서는 장치의 두 통합 부품 사이의 각도(도)를 측정합니다. 이 센서 유형으로 측정된 힌지의 움직임은 디스플레이를 펼치거나 드러내는 것과 같이 사용자가 장치와 상호 작용할 수 있는 방식을 변경할 것으로 예상됩니다.

상호작용 복합 센서

일부 센서는 주로 사용자와의 상호 작용을 감지하는 데 사용됩니다. We don't define how those sensors must be implemented, but they must be low power and it's the responsibility of the device manufacturer to verify their quality in terms of user experience.

Wake 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_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]

해당 없음

1.0

values[4]

해당 없음

1.0

values[5]

해당 없음

1.0

Automotive sensors

Sensors to support automotive use cases.

Heading

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.