센서 유형

이 섹션에서는 센서 축, 기본 센서 및 복합 센서(액티비티, 애티튜드, 미보정 및 상호작용)에 대해 설명합니다.

센서 축

여러 센서의 센서 이벤트 값은 기기와 관련하여 정적인 구체적인 프레임으로 표현됩니다.

휴대기기 축

센서 API는 화면의 자연스러운 방향만 기준으로 삼습니다(기기 화면 방향이 변경되어도 축이 전환되지 않음).

휴대기기용 센서 API 좌표계

그림 1. 센서 API에서 사용하는 좌표계(휴대기기 기준)

자동차 축

Android 자동차 구현에서는 축이 차체 프레임과 관련하여 정의됩니다.

자동차용 센서 API 좌표계

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

  • X가 차량 오른쪽으로 증가
  • Y가 차체 앞부분 쪽으로 증가
  • Z가 차체 지붕 쪽으로 증가

좌표계 원점은 차량의 후차축 중앙에 위치합니다. 축 양의 방향에서 보면 양의 회전은 시계 반대 방향입니다. 따라서 차량이 좌회전하면 z 축 자이로스코프의 선회율이 양수가 됩니다.

기본 센서

기본 센서 유형은 유형으로 나타내는 실제 센서에서 이름을 가져옵니다. 이러한 센서는 다른 센서에서 데이터를 생성하는 복합 센서와 반대로 단일 실제 센서에서 데이터를 전달합니다. 기본 센서 유형의 예는 다음과 같습니다.

  • SENSOR_TYPE_ACCELEROMETER
  • SENSOR_TYPE_GYROSCOPE
  • SENSOR_TYPE_MAGNETOMETER

참고: 각 Android 센서 유형의 세부정보는 아래 섹션을 검토하세요.

하지만 기본 센서는 기본 실제 센서와 같지 않으며 이와 혼동되어선 안 됩니다. 기본 센서의 데이터는 실제 센서의 원시 출력이 아닙니다. 이는 바이어스 보상 및 온도 보상과 같은 교정값이 적용되기 때문입니다.

예를 들어 기본 센서의 특성은 다음과 같은 사용 사례의 기본 실제 센서의 특성과 다를 수 있습니다.

  • 바이어스 범위가 1deg/sec로 평가된 자이로스코프 칩
    • 공장 보정 후에는 온도 보상 및 바이어스 보상이 적용되며, Android 센서의 실제 바이어스는 바이어스가 0.01deg/sec 미만이 될 것으로 보장될 때까지 감소할 수 있습니다.
    • 이러한 상황에서는 기본 센서의 데이터시트에 1deg/sec으로 명시된 경우에도 Android 센서의 바이어스가 0.01deg/sec 미만이라고 말합니다.
  • 전력 소모량이 100uW인 기압계
    • 생성된 데이터는 칩에서 SoC로 전송해야 하므로 기압계의 Android 센서에서 데이터를 수집하는 데 드는 실제 전력 소모량은 훨씬 클 수 있습니다(예: 1,000uW).
    • 이러한 상황에서는 기압계 칩에서 측정한 전령 소모량이 100uW로 이어지는 경우에도 Android 센서의 전력 소모량이 1,000uW라고 말합니다.
  • 보정되면 100uW를 소모하지만 보정 중에는 더 많은 전력을 소모하는 자기계
    • 보정 루틴에서 자이로스코프를 활성화하여 5,000uW를 소모하고 일부 알고리즘을 실행해 900uW가 추가로 소모되도록 요구할 수 있습니다.
    • 이러한 상황에서는 (자기계) Android 센서의 최대 전력 소모량이 6,000uW라고 말합니다.
    • 이 경우 평균 전력 소모량을 측정하는 편이 훨씬 유용하며, 이러한 측정값이 HAL을 통해 보고되는 센서 정적 특성입니다.

가속도계

보고 모드: 연속

getDefaultSensor(SENSOR_TYPE_ACCELEROMETER)non-wake-up 센서를 반환

가속도계 센서는 3개의 센서 축을 따르는 기기의 가속을 보고합니다. 측정된 가속에는 실제 가속(속도 변화) 및 중력이 모두 포함됩니다. 측정값은 sensors_event_t.acceleration의 x, y, z 필드에 보고됩니다.

모든 값은 SI 단위(m/s^2)로 표시되고 3개의 센서 축을 따르는 기기 가속에서 중력을 뺀 값을 측정합니다.

