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. 보안 및 개인정보 고려사항
가속도계와 같은 관성 센서가 제공하는 센서 판독값은 공격자가 여러 보안 위협을 악용하는 데 사용할 수 있다. 예를 들어, 키로깅, 위치 추적, 지문채취 및 사용자 식별이 있다.
보안 커뮤니티가 발표한 연구 논문, 예를 들어 [KEYSTROKEDEFENSE]는 빈도를 제한해도 성공적인 공격의 위험이 완전히 제거되지는 않으며, 반면 제한은 센서를 사용할 정당한 이유가 있는 웹 애플리케이션의 유용성에 큰 영향을 줄 수 있음을 나타낸다.
[TOUCHSIGNATURES] 및 [ACCESSORY] 연구 논문은 구현이 관성 센서가 사용 중일 때 시각적 표시를 제공하거나 센서 판독값에 접근하기 위해 명시적 사용자 동의를 요구할 수 있다고 제안한다. 이러한 완화 전략은 Generic Sensor API [GENERIC-SENSOR]에 정의된 일반적 완화를 보완한다.
이 명세는 센서 보정 지문채취 [SENSORID] 및 고정밀 센서 판독값에 의존하는 공격을 완화하기 위해 가속도계 판독값 양자화 알고리즘(최신 판독값에서 값 가져오기 연산에서 호출됨)을 정의한다. 양자화 알고리즘의 세부 사항은 W3C Privacy Interest Group의 권고를 따른다.
5. Permissions Policy 통합
이 명세는 [DEVICE-ORIENTATION]에 정의된
"accelerometer"
문자열로 식별되는 정책 제어 기능을 활용한다.
6. 모델
6.1. Accelerometer
Accelerometer 센서 타입에는 다음 연결 데이터가 있다:
- 확장 센서 인터페이스
- 센서 권한 이름
- 센서 기능 이름
- 권한 철회 알고리즘
-
"
accelerometer"로 일반 센서 권한 철회 알고리즘을 호출한다. - 기본 센서
-
기기의 주 가속도계 센서.
- 가상 센서 타입
최신 판독값은
Accelerometer 센서 타입의
Sensor에 대해,
키가 "x", "y", "z"이고 그
값이 해당 축에 대한 기기의
가속도를 포함하는 세 개의
항목을 포함한다.
가속도는 시간에 대한 기기 속도의 변화율이다. 그 단위는 초 제곱당 미터(m/s2) [SI]이다.
가속도 측정의 참조 프레임은 관성적이어야 한다. 예를 들어, 자유 낙하 중인 기기는 각 축에 대해 0 (m/s2) 가속도 값을 제공할 것이다.
가속도 값의 부호는 로컬 좌표계에서 오른손 법칙을 따라야 한다 (아래 그림 참조).
6.2. Linear Acceleration Sensor
Linear Acceleration Sensor 센서 타입에는 다음 연결 데이터가 있다:
- 확장 센서 인터페이스
- 센서 권한 이름
- 센서 기능 이름
- 권한 철회 알고리즘
-
"
accelerometer"로 일반 센서 권한 철회 알고리즘을 호출한다. - 가상 센서 타입
최신 판독값은
Linear Acceleration Sensor 센서
타입의 Sensor에 대해,
키가 "x", "y", "z"이고 그
값이 해당 축에 대한 기기의
선형 가속도를 포함하는 세 개의
항목을 포함한다.
선형 가속도는 중력 힘의 기여 없이, 센서를 호스팅하는 기기에 적용되는 가속도이다.
참고: 중력과 선형 가속도의 관계는 Motion Sensors Explainer § gravity-and-linear-acceleration에서 논의된다.
6.3. Gravity Sensor
Gravity Sensor 센서 타입에는 다음 연결 데이터가 있다:
- 확장 센서 인터페이스
- 센서 권한 이름
- 센서 기능 이름
- 권한 철회 알고리즘
-
"
accelerometer"로 일반 센서 권한 철회 알고리즘을 호출한다. - 가상 센서 타입
-
"
gravity"
최신 판독값은
Gravity Sensor 센서 타입의
Sensor에 대해,
키가 "x", "y", "z"이고 그
값이 해당 축에 대한
중력으로 인한 가속도를 포함하는 세 개의
항목을 포함한다.
중력은 기기의 속도가 주변 질량을 향해 증가하는 것을 막는 기기 가속도의 성분이다. 짧은 시간을 초과하여 자유 낙하 중인 기기는 중력에 대해 잘못된 값을 계산할 수 있다.
참고: 중력과 선형 가속도의 관계는 Motion Sensors Explainer § gravity-and-linear-acceleration에서 논의된다.
6.4. 참조 프레임
로컬 좌표계는
Accelerometer,
LinearAccelerationSensor,
및 GravitySensor
판독값에 대한 참조 프레임을 나타낸다. 이는
기기 좌표계
또는 화면 좌표계일 수 있다.
기기 좌표계는 물리적 기기에 결합된 3차원 데카르트 좌표계(x, y, z)로 정의된다. 디스플레이가 있는 기기의 경우, 기기 좌표계의 원점은 기기 디스플레이의 중심이다. 기기가 기본 위치로 잡혀 있으면, Y축은 디스플레이의 위쪽을 향하고, X축은 디스플레이의 오른쪽을 향하며, Z축은 X축과 Y축의 벡터곱이고 디스플레이 바깥쪽, 즉 보는 사람 쪽을 향한다. 기기 좌표계는 dom screen 방향과 관계없이 고정되어 있다(아래 그림 참조).
화면 좌표계는 dom screen에 결합된 3차원 데카르트 좌표계(x, y, z)로 정의된다. 화면 좌표계의 원점은 dom screen의 중심이다. Y축은 항상 dom screen의 위쪽을 향하고, X축은 dom screen의 오른쪽을 향하며 Z축은 X축과 Y축의 벡터곱이고 dom screen의 바깥쪽, 즉 보는 사람 쪽을 향한다(아래 그림 참조).
기기 좌표계와 화면 좌표계의 주요 차이는, 화면 좌표계가 항상 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
인터페이스의 속성은 this와 "x"를 인자로 사용하여
최신 판독값에서 값 가져오기를 호출한 결과를
반환한다. 이는 x축을 따른 가속도를 나타낸다.
7.1.2. Accelerometer.y
y
Accelerometer
인터페이스의 속성은 this와 "y"를 인자로 사용하여
최신 판독값에서 값 가져오기를 호출한 결과를
반환한다. 이는 y축을 따른 가속도를 나타낸다.
7.1.3. Accelerometer.z
z
Accelerometer
인터페이스의 속성은 this와 "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
인터페이스의 속성은 this와 "x"를 인자로 사용하여
최신 판독값에서 값 가져오기를 호출한 결과를
반환한다. 이는 x축을 따른 선형 가속도를 나타낸다.
7.2.2. LinearAccelerationSensor.y
y
LinearAccelerationSensor
인터페이스의 속성은 this와 "y"를 인자로 사용하여
최신 판독값에서 값 가져오기를 호출한 결과를
반환한다. 이는 y축을 따른 선형 가속도를 나타낸다.
7.2.3. LinearAccelerationSensor.z
z
LinearAccelerationSensor
인터페이스의 속성은 this와 "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
인터페이스의 속성은 this와 "x"를 인자로 사용하여
최신 판독값에서 값 가져오기를 호출한 결과를
반환한다. 이는 x축을 따른 가속도에 대한
중력의 효과를 나타낸다.
7.3.2. GravitySensor.y
y
GravitySensor
인터페이스의 속성은 this와 "y"를 인자로 사용하여
최신 판독값에서 값 가져오기를 호출한 결과를
반환한다. 이는 y축을 따른 가속도에 대한
중력의 효과를 나타낸다.
7.3.3. GravitySensor.z
z
GravitySensor
인터페이스의 속성은 this와 "z"를 인자로 사용하여
최신 판독값에서 값 가져오기를 호출한 결과를
반환한다. 이는 z축을 따른 가속도에 대한
중력의 효과를 나타낸다.
8. 추상 연산
8.1. 가속도계 객체 구성
- 입력
-
object,
Accelerometer,LinearAccelerationSensor또는GravitySensor객체.options,
AccelerometerSensorOptions객체.
-
object의 센서 타입으로 센서 정책 제어 기능 검사를 호출한 결과를 allowed라고 하자.
-
allowed가 false이면:
-
object와 options로 센서 객체 초기화를 호출한다.
-
options.
referenceFrame이 "screen"이면:
8.2. 가속도계 판독값 양자화 알고리즘
Accelerometer 센서 타입은 다음 판독값 양자화 알고리즘을 정의한다:
-
reading을 quantizedReading이라고 하자.
-
quantizedReading["x"]가 null이 아니면, quantizedReading["x"]를 가장 가까운 0.1 m/s2로 설정한다.
-
quantizedReading["y"]가 null이 아니면, quantizedReading["y"]를 가장 가까운 0.1 m/s2로 설정한다.
-
quantizedReading["z"]가 null이 아니면, quantizedReading["z"]를 가장 가까운 0.1 m/s2로 설정한다.
-
quantizedReading을 반환한다.
9. 자동화
이 절은 Generic Sensor API § 9 자동화를 확장하여 Accelerometer에 특화된 가상 센서 메타데이터를 제공한다. 이 명세가 사용하는 일부 가상 센서 타입은 [DEVICE-ORIENTATION]에 정의되어 있다.
9.1. Accelerometer 자동화
accelerometer 가상 센서 타입 및 타입별 가상 센서 메타데이터 map에서의 그 대응 항목은 Device Orientation and Motion § automation에 정의되어 있다.
9.2. Linear Accelerometer 자동화
linear-acceleration 가상 센서 타입 및 타입별 가상 센서 메타데이터 map에서의 그 대응 항목은 Device Orientation and Motion § automation에 정의되어 있다.
9.3. Gravity 자동화
타입별 가상 센서 메타데이터 map은 다음 항목을 가져야 한다:
- 키
-
"
gravity" - 값
10. 감사의 말
Generic Sensor API 작업을 수행한 Tobie Langel에게 감사한다.
센서 보정 지문채취 완화 제안과 논의를 제공한 W3C Privacy Interest Group 및 Paul Jensen에게 감사한다.