پیاده‌سازی جلوه‌های پاکت‌زن خطی تکه‌ای

جلوه‌های پوشش خطی تکه‌ای (PWLE) توالی‌هایی از نقاط هستند که بسامد و شتاب لرزش را درطول زمان تعریف می‌کنند. PWLE بازخورد لمسی غنی‌تر و پویاتری ارائه می‌دهد.

‫Android 16 و نسخه‌های بالاتر دو میانای برنامه‌سازی کاربردی توسعه‌دهنده برنامه ارائه می‌دهد تا به ایجاد جلوه‌های PWLE کمک کند:

  • میانای برنامه‌سازی کاربردی PWLE پایه: ساده، اما با محدودیت‌هایی. برای شروع سریع مناسب است. این ویژگی در BasicEnvelopeBuilder دردسترس است.
  • میانای برنامه کاربردی PWLE پیشرفته: کنترل و انعطاف‌پذیری بیشتر، نیاز به آشنایی با لمس‌شناسی و سخت‌افزار دارد. دردسترس در WaveformEnvelopeBuilder.

برای پشتیبانی از این «میاناهای برنامه‌سازی کاربردی»، دستگاه‌ها باید «میاناهای برنامه‌سازی کاربردی لایه انتزاع سخت‌افزار» زیر را پیاده‌سازی کنند:

  • فرکانس تشدید: فرکانس تشدید محرک را ارائه می‌دهد.
  • تعداد دفعات نگاشت شتاب خروجی (FOAM): نگاشت فرکانس لرزش به حداکثر شتاب خروجی قابل‌دستیابی برای دستگاه را ارائه می‌دهد.
  • ساخت PWLE: لرزشی را که با PWLE لرزش شکل موج تعریف شده است پخش می‌کند.

Basic PWLE API

برای ایجاد سریع جلوه‌های PWLE بدون نیاز به ورود به جزئیات سخت‌افزار یا ظرافت‌های ادراک انسانی، توسعه‌دهندگان می‌توانند از PWLE API پایه استفاده کنند که بااستفاده از این پارامترها تعریف شده است:

  • مقدار شدت در محدوده [۰، ۱] نشان‌دهنده قدرت درک‌شده لرزش است. برای مثال، مقدار ۰٫۵ به‌عنوان نصف حداکثر شدت جهانی که دستگاه می‌تواند به آن دست یابد درنظر گرفته می‌شود.
  • مقدار وضوح در محدوده [۰، ۱] نشان‌دهنده شفافیت لرزش است. مقادیر پایین‌تر به معنای لرزش‌های نرم‌تر است، درحالی‌که مقادیر بالاتر احساس تیزتری ایجاد می‌کند.
  • مدت زمان مدت زمانی است که طول می‌کشد تا از آخرین نقطه PWLE (یعنی جفت شدت و وضوح) به نقطه جدید منتقل شود، برحسب میلی‌ثانیه.

در اینجا نمونه‌ای از شکل موجی را می‌بینید که شدت آن در طول ۵۰۰ میلی‌ثانیه از زیرترین تا بم‌ترین لرزش با حداکثر قدرت افزایش می‌یابد و سپس در طول ۱۰۰ میلی‌ثانیه به ۰ (خاموش) کاهش می‌یابد:

VibrationEffect effect = new VibrationEffect.BasicEnvelopeBuilder()
          .setInitialSharpness(0.0f)
          .addControlPoint(1.0f, 1.0f, 500)
          .addControlPoint(0.0f, 1.0f, 100)
          .build();

محدودیت‌ها

برای ایجاد تجربه لمسی روان و یکپارچه، جلوه‌های PWLE باید با شدت ۰٫۰ شروع و تمام شوند. «میانای برنامه‌سازی کاربردی» این را با ثابت کردن شدت شروع در ۰ اعمال می‌کند و اگر شدت پایان ۰ نباشد، استثنایی ایجاد می‌کند. این محدودیت از جلوه‌های پویا نامطلوب در لرزش‌ها به‌دلیل ناپیوستگی در دامنه که می‌تواند بر ادراک لمسی کاربر تأثیر منفی بگذارد جلوگیری می‌کند.