예를 들면 다음과 같습니다.

  • 자유 낙하인 경우 기준(x, y, z)이 0에 근접해야 합니다.
  • 기기를 테이블에 평평하게 눕힌 상태에서 왼쪽에서 오른쪽으로 밀면 x 가속 값은 양수입니다.
  • 기기를 테이블에 평평하게 눕힌 상태에서는 z 축을 따르는 가속 값이 +9.81alo이며, 이는 기기 가속(0m/s^2)에서 중력(-9.81 m/s^2)을 뺀 값에 해당합니다.
  • 기기를 테이블에 평평하게 눕힌 상태에서 하늘 쪽으로 밀면 가속 값은 +9.81보다 크며, 이는 기기 가속(+Am/s^2)에서 중력(-9.81 m/s^2)을 뺀 값에 해당합니다.

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

  • 온도 보상
  • 온라인 바이어스 보정
  • 온라인 눈금 보정

바이어스 및 눈금 보정은 스트리밍 도중에 값이 점프되지 않도록 센서가 비활성화된 상태에서만 업데이트해야 합니다.

가속도계는 sensors_event_t.acceleration.status를 통해 판독값이 얼마나 정확할 것으로 예상되는지도 보고합니다. 이 필드에 사용 가능한 값에 대한 자세한 내용은 SensorManagerSENSOR_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를 통해 판독값이 얼마나 정확할 것으로 예상되는지도 보고합니다. 이 필드에 사용 가능한 값에 대한 자세한 내용은 SensorManagerSENSOR_STATUS_* 상수를 참조하세요.

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

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

자이로스코프

보고 모드: 연속

getDefaultSensor(SENSOR_TYPE_GYROSCOPE)non-wake-up 센서를 반환

자이로스코프 센서는 3개의 센서 축 기준의 기기 회전 속도를 보고합니다.

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

측정값은 sensors_event_t.gyro의 x, y, z 필드에 보고되며, 모든 값의 단위는 rad/s입니다.

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

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

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

자이로스코프는 자기계 및 가속도계를 기반으로 에뮬레이션할 수 없으며, 이는 자이로스코프로 인해 로컬 일관성과 응답성이 감소하기 때문입니다. 따라서 자이로스코프는 일반적인 자이로스코프 칩에 기반해야 합니다.

심박수

보고 모드: 온체인지

getDefaultSensor(SENSOR_TYPE_HEART_RATE)non-wake-up 센서를 반환

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

현재 심박수(BPM)는 sensors_event_t.heart_rate.bpm에 보고되며, 센서 상태는 sensors_event_t.heart_rate.status에서 보고됩니다. 이 필드에 사용 가능한 값에 대한 자세한 내용은 SensorManagerSENSOR_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 lux 단위로 보고합니다.

측정값은 sensors_event_t.light로 보고됩니다.

근접 센서

보고 모드: 온체인지

보통 wake-up 센서로 정의됨

getDefaultSensor(SENSOR_TYPE_PROXIMITY)wake-up 센서를 반환

근접 센서는 센서와 눈에 보이는 가장 가까운 표면 사이의 거리를 보고합니다.

Android KitKat까지는 근접 센서가 항상 wake-up 센서였으며, 근접성의 변화를 감지하면 SoC의 절전 모드가 해제되었습니다. Android KitKat 이후에는 이 센서의 wake-up 버전부터 구현하는 것이 좋습니다. 이 버전은 전화를 거는 동안 화면을 켜고 끄는 데 사용되기 때문입니다.

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

압력

보고 모드: 연속

getDefaultSensor(SENSOR_TYPE_PRESSURE)non-wake-up 센서를 반환

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

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

  • 온도 보상
  • 공장 바이어스 보정
  • 공장 눈금 보정

기압계는 고도 변화를 예상하는 데 자주 사용됩니다. 절대 고도를 예상하려면 기후에 따라 변화하는 해면기압을 참조해야 합니다.

상대 습도

보고 모드: 온체인지

getDefaultSensor(SENSOR_TYPE_RELATIVE_HUMIDITY)non-wake-up 센서를 반환

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

복합 센서 유형

복합 센서는 단일 실제 센서 또는 여러 실제 센서의 데이터를 처리 또는 융합하여 데이터를 생성합니다. 기본 센서가 아닌 모든 센서를 복합 센서라고 부릅니다. 복합 센서의 예는 다음과 같습니다.

기본 센서처럼 복합 센서의 특성도 최종 데이터의 특성에서 비롯됩니다. 예를 들어 게임 회전 벡터의 전력 소모량은 아마도 가속도계 칩, 자이로스코프 칩, 데이터 처리 칩과 데이터 전송 버스의 전력 소모량을 합친 것과 같을 것입니다. 또 다른 예로, 게임 회전 벡터의 드리프트는 보정 알고리즘 품질만큼이나 실제 센서 특성에 좌우됩니다.

