Core Motion ফ্রেমওয়ার্ক হল iOS-এর একটি সিস্টেম কম্পোনেন্ট যা Apple ডিভাইসে অ্যাক্সেলেরোমিটার, গাইরোস্কোপ, ম্যাগনেটোমিটার এবং পেডোমিটারের ডেটা অ্যাক্সেস প্রদান করে। Apple Developer Documentation, 2025 অনুসারে, ফ্রেমওয়ার্ক সেন্সরগুলির কাঁচা ডেটা প্রসেস করে এবং সেগুলিকে বোধগম্য মেট্রিক্স — ত্বরণ, কৌণিক বেগ, ওরিয়েন্টেশন এবং পদসংখ্যায় রূপান্তরিত করে। সমস্ত মোশন সেন্সরের জন্য একটি একক API ডেভেলপারদের পেডোমিটার, ফিটনেস অ্যাপ এবং ডিভাইস কাত নিয়ন্ত্রণযুক্ত গেম তৈরি করতে সক্ষম করে।
মূল পয়েন্ট
Core Motion হল Apple-এর একটি সিস্টেম ফ্রেমওয়ার্ক, যা iOS 4-এ ডিভাইসের মোশন সেন্সরের সাথে কাজ করার জন্য প্রবর্তিত হয়েছিল। এটি অ্যাক্সেলেরোমিটার, গাইরোস্কোপ, ম্যাগনেটোমিটার এবং পেডোমিটারে অ্যাক্সেসের জন্য একটি একীভূত ইন্টারফেস প্রদান করে, যা ডেভেলপারকে নিম্ন স্তরে হার্ডওয়্যার ড্রাইভারের সাথে কাজ করার প্রয়োজনীয়তা থেকে মুক্তি দেয়।
Core Motion-এর মূল সুবিধা হল ডেটার হার্ডওয়্যার ফিল্টারিং। ফ্রেমওয়ার্ক স্বয়ংক্রিয়ভাবে অ্যাক্সেলেরোমিটার এবং গাইরোস্কোপের রিডিং একত্রিত করে অভিকর্ষীয় উপাদান ছাড়া বিশুদ্ধ userAcceleration গণনা করে এবং কোয়াটারনিয়ন ও অয়লার কোণ আকারে ডিভাইসের ওরিয়েন্টেশন প্রদান করে।
Apple WWDC 2023 অনুসারে, Core Motion App Store-এ 80% এর বেশি ফিটনেস অ্যাপে ব্যবহৃত হয়। ফ্রেমওয়ার্ক শক্তি খরচের জন্য অপ্টিমাইজ করা — কোনো সাবস্ক্রাইবার না থাকলে সেন্সর পোলিং ফ্রিকোয়েন্সি স্বয়ংক্রিয়ভাবে কমে যায়, যা ডিভাইসের ব্যাটারি আয়ু বাড়ায়।
একটি গুরুত্বপূর্ণ আর্কিটেকচারাল বৈশিষ্ট্য হল M-সিরিজ কোপ্রসেসর (Motion coprocessor) ব্যবহার, যা মূল A-সিরিজ প্রসেসর থেকে স্বাধীনভাবে মোশন সেন্সর ডেটা প্রসেস করে। M7 চিপ (iPhone 5S) থেকে শুরু করে, কোপ্রসেসর ক্রমাগত অ্যাক্সেলেরোমিটার এবং গাইরোস্কোপ ডেটা সংগ্রহ করে, যা CMPedometer এবং CMAltimeter-কে 1 mW-এর কম খরচে লক স্ক্রিনে ব্যাকগ্রাউন্ডে কাজ করতে দেয়। এটি হার্ডওয়্যার বিচ্ছিন্নতার কারণে সম্ভব হয়েছে: কোপ্রসেসরের নিজস্ব নন-ভোলাটাইল মেমোরি এবং মূল সিস্টেম থেকে স্বাধীন ডেটা বাস রয়েছে।
Core Motion আর্কিটেকচার CMMotionManager-এর মাধ্যমে সিঙ্গলটন মডেলে নির্মিত। অ্যাপ্লিকেশন ম্যানেজারের একটি একক ইনstance পায় এবং তার মাধ্যমে আপডেট ফ্রিকোয়েন্সি কনফিগার করে, প্রতিটি সেন্সর প্রকারের জন্য ডেটা সংগ্রহ শুরু বা বন্ধ করে। ডেটা নির্দিষ্ট ব্যবধানে ক্লোজার ব্লকের মাধ্যমে আসে।
ফ্রেমওয়ার্ক ডেটা পাওয়ার দুটি মোড ব্যবহার করে: পুল (startAccelerometerUpdates-এর মাধ্যমে সক্রিয় পোলিং) এবং পুশ (startAccelerometerUpdatesToQueue-এর মাধ্যমে নিষ্ক্রিয় প্রাপ্তি)। পুশ মোড UI অ্যাপ্লিকেশনের জন্য পছন্দনীয় কারণ ডেটা মূল থ্রেড ব্লক না করে নির্দিষ্ট কিউতে বিতরণ করা হয়।
import CoreMotion
let motionManager = CMMotionManager()
motionManager.accelerometerUpdateInterval = 0.1
guard motionManager
.isAccelerometerAvailable else { return }
motionManager.startAccelerometerUpdates(
to: OperationQueue.current()!
) { data, _ in
guard let accel = data?.acceleration else { return }
print("X: \(accel.x), Y: \(accel.y), Z: \(accel.z)")
}
Core Motion চারটি বিভাগের সেন্সরে অ্যাক্সেস প্রদান করে: অ্যাক্সেলেরোমিটার তিনটি অক্ষে রৈখিক ত্বরণ মাপে, গাইরোস্কোপ কৌণিক ঘূর্ণন বেগ মাপে এবং ম্যাগনেটোমিটার কম্পাসের জন্য চৌম্বক ক্ষেত্রের শক্তি মাপে। চতুর্থ বিভাগ হল সমন্বিত CMDeviceMotion ডেটা, যা সব সেন্সর থেকে ফিল্টার করা রিডিং অন্তর্ভুক্ত করে।
CMDeviceMotion ডেভেলপমেন্টের জন্য সবচেয়ে মূল্যবান ক্লাস। এটি userAcceleration (অভিকর্ষ ছাড়া ত্বরণ), rotationRate (ঘূর্ণন গতি), magneticField (চৌম্বক ক্ষেত্র ভেক্টর) এবং attitude (কোয়াটারনিয়ন বা অয়লার কোণ আকারে ডিভাইস ওরিয়েন্টেশন) প্রদান করে। attitude গণনার জন্য, Core Motion একটি কমপ্লিমেন্টারি ফিল্টারের অনুরূপ অ্যালগরিদম ব্যবহার করে গাইরোস্কোপ এবং অ্যাক্সেলেরোমিটারের সেন্সর ফিউশন করে।
ম্যাগনেটোমিটার গাইরোস্কোপ ড্রিফট সংশোধন এর জন্য ব্যবহৃত হয়। বিশুদ্ধ গাইরোস্কোপ সময়ের সাথে তাপমাত্রা ড্রিফট এবং শব্দের কারণে ত্রুটি জমা করে — ম্যাগনেটোমিটার এবং অ্যাক্সেলেরোমিটার এই ত্রুটি সংশোধন করে, স্থির অবস্থানে 1–2 ডিগ্রি পর্যন্ত ওরিয়েন্টেশন নির্ভুলতা প্রদান করে।
guard motionManager
.isDeviceMotionAvailable else { return }
motionManager.deviceMotionUpdateInterval = 1.0 // 1 Hz
motionManager.startDeviceMotionUpdates(
using: .xArbitraryZVertical,
to: OperationQueue.current()!
) { motion, _ in
guard let attitude = motion?.attitude else { return }
print("Roll: \(attitude.roll)")
print("Pitch: \(attitude.pitch)")
print("Yaw: \(attitude.yaw)")
}
CMPedometer — পদসংখ্যা, অতিক্রান্ত দূরত্ব এবং গতির বেগ গণনার জন্য ক্লাস। এটি M-সিরিজ মোশন কোপ্রসেসর (M7/M8/M9/M10/M11)-এ হার্ডওয়্যার প্রসেসিং সহ অ্যাক্সেলেরোমিটার ডেটা ব্যবহার করে। এটি ন্যূনতম শক্তি খরচে ব্যাকগ্রাউন্ডে কাজ করতে দেয় — একটানা 8 ঘন্টা ট্র্যাকিংয়ে প্রায় 1% ব্যাটারি।
CMAltimeter — iPhone 6 এবং নতুন মডেলে ইনস্টল করা ব্যারোমিটারের উপর ভিত্তি করে আপেক্ষিক উচ্চতা নির্ধারণের জন্য ক্লাস। এটি প্রায় 1 মিটার নির্ভুলতা সহ শুরু বিন্দুর সাপেক্ষে উচ্চতা পরিবর্তন দেখায়। এটি ফিটনেস অ্যাপে তলা গণনা এবং নেভিগেশন অ্যাপে উচ্চতা পরিবর্তন নির্ধারণে ব্যবহৃত হয়।
CMPedometer ডেটা বর্তমান রিডিংয়ের জন্য 5 সেকেন্ডের বেশি বিলম্বে উপলব্ধ। ঐতিহাসিক ডেটার জন্য, queryPedometerData-এর মাধ্যমে 7 দিন পর্যন্ত ডেটা উপলব্ধ। পেডোমিটার স্বয়ংক্রিয়ভাবে হাঁটা, দৌড়ানো এবং সাইকেল চালানো শনাক্ত করে — এই কার্যকলাপের ধরনগুলি queryPedometerData-এর মাধ্যমে টাইপ অনুযায়ী ফিল্টারিং সহ উপলব্ধ।
CMPedometer-এর নির্ভুলতা সাধারণ হাঁটায় প্রায় 95% এবং দৌড়ালে 90% পর্যন্ত কমে যায়। নির্ভুলতা প্রভাবিত হয়: পকেট বা ব্যাগে ফোনের অবস্থান, জুতোর ধরন এবং পৃষ্ঠতল। Apple খোলা জায়গায় দূরত্ব নির্ধারণের জন্য Core Location-এর সাথে CMPedometer ব্যবহারের সুপারিশ করে — GPS আরও নির্ভুল দূরত্ব প্রদান করে যখন Core Motion পদ গণনা পরিচালনা করে।
let pedometer = CMPedometer()
guard CMPedometer
.isStepCountingAvailable() else { return }
pedometer.startUpdates(from: Date()) { data, _ in
guard let pedData = pedometerData else { return }
print("পদ: \(pedData.numberOfSteps)")
print("দূরত্ব: \(pedData.distance)")
}
// অল্টিমিটার অ্যাক্সেস
let altimeter = CMAltimeter()
altimeter.startRelativeAltitudeUpdates(
to: OperationQueue.current()!
) { data, _ in
print("উচ্চতা: \(data?.relativeAltitude)")
}
Core Motion-এর সংযোজনের জন্য বিশেষ অনুমতি বা এন্টাইটেলমেন্টের প্রয়োজন নেই — শুধু ফ্রেমওয়ার্ক ইম্পোর্ট যোগ করুন এবং CMMotionManager ইনstance তৈরি করুন। তবে, iOS 11 থেকে শুরু হওয়া CMPedometer-এর জন্য, CMStepCounter-এর মাধ্যমে বা সিস্টেম অনুমতি ডায়ালগ সহ CMPedometer ব্যবহার করে অনুমোদন প্রয়োজন।
সংযোজন প্রক্রিয়ায় অন্তর্ভুক্ত: CMMotionManager তৈরি, isAccelerometerAvailable / isGyroAvailable / isDeviceMotionAvailable-এর মাধ্যমে সেন্সর প্রাপ্যতা পরীক্ষা, আপডেট ব্যবধান সেট করা এবং ডেটা সংগ্রহ শুরু করা। যখন ডেটার প্রয়োজন নেই তখন stopAccelerometerUpdates-এর মাধ্যমে আপডেট বন্ধ করা গুরুত্বপূর্ণ — এটি শক্তি খরচের জন্য অত্যন্ত গুরুত্বপূর্ণ।
ব্যাকগ্রাউন্ড অপারেশনের জন্য, CMPedometer এবং CMAltimeter-এর অতিরিক্ত কনফিগারেশনের প্রয়োজন নেই — তারা মোশন কোপ্রসেসর ব্যবহার করে। CMMotionManager-এর জন্য, ব্যাকগ্রাউন্ড অপারেশন উপলব্ধ নয় — ডেটা কেবল তখনই সংগ্রহ করা হয় যখন অ্যাপ সক্রিয় এবং অগ্রভাগে থাকে। CMPedometer-এর একমাত্র শর্ত হল iOS থেকে ব্যাকগ্রাউন্ড আপডেটের সাবস্ক্রিপশন আরম্ভ করতে ইনস্টলেশনের পরে অ্যাপটি ব্যবহারকারী দ্বারা কমপক্ষে একবার চালু করা আবশ্যক।
Core Motion অভিযোজিত পোলিং ফ্রিকোয়েন্সি সমর্থন করে: অ্যাপের রিয়েল-টাইম ডেটার প্রয়োজন না হলে, 100 Hz-এর পরিবর্তে 1–5 Hz ব্যবধান সেট করা যথেষ্ট। ফিটনেস অ্যাপের জন্য, CMMotionManager-এর জন্য 10 Hz এবং CMPedometer-এর জন্য 1 Hz সর্বোত্তম ফ্রিকোয়েন্সি। Apple সঠিক অপারেশনের জন্য প্রয়োজনীয় ন্যূনতম ফ্রিকোয়েন্সি কমানোর সুপারিশ করে।
কাত নিয়ন্ত্রণযুক্ত গেমের জন্য, মসৃণ প্রতিক্রিয়া নিশ্চিত করতে 60–100 Hz-এর ফ্রিকোয়েন্সি প্রয়োজন। এক্ষেত্রে, একটি পৃথক কিউ সহ startDeviceMotionUpdates ব্যবহার করা এবং যত দ্রুত সম্ভব ডেটা প্রসেস করা গুরুত্বপূর্ণ। Apple-এর মতে, 60 Hz 30 Hz-এর তুলনায় প্রায় 2 গুণ বেশি শক্তি খরচ করে।
Core Motion-এর সাথে কাজ করার সময়, ডিভাইস সামঞ্জস্যতা বিবেচনা করা গুরুত্বপূর্ণ: গাইরোস্কোপ iPhone 3GS এবং iPad 1ম প্রজন্মে অনুপস্থিত, ম্যাগনেটোমিটার সেলুলার মডিউল ছাড়া সব iPad-এ অনুপস্থিত। সেন্সর প্রাপ্যতা পরীক্ষার জন্য CMMotionManager ক্লাসের স্ট্যাটিক পদ্ধতি isAccelerometerAvailable, isGyroAvailable এবং isDeviceMotionAvailable ব্যবহার করা হয়। সিমুলেটরে, Core Motion পরীক্ষার ডেটা ফেরত দেয় — বাস্তব সেন্সরে ডিবাগিংয়ের জন্য, একটি ফিজিক্যাল Apple ডিভাইস সবসময় প্রয়োজন।
// ফিটনেস অ্যাপের জন্য সর্বোত্তম সেটিং
motionManager.deviceMotionUpdateInterval = 0.1 // 10 Hz
motionManager.startDeviceMotionUpdates(
to: .main
) { [weak self] motion, error in
guard let self = self,
let motion = motion else { return }
if motion.userAcceleration.magnitude() > 2.0 {
self.detectedSignificantMovement()
}
}
সচরাচর জিজ্ঞাসিত প্রশ্ন
হ্যাঁ, Core Motion প্রয়োজনীয় সেন্সরযুক্ত সব Apple ডিভাইসে কাজ করে। অ্যাক্সেলেরোমিটার সব iPhone, iPad এবং iPod touch-এ উপলব্ধ। গাইরোস্কোপ সব iPhone 4 এবং নতুন, iPad 2 এবং নতুন মডেলে উপলব্ধ। ম্যাগনেটোমিটার শুধুমাত্র iPhone-এ উপলব্ধ, iPad-এ নয়। ব্যারোমিটার iPhone 6 এবং নতুন মডেলে উপলব্ধ।
ব্যাটারির উপর প্রভাব পোলিং ফ্রিকোয়েন্সি-র উপর নির্ভর করে। 100 Hz-এ, Core Motion প্রতি ঘন্টায় প্রায় 5–7% ব্যাটারি খরচ করে। 10 Hz-এ — প্রতি ঘন্টায় প্রায় 1–2%। মোশন কোপ্রসেসরে CMPedometer 8 ঘন্টা অপারেশনে 1% এর কম খরচ করে। Apple সবসময় ডেটার প্রয়োজন না হলে আপডেট বন্ধ করার সুপারিশ করে।
হ্যাঁ, CMPedometer অ্যাক্সেলেরোমিটারের কাঁচা ডেটা প্রসেস না করেই পেডোমিটারের জন্য প্রস্তুত সমাধান প্রদান করে। ক্লাস স্বয়ংক্রিয়ভাবে হাঁটায় প্রায় 95% এবং দৌড়ালে 90% নির্ভুলতার সাথে পদ শনাক্ত করে। কাস্টম স্টেপ ডিটেক্টরের জন্য, আপনি নিজস্ব অ্যালগরিদম সহ CMMotionManager ব্যবহার করতে পারেন।
Core Motion সিস্টেম স্তরে iOS-এ একীভূত এবং কম-শক্তি প্রসেসিংয়ের জন্য M-সিরিজ কোপ্রসেসর ব্যবহার করে। Android হার্ডওয়্যার ড্রাইভারে সরাসরি অ্যাক্সেস সহ SensorManager ব্যবহার করে তবে কোনও বিশেষায়িত কোপ্রসেসর নেই, যা ব্যাকগ্রাউন্ড ট্র্যাকিংয়ের সময় শক্তি খরচ বাড়ায়।
iOS 11 এবং নতুন সংস্করণে CMPedometer-এর জন্য ব্যবহারকারীর অনুমতি প্রয়োজন। অনুরোধটি CMPedometer তৈরি করার সময় স্বয়ংক্রিয়ভাবে করা হয় এবং একটি সিস্টেম ডায়ালগ ট্রিগার করে। Info.plist-এ, আপনাকে NSMotionUsageDescription কী যোগ করতে হবে যাতে ব্যাখ্যা করা হয় কেন অ্যাপের মোশন ডেটা অ্যাক্সেস প্রয়োজন।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন