1. 소개
Accelerometer,
LinearAccelerationSensor
및 GravitySensor
API는 Generic Sensor API [GENERIC-SENSOR] 인터페이스를 확장하여,
디바이스의 가속도 정보를,
디바이스가 정의하는 로컬 좌표계 기준 X, Y, Z 축에 적용된 값을 제공합니다.
2. 예시
let sensor= new Accelerometer(); sensor. start(); sensor. onreading= () => { console. log( "Acceleration along X-axis: " + sensor. x); console. log( "Acceleration along Y-axis: " + sensor. y); console. log( "Acceleration along Z-axis: " + sensor. z); } sensor. onerror= event=> console. log( event. error. name, event. error. message);
let sensor= new GravitySensor({ frequency: 5 , referenceFrame: "screen" }); sensor. onreading= () => { if ( sensor. y>= 9.8 ) { console. log( "Web page is perpendicular to the ground." ); } } sensor. start();
const shakeThreshold= 25 ; let sensor= new LinearAccelerationSensor({ frequency: 60 }); sensor. addEventListener( 'reading' , () => { if ( sensor. x> shakeThreshold) { console. log( "Shake detected." ); } }); sensor. start();
3. 사용 사례 및 요구사항
사용 사례와 요구사항은 Motion Sensors Explainer 및 Sensor use cases 문서에 나와 있습니다.
4. 보안 및 개인정보 고려사항
Sensor readings와 같이 관성 센서가 제공하는 정보는, 공격자에 의해 예를 들어서 키로깅, 위치 추적, 지문 식별 및 사용자 식별 등 다양한 보안 위협을 노리는 데 활용될 수 있습니다.
예를 들어 [KEYSTROKEDEFENSE] 등의 보안 커뮤니티 연구 논문에 따르면, 빈도 제한만으로는 공격 성공 위험을 완전히 제거할 수 없지만, 제한은 센서 정당 활용 목적의 웹앱에도 큰 영향을 미칠 수 있다고 설명합니다.
[TOUCHSIGNATURES] 와 [ACCESSORY] 연구 논문에서는 관성 센서가 사용 중임을 시각적으로 알리거나, 센서 측정값에 접근할 때 명시적 사용자 동의를 받아야 한다는 대응책을 제시하고 있습니다. 이러한 완화 전략은 Generic Sensor API [GENERIC-SENSOR]에 정의된 일반적인 대응책을 보완합니다.
이 명세서는 가속도계 읽기 양자화 알고리즘을 정의하여(이 알고리즘은 가장 최근 측정값에서 값 얻기 연산에서 호출됨), 센서 보정값 기반 지문 식별 [SENSORID] 및 고정밀 센서 측정값을 기반으로 하는 공격에 대응합니다. 양자화 알고리즘의 구체 내용은 W3C 개인정보 이슈 그룹의 권고를 따릅니다.
5. 권한 정책 연동
이 명세는 정책 제어 기능을 사용합니다.
이 기능은 [DEVICE-ORIENTATION]에서
"accelerometer"
문자열로 정의되어 있습니다.
6. 모델
6.1. 가속도계
Accelerometer 센서 유형에는 다음 데이터가 연관됩니다:
- 확장 센서 인터페이스
- 센서 권한 이름
- 센서 기능 이름
- 권한 해제 알고리즘
-
일반 센서 권한 해제 알고리즘을 "
accelerometer"와 함께 호출합니다. - 기본 센서
-
디바이스의 주 가속도계 센서입니다.
- 가상 센서 유형
최신
측정값(Sensor)은
Accelerometer 센서 유형의 경우,
"x", "y", "z" 세 항목의 키와
각 축의 디바이스 가속도 값을 담습니다.
가속도는 시간에 따른 디바이스 속도 변화율입니다. 단위는 미터 매 제곱초(m/s2) [SI]입니다.
가속도 측정의 기준 프레임은 관성이어야 하며, 예를 들어 자유 낙하 중인 디바이스는 각 축별 0(m/s2) 가속도 값을 제공합니다.
가속도 부호는 로컬 좌표계의 오른손 법칙을 따라야 합니다(아래 그림 참조).
6.2. 선형 가속도 센서
Linear Acceleration Sensor 센서 유형에는 다음 데이터가 연관됩니다:
- 확장 센서 인터페이스
- 센서 권한 이름
- 센서 기능 이름
- 권한 해제 알고리즘
-
일반 센서 권한 해제 알고리즘을 "
accelerometer"와 함께 호출합니다. - 가상 센서 유형
최신
측정값 (Sensor)은
Linear Acceleration Sensor 센서
유형의 경우,
"x", "y", "z" 세 항목의 키와
각 축의 디바이스 선형 가속도 값을
담습니다.
선형 가속도란, 센서가 탑재된 장치에 중력(gravity) 힘을 제외하고 가해지는 가속도입니다.
참고: 중력과 선형 가속도 간의 관계에 대해서는 Motion Sensors Explainer § gravity-and-linear-acceleration에서 논의합니다.
6.3. 중력 센서
Gravity Sensor 센서 유형에는 다음 데이터가 연관됩니다:
- 확장 센서 인터페이스
- 센서 권한 이름
- 센서 기능 이름
- 권한 해제 알고리즘
-
일반 센서 권한 해제 알고리즘을 "
accelerometer"와 함께 호출합니다. - 가상 센서 유형
-
"
gravity"
최신
측정값(Sensor)은
Gravity
Sensor 센서 유형의 경우,
"x", "y", "z" 세 항목의 키와
각 축의 중력에 의한 가속도 값을 담습니다.
중력은 디바이스의 속도가 주변 질량 쪽으로 증가하는 것을 방지하는 가속도 성분입니다. 자유 낙하가 일정 시간 이상 지속되면 디바이스는 중력값을 잘못 산출할 수 있습니다.
참고: 중력과 선형 가속도 간 관계는 Motion Sensors Explainer § gravity-and-linear-acceleration를 참고하세요.
6.4. 참고 기준(Reference Frame)
로컬 좌표계는
Accelerometer,
LinearAccelerationSensor,
GravitySensor
측정값의 기준 프레임을 의미합니다. 이는 장치 좌표계 또는
스크린 좌표계일
수 있습니다.
장치 좌표계는 3차원 데카르트 좌표계(x, y, z)로 정의되며, 물리적 장치와 결합되어 있습니다. 디스플레이가 있는 장치의 경우 장치 좌표계의 원점은 디바이스 디스플레이의 중심입니다. 장치를 기본 위치로 잡으면 Y축은 디스플레이의 위쪽, X축은 오른쪽, Z축은 X와 Y의 벡터곱으로 화면 기준 바깥쪽(사용자쪽)을 향합니다. 장치 좌표계는 dom screen 회전에 영향받지 않고 고정되어 있습니다(아래 그림 참고).
스크린 좌표계는 3차원 데카르트 좌표계(x, y, z)로 정의되며 dom screen과 결합되어 있습니다. 스크린 좌표계의 원점은 dom screen의 중심입니다. Y축은 항상 dom screen 위쪽, X축은 dom screen 오른쪽, Z축은 X, Y의 벡터곱으로 스크린 바깥쪽, 즉 사용자쪽을 향합니다(아래 그림 참고).
장치 좌표계와 스크린 좌표계의 주요 차이는 스크린 좌표계는 항상 dom screen의 방향을 따르며, 예를 들어 현재 방향이 바뀌면 X, Y 축이 장치 기준에서 바뀔 수 있습니다. 반면 장치 좌표계는 장치에 대해 항상 고정됩니다.
7. API
7.1. Accelerometer 인터페이스
[SecureContext ,Exposed =Window ]interface :Accelerometer Sensor {constructor (optional AccelerometerSensorOptions = {});options readonly attribute double ?;x readonly attribute double ?;y readonly attribute double ?; };z enum {AccelerometerLocalCoordinateSystem ,"device" };"screen" dictionary :AccelerometerSensorOptions SensorOptions {AccelerometerLocalCoordinateSystem = "device"; };referenceFrame
Accelerometer의 지원 옵션은 "frequency", "referenceFrame"입니다.
7.1.1. Accelerometer.x
x
속성은 Accelerometer
인터페이스에서 가장 최근 측정값에서 값 얻기를 "x" 인자로 실행한 결과를 반환합니다. x축 가속도를 나타냅니다.
7.1.2. Accelerometer.y
y
속성은 Accelerometer
인터페이스에서 가장 최근 측정값에서 값 얻기를 "y" 인자로 실행한 결과를 반환합니다. y축 가속도를 나타냅니다.
7.1.3. Accelerometer.z
z
속성은 Accelerometer
인터페이스에서 가장 최근 측정값에서 값 얻기를 "z" 인자로 실행한 결과를 반환합니다. z축 가속도를 나타냅니다.
7.2. LinearAccelerationSensor 인터페이스
[SecureContext ,Exposed =Window ]interface :LinearAccelerationSensor Accelerometer {constructor (optional AccelerometerSensorOptions = {}); };options
LinearAccelerationSensor의 지원 옵션은 "frequency", "referenceFrame"입니다.
7.2.1. LinearAccelerationSensor.x
x
속성은 LinearAccelerationSensor
인터페이스에서 가장 최근 측정값에서 값 얻기를 "x" 인자로 실행한 결과를 반환합니다. x축 선형가속도를
나타냅니다.
7.2.2. LinearAccelerationSensor.y
y
속성은 LinearAccelerationSensor
인터페이스에서 가장 최근 측정값에서 값 얻기를 "y" 인자로 실행한 결과를 반환합니다. y축 선형가속도를
나타냅니다.
7.2.3. LinearAccelerationSensor.z
z
속성은 LinearAccelerationSensor
인터페이스에서 가장 최근 측정값에서 값 얻기를 "z" 인자로 실행한 결과를 반환합니다. z축 선형가속도를
나타냅니다.
7.3. GravitySensor 인터페이스
[SecureContext ,Exposed =Window ]interface :GravitySensor Accelerometer {constructor (optional AccelerometerSensorOptions = {}); };options
GravitySensor의 지원 옵션은 "frequency", "referenceFrame"입니다.
7.3.1. GravitySensor.x
x
속성은 GravitySensor
인터페이스에서 가장 최근 측정값에서 값 얻기를 "x" 인자로 실행한 결과를 반환합니다. 중력에 의한 x축 가속도
효과를 나타냅니다.
7.3.2. GravitySensor.y
y
속성은 GravitySensor
인터페이스에서 가장 최근 측정값에서 값 얻기를 "y" 인자로 실행한 결과를 반환합니다. 중력에 의한 y축 가속도
효과를 나타냅니다.
7.3.3. GravitySensor.z
z
속성은 GravitySensor
인터페이스에서 가장 최근 측정값에서 값 얻기를 "z" 인자로 실행한 결과를 반환합니다. 중력에 의한 z축 가속도
효과를 나타냅니다.
8. 추상 연산
8.1. 가속도계 객체 생성
- input
-
object,
Accelerometer,LinearAccelerationSensor또는GravitySensor객체options,
AccelerometerSensorOptions객체
-
allowed를 정책 제어 기능 확인에 object의 센서 유형으로 호출한 결과로 설정
-
allowed가 false이면:
-
센서 객체 초기화를 object, options로 호출
-
options.
referenceFrame이 "screen"이면:
8.2. 가속도계 읽기 양자화 알고리즘
Accelerometer 센서 유형은 다음 읽기 양자화 알고리즘을 정의합니다:
-
quantizedReading을 reading으로 설정
-
quantizedReading["x"]가 null이 아니면 0.1 m/s2 단위로 근사
-
quantizedReading["y"]가 null이 아니면 0.1 m/s2 단위로 근사
-
quantizedReading["z"]가 null이 아니면 0.1 m/s2 단위로 근사
-
quantizedReading 반환
9. 자동화
이 절은 Generic Sensor API § 9 Automation을 확장하여 Accelerometer에 특화된 가상 센서 메타데이터를 제공합니다. 본 명세서에서 사용하는 일부 가상 센서 유형은 [DEVICE-ORIENTATION]에 정의되어 있습니다.
9.1. 가속도계 자동화
accelerometer 가상 센서 타입과 이에 대응하는 타입별 가상 센서 메타데이터 map 항목은 Device Orientation and Motion § automation에 정의되어 있습니다.
9.2. 선형 가속도계 자동화
linear-acceleration 가상 센서 타입과 이에 대응하는 타입별 가상 센서 메타데이터 map 항목은 Device Orientation and Motion § automation에 정의되어 있습니다.
9.3. 중력 자동화
타입별 가상 센서 메타데이터 map 은 다음 entry를 가져야 합니다:
- key
-
"
gravity" - value
-
가상 센서 메타데이터로, reading parsing algorithm은 parse xyz reading입니다.
10. 감사의 글
Generic Sensor API 작업에 기여한 Tobie Langel.
센서 보정값 지문 방지 방안 및 논의에 기여한 W3C Privacy Interest Group와 Paul Jensen.