다음 표에는 사용 가능한 복합 센서 유형이 나열되어 있습니다. 각 복합 센서는 단일 실제 센서 또는 여러 실제 센서의 데이터에 의존합니다. 대략적인 결과를 추정하려면 사용자 경험을 저해할 수 있는 다른 기본 실제 센서를 선택하지 않는 것이 좋습니다.

참고: 기기에 자이로스코프가 없는 경우에만 자이로스코프를 사용하지 않고 회전 벡터, 선형 가속 및 중력 센서를 구현할 수 있습니다.

센서 유형 카테고리 기본 실제 센서 보고 모드

게임 회전 벡터

애티튜드

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

연속

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

애티튜드

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

연속

보기 동작 저전력 센서

상호작용

정의되지 않음

원샷

중력

애티튜드

가속도계, 자이로스코프

연속

미보정 자이로스코프

보정되지 않음

자이로스코프

연속

선형 가속

액티비티

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

연속

미보정 자기장

보정되지 않음

자기계

연속

방향(지원 중단됨)

애티튜드

가속도계, 자기계 PREFERRED 자이로스코프

연속

동작 선택 저전력 센서

상호작용

정의되지 않음

원샷

회전 벡터

애티튜드

가속도계, 자기계, 그리고 자이로스코프(있는 경우)

연속

중요한 움직임 저전력 센서

액티비티

가속도계(또는 전력이 매우 낮은 경우 또 다른 가속도계)

원샷

걸음수 측정기 저전력 센서

액티비티

가속도계

온체인지

걸음 감지기 저전력 센서

액티비티

가속도계

특수

기울이기 감지기 저전력 센서

액티비티

가속도계

특수

절전 모드 해제 동작 저전력 센서

상호작용

정의되지 않음

원샷

저전력 센서 = 저전력 센서

액티비티 복합 센서

선형 가속

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

보고 모드: 연속

getDefaultSensor(SENSOR_TYPE_LINEAR_ACCELERATION)non-wake-up 센서를 반환

선형 가속 센서는 센서 프레임 내 기기의 선형 가속을 보고하며, 중력은 포함하지 않습니다.

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

기기가 움직이지 않으면 모든 축의 판독값이 0에 근접해야 합니다.

기기가 자이로스코프를 보유한 경우 선형 가속 센서가 자이로스코프 및 가속도계를 입력으로 사용해야 합니다.

기기가 자이로스코프를 보유하지 않은 경우 선형 가속 센서가 가속도계와 자기계를 입력으로 사용해야 합니다.

중요한 움직임

기본 실제 센서: 가속도계(또는 저전력인 경우 또 다른 가속도계)

보고 모드: 원샷

저전력

이 센서의 wake-up 버전만 구현합니다.

getDefaultSensor(SENSOR_TYPE_SIGNIFICANT_MOTION)wake-up 센서를 반환

중요한 움직임 감지기는 '중요한 움직임'이 감지되면 트리거됩니다. 이러한 움직임은 사용자 위치의 변화로 이어질 수 있습니다.

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

  • 걷거나 자전거를 타는 경우
  • 움직이는 차나 기차에 앉아있는 경우

중요한 움직임을 트리거하지 않는 상황의 예는 다음과 같습니다.

  • 휴대전화가 주머니에 있고 사람이 움직이지 않는 경우
  • 휴대전화가 테이블에 있고 근처의 통행이나 세탁기로 인해 테이블이 약간 움직이는 경우

상위 수준에서는 중요한 움직임 감지기가 위치 파악 시의 전력 소모를 줄이는 데 사용됩니다. 기기가 정적임을 현지화 알고리즘이 감지하면 저전력 모드로 전환 가능합니다. 여기서 알고리즘은 사용자가 위치를 변경할 때 기기의 절전 모드를 해제하기 위해 중요한 움직임에 의존합니다.

이 센서는 저전력이어야 합니다. 이는 약간의 부정 오류로 이어질 수 있는 전력 소모를 상쇄합니다. 이렇게 하는 데에는 몇 가지 이유가 있습니다.

  • 이 센서의 목적은 전력을 절약하는 데 있습니다.
  • 사용자가 움직이지 않을 때 이벤트가 트리거되는 상황(긍정 오류)은 전력이 낭비되는 만큼 피해야 합니다.
  • 사용자가 움직일 때 이벤트가 트리거되지 않는 상황(부정 오류)은 반복적으로만 발생하지 않는다면 용인됩니다. 사용자가 10초 동안 걸었고 10초 안에 이벤트가 트리거되지 않는 상황은 용인되지 않습니다.

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

