Core Motion: mohiyati, harakat sensorlari va ma'lumotlarni qayta ishlash

Muallif: IT Sectr Nashr etilgan: 2026-03-25 O'qish vaqti: 8 daq

Core Motion freymvorki — Apple qurilmalarida akselerometr, giroskop, magnitometr va pedometr ma'lumotlariga kirishni ta'minlovchi iOS tizim komponentidir. Apple Developer Documentation, 2025 ma'lumotlariga ko'ra, freymvork sensorlarning xom ma'lumotlarini qayta ishlaydi va ularni tushunarli metrikalarga — tezlanish, burchak tezligi, orientatsiya va qadam soniga — aylantiradi. Barcha harakat sensorlari uchun Yagona API dasturchilarga pedometrlar, fitnes ilovalari va qurilmani egish orqali boshqariladigan o'yinlar yaratish imkonini beradi.

Asosiy ma'lumotlar

  • Core Motion — iPhone va iPad harakat sensorlaridan ma'lumotlarni qayta ishlash uchun Apple freymvorki.
  • CMMotionManager — akselerometr, giroskop va magnitometrga kirish uchun markaziy sinf.
  • CMAltimeter — nisbiy balandlik va bosim o'zgarishi haqida ma'lumot olish uchun sinf.
  • CMPedometer — qadamlar, bosib o'tilgan masofa va harakat tezligini hisoblash uchun sinf.
  • CMDeviceMotion — tortishish kuchidan filtrlangan birlashtirilgan ma'lumotlar (userAcceleration).

Core Motion nima?

Core Motion — Apple tomonidan iOS 4 da taqdim etilgan, qurilmaning harakat sensorlari bilan ishlash uchun tizim freymvorki. U akselerometr, giroskop, magnitometr va pedometrga kirish uchun yagona interfeysni ta'minlaydi, dasturchini past darajadagi apparat drayverlari bilan ishlash zaruratidan ozod qiladi.

Core Motion ning asosiy ustunligi — ma'lumotlarning apparat filtrlashidir. Freymvork avtomatik ravishda akselerometr va giroskop ko'rsatkichlarini birlashtirib, tortishish komponentisiz toza userAcceleration ni hisoblaydi, shuningdek qurilmaning fazoda orientatsiyasini kvaternionlar va Eyler burchaklari shaklida beradi.

Apple WWDC 2023 ma'lumotlariga ko'ra, Core Motion App Store dagi fitnes ilovalarining 80% dan ortig'ida qo'llaniladi. Freymvork energiya iste'moli uchun optimallashtirilgan — obunachilar bo'lmaganda sensorlarni so'rov chastotasi avtomatik kamayadi, qurilmaning batareya ish vaqtini uzaytiradi.

Muhim arxitektura xususiyati — asosiy A-seriyasi protsessoridan mustaqil ravishda harakat sensorlari ma'lumotlarini qayta ishlaydigan M-seriyasi koprotsessori (Motion coprocessor) dan foydalanishdir. M7 chipidan (iPhone 5S) boshlab, koprotsessor doimiy ravishda akselerometr va giroskop ma'lumotlarini to'playdi, CMPedometer va CMAltimeter ga bloklangan ekranda 1 mW dan kam energiya sarfi bilan fon rejimida ishlash imkonini beradi. Bu apparat izolyatsiyasi tufayli mumkin bo'ldi: koprotsessorning o'ziga xos energiyaga bog'liq bo'lmagan xotirasi va asosiy tizimdan mustaqil ma'lumotlar magistrali mavjud.

Core Motion arxitekturasi

Core Motion arxitekturasi CMMotionManager orqali singlton modeli bo'yicha qurilgan. Ilova menejerning yagona nusxasini oladi va u orqali yangilash chastotasini konfiguratsiya qiladi, har bir sensor turidan ma'lumot to'plashni boshlaydi yoki to'xtatadi. Ma'lumotlar belgilangan interval bilan bloklar orqali yetkaziladi.

Freymvork ma'lumot olishning ikki rejimidan foydalanadi: pull (startAccelerometerUpdates orqali faol so'rov) va push (startAccelerometerUpdatesToQueue orqali passiv qabul). Push rejimi UI ilovalari uchun afzalroq, chunki ma'lumotlar asosiy oqimni bloklamasdan belgilangan navbatga yetkaziladi.

swift
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 sensorlari

Core Motion to'rt turdagi sensorlarga kirishni ta'minlaydi: akselerometr uch o'q bo'ylab chiziqli tezlanishni, giroskop — aylanish burchak tezligini, magnitometr — kompas uchun magnit maydon kuchlanishini o'lchaydi. To'rtinchi tur — barcha sensorlarning filtrlangan ko'rsatkichlarini o'z ichiga olgan CMDeviceMotion ma'lumotlari.

