조각별 선형 엔벨로프 (PWLE) 효과는 시간에 따른 진동 주파수와 가속도를 정의하는 점의 시퀀스입니다. PWLE는 더 풍부하고 동적인 햅틱 피드백을 제공합니다.
Android 16 이상은 PWLE 효과를 만드는 데 도움이 되는 두 가지 앱 개발자 API를 제공합니다.
- 기본 PWLE API: 간단하지만 제한사항이 있습니다. 빠르게 시작하는 데 적합합니다.
BasicEnvelopeBuilder에서 사용할 수 있습니다. - 고급 PWLE API: 더 많은 제어와 유연성을 제공하며 햅틱 지식과 하드웨어에 대한 약간의 숙지가 필요합니다.
WaveformEnvelopeBuilder에서 사용할 수 있습니다.
이러한 API를 지원하려면 기기에서 다음 HAL API를 구현해야 합니다.
- 공진 주파수: 액추에이터의 공진 주파수를 제공합니다.
- 주파수-출력 가속도 매핑 (FOAM): 기기의 최대 달성 가능한 출력 가속도에 대한 진동 주파수 매핑을 제공합니다.
- PWLE 작성: 진동 파형의 PWLE로 정의된 진동을 재생합니다.
기본 PWLE API
하드웨어나 인간 지각의 미묘한 차이를 자세히 살펴보지 않고도 PWLE 효과를 빠르게 만들 수 있도록 개발자는 다음 매개변수를 사용하여 정의된 기본 PWLE API를 사용할 수 있습니다.
- [0, 1] 범위의 강도 값은 진동의 지각된 강도를 나타냅니다. 예를 들어 0.5 값은 기기에서 달성할 수 있는 전역 최대 강도의 절반으로 인식됩니다.
- [0, 1] 범위의 선명도 값은 진동의 선명도를 나타냅니다. 값이 낮을수록 진동이 더 부드러워지고 값이 높을수록 더 선명한 느낌이 생성됩니다.
- 길이 는 마지막 PWLE 지점(즉, 강도 및 선명도 쌍)에서 새 지점으로 전환하는 데 걸리는 시간(밀리초)입니다.
다음은 500ms 동안 낮은 피치에서 높은 피치 최대 강도 진동으로 강도를 높인 다음 100ms 동안 0(꺼짐)으로 강도를 낮추는 파형의 예입니다.
VibrationEffect effect = new VibrationEffect.BasicEnvelopeBuilder()
.setInitialSharpness(0.0f)
.addControlPoint(1.0f, 1.0f, 500)
.addControlPoint(0.0f, 1.0f, 100)
.build();
제약 조건
부드럽고 원활한 햅틱 환경을 만들려면 PWLE 효과가 강도 0.0으로 시작하고 끝나야 합니다. API는 시작 강도를 0으로 고정하여 이를 적용하고 종료 강도가 0이 아니면 예외를 발생시킵니다. 이 제약 조건은 진폭의 불연속성으로 인해 진동에서 바람직하지 않은 동적 효과가 발생하는 것을 방지하여 사용자의 햅틱 지각에 부정적인 영향을 미칠 수 있습니다.
Android 생태계 전반에서 일관된 PWLE 효과 렌더링을 보장하기 위해 프레임워크에서는 이 기능을 지원하는 기기가 PWLE 지점 간에 최소 20ms의 기간과 PWLE 효과에 최소 16개의 지점을 처리할 수 있어야 합니다. 이러한 요구사항은 VTS 테스트를 통해 적용되어 Android 기기 전반에서 안정적인 PWLE 효과를 보장하는 데 도움이 됩니다.
고급 PWLE API
햅틱에 대한 고급 지식을 갖춘 개발자는 다음 기준을 사용하여 PWLE 효과를 정의할 수 있습니다.
- [0, 1] 범위의 진폭 값은 기기 FOAM에 의해 결정된 대로 지정된 주파수에서 달성 가능한 강도를 나타냅니다. 예를 들어 0.5 값은 지정된 주파수에서 달성할 수 있는 최대 출력 가속도의 절반을 생성합니다.
- 주파수 는 헤르츠로 직접 지정됩니다.
- 길이 는 마지막 PWLE 지점에서 새 지점으로 전환하는 데 걸리는 시간(밀리초)입니다.
다음은 100ms 동안 120Hz에서 진동기를 꺼짐에서 최대 진폭으로 높이고 200ms 동안 해당 상태를 유지한 다음 100ms 동안 다시 낮추는 파형의 예입니다.
VibrationEffect effect = new VibrationEffect.WaveformEnvelopeBuilder()
.addControlPoint(1.0f, 120f, 100)
.addControlPoint(1.0f, 120f, 200)
.addControlPoint(0.0f, 120f, 100)
.build();
제약 조건
프레임워크는 개발자가 제공한 요청된 주파수 및 진폭 값을 수정하지 않지만 부드러운 전환을 보장하기 위해 0 진폭 시작점을 추가합니다.
개발자는 PWLE 효과에 지정된 주파수가 기기의 FOAM에 의해 정의된 대로 기기의 지원되는 범위 내에 있는지 확인해야 합니다. 값이 이러한 한도를 초과하면 기기에서 진동이 재생되지 않습니다.
주파수-출력 가속도 매핑 (FOAM)
기기의 주파수-출력 가속도 기능을 정확하게 표현하는 것은 PWLE API를 지원하는 데 필수적입니다. 이 섹션에서는 이 데이터의 중요성, PWLE API에서 사용되는 방식, 생성 프로세스를 자세히 설명합니다.
매핑 이해하기
PWLE 효과를 지원하는 기기는 주파수-출력 가속도 맵 (FOAM)을 제공해야 합니다. FOAM은 해당 주파수에서 진동 주파수 (헤르츠)를 액추에이터의 최대 달성 가능한 출력 가속도 (G 피크)에 매핑하는 HAL에서 생성된 데이터 구조입니다. 이 맵은 지원되는 주파수 범위에서 진동 출력이 어떻게 달라지는지 이해하고 기본 PWLE API를 정의하는 데 중요합니다.
다음 그림은 모터를 보호하기 위해 공진 주파수 주변으로 입력 전압이 제한된 일반적인 공진 액추에이터의 FOAM 예를 보여줍니다.
그림 1. 일반적인 공진 액추에이터의 FOAM 예
FOAM은 다음과 같은 세 가지 주요 용도로 사용됩니다.
- 전체 주파수 범위 정의: FOAM은 지원되는 최소 및 최대 진동 주파수를 지정하여 기기의 전체 주파수 범위를 정의합니다.
- 강도 및 선명도 값 정의: 기본 PWLE API는 강도 및 선명도에 대한 인간 지각 규모로 작동하며, 이는 FOAM의 출력 가속도 값을 사용하여 하드웨어 주파수 및 진폭 매개변수에 매핑됩니다. 이 매핑은 햅틱 효과가 하드웨어 기능에 따라 렌더링되도록 하는 데 도움이 됩니다. 선명도 범위 는 최소 지각 가능한 기준에 의해 정의되며 기기에서 사용자가 느낄 수 있는 햅틱 효과를 생성할 수 있는 주파수에 해당합니다. 프레임워크는 선택한 주파수에서 타겟 출력 가속도를 기반으로 강도 값을 진폭에 매핑합니다. 이렇게 하면 기기의 기능 내에서 선택한 강도 수준을 달성할 수 있습니다.
- 하드웨어 기능 노출: FOAM은
VibratorFrequencyProfile에서 개발자에게 노출되어 기기의 햅틱 기능을 자세히 설명하는 전체 주파수-출력 가속도 데이터 세트를 제공합니다. 이 데이터를 통해 고급 PWLE API를 사용하는 개발자는 프레임워크에서 정의한 기본 강도 및 선명도 범위를 벗어나는 맞춤 진동 효과를 만들 수 있습니다.
FOAM 및 기본 PWLE API
FOAM은 진동 효과를 형성하는 데 중요한 역할을 합니다. 기본 엔벨로프 API의 선명도 범위를 계산하는 데 사용되어 진동이 사용자에게 지각될 수 있도록 합니다. 이 범위는 출력 가속도가 인간 지각 감지 기준 (즉, 최소 지각 가능한 수준)보다 10dB 에 처음 도달하는 주파수부터 출력 가속도가 마지막으로 해당 기준을 초과하는 주파수까지에 해당합니다. 이 범위에는 액추에이터의 공진 주파수가 포함되어야 합니다.
또한 프레임워크는 FOAM 데이터를 사용하여 기본 PWLE API에 사용된 강도 및 선명도 값을 해당하는 진폭 및 주파수 값에 매핑합니다. 이 매핑은 다양한 기기에서 지각 가능한 햅틱 피드백을 생성하는 데 도움이 됩니다.
엔벨로프 효과를 지원하는 기기에 지각 가능한 진동을 생성하는 비어 있지 않은 주파수 범위가 있고 범위에 액추에이터의 공진 주파수가 포함되어 있는지 확인하기 위해 VTS 테스트가 마련되어 있습니다. 이렇게 하면 기기에서 사용자가 명확하게 느낄 수 있을 만큼 충분한 강도의 진동을 생성할 수 있습니다.
FOAM 및 고급 PWLE API
FOAM은 VibratorFrequencyProfile와 함께
다음 정보와 함께 개발자에게 노출됩니다.
- 주파수 범위: 개발자는 각각
getMinFrequencyHz및getMaxFrequencyHz를 사용하여 기기의 최소 및 최대 지원 주파수를 헤르츠 단위로 가져올 수 있습니다. - 최대 출력 가속도: 기기의 최대 달성 가능한 출력
가속도 (G)는
getMaxOutputAccelerationGs를 통해 사용할 수 있습니다. - 주파수-출력 가속도 매핑:
getFrequenciesOutputAcceleration은 HAL에 구현된 대로 주파수-출력 가속도 매핑을 제공합니다.
개발자는 고급 PWLE API로 엔벨로프 효과를 만들 때 이 정보를 사용할 수 있습니다. 예를 들어 출력 가속도 (G)를 지정할 때 기기의 최대 출력 가속도에 상대적으로 [0.0, 1.0] 범위 내의 값으로 정규화해야 합니다.
고급 PWLE API를 사용하면 개발자가 전체 주파수 범위를 사용할 수 있으므로 제공된 FOAM 데이터가 진동기에 안전하고 진동기의 기능을 초과하지 않는 것이 중요합니다.
인간 지각 감지 기준
인간 지각 감지 기준은 사람이 안정적으로 감지할 수 있는 진동의 최소 가속도를 나타냅니다. 이 수준은 진동 주파수에 따라 다릅니다.
다음 그림은 시간 주파수의 함수로 가속도에서 인간 햅틱 지각 감지 기준1을 보여줍니다.
그림 2. 인간 햅틱 지각 감지 기준
사용자가 햅틱 효과를 일관되게 느낄 수 있도록 VTS 테스트는 엔벨로프 기능이 있는 기기에 인간 지각 감지 기준을 10dB 초과하는 진동 진폭을 생성할 수 있는 주파수 범위가 있는지 확인합니다.
지각된 진동 강도와 진동 가속도 진폭
진동 강도 (지각 측정)에 대한 인간 지각은 진동 진폭 (물리적 매개변수)에 따라 선형으로 증가하지 않습니다. PWLE API는 디자이너 또는 개발자가 진동 강도의 변화를 생각할 때 지각된 강도가 PWLE를 따를 것으로 예상한다고 가정합니다. 지각된 강도는 동일한 주파수에서 감지 기준 위의 dB로 정의되는 감각 수준 (SL)으로 특징지어집니다. 따라서 진동 가속도 진폭 (G 피크)은 다음과 같이 계산할 수 있습니다.
\(Amplitude(G) =10^\frac{Amplitude(db)}{20}\)
여기서 진폭 dB는 특정 주파수에서 SL과 감지 기준 (다음 그림의 세로축을 따라 있는 값)의 합입니다.
이러한 방식으로 PWLE API는 지각된 강도가 연속적인 제어점 쌍 간에 선형으로 변경되도록 합니다.
다음 그림은 시간 주파수의 함수로 인간 햅틱 지각 감지 기준 (0dB SL)과 함께 10, 20, 30, 40, 50dB SL에서 진동 가속도 수준2을 보여줍니다.
그림 3. 진동 가속도 수준
최대 출력 가속도 곡선에 대한 주파수 결정
이 섹션에서는 FOAM 데이터를 생성하는 데 사용하는 기기에서 최대 출력 가속도 곡선에 대한 주파수를 가져오는 방법에 관한 일반적인 가이드라인을 제공합니다.
최대 전압 곡선 (V) 가져오기
V 는 작동 주파수 범위에서 진동기에 안전하게 적용할 수 있는 최대 전압입니다. 이렇게 하면 진동기가 안전한 한도 내에서 작동하여 손상을 방지하고 진동 출력을 극대화할 수 있습니다.
하드웨어에 전압 제한 기능이 포함되어 있는 경우 이 기능을 사용하여 지원되는 주파수 범위에서 달성 가능한 최대 전압을 직접 측정합니다.
최대 가속도 (M) 계산
M 은 다양한 방법론을 통해 계산할 수 있는 최대 가속도입니다. 이 섹션에서는 선형 공진 액추에이터 (LRA)를 사용하는 기기의 한 가지 방법을 보여줍니다.
이 메서드는 지정된 주파수에서 적용된 최대 전압을 G 피크로 표현된 해당하는 최대 가속도 값으로 변환합니다.
이 변환에 사용되는 핵심 방정식은 다음과 같습니다.
\(\text{Accel}(w)= (\text{Vsys}\times\text{BLsys}\times\text{Loc_coeff}/\text{Rsys}/\text{MPhone})\times{w^2}/\text{Psys_abs}/{9.81}\)
각각의 의미는 다음과 같습니다.
Vsys: 햅틱 액추에이터에 적용되는 실제 전압 수준
BLsys: 진동 모터의 자기장 강도 (B)와 도체 길이 (L)의 곱
Loc_coeff: 모듈 수준 가속도를 휴대전화 수준 가속도로 변환하는 위치 계수
Rsys: 진동 모터 코일의 전기 저항
MPhone: 기기 (예: 휴대전화)의 질량
w: 구동 신호의 각 주파수 (초당 라디안)로 다음과 같이 계산됩니다.
\(w = 2 \pi f\)
Psys_abs: 2차 질량, 댐퍼, 스프링 시스템의 진폭 응답으로 다음과 같이 계산됩니다.
\(\text{Psys_abs} = (\text{Wnsys}^2-w^2)^2+({w}\times(\text{Wnsys}/\text{Qsys}))^2\)
Wnsys: 진동 시스템의 고유 주파수
Qsys: 진동 시스템의 품질 계수
Loc_coeff 는 휴대전화 수준에서 측정된 가속도와 모듈 수준에서 측정된 가속도의 비율입니다. 이 비율은 모듈 수준 가속도 판독값을 상응하는 휴대전화 수준 가속도 판독값으로 변환하는 데 사용됩니다. 휴대전화 수준에서 모듈 이동의 각가속도로 인해 가속도가 증폭되며 이 계수는 이러한 유형의 효과를 고려합니다. 다음과 같이 계산됩니다.
\(\text{Loc_coeff} = \text{phone_acceleration} / \text{module_acceleration}\)
예를 들어 모듈 가속도가 1g이고 휴대전화 가속도가 2.5g이면 Loc_coeff = 2.5입니다. 이는 2.5배 증폭을 나타냅니다.
Android 프레임워크는 헤르츠 단위의 주파수를 사용하므로 HAL은 FOAM 데이터를 생성할 때 주파수 단위를 초당 라디안에서 헤르츠로 변환해야 합니다.
FOAM 곡선 생성
최대 전압 곡선 (V)과 가속도 계산 (M)을 결합하여 FOAM 곡선을 결정합니다.
- 원하는 범위의 각 주파수 (
f)에 대해 최대 전압 곡선에서 상응하는 최대 전압V(f)을 찾습니다. - 위의 방정식을 사용하여 해당 주파수에서 최대 가속도를 계산합니다.
Vsys를V(f)로, 상응하는w를f로 대체합니다. 이렇게 하면M(V(f), f)가 됩니다. - 이 계산된 가속도가
FOAM(f)값입니다.
FOAM 데이터 노출
FOAM 곡선이 생성되면 HAL은 곡선을 FrequencyAccelerationMapEntry 객체 목록으로 나타냅니다. 각 항목은 매핑의 지점을 정의하여 주파수 (헤르츠)와 상응하는 최대 출력 가속도 (G 피크)를 지정합니다.
중간 가속도 값을 결정할 때 선형 보간의 정확성을 최적화하려면 최대 출력 가속도가 있는 주파수 주변에 높은 주파수 해상도를 정의하는 것이 좋습니다. 예를 들어 이 주파수의 +/- 10Hz 범위 내에서 1Hz 단계를 사용합니다.
기기 기능 및 제한사항
Android 16 이상에서는 개발자가 PWLE 효과를 최적화하고 기기 간 호환성을 보장할 수 있도록 Android에 기기의 PWLE 기능을 쿼리하는 HAL API가 포함되어 있습니다. 이러한 메서드는 최소 또는 최대 PWLE 기본 기간, PWLE 구성에서 허용되는 기본 요소 수와 같은 기기의 제한사항에 관한 정보를 제공합니다.
HAL API에는 다음이 포함됩니다.
CAP_COMPOSE_PWLE_EFFECTS_V2: 기기에서 이 기능을 지원할 때IVibrator.getCapabilities에서 반환됩니다.getFrequencyToOutputAccelerationMap: FOAM 데이터를 가져옵니다.getPwleV2PrimitiveDurationMinMillis: 기본 PWLE에 허용되는 최소 기간을 밀리초 단위로 가져옵니다.getPwleV2PrimitiveDurationMaxMillis: 기본 PWLE에 허용되는 최대 기간을 밀리초 단위로 가져옵니다.getPwleV2CompositionSizeMax:IVibrator.composePwleV2에서 지원하는 최대 PWLE 기본 요소 수를 가져옵니다.
이 정보는 개발자가 특히 고급 PWLE API를 사용할 때 효과를 타겟 기기의 특정 기능에 맞게 조정할 수 있도록 개발자에게 노출됩니다.
프레임워크는 기본 API로 만든 효과를 처리할 때도 이러한 API를 사용합니다. 효과가 기기의 제한사항 (예: 너무 많은 PWLE 지점 또는 최대 기간 초과)을 초과하는 경우 프레임워크는 허용된 경계 내에 맞도록 효과를 자동으로 조정합니다. 이 조정 프로세스는 디자인의 원래 의도와 느낌을 최대한 유지하려고 합니다.
-
기준 데이터는 변위 임계값에서 변환되었습니다. Bolanowski Jr., S. J. 등의 그림 1에 있는 변위 기준에서 변환됩니다. "4개의 채널이 터치의 기계적 측면을 매개합니다." 미국 음향 학회 저널 84(5): 1680-1694 (1988). 이 온라인 튜토리얼에서는 가속도 진폭과 변위 진폭 간의 변환을 설명합니다. ↩
-
데이터는 Verrillo, R. T. 등의 그림 8에서 추정됩니다. "진동 촉각 자극의 감각 크기." 지각 및 정신 물리학 6: 366-372 (1969). ↩