걸음 감지기

기본 실제 센서: 가속도계(저전력인 경우 또 다른 가속도계)

보고 모드: 특수(걸음당 1개의 이벤트)

저전력

getDefaultSensor(SENSOR_TYPE_STEP_DETECTOR)non-wake-up 센서를 반환

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

이벤트 sensors_event_t.timestamp의 타임스탬프는 발이 지면에 닿는 순간에 해당하며, 높은 가속 편차를 생성합니다.

걸음 감지기는 걸음수 측정기에 비해 지연 시간이 짧아야 합니다(2초 미만). 걸음 감지기와 걸음수 측정기 모두 사용자가 걷거나 달리거나 계단을 올라가면 이를 감지합니다. 사용자가 자전거나 차 등을 운전할 때는 트리거되면 안 됩니다.

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

sampling_period_ns는 걸음 감지기에 영향을 미치지 않습니다.

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

걸음수 측정기

기본 실제 센서: 가속도계(저전력인 경우 또 다른 가속도계)

보고 모드: 온체인지

저전력

getDefaultSensor(SENSOR_TYPE_STEP_COUNTER)non-wake-up 센서를 반환

걸음수 측정기는 마지막 재부팅 이후에 활성화된 상태에서 사용자가 걸은 걸음수를 보고합니다.

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

이벤트의 타임스탬프는 해당 이벤트의 마지막 걸음을 걸은 시점으로 설정됩니다.

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

걸음수 측정기는 걸음 감지기에 비해 더 긴 지연 시간을 가질 수 있습니다(최대 10초). 이러한 지연 시간 덕분에 이 센서는 정확성이 높습니다. 하루 동안 측정한 걸음수는 실제 걸음수의 10% 이내여야 합니다. 걸음 감지기와 걸음수 측정기 모두 사용자가 걷거나 달리거나 계단을 오르면 이를 감지하며, 사용자가 자전거나 차 등을 운전할 때는 트리거되면 안 됩니다.

하드웨어는 내부 걸음수가 오버플로되지 않는지 확인해야 합니다. 하드웨어 내부 측정기의 최소 크기는 16비트여야 합니다. 오버플로에 임박한 경우(최대 2^16걸음마다) 드라이버가 측정기 유지를 수행할 수 있도록 SoC의 절전 모드를 해제해야 합니다.

상호작용에 언급된 것처럼 이 센서가 작동하는 동안에는 다른 어떠한 센서(특히 사용되고 있을 가능성이 높은 가속도계)도 방해하면 안 됩니다.

특정 기기가 이러한 작업 모드를 지원할 수 없는 경우에는 이 센서 유형이 HAL에 의해 보고되면 안 됩니다. 즉, HAL에서 이 센서를 '에뮬레이션'하면 안 됩니다.

이 센서는 저전력이어야 합니다. 즉, 하드웨어에서 걸음을 감지할 수 없는 경우에는 이 센서를 정의하면 안 됩니다. 특히 걸음수 측정기만 활성화되고 가속도계는 활성화되지 않은 경우 가속도계 데이터가 아닌 걸음만 중단을 트리거해야 합니다.

기울임 감지기

기본 실제 센서: 가속도계(저전력인 경우 또 다른 가속도계)

보고 모드: 특수

저전력

이 센서의 wake-up 버전만 구현합니다.

getDefaultSensor(SENSOR_TYPE_TILT_DETECTOR)wake-up 센서를 반환

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

기울임 이벤트는 활성화 또는 센서에 의해 생성된 마지막 이벤트 이후에 최소 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는 하늘을 가리키며 지면과 수직을 이룹니다.

휴대전화의 방향은 East-North-Up 좌표를 휴대전화 좌표에 맞게 조정하는 데 필요한 회전으로 표현됩니다. 즉, 회전을 세계 프레임(X,Y,Z)에 적용하면 휴대전화 좌표(x,y,z)에 맞게 조정됩니다.

회전은 참조(East-North-Up에 대해 조정됨) 기기 방향을 현재 기기 방향으로 전환하기 위해 축 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]을 설정하는 자세한 방법은 회전 벡터 센서를 참조하세요.

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

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

방향(지원 중단됨)

기본 실제 센서: 가속도계, 자기계 및 (있는 경우) 자이로스코프

