개별 선형 엔벨롭 (PWLE) 효과는 시간 경과에 따른 진동 주파수와 가속도를 정의하는 점의 시퀀스입니다. PWLE는 더 풍부하고 역동적인 햅틱 피드백을 제공합니다.
Android 16 이상에서는 PWLE 효과를 만드는 데 도움이 되는 두 가지 앱 개발자 API를 제공합니다.
- 기본 PWLE API: 간단하지만 제한사항이 있습니다. 빠르게 시작하는 데 적합합니다.
BasicEnvelopeBuilder
에서 확인할 수 있습니다. - 고급 PWLE API: 더 많은 제어 및 유연성을 제공하며 햅틱 지식과 하드웨어에 대한 약간의 지식이 필요합니다.
WaveformEnvelopeBuilder
에서 확인할 수 있습니다.
이러한 API를 지원하려면 기기에서 다음 HAL API를 구현해야 합니다.
- 주파수-출력 가속도 매핑 (FOAM): 진동 주파수를 기기에서 달성할 수 있는 최대 출력 가속도에 매핑합니다.
- Compose 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 효과의 PWLE 포인트 간에 최소 10밀리초(ms)의 시간과 16개 이상의 포인트를 처리할 수 있어야 합니다. 이러한 요구사항은 VTS 테스트에 의해 적용되므로 Android 기기 전반에서 안정적인 PWLE 효과를 보장할 수 있습니다.
고급 PWLE API
햅틱에 대한 고급 지식을 보유한 개발자는 다음 기준을 사용하여 PWLE 효과를 정의할 수 있습니다.
- [0, 1] 범위의 진폭 값은 기기 FOAM에 의해 결정된 특정 주파수에서 달성 가능한 강도를 나타냅니다. 예를 들어 0.5 값은 지정된 주파수에서 달성할 수 있는 최대 출력 가속의 절반을 생성합니다.
- 주파수는 헤르츠 단위로 직접 지정됩니다.
- 길이는 마지막 PWLE 지점에서 새 지점으로 전환하는 데 걸린 시간(밀리초)입니다.
다음은 진동기를 100ms에 걸쳐 120Hz의 0에서 최대 진폭으로 올린 후 200ms 동안 해당 상태를 유지한 다음 100ms에 걸쳐 다시 낮추는 웨이브폼의 예입니다.
VibrationEffect effect = new VibrationEffect.WaveformEnvelopeBuilder()
.addControlPoint(1.0f, 120f, 100)
.addControlPoint(1.0f, 120f, 200)
.addControlPoint(0.0f, 120f, 100)
.build();
제약 조건
프레임워크는 개발자가 제공한 요청된 주파수 및 진폭 값을 수정하지 않지만 원활한 전환을 위해 진폭 시작점 0을 추가합니다.
개발자는 PWL 효과에 지정된 주파수가 기기의 FOAM에 정의된 대로 기기의 지원 범위 내에 있는지 확인해야 합니다. 값이 이 한도를 초과하면 기기에서 진동을 재생하지 않습니다.
주파수-출력 가속 매핑 (FOAM)
기기의 주파수를 출력 가속 기능으로 정확하게 표현하는 것은 PWLE API를 지원하는 데 필수적입니다. 이 섹션에서는 이 데이터의 중요성, PWLE API에서 이 데이터를 사용하는 방법, 이 데이터를 생성하는 프로세스를 자세히 설명합니다.
매핑 이해하기
PWLE 효과를 지원하는 기기는 가속도 맵 (FOAM)을 출력하는 주파수를 제공해야 합니다. FOAM은 HAL에서 생성하는 데이터 구조로, 진동 주파수 (헤르츠)를 해당 주파수에서 액추에이터가 달성할 수 있는 최대 출력 가속도 (피크 G)에 매핑합니다. 이 맵은 지원되는 주파수 범위에서 진동 출력이 어떻게 달라지는지 이해하고 기본 PWLE API를 정의하는 데 중요합니다.
다음 플롯은 모터를 보호하기 위해 공진 주파수 근처에서 입력 전압이 제한된 일반적인 공진 액추에이터의 FOAM 예를 보여줍니다.
그림 1. 일반적인 공진형 액추에이터의 FOAM 예시
FOAM은 다음과 같은 세 가지 주요 목적으로 사용됩니다.
- 전체 주파수 범위 정의: FOAM은 지원되는 최소 및 최대 진동 주파수를 지정하여 기기의 전체 주파수 범위를 정의합니다.
- 강도 및 선명도 값 정의: 기본 PWLE API는 강도 및 선명도에 관한 인간의 지각 척도로 작동하며, 이는 FOAM의 출력 가속도 값을 사용하여 하드웨어 주파수 및 진폭 매개변수에 매핑됩니다. 이 매핑은 햅틱 효과가 하드웨어 기능에 따라 렌더링되도록 하는 데 도움이 됩니다. 선명도 범위는 최소 인식 가능한 기준점으로 정의되며 기기가 사용자가 느낄 수 있는 햅틱 효과를 생성할 수 있는 주파수에 해당합니다. 프레임워크는 선택한 주파수의 타겟 출력 가속도를 기반으로 강도 값을 진폭에 매핑합니다. 이렇게 하면 기기의 기능을 벗어나지 않으면서 선택한 강도 수준을 달성할 수 있습니다.
- 하드웨어 기능 노출: FOAM은
VibratorFrequencyProfile
에서 개발자에게 노출되어 기기의 일부 햅틱 기능을 자세히 설명하는 가속도 데이터 세트를 출력하는 전체 주파수를 제공합니다. 이 데이터를 통해 개발자는 고급 PWLE API를 사용하여 프레임워크에서 정의한 기본 강도 및 선명도 범위를 넘어서는 맞춤 진동 효과를 만들 수 있습니다.
FOAM 및 기본 PWLE API
FOAM은 진동 효과를 형성하는 데 중요한 역할을 합니다. 기본 Envelope 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는 인식된 강도가 연속된 컨트롤 포인트 쌍 간에 선형으로 변경되도록 합니다.
다음 그래프는 시간 주파수 함수로서 10, 20, 30, 40, 50dB SL의 진동 가속도 수준2과 인간의 햅틱 감지 감지 기준점 (0dB SL)을 보여줍니다.
그림 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 프레임워크는 주파수를 Hertz 단위로 취하므로 HAL은 FOAM 데이터를 생성할 때 주파수 단위를 초당 라디안에서 Hertz로 변환해야 합니다.
FOAM 곡선 생성
최대 전압 곡선 (V
)과 가속도 계산 (M
)을 결합하여 FOAM 곡선을 결정합니다.
- 원하는 범위의 각 주파수 (
f
)에 대해 최대 전압 곡선에서 상응하는 최대 전압V(f)
을 찾습니다. - 위의 방정식을 사용하여 해당 주파수에서 최대 가속도를 계산합니다.
Vsys
에V(f)
를,w
에 상응하는f
를 대입합니다. 그러면M(V(f), f)
가 표시됩니다. - 계산된 가속도가
FOAM(f)
값입니다.
FOAM 데이터 노출
FOAM 곡선이 생성되면 HAL은 곡선을 FrequencyAccelerationMapEntry
객체 목록으로 나타냅니다. 각 항목은 주파수 (헤르츠)와 이에 상응하는 최대 출력 가속도 (피크 G)를 지정하여 매핑의 지점을 정의합니다.
FOAM의 해상도에 대한 엄격한 요구사항은 없지만 최대 봉우리가 하나인 곡선을 정의하는 것이 좋습니다. 기본 엔벨롭 API에서는 첫 번째 피크만 사용하여 진동 효과를 매핑합니다. 중간 가속도 값을 결정할 때 선형 보간법의 정확성을 최적화하려면 최대값 주변에 높은 주파수 해상도를 정의하는 것이 좋습니다. 예를 들어 최대 주파수의 +/- 10Hz 범위 내에서 1Hz 간격을 사용합니다.
기기 기능 및 제한사항
Android 16 이상에서는 개발자가 PWLE 효과를 최적화하고 여러 기기 간에 호환성을 보장할 수 있도록 기기의 PWLE 기능을 쿼리하는 HAL API가 Android에 포함되어 있습니다. 이러한 메서드는 최소 또는 최대 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.의 그림 1의 변위 임곗값에서 변환됩니다. S. J., et al.. '네 채널이 터치의 기계적 측면을 매개합니다.' Journal of the Acoustical Society of America 84(5): 1680-1694 (1988). 이 온라인 튜토리얼에서는 가속도 진폭과 변위 진폭 간의 변환을 설명합니다. ↩
-
이 데이터는 Verrillo, R의 그림 8에서 추정되었습니다. T. et al.. '진동 촉각 자극의 감각 크기' Perception & Psychophysics 6: 366-372 (1969). ↩