برای اطمینان از ارائه جلوه PWLE یکپارچه در سراسر اکوسیستم Android، چارچوب الزامی می‌کند که دستگاه‌های پشتیبان این ویژگی بتوانند حداقل مدت ۲۰ میلی‌ثانیه بین نقاط PWLE و حداقل ۱۶ نقطه برای جلوه‌های PWLE را مدیریت کنند. این الزامات توسط آزمایش‌های VTS اعمال می‌شوند تا به تضمین جلوه‌های PWLE قابل‌اطمینان در دستگاه‌های Android کمک کنند.

Advanced PWLE API

توسعه‌دهندگان با دانش پیشرفته در زمینه لمسی می‌توانند جلوه‌های PWLE را بااستفاده از این معیارها تعریف کنند:

  • مقدار دامنه در محدوده [۰, ۱] نشان‌دهنده قدرت قابل‌دستیابی در فرکانس معین است، همان‌گونه که توسط FOAM دستگاه تعیین می‌شود. برای مثال، مقدار ۰٫۵ نیمی از حداکثر شتاب برونداد را که می‌توان در بسامد معین به‌دست آورد تولید می‌کند.
  • بسامد مستقیماً برحسب هرتز مشخص می‌شود.
  • مدت زمان لازم برای انتقال از آخرین نقطه PWLE به نقطه جدید است (به میلی‌ثانیه).

در اینجا نمونه‌ای از شکل موجی آورده شده است که لرزاننده را از حالت خاموش به دامنه کامل در ۱۲۰ هرتز درطول ۱۰۰ میلی‌ثانیه افزایش می‌دهد، این وضعیت را به‌مدت ۲۰۰ میلی‌ثانیه حفظ می‌کند، و سپس درطول ۱۰۰ میلی‌ثانیه به حالت اولیه برمی‌گرداند:

VibrationEffect effect = new VibrationEffect.WaveformEnvelopeBuilder()
          .addControlPoint(1.0f, 120f, 100)
          .addControlPoint(1.0f, 120f, 200)
          .addControlPoint(0.0f, 120f, 100)
          .build();

محدودیت‌ها

چارچوب مقادیر بسامد و دامنه درخواستی ارائه‌شده توسط توسعه‌دهنده را تغییر نمی‌دهد، اما برای اطمینان از انتقال روان، نقطه شروع دامنه ۰ را اضافه می‌کند.

توسعه‌دهندگان مسئول اطمینان از این هستند که فراوانی مشخص‌شده در جلوه‌های PWLE آن‌ها در محدوده پشتیبانی‌شده دستگاه، همان‌گونه که در FOAM دستگاه تعریف شده است، قرار داشته باشد. اگر مقادیر از این حدود فراتر برود، دستگاه هیچ لرزشی نخواهد داشت.

بسامد نگاشت شتاب خروجی (FOAM)

نمایش دقیق فرکانس دستگاه برای قابلیت‌های شتاب خروجی برای پشتیبانی از PWLE API ضروری است. این بخش اهمیت این داده‌ها، نحوه استفاده از آن‌ها توسط «میاناهای برنامه‌سازی کاربردی PWLE»، و فرایند تولید آن‌ها را به‌تفصیل شرح می‌دهد.

فهمیدن نگاشت

دستگاه‌هایی که از جلوه‌های PWLE پشتیبانی می‌کنند باید نقشه شتاب خروجی فرکانس (FOAM) ارائه دهند. FOAM ساختار داده‌ای است که توسط HAL تولید می‌شود و فرکانس لرزش (به هرتز) را به حداکثر شتاب خروجی قابل‌دستیابی محرک (به G peak) در آن فرکانس نگاشت می‌کند. این نقشه برای درک نحوه تغییر خروجی لرزش در محدوده فرکانس پشتیبانی‌شده و برای تعریف PWLE API پایه بسیار مهم است.

طرح زیر نمونه‌ای از FOAM را برای محرک تشدید معمولی نشان می‌دهد، که ولتاژ ورودی آن در اطراف فرکانس تشدید محدود شده است تا از موتور محافظت شود:

مثال
FOAM

شکل ۱. مثالی از FOAM برای یک محرک تشدیدکننده معمولی.