보고 모드: 연속

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를 통해 판독값이 얼마나 정확할 것으로 예상되는지도 보고합니다. 이 필드에 사용 가능한 값에 대한 자세한 내용은 SensorManagerSENSOR_STATUS_* 상수를 참조하세요.

미보정 센서

미보정 센서는 좀 더 원시적인 결과를 제공하며 일부 바이어스를 포함할 수 있습니다. 또한 보정을 통해 적용된 교정값의 '점프'를 훨씬 적게 포함할 수도 있습니다. 일부 애플리케이션은 좀 더 매끄럽고 안정적인 미보정 결과를 선호할 수 있습니다. 예를 들어 애플리케이션이 자체 센서 융합을 수행하려고 시도하는 경우 보정을 도입하면 오히려 결과가 왜곡될 수 있습니다.

미보정 자이로스코프

기본 실제 센서: 자이로스코프

보고 모드: 연속

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/y/z_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/y/z_bias 값은 강철 변화 예상값이 변경되는 즉시 점프해야 하며, 나머지 시간 동안 안정적이어야 합니다.

연철 보정 및 온도 보상을 측정값에 적용해야 합니다. 또한 x_bias, y_biasz_bias에서 합리적인 예상값이 보고될 수 있도록 강철 예상도 구현해야 합니다. 구현이 바이어스를 예상할 수 없는 경우에는 이 센서를 구현하면 안 됩니다.

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

상호작용 복합 센서

일부 센서는 대부분 사용자와의 상호작용을 감지하는 데 사용됩니다. Google은 이러한 센서가 구현되어야 하는 방식을 정의하지 않습니다. 하지만 이러한 센서는 저전력이어야 하며, 기기 제조업체에는 사용자 경험 측면의 품질을 확인해야 할 책임이 있습니다.

절전 모드 해제 동작

기본 실제 센서: 정의되지 않음(모든 저전력 센서)

보고 모드: 원샷

저전력

이 센서의 wake-up 버전만 구현합니다.

getDefaultSensor(SENSOR_TYPE_WAKE_GESTURE)wake-up 센서를 반환

모든 절전 모드 해제 동작은 기기의 구체적인 움직임에 따라 기기의 절전 모드를 해제할 수 있게 해줍니다. 이 센서가 트리거되면 기기가 마치 전원 버튼이 눌린 것처럼 동작하여 화면을 켭니다. 이러한 동작(이 센서가 트리거될 때 화면을 켜는 동작)은 사용자가 기기 설정에서 비활성화할 수도 있습니다. 설정 변경은 센서 동작에 영향을 미치지 않으며, 트리거 시 프레임워크에서 화면을 켜는지 여부에만 영향을 미칩니다. 감지해야 하는 실제 동작은 지정되지 않으며, 기기 제조업체가 선택할 수 있습니다.

이 센서는 24시간 활성화될 가능성이 높으므로 저전력이어야 합니다.

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

들어 올리는 동작

기본 실제 센서: 정의되지 않음(모든 저전력 센서)

보고 모드: 원샷

저전력

이 센서의 wake-up 버전만 구현합니다.

getDefaultSensor(SENSOR_TYPE_PICK_UP_GESTURE)wake-up 센서를 반환

들어 올리는 동작 센서는 이전 위치(책상, 주머니, 가방)와 상관없이 기기를 들면 트리거됩니다.

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

보기 동작

기본 실제 센서: 정의되지 않음(모든 저전력 센서)

보고 모드: 원샷

저전력

이 센서의 wake-up 버전만 구현합니다.

getDefaultSensor(SENSOR_TYPE_GLANCE_GESTURE)wake-up 센서를 반환

보기 동작 센서는 구체적인 동작에 따라 잠시 화면을 켜서 사용자가 화면의 콘텐츠를 볼 수 있게 해줍니다. 이 센서가 트리거되면 기기와 상호작용할 수 없는 잠금 상태가 유지된 상태(잠자기)에서 사용자가 알림이나 다른 콘텐츠를 볼 수 있도록 잠시 화면이 켜졌다가 다시 꺼집니다. 이 동작(센서가 트리거될 때 잠시 화면이 켜지는 동작)은 사용자가 기기 설정에서 비활성화할 수도 있습니다. 설정 변경은 센서 동작에 영향을 미치지 않으며, 트리거 시 프레임워크에서 화면을 켜는지 여부에만 영향을 미칩니다. 감지해야 하는 실제 동작은 지정되지 않으며, 기기 제조업체가 선택할 수 있습니다.

이 센서는 24시간 활성화될 가능성이 높으므로 저전력이어야 합니다. 각 센서 이벤트는 sensors_event_t.data[0]에서 1을 보고합니다.