جلوه های پاکت خطی را به صورت تکه ای اجرا کنید

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

اندروید ۱۶ و بالاتر دو API توسعه‌دهنده برنامه را برای کمک به ایجاد جلوه‌های PWLE ارائه می‌دهد:

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

برای پشتیبانی از این APIها، دستگاه‌ها ملزم به پیاده‌سازی APIهای HAL زیر هستند:

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

API پایه PWLE

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

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

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

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

محدودیت‌ها

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

برای اطمینان از رندرینگ سازگار جلوه PWLE در سراسر اکوسیستم اندروید، این چارچوب الزام می‌کند که دستگاه‌هایی که از این ویژگی پشتیبانی می‌کنند، بتوانند حداقل مدت زمان 20 میلی‌ثانیه بین نقاط PWLE و حداقل 16 امتیاز برای جلوه‌های PWLE را مدیریت کنند. این الزامات توسط تست‌های VTS اعمال می‌شوند و به تضمین جلوه‌های PWLE قابل اعتماد در دستگاه‌های اندروید کمک می‌کنند.

رابط برنامه‌نویسی پیشرفته PWLE

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

  • مقدار دامنه در محدوده [0، 1] نشان دهنده قدرت قابل دستیابی در فرکانس معین است که توسط دستگاه FOAM تعیین می‌شود. به عنوان مثال، مقدار 0.5 نیمی از حداکثر شتاب خروجی را که می‌توان در فرکانس معین به دست آورد، تولید می‌کند.
  • فرکانس مستقیماً بر حسب هرتز مشخص می‌شود.
  • مدت زمان ، زمان لازم برای انتقال از آخرین نقطه PWLE به نقطه جدید، بر حسب میلی‌ثانیه است.

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

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)

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

نقشه برداری را درک کنید

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

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

مثال فوم

شکل ۱. نمونه‌ای از یک فوم برای یک محرک رزونانسی معمولی.

فوم (FOAM) سه هدف کلیدی را دنبال می‌کند:

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

رابط برنامه‌نویسی کاربردی پایه FOAM و PWLE

FOAM نقش حیاتی در شکل‌دهی به اثرات ارتعاش ایفا می‌کند. از آن برای محاسبه محدوده وضوح برای API پوشش پایه استفاده می‌شود و تضمین می‌کند که ارتعاشات برای کاربر قابل درک هستند. این محدوده مربوط به فرکانس‌هایی است که شتاب خروجی آنها حداقل 10 دسی‌بل بالاتر از آستانه تشخیص ادراک انسان (یعنی حداقل سطح قابل درک) برای هر فرکانس باشد. این امر تضمین می‌کند که ارتعاشات به اندازه کافی قوی هستند که احساس شوند.

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

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

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

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

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

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

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

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

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

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

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

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

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

شدت ارتعاش درک شده در مقابل دامنه شتاب ارتعاش

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

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

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

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

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

سطوح شتاب ارتعاش

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

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

این بخش یک راهنمای کلی برای نحوه بدست آوردن منحنی شتاب خروجی از فرکانس به حداکثر از دستگاهی که برای تولید داده‌های 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}\)

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

چارچوب اندروید فرکانس را در واحد هرتز دریافت می‌کند، بنابراین 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 پایه envelope برای نگاشت اثرات ارتعاش استفاده می‌شود. برای بهینه‌سازی دقت درون‌یابی خطی هنگام تعیین مقادیر شتاب میانی، توصیه می‌کنیم یک وضوح فرکانس بالا در اطراف پیک تعریف کنید. به عنوان مثال، از گام‌های ۱ هرتز در محدوده +/- ۱۰ هرتز فرکانس پیک استفاده کنید.

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

برای اندروید ۱۶ و بالاتر، برای کمک به توسعه‌دهندگان در بهینه‌سازی جلوه‌های PWLE و اطمینان از سازگاری بین دستگاه‌ها، اندروید شامل APIهای HAL برای پرس‌وجو از قابلیت‌های PWLE دستگاه است. این روش‌ها اطلاعاتی در مورد محدودیت‌های دستگاه، مانند حداقل یا حداکثر مدت زمان اولیه PWLE و تعداد اولیه‌های مجاز در یک ترکیب PWLE، ارائه می‌دهند.

API های HAL عبارتند از:

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

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

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


  1. داده‌های آستانه از آستانه جابجایی در شکل 1 از بولانوفسکی جونیور، اس.جی. و همکاران تبدیل شده‌اند. « چهار کانال واسطه جنبه‌های مکانیکی لمس هستندمجله انجمن آکوستیک آمریکا 84(5): 1680-1694 (1988). این آموزش آنلاین تبدیل بین دامنه شتاب و دامنه جابجایی را توضیح می‌دهد.

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