«صورت وضعیت مالی» سه هدف کلیدی را دنبال می‌کند:

  • تعریف محدوده بسامد کامل: «فرمت اشیای فعال» با مشخص کردن حداقل و حداکثر بسامدهای لرزش پشتیبانی‌شده، محدوده بسامد کامل دستگاه را تعریف می‌کند.
  • تعریف مقادیر شدت و وضوح: میانای برنامه‌سازی کاربردی PWLE پایه براساس مقیاس درک انسان از شدت و وضوح عمل می‌کند، که سپس بااستفاده از مقادیر شتاب خروجی در FOAM، به پارامترهای فرکانس و دامنه سخت‌افزار نگاشت می‌شوند. این نگاشت کمک می‌کند تا جلوه‌های لمسی مطابق با قابلیت‌های سخت‌افزار ارائه شوند. محدوده وضوح با حداقل آستانه قابل‌درک تعریف می‌شود و با فرکانس‌هایی که دستگاه می‌تواند جلوه‌های لمسی تولید کند که کاربران بتوانند احساس کنند مطابقت دارد. این چارچوب مقادیر شدت را براساس شتاب خروجی هدف در بسامد انتخاب‌شده به دامنه نگاشت می‌کند. این کار کمک می‌کند تا مطمئن شویم سطح شدت انتخابی درعین حفظ قابلیت‌های دستگاه به‌دست می‌آید.
  • نمایش قابلیت‌های سخت‌افزاری: FOAM در VibratorFrequencyProfile برای توسعه‌دهندگان نمایش داده می‌شود و مجموعه داده کامل شتاب فرکانس به خروجی را ارائه می‌دهد که برخی‌از قابلیت‌های لمسی دستگاه را به‌طور دقیق شرح می‌دهد. این داده‌ها به توسعه‌دهندگانی که از PWLE API پیشرفته استفاده می‌کنند امکان می‌دهد جلوه‌های لرزش سفارشی ایجاد کنند که فراتر از محدوده‌های شدت و تیزی پایه تعریف‌شده توسط چارچوب است.

FOAM and basic PWLE API

«فوم» نقش حیاتی در شکل‌دهی جلوه‌های لرزش ایفا می‌کند. از آن برای محاسبه محدوده تیزی برای API پاکت پایه استفاده می‌شود و تضمین می‌کند که لرزش‌ها برای کاربر قابل‌درک باشد. این محدوده مربوط به فرکانس‌هایی است که در آن‌ها شتاب خروجی ابتدا به ۱۰ دسی‌بل بالاتر از آستانه تشخیص ادراک انسانی (یعنی حداقل سطح قابل‌درک) می‌رسد و تا زمانی که شتاب خروجی آخرین بار بالاتر از این آستانه باشد ادامه می‌یابد. این محدوده باید شامل فرکانس تشدیدگر محرک باشد.

علاوه‌براین، چارچوب از داده‌های FOAM برای نگاشت شدت و مقادیر وضوح استفاده‌شده در «میانای برنامه‌سازی کاربردی» پایه PWLE به مقادیر دامنه و بسامد مربوطه استفاده می‌کند. این نگاشت به تولید بازخورد لمسی قابل‌درک در دستگاه‌های مختلف کمک می‌کند.

آزمایش‌های VTS برای اطمینان از این است که دستگاه‌های پشتیبان افکت‌های پاکتی دارای محدوده فرکانسی غیرخالی باشند که لرزش‌های قابل‌درک تولید کند و این محدوده حاوی فرکانس تشدیدگر محرک باشد. این کار کمک می‌کند مطمئن شوید دستگاه می‌تواند لرزش‌هایی با شدت کافی تولید کند تا کاربران به‌وضوح آن را احساس کنند.

FOAM و میانای برنامه‌سازی کاربردی پیشرفته PWLE

FOAM توسط VibratorFrequencyProfile با اطلاعات زیر دراختیار توسعه‌دهندگان قرار می‌گیرد:

  • محدوده فرکانس: توسعه‌دهندگان می‌توانند حداقل و حداکثر فرکانس‌های پشتیبانی‌شده دستگاه را برحسب هرتز بااستفاده از getMinFrequencyHz و getMaxFrequencyHz به‌ترتیب بازیابی کنند.
  • حداکثر شتاب خروجی: حداکثر شتاب خروجی قابل‌دستیابی دستگاه (برحسب G) ازطریق getMaxOutputAccelerationGs دردسترس است.
  • بسامد برای برونداد نگاشت شتاب: getFrequenciesOutputAcceleration بسامد را برای برونداد نگاشت شتاب همان‌گونه که در HAL پیاده‌سازی شده است ارائه می‌دهد.

توسعه‌دهندگان می‌توانند هنگام ایجاد جلوه‌های پاکت با میانای برنامه‌سازی کاربردی PWLE پیشرفته از این اطلاعات استفاده کنند. برای مثال، هنگام مشخص کردن شتاب خروجی (برحسب G)، باید آن را به مقداری در محدوده [0.0, 1.0]، نسبت به حداکثر شتاب خروجی دستگاه، نرمال‌سازی کنند.

با PWLE API پیشرفته، توسعه‌دهندگان می‌توانند از کل محدوده فرکانس استفاده کنند، بنابراین بسیار مهم است که داده‌های FOAM ارائه‌شده برای لرزاننده ایمن باشد و از قابلیت‌های آن فراتر نرود.

آستانه تشخیص ادراک انسانی

آستانه تشخیص ادراک انسانی به حداقل شتاب لرزشی اشاره دارد که فرد می‌تواند به‌طور قابل‌اعتمادی آن را تشخیص دهد. این سطح براساس فرکانس لرزش متفاوت است.

نمودار زیر آستانه تشخیص ادراک لمسی انسان۱ را در شتاب، به‌عنوان تابعی از فرکانس زمانی نشان می‌دهد:

آستانه تشخیص ادراک لمسی انسان

شکل ۲. آستانه تشخیص ادراک لمسی انسان.

برای اینکه کاربران بتوانند به‌طور مداوم جلوه‌های لمسی را احساس کنند، آزمایش‌های VTS تأیید می‌کنند که دستگاه‌های دارای قابلیت‌های پوششی دارای محدوده فرکانسی هستند که می‌توانند دامنه‌های ارتعاشی تولید کنند که از آستانه تشخیص ادراک انسان به میزان ‫۱۰ دسی‌بل فراتر می‌رود.

شدت لرزش درک‌شده دربرابر دامنه شتاب لرزش

ادراک انسانی از شدت لرزش (یک معیار ادراکی) با دامنه لرزش (یک پارامتر فیزیکی) به‌صورت خطی افزایش نمی‌یابد. ‫PWLE API فرض می‌کند که وقتی طراح یا توسعه‌دهنده‌ای به تغییرات قدرت لرزش فکر می‌کند، انتظار دارد شدت درک‌شده از قانون توان استیونس پیروی کند. شدت درک‌شده با سطح احساس (SL) مشخص می‌شود که به‌عنوان دسی‌بل بالاتر از آستانه تشخیص در همان فرکانس تعریف می‌شود. بنابراین، دامنه شتاب لرزش (در G پیک) را می‌توان به این صورت محاسبه کرد:

\(Amplitude(G) =10^\frac{Amplitude(db)}{20}\)

که در آن دامنه dB مجموع SL و آستانه تشخیص (مقدار در امتداد محور عمودی در طرح زیر) در یک فرکانس خاص است.

به‌این‌ترتیب، PWLE API تضمین می‌کند که شدت درک‌شده به‌صورت خطی بین جفت‌های متوالی نقاط کنترل تغییر می‌کند.

طرح زیر سطوح شتاب لرزش۲ را در ۱۰، ۲۰، ۳۰، ۴۰، و ۵۰ دسی‌بل SL، همراه با آستانه تشخیص ادراک لمسی انسان (۰ دسی‌بل SL)، به‌عنوان تابعی از فراوانی زمانی نشان می‌دهد.

سطوح شتاب
لرزش

شکل ۳. سطوح شتاب لرزش.

تعیین فرکانس برای منحنی شتاب حداکثر برونداد

این بخش دستورالعمل کلی‌ای درباره نحوه دریافت منحنی شتاب خروجی بیشینه از دستگاه ارائه می‌دهد که از آن برای تولید داده‌های FOAM استفاده می‌کنید.

به‌دست آوردن منحنی بیشینه ولتاژ (V)

V حداکثر ولتاژی است که می‌توان به‌طور ایمن در محدوده فرکانس کاری ویبراتور به آن اعمال کرد. این کار باعث می‌شود لرزاننده در محدوده ایمن کار کند و از آسیب دیدن آن جلوگیری شود و برونداد لرزش به حداکثر برسد.

اگر سخت‌افزار دارای ویژگی محدودیت ولتاژ است، از آن برای اندازه‌گیری مستقیم حداکثر ولتاژ قابل‌دستیابی در محدوده فرکانس پشتیبانی‌شده استفاده کنید.

محاسبه حداکثر شتاب (M)