CMDeviceMotion — rivojlanish uchun eng qimmatli sinf. U userAcceleration (tortishish kuchisiz tezlanish), rotationRate (aylanish tezligi), magneticField (magnit maydon vektori) va attitude (qurilmaning orientatsiyasi kvaternion yoki Eyler burchaklari shaklida) ni taqdim etadi. Attitude ni hisoblash uchun Core Motion komplementar filtrga o'xshash algoritm bilan giroskop va akselerometr ma'lumotlarining birlashmasidan foydalanadi.

Magnitometr giroskop siljishini korreksiyalash uchun ishlatiladi. Sof giroskop vaqt o'tishi bilan harorat siljishi va shovqin tufayli xato to'playdi — magnitometr va akselerometr bu xatoni tuzatib, statik holatda 1–2 darajagacha aniqlikni ta'minlaydi.

swift
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)")
}

Pedometr va altimetr

CMPedometer — qadamlar, bosib o'tilgan masofa va harakat tempini hisoblash uchun sinf. U M-seriyasi (M7/M8/M9/M10/M11) harakat koprotsessorida apparat qayta ishlash bilan akselerometr ma'lumotlaridan foydalanadi. Bu minimal energiya sarfi bilan — 8 soat uzluksiz kuzatish uchun taxminan 1% batareya — fon rejimida ishlash imkonini beradi.

CMAltimeter — iPhone 6 va undan yangilarida o'rnatilgan barometr asosida nisbiy balandlikni aniqlash uchun sinf. Boshlang'ich nuqtaga nisbatan balandlik o'zgarishini taxminan 1 metr aniqlik bilan ko'rsatadi. Fitnes ilovalarida qavatlar sonini hisoblash va navigatsiya ilovalarida balandlik farqlarini aniqlash uchun ishlatiladi.

CMPedometer ma'lumotlari joriy ko'rsatkichlar uchun 5 soniyadan oshmaydigan kechikish bilan mavjud. Tarixiy ma'lumotlar uchun queryPedometerData orqali oxirgi 7 kun ichida tanlov mavjud. Pedometr avtomatik ravishda yurish, yugurish va haydashni taniydi — bu faoliyat turlari queryPedometerData orqali tur bo'yicha filtr bilan mavjud.

Aniqlik va cheklovlar

CMPedometer aniqligi oddiy yurishda taxminan 95% ni tashkil qiladi va yugurishda 90% gacha kamayadi. Aniqlikka ta'sir qiluvchi omillar: telefonning cho'ntak yoki ryukzakda joylashishi, poyabzal turi va sirt. Apple ochiq havoda masofani aniqlash uchun CMPedometer ni Core Location bilan birgalikda ishlatishni tavsiya qiladi — GPS aniqroq masofani, Core Motion esa qadam hisobini ta'minlaydi.

swift
let pedometer = CMPedometer()

guard CMPedometer
    .isStepCountingAvailable() else { return }

pedometer.startUpdates(from: Date()) { data, _ in
    guard let pedData = pedometerData else { return }
    print("Qadamlar: \(pedData.numberOfSteps)")
    print("Masofa: \(pedData.distance)")
}

// Altimetrga kirish
let altimeter = CMAltimeter()
altimeter.startRelativeAltitudeUpdates(
    to: OperationQueue.current()!
) { data, _ in
    print("Balandlik: \(data?.relativeAltitude)")
}

Core Motion ni ilovaga integratsiyalash

Core Motion integratsiyasi maxsus ruxsatlar yoki entitlement talab qilmaydi — freymvork importini qo'shish va CMMotionManager nusxasini yaratish kifoya. Biroq, CMPedometer uchun iOS 11 dan boshlab CMStepCounter orqali avtorizatsiya so'rovi yoki tizim dialogi orqali ruxsat so'rovi bilan CMPedometer dan foydalanish talab qilinadi.

Integratsiya jarayoni o'z ichiga oladi: CMMotionManager yaratish, sensor mavjudligini isAccelerometerAvailable / isGyroAvailable / isDeviceMotionAvailable orqali tekshirish, yangilash intervalini o'rnatish va ma'lumot olishni boshlash. Ma'lumot kerak bo'lmaganda stopAccelerometerUpdates orqali yangilanishlarni to'xtatish muhim — bu energiya iste'moli uchun juda muhim.

Fon ishi uchun CMPedometer va CMAltimeter qo'shimcha sozlamalarni talab qilmaydi — ular harakat koprotsessoridan foydalanadi. CMMotionManager uchun fon ishi mavjud emas — ma'lumotlar faqat ilova faol va oldingi planda bo'lganda yig'iladi. CMPedometer uchun yagona shart — ilova iOS dan fon yangilanishlariga obunani ishga tushirish uchun o'rnatishdan so'ng foydalanuvchi tomonidan kamida bir marta ishga tushirilgan bo'lishi kerak.

Energiya iste'molini optimallashtirish

