اثرات پاکت خطی تکه ای (PWLE) دنباله ای از نقاط هستند که فرکانس ارتعاش و شتاب را در طول زمان تعریف می کنند. PWLE ها بازخورد لمسی غنی تر و پویاتری ارائه می دهند.
Android 16 و بالاتر دو API توسعه دهنده برنامه را برای کمک به ایجاد جلوه های PWLE ارائه می دهد:
- پایه PWLE API: ساده، اما با محدودیت. برای شروع سریع خوب است. این در
BasicEnvelopeBuilder
موجود است. - API پیشرفته PWLE: کنترل و انعطاف پذیری بیشتر، نیازمند دانش لمسی و آشنایی با سخت افزار است. موجود در
WaveformEnvelopeBuilder
.
برای پشتیبانی از این API ها، دستگاه ها باید API های HAL زیر را پیاده سازی کنند:
- نقشه برداری فرکانس به خروجی شتاب (FOAM): نقشه برداری از فرکانس ارتعاش تا حداکثر شتاب خروجی قابل دستیابی را برای دستگاه فراهم می کند.
- Compose PWLE: یک لرزش تعریف شده توسط PWLE شکل موج ارتعاش را پخش می کند.
پایه PWLE API
برای یک راه سریع برای ایجاد جلوه های PWLE بدون فرو رفتن در سخت افزار یا تفاوت های ظریف درک انسان، توسعه دهندگان می توانند از API اصلی PWLE استفاده کنند که با استفاده از این پارامترها تعریف شده است:
- مقدار شدت در محدوده [0، 1] قدرت درک شده ارتعاش را نشان می دهد. به عنوان مثال، مقدار 0.5 به عنوان نیمی از حداکثر شدت جهانی قابل دستیابی توسط دستگاه درک می شود.
- مقدار وضوح در محدوده [0، 1] نشان دهنده وضوح ارتعاش است. مقادیر پایین تر به ارتعاشات نرم تر تبدیل می شوند، در حالی که مقادیر بالاتر احساس تیزتری ایجاد می کنند.
- مدت زمان انتقال از آخرین نقطه PWLE (یعنی جفت شدت و وضوح) به نقطه جدید، بر حسب میلی ثانیه است.
در اینجا یک شکل موج مثال آمده است که شدت ارتعاش را از گام کم به ارتعاش با حداکثر قدرت با گام بالا در 500 میلی ثانیه افزایش می دهد و سپس به 0 (خاموش) بیش از 100 میلی ثانیه کاهش می یابد:
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 نباشد، یک استثنا ایجاد می کند. این محدودیت از اثرات دینامیکی نامطلوب در ارتعاشات به دلیل ناپیوستگی در دامنه جلوگیری می کند که می تواند بر ادراک لمسی کاربر تأثیر منفی بگذارد.
برای اطمینان از نمایش یکنواخت افکت PWLE در سراسر اکوسیستم اندروید، چارچوب نیاز دارد که دستگاههایی که از این ویژگی پشتیبانی میکنند بتوانند حداقل مدت زمان 10 میلیثانیه بین نقاط PWLE و حداقل 16 امتیاز برای جلوههای PWLE را تحمل کنند. این الزامات توسط آزمایشهای VTS اعمال میشوند و به اطمینان از اثرات PWLE قابل اعتماد در دستگاههای Android کمک میکنند.
API پیشرفته PWLE
توسعه دهندگان با دانش پیشرفته در لمسی می توانند اثرات PWLE را با استفاده از این معیارها تعریف کنند:
- مقدار دامنه در محدوده [0، 1] نشان دهنده قدرت قابل دستیابی در فرکانس معین است که توسط دستگاه FOAM تعیین می شود. به عنوان مثال، مقدار 0.5 نیمی از حداکثر شتاب خروجی را ایجاد می کند که می توان در فرکانس داده شده به دست آورد.
- فرکانس به طور مستقیم بر حسب هرتز مشخص می شود.
- مدت زمان انتقال از آخرین نقطه PWLE به نقطه جدید، بر حسب میلی ثانیه است.
در اینجا یک شکل موج مثال است که یک ارتعاش را از حالت خاموش به دامنه کامل در 120 هرتز در 100 میلی ثانیه افزایش می دهد، آن حالت را برای 200 میلی ثانیه نگه می دارد و سپس با 100 میلی ثانیه به پایین باز می گردد:
VibrationEffect effect = new VibrationEffect.WaveformEnvelopeBuilder()
.addControlPoint(1.0f, 120f, 100)
.addControlPoint(1.0f, 120f, 200)
.addControlPoint(0.0f, 120f, 100)
.build();
محدودیت ها
فریمورک مقادیر فرکانس و دامنه درخواستی ارائهشده توسط توسعهدهنده را تغییر نمیدهد، اما یک نقطه شروع دامنه صفر را برای اطمینان از انتقال صاف اضافه میکند.
توسعه دهندگان وظیفه دارند اطمینان حاصل کنند که فرکانس مشخص شده در جلوه های PWLE آنها در محدوده پشتیبانی شده دستگاه قرار می گیرد، همانطور که توسط FOAM دستگاه تعریف شده است. اگر مقادیر بیش از این حد باشد، دستگاه هیچ لرزشی پخش نمی کند.
نقشه برداری شتاب فرکانس به خروجی (FOAM)
نمایش دقیق فرکانس دستگاه به قابلیتهای شتاب خروجی برای پشتیبانی از APIهای PWLE ضروری است. این بخش اهمیت این داده ها، نحوه استفاده از آن توسط API های PWLE و فرآیند تولید آن را شرح می دهد.
نقشه برداری را درک کنید
دستگاه هایی که از جلوه های PWLE پشتیبانی می کنند باید یک فرکانس برای خروجی نقشه شتاب (FOAM) ارائه دهند. FOAM یک ساختار داده تولید شده توسط HAL است که فرکانس ارتعاش (بر حسب هرتز) را به حداکثر شتاب خروجی قابل دستیابی محرک (در پیک G) در آن فرکانس ترسیم می کند. این نقشه برای درک اینکه چگونه خروجی ارتعاش برای محدوده فرکانس پشتیبانی شده متفاوت است و برای تعریف API اصلی PWLE بسیار مهم است.
نمودار زیر نمونه ای از FOAM را برای یک محرک رزونانس معمولی نشان می دهد که ولتاژ ورودی آن در اطراف فرکانس تشدید محدود شده است تا از موتور محافظت کند:
شکل 1. مثالی از یک FOAM برای یک محرک رزونانس معمولی.
FOAM سه هدف کلیدی را انجام می دهد:
- تعریف محدوده فرکانس کامل: FOAM محدوده فرکانس کامل دستگاه را با تعیین حداقل و حداکثر فرکانس ارتعاش پشتیبانی شده تعریف می کند.
- تعریف مقادیر شدت و وضوح: API اصلی PWLE بر روی مقیاس ادراک انسانی برای شدت و وضوح عمل می کند، که سپس با استفاده از مقادیر شتاب خروجی در FOAM به پارامترهای فرکانس و دامنه سخت افزاری نگاشت می شوند. این نگاشت کمک می کند تا اطمینان حاصل شود که جلوه های لمسی مطابق با قابلیت های سخت افزاری ارائه می شوند. محدوده وضوح با حداقل آستانه قابل درک تعریف می شود و مربوط به فرکانس هایی است که دستگاه می تواند جلوه های لمسی ایجاد کند که کاربران می توانند احساس کنند. چارچوب، مقادیر Intensity را بر اساس شتاب خروجی هدف در فرکانس انتخاب شده ترسیم می کند. این کمک می کند تا اطمینان حاصل شود که سطح شدت انتخاب شده در حالی که در محدوده قابلیت های دستگاه باقی می ماند، به دست می آید.
- افشای قابلیتهای سختافزار: FOAM در
VibratorFrequencyProfile
در معرض توسعهدهندگان قرار میگیرد و فرکانس کاملی را برای خروجی مجموعه دادههای شتاب ارائه میدهد که جزئیات برخی از قابلیتهای لمسی دستگاه را شرح میدهد. این دادهها به توسعهدهندگانی که از API پیشرفته PWLE استفاده میکنند، قدرت میدهد تا جلوههای ارتعاشی سفارشی ایجاد کنند که فراتر از محدودههای شدت و وضوح اولیه تعریفشده توسط چارچوب است.
FOAM و پایه PWLE API
FOAM نقش حیاتی در شکل دادن به اثرات ارتعاش دارد. این برای محاسبه محدوده وضوح برای API پاکت اصلی استفاده می شود و اطمینان حاصل می کند که لرزش ها برای کاربر قابل درک است. این محدوده مربوط به فرکانس هایی است که در آن شتاب خروجی کمتر از 10 دسی بل بالاتر از آستانه تشخیص ادراک انسانی (یعنی حداقل سطح قابل درک) برای هر فرکانس نیست. این تضمین می کند که ارتعاشات به اندازه کافی قوی هستند که احساس شوند.
علاوه بر این، چارچوب از دادههای FOAM برای ترسیم مقادیر شدت و وضوح مورد استفاده در API اصلی PWLE به مقادیر دامنه و فرکانس متناظر آنها استفاده میکند. این نقشه برداری به تولید بازخورد لمسی قابل درک در دستگاه های مختلف کمک می کند.
تستهای VTS برای اطمینان از اینکه دستگاههایی که از جلوههای پوششی پشتیبانی میکنند، دارای محدوده فرکانس خالی هستند که ارتعاشات قابل درک را ایجاد میکنند، وجود دارد. این کمک می کند تا اطمینان حاصل شود که دستگاه می تواند لرزش هایی با شدت کافی ایجاد کند تا به وضوح توسط کاربران احساس شود.
FOAM و API پیشرفته PWLE
FOAM توسط VibratorFrequencyProfile
با اطلاعات زیر در معرض توسعه دهندگان قرار می گیرد:
- محدوده فرکانس: توسعه دهندگان می توانند حداقل و حداکثر فرکانس های پشتیبانی شده دستگاه را به ترتیب با استفاده از
getMinFrequencyHz
وgetMaxFrequencyHz
در هرتز بازیابی کنند. - حداکثر شتاب خروجی: حداکثر شتاب خروجی قابل دستیابی دستگاه (در G) از طریق
getMaxOutputAccelerationGs
در دسترس است. - نگاشت شتاب فرکانس به خروجی:
getFrequenciesOutputAcceleration
فرکانس به خروجی نگاشت شتاب را همانطور که در HAL پیاده سازی شده است فراهم می کند.
توسعه دهندگان می توانند از این اطلاعات هنگام ایجاد جلوه های پاکت با API پیشرفته PWLE استفاده کنند. به عنوان مثال، هنگام تعیین یک شتاب خروجی (در G)، آنها باید آن را به مقداری در محدوده [0.0, 1.0]، نسبت به حداکثر شتاب خروجی دستگاه، نرمال کنند.
با API پیشرفته PWLE، توسعه دهندگان می توانند از کل محدوده فرکانس استفاده کنند، بنابراین بسیار مهم است که داده های FOAM ارائه شده برای ویبراتور ایمن باشد و از قابلیت های آن فراتر نرود.
آستانه تشخیص ادراک انسانی
آستانه تشخیص ادراک انسانی به حداقل شتاب یک ارتعاش اشاره دارد که یک فرد می تواند به طور قابل اعتماد تشخیص دهد. این سطح بر اساس فرکانس ارتعاش متفاوت است.
نمودار زیر آستانه تشخیص ادراک لمسی انسان 1 را در شتاب به عنوان تابعی از فرکانس زمانی نشان می دهد:
شکل 2. آستانه تشخیص ادراک لمسی انسان.
به طوری که کاربران بتوانند به طور مداوم اثرات لمسی را احساس کنند، آزمایشهای VTS تأیید میکنند که دستگاههایی با قابلیت پوشش دارای محدوده فرکانسی هستند که میتوانند دامنههای ارتعاشی بیش از آستانه تشخیص درک انسان را به میزان 10 دسی بل ایجاد کنند.
شدت ارتعاش درک شده در مقابل دامنه شتاب ارتعاش
درک انسان از شدت ارتعاش (معیار ادراک) به صورت خطی با دامنه ارتعاش (یک پارامتر فیزیکی) رشد نمی کند. PWLE API فرض میکند که وقتی یک طراح یا توسعهدهنده به تغییرات در قدرت ارتعاش فکر میکند، انتظار دارند که شدت درک شده از PWLE پیروی کند. شدت درک شده با سطح حس (SL) مشخص می شود که به صورت دسی بل بالاتر از آستانه تشخیص در همان فرکانس تعریف می شود. بنابراین، دامنه شتاب ارتعاش (در پیک G) را می توان به صورت زیر محاسبه کرد:
\(Amplitude(G) =10^\frac{Amplitude(db)}{20}\)
در جایی که دامنه dB مجموع SL و آستانه تشخیص (مقدار در امتداد مختصات در نمودار زیر) در یک فرکانس خاص است.
به این ترتیب، PWLE API تضمین می کند که شدت درک شده به صورت خطی بین جفت های متوالی نقاط کنترل تغییر می کند.
نمودار زیر سطوح شتاب ارتعاش 2 را در 10، 20، 30، 40 و 50 دسی بل، همراه با آستانه تشخیص ادراک لمسی انسان (0 dB 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
: پاسخ دامنه جرم، دمپر و سیستم فنر مرتبه دوم، محاسبه شده به صورت:
\(\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}\)
برای مثال، اگر شتاب ماژول 1 گرم و شتاب گوشی 2.5 گرم باشد، Loc_coeff
= 2.5 است. این نشان دهنده تقویت 2.5 برابری است.
فریم ورک اندروید فرکانس را در واحد هرتز می گیرد، بنابراین HAL باید واحد فرکانس را از رادیان در ثانیه به هرتز در هنگام تولید داده FOAM تبدیل کند.
منحنی FOAM را ایجاد کنید
منحنی حداکثر ولتاژ ( V
) و محاسبه شتاب ( M
) را برای تعیین منحنی FOAM ترکیب کنید:
- برای هر فرکانس (
f
) در محدوده مورد نظر خود، حداکثر ولتاژV(f)
مربوطه را از منحنی حداکثر ولتاژ خود پیدا کنید. - حداکثر شتاب را در آن فرکانس با استفاده از معادله بالا محاسبه کنید،
V(f)
به جایVsys
وf
متناظر را جایگزینw
کنید. این به شماM(V(f), f)
می دهد. - این شتاب محاسبه شده مقدار
FOAM(f)
شما است.
داده های FOAM را در معرض دید قرار دهید
پس از ایجاد منحنی FOAM، HAL منحنی را به عنوان لیستی از اشیاء FrequencyAccelerationMapEntry
نشان می دهد. هر ورودی یک نقطه را در نقشهبرداری تعریف میکند و یک فرکانس (بر حسب هرتز) و حداکثر شتاب خروجی متناظر آن (در پیک G) را مشخص میکند.
در حالی که هیچ الزامات دقیقی برای وضوح FOAM وجود ندارد، توصیه می کنیم منحنی هایی را با یک حداکثر پیک تعریف کنید. فقط اولین پیک در API پاکت اصلی برای ترسیم اثرات ارتعاش استفاده می شود. برای بهینهسازی دقت درونیابی خطی هنگام تعیین مقادیر شتاب متوسط، توصیه میکنیم وضوح فرکانس بالا را در اطراف قله تعریف کنید. به عنوان مثال، از مراحل 1 هرتز در محدوده +/- 10 هرتز فرکانس اوج استفاده کنید.
قابلیت ها و محدودیت های دستگاه
برای Android 16 و بالاتر، برای کمک به توسعهدهندگان برای بهینهسازی جلوههای PWLE خود و اطمینان از سازگاری در بین دستگاهها، Android دارای APIهای HAL برای جستجو در مورد قابلیتهای PWLE دستگاه است. این روشها اطلاعاتی درباره محدودیتهای دستگاه، مانند حداقل یا حداکثر مدت زمان اولیه PWLE و تعداد اولیههای مجاز در یک ترکیب PWLE ارائه میکنند.
API های HAL عبارتند از:
-
CAP_COMPOSE_PWLE_EFFECTS_V2
: زمانی که دستگاه از این ویژگی پشتیبانی می کند، توسطIVibrator.getCapabilities
برگردانده می شود. -
getFrequencyToOutputAccelerationMap
: داده های FOAM را بازیابی می کند. -
getPwleV2PrimitiveDurationMinMillis
: حداقل مدت زمان مجاز برای هر PWLE اولیه را بر حسب میلی ثانیه بازیابی می کند. -
getPwleV2PrimitiveDurationMaxMillis
: حداکثر مدت زمان مجاز برای هر PWLE اولیه را در میلی ثانیه بازیابی می کند. -
getPwleV2CompositionSizeMax
: حداکثر تعداد اولیه PWLE پشتیبانی شده توسطIVibrator.composePwleV2
را بازیابی می کند.
این اطلاعات در اختیار توسعهدهندگان قرار میگیرد تا به آنها اجازه دهند اثرات خود را با قابلیتهای خاص دستگاه مورد نظر، بهویژه هنگام استفاده از API پیشرفته PWLE تنظیم کنند.
این فریم ورک همچنین از این APIها هنگام مدیریت افکت های ایجاد شده با API اصلی استفاده می کند. اگر یک افکت از محدودیت های دستگاه فراتر رود (به عنوان مثال، تعداد بیش از حد نقاط PWLE یا مدت زمان بیش از حداکثر)، چارچوب به طور خودکار افکت را تنظیم می کند تا در محدوده های مجاز قرار گیرد. این فرآیند تنظیم سعی می کند تا حد امکان هدف و احساس اصلی طرح را حفظ کند.
داده های آستانه از آستانه جابجایی در شکل 1 از Bolanowski Jr., SJ, et al. تبدیل شده است. " چهار کانال جنبه های مکانیکی لمس را واسطه می کنند ." مجله انجمن آکوستیک آمریکا 84 (5): 1680-1694 (1988). این آموزش آنلاین تبدیل بین دامنه شتاب و دامنه جابجایی را توضیح می دهد. ↩
داده ها از شکل 8 در Verrillo، RT، و همکاران برآورد شده است. " قدرت احساس محرک های ارتعاشی ." Perception & Psychophysics 6: 366-372 (1969). ↩