‫M حداکثر شتاب است که می‌توانید آن را ازطریق روش‌های مختلف محاسبه کنید. این بخش یک روش برای دستگاه‌های دارای عملگرهای تشدید خطی (LRA) را نشان می‌دهد.

این روش حداکثر ولتاژ اعمال‌شده در یک فرکانس معین را به حداکثر مقدار شتاب مربوطه که با واحد G peak بیان می‌شود تبدیل می‌کند.

معادله اصلی استفاده‌شده برای این تبدیل عبارت است از:

\(\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}\)

برای مثال، اگر شتاب واحد ۱ g و شتاب تلفن ۲٫۵ g باشد، آنگاه Loc_coeff = ۲٫۵. این نشان‌دهنده تقویت ۲٫۵ برابری است.

چارچوب Android فرکانس را با واحد هرتز دریافت می‌کند، بنابراین 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) را مشخص می‌کند.

برای بهینه‌سازی دقت درونیابی خطی هنگام تعیین مقادیر شتاب واسط، توصیه می‌کنیم وضوح فرکانس بالا را در اطراف فرکانس با حداکثر شتاب خروجی تعریف کنید. برای مثال، از گام‌های ۱ هرتزی در محدوده +/- ۱۰ هرتز این فرکانس استفاده کنید.

قابلیت‌ها و محدودیت‌های دستگاه

در Android 16 و بالاتر، برای کمک به توسعه‌دهندگان در بهینه‌سازی جلوه‌های PWLE و اطمینان از سازگاری در دستگاه‌های مختلف، Android شامل میاناهای برنامه‌نویسی کاربردی HAL برای پُرسمان قابلیت‌های PWLE دستگاه است. این روش‌ها اطلاعاتی درباره محدودیت‌های دستگاه ارائه می‌دهند، مثل حداقل یا حداکثر مدت زمان عنصر اولیه PWLE و تعداد عناصر اولیه مجاز در ترکیب PWLE.

میاناهای برنامه‌سازی کاربردی HAL شامل موارد زیر است:

  • CAP_COMPOSE_PWLE_EFFECTS_V2: وقتی دستگاه از این ویژگی پشتیبانی کند، توسط IVibrator.getCapabilities برگردانده می‌شود.
  • ‫getFrequencyToOutputAccelerationMap: داده‌های FOAM را بازیابی می‌کند.
  • ‫getPwleV2PrimitiveDurationMinMillis: حداقل مدت زمان مجاز برای هر عنصر اولیه PWLE را به میلی‌ثانیه بازیابی می‌کند.
  • getPwleV2PrimitiveDurationMaxMillis: حداکثر مدت زمان مجاز برای هر PWLE ابتدایی را برحسب میلی‌ثانیه بازیابی می‌کند.
  • ‫getPwleV2CompositionSizeMax: حداکثر تعداد عناصر اولیه PWLE پشتیبانی‌شده توسط IVibrator.composePwleV2 را بازیابی می‌کند.

این اطلاعات دراختیار توسعه‌دهندگان قرار می‌گیرد تا بتوانند جلوه‌های خود را با قابلیت‌های خاص دستگاه هدف تطبیق دهند، به‌ویژه هنگام استفاده از PWLE API پیشرفته.

این چارچوب همچنین هنگام مدیریت جلوه‌های ایجادشده با API پایه از این APIها استفاده می‌کند. اگر جلوه‌ای از محدودیت‌های دستگاه فراتر رود (برای مثال، نقاط PWLE بسیار زیاد یا مدت زمان فراتر از حداکثر)، چارچوب به‌طور خودکار جلوه را تنظیم می‌کند تا در محدوده مجاز قرار گیرد. این فرایند اصلاح تلاش می‌کند تا حد امکان هدف و حس اصلی طراحی را حفظ کند.


  1. داده‌های آستانه از آستانه جابه‌جایی در شکل ۱ از Bolanowski Jr. تبدیل شده است، S. د.، و دیگران.. «چهار کانال جنبه‌های مکانیکی لمس را میانجی‌گری می‌کنند.» Journal of the Acoustical Society of America 84(5): 1680-1694 (1988). این آموزش آنلاین تبدیل بین دامنه شتاب و دامنه جابه‌جایی را توضیح می‌دهد. ↩

  2. داده‌ها از شکل ۸ در Verrillo, R تخمین زده شده است. T.، و دیگران.. «بزرگی حس محرک‌های لرزشی-لمسی.» Perception & Psychophysics 6: 366-372 (1969). ↩