Core Motion adaptiv so'rov chastotasini qo'llab-quvvatlaydi: agar ilovaga real vaqt rejimida ma'lumot kerak bo'lmasa, 100 Hz o'rniga 1–5 Hz intervalni o'rnatish kifoya. Fitnes ilovalari uchun optimal chastota CMMotionManager uchun 10 Hz va CMPedometer uchun 1 Hz. Apple chastotani to'g'ri ishlash uchun minimal talab qilinadigan darajaga tushirishni tavsiya qiladi.

Egish orqali boshqariladigan o'yinlar uchun reaksiya silliqligini ta'minlash uchun 60–100 Hz chastotasi talab qilinadi. Bu holda alohida navbat bilan startDeviceMotionUpdates dan foydalanish va ma'lumotlarni imkon qadar tez qayta ishlash muhim. Apple ma'lumotlariga ko'ra, 60 Hz chastotasi 30 Hz dan taxminan 2 baravar ko'p energiya sarflaydi.

Core Motion bilan ishlashda qurilma muvofiqligini hisobga olish muhim: giroskop iPhone 3GS va iPad 1-avlodida, magnitometr — uyali moduli bo'lmagan barcha iPad larda mavjud emas. Sensorlarning mavjudligini tekshirish uchun CMMotionManager sinfining isAccelerometerAvailable, isGyroAvailable va isDeviceMotionAvailable statik metodlaridan foydalaniladi. Simulyatorda Core Motion test ma'lumotlarini qaytaradi — real sensorda disk raskadrovka qilish uchun har doim jismoniy Apple qurilmasi kerak.

swift
// Fitnes ilovasi uchun optimal sozlama
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()
    }
}

Ko'p beriladigan savollar

Core Motion iPad va iPod touch da ishlaydimi?

Ha, Core Motion kerakli sensorlari bo'lgan barcha Apple qurilmalarida ishlaydi. Akselerometr barcha iPhone, iPad va iPod touch larda mavjud. Giroskop — barcha iPhone 4 va undan yangilarida, iPad 2 va undan yangilarida. Magnitometr — faqat iPhone da, iPad da yo'q. Barometr — iPhone 6 va undan yangilarida.

Core Motion batareyaga qanday ta'sir qiladi?

Batareyaga ta'sir so'rov chastotasiga bog'liq. 100 Hz da Core Motion soatiga taxminan 5–7% batareya sarflaydi. 10 Hz da — soatiga taxminan 1–2%. Harakat koprotsessoridagi CMPedometer 8 soat ish davomida 1% dan kam sarflaydi. Apple ma'lumot kerak bo'lmaganda har doim yangilanishlarni to'xtatishni tavsiya qiladi.

Core Motion pedometr yaratish uchun ishlatilishi mumkinmi?

Ha, CMPedometer akselerometrning xom ma'lumotlarini qayta ishlash zaruratisiz pedometr uchun tayyor yechimni taqdim etadi. Sinf avtomatik ravishda qadamlarni yurishda taxminan 95% va yugurishda 90% aniqlik bilan taniydi. Maxsus qadam detektori uchun CMMotionManager o'z algoritmi bilan ishlatilishi mumkin.

Core Motion Android dagi harakat freymvorkidan nima bilan farq qiladi?

Core Motion iOS tizimi darajasida integratsiyalangan va past energiyali qayta ishlash uchun M-seriyasi koprotsessoridan foydalanadi. Android SensorManager dan apparat drayverlariga to'g'ridan-to'g'ri kirish bilan foydalanadi, lekin ixtisoslashgan koprotsessorga ega emas, bu fon kuzatuvi vaqtida energiya iste'molini oshiradi.

CMPedometer uchun maxsus ruxsat kerakmi?

iOS 11 va undan yangilarida CMPedometer uchun foydalanuvchi ruxsati talab qilinadi. So'rov CMPedometer yaratilganda avtomatik ravishda amalga oshiriladi va tizim dialogini chaqiradi. Info.plist da ilova nima uchun harakat ma'lumotlariga kirishga muhtojligini tushuntiruvchi NSMotionUsageDescription kaliti qo'shilishi kerak.

Xulosa

  • Core Motion — akselerometr, giroskop va magnitometr bilan ishlash uchun iOS tizim freymvorki.
  • CMMotionManager — qurilmaning barcha harakat sensorlariga kirishni ta'minlovchi markaziy sinf.
  • CMDeviceMotion filtrlangan ma'lumotlarni taqdim etadi — userAcceleration, attitude va rotationRate.
  • CMPedometer minimal energiya sarfi bilan qadamlarni hisoblash uchun M-seriyasi koprotsessoridan foydalanadi.
  • CMAltimeter barometr yordamida balandlik o'zgarishini 1 metr aniqlik bilan o'lchaydi.
  • Integratsiya entitlement talab qilmaydi, lekin CMPedometer uchun NSMotionUsageDescription kerak.
  • M7–M11 koprotsessori 1 mW dan kam energiya sarfi bilan fon ma'lumotlar yig'ishni ta'minlaydi.

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing