পিসওয়াইজ লিনিয়ার এনভেলপ (PWLE) এফেক্ট হলো এমন কিছু বিন্দুর অনুক্রম যা সময়ের সাথে সাথে কম্পনের ফ্রিকোয়েন্সি এবং ত্বরণকে সংজ্ঞায়িত করে। PWLE আরও সমৃদ্ধ এবং গতিশীল হ্যাপটিক ফিডব্যাক প্রদান করে।
অ্যান্ড্রয়েড ১৬ এবং এর পরবর্তী সংস্করণ PWLE এফেক্ট তৈরি করতে সাহায্য করার জন্য দুটি অ্যাপ ডেভেলপার এপিআই প্রদান করে:
- বেসিক পিডব্লিউএলই এপিআই: সহজ, কিন্তু কিছু সীমাবদ্ধতা আছে। দ্রুত কাজ শুরু করার জন্য ভালো। এটি
BasicEnvelopeBuilderএ পাওয়া যায়। - উন্নত PWLE API: অধিক নিয়ন্ত্রণ ও নমনীয়তা, এর জন্য হ্যাপটিক্স জ্ঞান এবং হার্ডওয়্যার সম্পর্কে কিছুটা পরিচিতি প্রয়োজন।
WaveformEnvelopeBuilderএ উপলব্ধ।
এই API-গুলো সমর্থন করার জন্য, ডিভাইসগুলোকে নিম্নলিখিত HAL API-গুলো বাস্তবায়ন করতে হবে:
- অনুরণন কম্পাঙ্ক: অ্যাকচুয়েটরের অনুরণন কম্পাঙ্ক প্রদান করে।
- ফ্রিকোয়েন্সি টু আউটপুট অ্যাক্সিলারেশন ম্যাপিং (FOAM): ডিভাইসটির জন্য কম্পন ফ্রিকোয়েন্সি থেকে সর্বোচ্চ অর্জনযোগ্য আউটপুট অ্যাক্সিলারেশনের একটি ম্যাপিং প্রদান করে।
- PWLE রচনা করুন: কম্পন তরঙ্গরূপের একটি PWLE দ্বারা সংজ্ঞায়িত একটি কম্পন বাজায়।
বেসিক পিডব্লিউএলই এপিআই
হার্ডওয়্যার বা মানুষের উপলব্ধির সূক্ষ্মতায় না গিয়ে দ্রুত PWLE এফেক্ট তৈরি করার জন্য, ডেভেলপাররা বেসিক PWLE API ব্যবহার করতে পারেন, যা এই প্যারামিটারগুলো ব্যবহার করে সংজ্ঞায়িত করা হয়:
- [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 এফেক্ট অবশ্যই 0.0 তীব্রতা দিয়ে শুরু এবং শেষ হতে হবে। API শুরুর তীব্রতা 0-তে স্থির করে এটি কার্যকর করে এবং শেষের তীব্রতা 0 না হলে একটি এক্সেপশন থ্রো করে। এই সীমাবদ্ধতা অ্যাম্প্লিটিউডের অসামঞ্জস্যতার কারণে কম্পনে সৃষ্ট অনাকাঙ্ক্ষিত ডায়নামিক এফেক্ট প্রতিরোধ করে, যা ব্যবহারকারীর হ্যাপটিক উপলব্ধিকে নেতিবাচকভাবে প্রভাবিত করতে পারে।
অ্যান্ড্রয়েড ইকোসিস্টেম জুড়ে PWLE এফেক্টের সামঞ্জস্যপূর্ণ রেন্ডারিং নিশ্চিত করার জন্য, ফ্রেমওয়ার্কটির শর্তানুযায়ী এই ফিচারটি সমর্থনকারী ডিভাইসগুলোকে PWLE পয়েন্টগুলোর মধ্যে ন্যূনতম ২০ মিলিসেকেন্ড সময়কাল এবং PWLE এফেক্টের জন্য কমপক্ষে ১৬টি পয়েন্ট পরিচালনা করতে সক্ষম হতে হয়। এই শর্তগুলো VTS পরীক্ষার মাধ্যমে প্রয়োগ করা হয়, যা অ্যান্ড্রয়েড ডিভাইসজুড়ে নির্ভরযোগ্য PWLE এফেক্ট নিশ্চিত করতে সহায়তা করে।
উন্নত PWLE API
হ্যাপটিক্স বিষয়ে উন্নত জ্ঞানসম্পন্ন ডেভেলপাররা নিম্নলিখিত মানদণ্ডগুলো ব্যবহার করে পিডব্লিউএলই (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();
সীমাবদ্ধতা
ফ্রেমওয়ার্কটি ডেভেলপারের দেওয়া অনুরোধকৃত ফ্রিকোয়েন্সি এবং অ্যাম্প্লিটিউড মান পরিবর্তন করে না, তবে একটি মসৃণ রূপান্তর নিশ্চিত করতে একটি ০ অ্যাম্প্লিটিউড প্রারম্ভিক বিন্দু যোগ করে।
ডেভেলপারদের এটা নিশ্চিত করতে হবে যে, তাদের PWLE এফেক্টসে নির্দিষ্ট করা ফ্রিকোয়েন্সি যেন ডিভাইসটির FOAM দ্বারা সংজ্ঞায়িত সমর্থিত সীমার মধ্যে থাকে। যদি মান এই সীমা অতিক্রম করে, তবে ডিভাইসটি কোনো ভাইব্রেশন বাজায় না ।
ফ্রিকোয়েন্সি থেকে আউটপুট ত্বরণ ম্যাপিং (FOAM)
PWLE API-গুলোকে সমর্থন করার জন্য, কোনো ডিভাইসের ফ্রিকোয়েন্সি থেকে আউটপুট অ্যাক্সিলারেশন ক্ষমতার সঠিক উপস্থাপনা অপরিহার্য। এই বিভাগে এই ডেটার তাৎপর্য, PWLE API-গুলো কীভাবে এটি ব্যবহার করে এবং এটি তৈরি করার প্রক্রিয়া বিস্তারিতভাবে আলোচনা করা হয়েছে।
ম্যাপিংটি বুঝুন
PWLE এফেক্ট সমর্থনকারী ডিভাইসগুলোকে একটি ফ্রিকোয়েন্সি টু আউটপুট অ্যাক্সিলারেশন ম্যাপ (FOAM) প্রদান করতে হয়। FOAM হলো HAL দ্বারা জেনারেট করা একটি ডেটা স্ট্রাকচার, যা ভাইব্রেশন ফ্রিকোয়েন্সিকে (হার্টজে) সেই ফ্রিকোয়েন্সিতে অ্যাকচুয়েটরের সর্বোচ্চ অর্জনযোগ্য আউটপুট অ্যাক্সিলারেশনের (G peak-এ) সাথে ম্যাপ করে। সমর্থিত ফ্রিকোয়েন্সি রেঞ্জে ভাইব্রেশন আউটপুট কীভাবে পরিবর্তিত হয় তা বোঝার জন্য এবং বেসিক PWLE API সংজ্ঞায়িত করার জন্য এই ম্যাপটি অত্যন্ত গুরুত্বপূর্ণ।
নিম্নলিখিত প্লটটিতে একটি সাধারণ রেজোনেন্ট অ্যাকচুয়েটরের জন্য একটি FOAM-এর উদাহরণ দেখানো হয়েছে, যেখানে মোটরকে সুরক্ষিত রাখার জন্য ইনপুট ভোল্টেজকে রেজোনেন্ট ফ্রিকোয়েন্সির আশেপাশে সীমিত রাখা হয়েছে:
চিত্র ১. একটি সাধারণ অনুনাদী অ্যাকচুয়েটরের ফোমের উদাহরণ।
ফোমটি তিনটি প্রধান উদ্দেশ্য পূরণ করে:
- সম্পূর্ণ ফ্রিকোয়েন্সি পরিসর নির্ধারণ: FOAM সমর্থিত সর্বনিম্ন এবং সর্বোচ্চ কম্পন ফ্রিকোয়েন্সি নির্দিষ্ট করার মাধ্যমে ডিভাইসটির সম্পূর্ণ ফ্রিকোয়েন্সি পরিসর নির্ধারণ করে।
- তীব্রতা এবং তীক্ষ্ণতার মান নির্ধারণ: মৌলিক PWLE API তীব্রতা এবং তীক্ষ্ণতার জন্য মানুষের উপলব্ধির স্কেলে কাজ করে, যা পরবর্তীতে FOAM-এর আউটপুট অ্যাক্সিলারেশন মান ব্যবহার করে হার্ডওয়্যার ফ্রিকোয়েন্সি এবং অ্যামপ্লিচিউড প্যারামিটারে ম্যাপ করা হয়। এই ম্যাপিং নিশ্চিত করতে সাহায্য করে যে হ্যাপটিক ইফেক্টগুলো হার্ডওয়্যারের সক্ষমতা অনুযায়ী রেন্ডার করা হয়। তীক্ষ্ণতার পরিসর সর্বনিম্ন উপলব্ধিযোগ্য থ্রেশহোল্ড দ্বারা সংজ্ঞায়িত করা হয় এবং এটি সেই ফ্রিকোয়েন্সিগুলোর সাথে সঙ্গতিপূর্ণ যেখানে ডিভাইসটি এমন হ্যাপটিক ইফেক্ট তৈরি করতে পারে যা ব্যবহারকারীরা অনুভব করতে পারে। ফ্রেমওয়ার্কটি নির্বাচিত ফ্রিকোয়েন্সিতে টার্গেট আউটপুট অ্যাক্সিলারেশনের উপর ভিত্তি করে তীব্রতার মানগুলোকে অ্যামপ্লিচিউডে ম্যাপ করে। এটি নিশ্চিত করতে সাহায্য করে যে ডিভাইসের সক্ষমতার মধ্যে থেকেই নির্বাচিত তীব্রতার স্তরটি অর্জন করা সম্ভব হয়।
- হার্ডওয়্যারের সক্ষমতা উন্মোচন:
VibratorFrequencyProfileমাধ্যমে ডেভেলপারদের কাছে FOAM উন্মুক্ত করা হয়, যা ডিভাইসের কিছু হ্যাপটিক সক্ষমতার বিশদ বিবরণসহ সম্পূর্ণ ফ্রিকোয়েন্সি থেকে আউটপুট অ্যাক্সিলারেশন ডেটাসেট প্রদান করে। এই ডেটা ডেভেলপারদের উন্নত PWLE API ব্যবহার করে এমন কাস্টম ভাইব্রেশন ইফেক্ট তৈরি করতে সক্ষম করে, যা ফ্রেমওয়ার্ক দ্বারা সংজ্ঞায়িত মৌলিক ইনটেনসিটি এবং শার্পনেস পরিসীমার বাইরে যায়।
FOAM এবং মৌলিক PWLE API
কম্পনের প্রভাবকে আকার দিতে FOAM একটি গুরুত্বপূর্ণ ভূমিকা পালন করে। এটি বেসিক এনভেলপ এপিআই (API)-এর জন্য শার্পনেস রেঞ্জ গণনা করতে ব্যবহৃত হয়, যা ব্যবহারকারীর কাছে কম্পন উপলব্ধিযোগ্য করে তোলে। এই রেঞ্জটি সেই ফ্রিকোয়েন্সিগুলো থেকে শুরু করে, যেখানে আউটপুট অ্যাক্সিলারেশন প্রথমবারের মতো মানুষের উপলব্ধি শনাক্তকরণ থ্রেশহোল্ডের (অর্থাৎ, সর্বনিম্ন উপলব্ধিযোগ্য স্তর) ১০ ডিবি উপরে পৌঁছায়, এবং শেষ হয় সেই পর্যন্ত যেখানে আউটপুট অ্যাক্সিলারেশন সর্বশেষ সেই থ্রেশহোল্ডের উপরে থাকে। এই রেঞ্জের মধ্যে অবশ্যই অ্যাকচুয়েটরের রেজোনেন্ট ফ্রিকোয়েন্সি অন্তর্ভুক্ত থাকতে হবে।
এছাড়াও, এই ফ্রেমওয়ার্কটি বেসিক PWLE API-তে ব্যবহৃত ইনটেনসিটি এবং শার্পনেস মানগুলোকে তাদের সংশ্লিষ্ট অ্যামপ্লিটিউড এবং ফ্রিকোয়েন্সি মানে ম্যাপ করার জন্য FOAM ডেটা ব্যবহার করে। এই ম্যাপিং বিভিন্ন ডিভাইসে উপলব্ধিযোগ্য হ্যাপটিক ফিডব্যাক তৈরিতে সাহায্য করে।
ভিটিএস (VTS) পরীক্ষার মাধ্যমে এটা নিশ্চিত করা হয় যে, এনভেলপ এফেক্ট সমর্থনকারী ডিভাইসগুলোর একটি অ-শূন্য ফ্রিকোয়েন্সি রেঞ্জ রয়েছে যা উপলব্ধিযোগ্য কম্পন তৈরি করে এবং সেই রেঞ্জটি অ্যাকচুয়েটরের রেজোনেন্ট ফ্রিকোয়েন্সি ধারণ করে। এটি নিশ্চিত করতে সাহায্য করে যে, ডিভাইসটি ব্যবহারকারীদের দ্বারা স্পষ্টভাবে অনুভূত হওয়ার জন্য যথেষ্ট তীব্রতার কম্পন তৈরি করতে পারে।
FOAM এবং উন্নত PWLE API
VibratorFrequencyProfile নিম্নলিখিত তথ্যসহ FOAM-কে ডেভেলপারদের কাছে প্রকাশ করে:
- ফ্রিকোয়েন্সি পরিসর: ডেভেলপাররা যথাক্রমে
getMinFrequencyHzএবংgetMaxFrequencyHzব্যবহার করে ডিভাইসটির সর্বনিম্ন ও সর্বোচ্চ সমর্থিত ফ্রিকোয়েন্সি, হার্টজ এককে, জানতে পারেন। - সর্বোচ্চ আউটপুট ত্বরণ: ডিভাইসটির সর্বোচ্চ অর্জনযোগ্য আউটপুট ত্বরণ (G এককে)
getMaxOutputAccelerationGsএর মাধ্যমে পাওয়া যায়। - ফ্রিকোয়েন্সি থেকে আউটপুট ত্বরণের ম্যাপিং:
getFrequenciesOutputAccelerationHAL-এ বাস্তবায়িত ফ্রিকোয়েন্সি থেকে আউটপুট ত্বরণের ম্যাপিং প্রদান করে।
ডেভেলপাররা অ্যাডভান্সড PWLE API ব্যবহার করে এনভেলপ এফেক্ট তৈরি করার সময় এই তথ্য কাজে লাগাতে পারেন। উদাহরণস্বরূপ, আউটপুট অ্যাক্সিলারেশন (G-তে) নির্দিষ্ট করার সময়, তাদের অবশ্যই ডিভাইসটির সর্বোচ্চ আউটপুট অ্যাক্সিলারেশনের সাপেক্ষে এটিকে [0.0, 1.0] সীমার মধ্যে একটি মানে নর্মালাইজ করতে হবে।
উন্নত PWLE API-এর সাহায্যে ডেভেলপাররা সম্পূর্ণ ফ্রিকোয়েন্সি রেঞ্জ ব্যবহার করতে পারেন, তাই এটি অত্যন্ত গুরুত্বপূর্ণ যে প্রদত্ত FOAM ডেটা ভাইব্রেটরের জন্য নিরাপদ হয় এবং এর সক্ষমতা অতিক্রম না করে।
মানুষের উপলব্ধি সনাক্তকরণ সীমা
মানুষের উপলব্ধি শনাক্তকরণ প্রান্তসীমা বলতে কোনো কম্পনের সেই ন্যূনতম ত্বরণকে বোঝায় যা একজন ব্যক্তি নির্ভরযোগ্যভাবে শনাক্ত করতে পারে। এই মাত্রা কম্পনের কম্পাঙ্কের উপর ভিত্তি করে পরিবর্তিত হয়।
নিম্নলিখিত প্লটটি টেম্পোরাল ফ্রিকোয়েন্সির ফাংশন হিসাবে, ত্বরণে, মানুষের স্পর্শ সংবেদন সনাক্তকরণ থ্রেশহোল্ড 1 দেখায়:
চিত্র ২. মানুষের স্পর্শ সংবেদন শনাক্তকরণের প্রান্তসীমা।
যাতে ব্যবহারকারীরা স্পর্শজনিত প্রভাবগুলো ধারাবাহিকভাবে অনুভব করতে পারেন, সেজন্য VTS পরীক্ষাগুলো যাচাই করে যে এনভেলপ সক্ষমতা সম্পন্ন ডিভাইসগুলোর একটি ফ্রিকোয়েন্সি পরিসীমা রয়েছে যা মানুষের উপলব্ধি শনাক্তকরণ সীমা থেকে ১০ ডিবি পর্যন্ত কম্পনের বিস্তার তৈরি করতে পারে।
অনুভূত কম্পন তীব্রতা বনাম কম্পন ত্বরণ বিস্তার
কম্পনের তীব্রতা সম্পর্কে মানুষের উপলব্ধি (একটি উপলব্ধিমূলক পরিমাপ) কম্পনের বিস্তারের (একটি ভৌত পরামিতি) সাথে রৈখিকভাবে বৃদ্ধি পায় না। PWLE API ধরে নেয় যে, যখন একজন ডিজাইনার বা ডেভেলপার কম্পনের শক্তির পরিবর্তন নিয়ে চিন্তা করেন, তখন তারা আশা করেন যে অনুভূত তীব্রতা একটি PWLE অনুসরণ করবে। অনুভূত তীব্রতাকে সেনসেশন লেভেল (SL) দ্বারা চিহ্নিত করা হয়, যা একই ফ্রিকোয়েন্সিতে ডিটেকশন থ্রেশহোল্ডের উপরে dB হিসাবে সংজ্ঞায়িত করা হয়। সুতরাং, কম্পন ত্বরণের বিস্তার (G peak-এ) নিম্নলিখিতভাবে গণনা করা যেতে পারে:
\(Amplitude(G) =10^\frac{Amplitude(db)}{20}\)
যেখানে বিস্তার dB হলো একটি নির্দিষ্ট কম্পাঙ্কে SL এবং শনাক্তকরণ প্রান্তিক মানের (নিম্নলিখিত প্লটে উল্লম্ব অক্ষ বরাবর অবস্থিত মান) যোগফল।
এইভাবে, PWLE API নিশ্চিত করে যে পরপর জোড়া কন্ট্রোল পয়েন্টগুলোর মধ্যে অনুভূত তীব্রতা রৈখিকভাবে পরিবর্তিত হয়।
নিম্নোক্ত প্লটটিতে টেম্পোরাল ফ্রিকোয়েন্সির ফাংশন হিসেবে ১০, ২০, ৩০, ৪০ এবং ৫০ ডিবি এসএল-এ কম্পন ত্বরণের মাত্রা ২ এবং মানুষের স্পর্শানুভূতি শনাক্তকরণ প্রান্তসীমা (০ ডিবি এসএল) দেখানো হয়েছে।
চিত্র ৩. কম্পন ত্বরণের মাত্রাসমূহ।
সর্বোচ্চ আউটপুট ত্বরণ বক্ররেখার জন্য কম্পাঙ্ক নির্ণয় করুন।
এই বিভাগে ডিভাইসটি থেকে ফ্রিকোয়েন্সি থেকে সর্বোচ্চ আউটপুট ত্বরণ কার্ভটি কীভাবে পাওয়া যাবে, তার একটি সাধারণ নির্দেশিকা দেওয়া হয়েছে, যা আপনি FOAM ডেটা তৈরি করতে ব্যবহার করেন।
সর্বোচ্চ ভোল্টেজ বক্ররেখা (V) নির্ণয় করুন।
V হলো সর্বোচ্চ ভোল্টেজ যা ভাইব্রেটরের কার্যক্ষম কম্পাঙ্ক পরিসীমা জুড়ে নিরাপদে প্রয়োগ করা যায়। এটি নিশ্চিত করে যে ভাইব্রেটরটি নিরাপদ সীমার মধ্যে কাজ করে, ফলে ক্ষতি প্রতিরোধ হয় এবং কম্পনের মাত্রা সর্বোচ্চ হয়।
হার্ডওয়্যারে যদি ভোল্টেজ সীমিতকরণের বৈশিষ্ট্য থাকে, তবে সমর্থিত ফ্রিকোয়েন্সি পরিসীমা জুড়ে সর্বোচ্চ অর্জনযোগ্য ভোল্টেজ সরাসরি পরিমাপ করতে এটি ব্যবহার করুন।
সর্বোচ্চ ত্বরণ (M) গণনা করুন।
M হলো সর্বোচ্চ ত্বরণ, যা বিভিন্ন পদ্ধতির মাধ্যমে গণনা করা যায়। এই অংশে লিনিয়ার রেজোনেন্ট অ্যাকচুয়েটর (LRAs) ব্যবহারকারী ডিভাইসগুলোর জন্য একটি পদ্ধতি দেখানো হয়েছে।
এই পদ্ধতিটি একটি নির্দিষ্ট কম্পাঙ্কে প্রয়োগকৃত সর্বোচ্চ ভোল্টেজকে সংশ্লিষ্ট সর্বোচ্চ ত্বরণের মানে রূপান্তরিত করে, যা 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}\)
উদাহরণস্বরূপ, যদি মডিউলের ত্বরণ 1 g এবং ফোনের ত্বরণ 2.5 g হয়, তাহলে Loc_coeff = 2.5 হবে। এটি 2.5 গুণ বিবর্ধন নির্দেশ করে।
অ্যান্ড্রয়েড ফ্রেমওয়ার্ক ফ্রিকোয়েন্সিকে হার্টজ এককে গ্রহণ করে, তাই FOAM ডেটা তৈরি করার সময় HAL-কে ফ্রিকোয়েন্সির একক রেডিয়ান প্রতি সেকেন্ড থেকে হার্টজে রূপান্তর করতে হয়।
FOAM কার্ভটি তৈরি করুন
FOAM কার্ভ নির্ধারণ করতে সর্বোচ্চ ভোল্টেজ কার্ভ ( V ) এবং ত্বরণ গণনা ( M ) একত্রিত করুন:
- আপনার কাঙ্ক্ষিত পরিসরের প্রতিটি কম্পাঙ্ক (
f)-এর জন্য, আপনার সর্বোচ্চ ভোল্টেজ বক্ররেখা থেকে সংশ্লিষ্ট সর্বোচ্চ ভোল্টেজV(f)নির্ণয় করুন। - উপরের সমীকরণটি ব্যবহার করে ঐ কম্পাঙ্কে সর্বোচ্চ ত্বরণ নির্ণয় করুন, যেখানে
Vsysএর জায়গায়V(f)এবংwএর জায়গায় সংশ্লিষ্টfবসাতে হবে। এর ফলে আপনিM(V(f), f)পাবেন। - এই গণনাকৃত ত্বরণই আপনার
FOAM(f)মান।
FOAM ডেটা প্রকাশ করুন
FOAM কার্ভটি তৈরি হওয়ার পর, HAL কার্ভটিকে FrequencyAccelerationMapEntry অবজেক্টের একটি তালিকা হিসেবে উপস্থাপন করে। প্রতিটি এন্ট্রি ম্যাপিংয়ের একটি বিন্দুকে সংজ্ঞায়িত করে, যেখানে একটি ফ্রিকোয়েন্সি (হার্টজে) এবং এর সংশ্লিষ্ট সর্বোচ্চ আউটপুট ত্বরণ (জি পিকে) উল্লেখ করা থাকে।
মধ্যবর্তী ত্বরণের মান নির্ধারণ করার সময় লিনিয়ার ইন্টারপোলেশনের নির্ভুলতা বাড়ানোর জন্য, আমরা সর্বোচ্চ আউটপুট ত্বরণযুক্ত ফ্রিকোয়েন্সির আশেপাশে একটি উচ্চ ফ্রিকোয়েন্সি রেজোলিউশন নির্ধারণ করার পরামর্শ দিই। উদাহরণস্বরূপ, এই ফ্রিকোয়েন্সির +/- 10 Hz সীমার মধ্যে 1 Hz ধাপ ব্যবহার করুন।
ডিভাইসের ক্ষমতা এবং সীমাবদ্ধতা
অ্যান্ড্রয়েড ১৬ এবং তার পরবর্তী সংস্করণগুলোতে, ডেভেলপারদের তাদের PWLE ইফেক্টগুলো অপ্টিমাইজ করতে এবং বিভিন্ন ডিভাইসে সামঞ্জস্যতা নিশ্চিত করতে সাহায্য করার জন্য, অ্যান্ড্রয়েড ডিভাইসের 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 ব্যবহার করা হয়।
বেসিক এপিআই দিয়ে তৈরি ইফেক্টগুলো পরিচালনা করার সময়ও ফ্রেমওয়ার্কটি এই এপিআইগুলো ব্যবহার করে। যদি কোনো ইফেক্ট ডিভাইসের সীমাবদ্ধতা অতিক্রম করে (উদাহরণস্বরূপ, খুব বেশি PWLE পয়েন্ট বা সর্বোচ্চ সময়সীমা অতিক্রমকারী সময়কাল), তাহলে ফ্রেমওয়ার্কটি স্বয়ংক্রিয়ভাবে ইফেক্টটিকে অনুমোদিত সীমার মধ্যে আনার জন্য সামঞ্জস্য করে। এই সামঞ্জস্য প্রক্রিয়াটি ডিজাইনের মূল উদ্দেশ্য এবং অনুভূতি যতটা সম্ভব বজায় রাখার চেষ্টা করে।
বোলানোস্কি জুনিয়র, এসজে, এট আল.-এর " Four channels mediate the mechanical aspects of touch " জার্নাল অফ দ্য অ্যাকোস্টিক্যাল সোসাইটি অফ আমেরিকা 84(5): 1680-1694 (1988) এর চিত্র 1-এ থাকা ডিসপ্লেসমেন্ট থ্রেশহোল্ড থেকে থ্রেশহোল্ড ডেটা রূপান্তরিত করা হয়েছে। এই অনলাইন টিউটোরিয়ালটি অ্যাক্সিলারেশন অ্যামপ্লিচিউড এবং ডিসপ্লেসমেন্ট অ্যামপ্লিচিউডের মধ্যে রূপান্তর ব্যাখ্যা করে। ↩
ভেরিলো, আরটি, প্রমুখের " Sensation magnitude of vibrotactile stimuli " Perception & Psychophysics 6: 366-372 (1969) শীর্ষক গবেষণাপত্রের চিত্র ৮ থেকে ডেটাটি অনুমান করা হয়েছে। ↩