Core Motion: mahiyyəti, hərəkət sensorları və məlumatların işlənməsi

Müəllif: IT Sectr Dərc olunub: 2026-03-25 Oxuma vaxtı: 8 dəq

Core Motion frameworku — Apple cihazlarında akselerometr, giroskop, maqnitometr və addımölçən məlumatlarına girişi təmin edən iOS sistem komponentidir. Apple Developer Documentation, 2025-ə görə, framework sensorların xam məlumatlarını emal edir və onları anlaşılan metrikalara — sürətlənmə, bucaq sürəti, oriyentasiya və addım sayına — çevirir. Bütün hərəkət sensorları üçün Vahid API proqramçılara addımölçənlər, fitnes tətbiqləri və cihazın əyilməsi ilə idarə olunan oyunlar yaratmağa imkan verir.

Əsas məqamlar

  • Core Motion — iPhone və iPad hərəkət sensorlarından məlumatların emalı üçün Apple frameworku.
  • CMMotionManager — akselerometr, giroskop və maqnitometrə giriş üçün mərkəzi sinif.
  • CMAltimeter — nisbi hündürlük və təzyiq dəyişikliyi haqqında məlumat almaq üçün sinif.
  • CMPedometer — addımların, qət edilən məsafənin və hərəkət sürətinin hesablanması üçün sinif.
  • CMDeviceMotion — qravitasiyadan filtrasiya ilə birləşdirilmiş məlumatlar (userAcceleration).

Core Motion nədir?

Core Motion — Apple-ın iOS 4-də təqdim edilmiş, cihazın hərəkət sensorları ilə işləmək üçün sistem frameworkudur. O, akselerometr, giroskop, maqnitometr və addımölçənə giriş üçün vahid interfeys təmin edir, proqramçını aşağı səviyyədə aparat drayverləri ilə işləmək zərurətindən azad edir.

Core Motion-un əsas üstünlüyü — məlumatların aparat filtrasiyasıdır. Framework avtomatik olaraq akselerometr və giroskop göstəricilərini birləşdirərək qravitasiya komponenti olmadan təmiz userAcceleration hesablayır, həmçinin cihazın fəzada oriyentasiyasını kvaternionlar və Eyler bucaqları şəklində verir.

Apple WWDC 2023-ə görə, Core Motion App Store-dakı fitnes tətbiqlərinin 80%-dən çoxunda istifadə olunur. Framework enerji istehlakı üçün optimallaşdırılıb — abunəçilər olmadıqda sensorların sorğu tezliyi avtomatik azalır, cihazın batareya iş müddətini uzadır.

Əhəmiyyətli memarlıq xüsusiyyəti — əsas A-seriyası prosessorundan asılı olmayaraq hərəkət sensoru məlumatlarını emal edən M-seriyası koprosessorunun (Motion coprocessor) istifadəsidir. M7 çipindən (iPhone 5S) başlayaraq, koprosessor davamlı olaraq akselerometr və giroskop məlumatlarını toplayır, CMPedometer və CMAltimeter-ə bloklanmış ekranda 1 mW-dan az enerji sərfiyyatı ilə fon rejimində işləməyə imkan verir. Bu, aparat izolyasiyası sayəsində mümkün oldu: koprosessorun öz enerji asılı olmayan yaddaşı və əsas sistemdən müstəqil məlumat magistralı var.

Core Motion memarlığı

Core Motion memarlığı CMMotionManager vasitəsilə sinqlton modeli üzrə qurulub. Tətbiq menecerin tək bir nümunəsini alır və onun vasitəsilə yeniləmə tezliyini konfiqurasiya edir, hər bir sensor növündən məlumat toplanmasını başladır və ya dayandırır. Məlumatlar göstərilən intervalla bloklar vasitəsilə çatdırılır.

Framework iki rejimdə məlumat əldə edir: pull (startAccelerometerUpdates vasitəsilə aktiv sorğu) və push (startAccelerometerUpdatesToQueue vasitəsilə passiv qəbul). Push rejimi UI tətbiqləri üçün daha üstündür, çünki məlumatlar əsas axını bloklamadan göstərilən növbəyə çatdırılır.

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 sensorları

Core Motion dörd kateqoriya sensora giriş təmin edir: akselerometr üç ox üzrə xətti sürətlənməni, giroskop — fırlanma bucaq sürətini, maqnitometr — kompas üçün maqnit sahəsinin gərginliyini ölçür. Dördüncü kateqoriya — bütün sensorların filtrasiya olunmuş göstəricilərini özündə birləşdirən CMDeviceMotion məlumatlarıdır.

CMDeviceMotion — inkişaf üçün ən dəyərli sinifdir. O, userAcceleration (qravitasiyasız sürətlənmə), rotationRate (fırlanma sürəti), magneticField (maqnit sahəsi vektoru) və attitude (cihazın oriyentasiyası kvaternion və ya Eyler bucaqları şəklində) təqdim edir. Attitude hesablamaq üçün Core Motion komplementar filtrə oxşar alqoritmlə giroskop və akselerometr məlumatlarının birləşməsindən istifadə edir.

Maqnitometr giroskopun sürüşməsinin korreksiyası üçün istifadə olunur. Təmiz giroskop zamanla temperatur sürüşməsi və səs-küy səbəbindən xəta toplayır — maqnitometr və akselerometr bu xətanı düzəldərək statik vəziyyətdə 1–2 dərəcəyə qədər dəqiqlik təmin edir.

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

Addımölçən və altimetr

CMPedometer — addımların, qət edilən məsafənin və hərəkət tempinin hesablanması üçün sinif. O, M-seriyası (M7/M8/M9/M10/M11) hərəkət koprosessorunda aparat emalı ilə akselerometr məlumatlarından istifadə edir. Bu, minimal enerji sərfiyyatı ilə — 8 saat fasiləsiz izləmə üçün təxminən 1% batareya — fon rejimində işləməyə imkan verir.

CMAltimeter — iPhone 6 və daha yenisində quraşdırılmış barometr əsasında nisbi hündürlüyü təyin etmək üçün sinif. Başlanğıc nöqtəsinə nisbətən hündürlük dəyişikliyini təxminən 1 metr dəqiqliklə göstərir. Fitnes tətbiqlərində mərtəbələrin sayılması və naviqasiya tətbiqlərində hündürlük fərqlərinin təyini üçün istifadə olunur.

CMPedometer məlumatları cari göstəricilər üçün 5 saniyədən çox olmayan gecikmə ilə əlçatandır. Tarixi məlumatlar üçün queryPedometerData vasitəsilə son 7 gün ərzində seçim mövcuddur. Addımölçən avtomatik olaraq yerimə, qaçış və sürməni tanıyır — bu fəaliyyət növləri queryPedometerData vasitəsilə növə görə filtr ilə əlçatandır.

Dəqiqlik və məhdudiyyətlər

CMPedometer dəqiqliyi normal yerimədə təxminən 95% təşkil edir və qaçışda 90%-ə düşür. Dəqiqliyə təsir edənlər: telefonun cibdə və ya çantada yerləşdirilməsi, ayaqqabı növü və səth. Apple açıq havada məsafəni təyin etmək üçün CMPedometer-i Core Location ilə birlikdə istifadə etməyi tövsiyə edir — GPS daha dəqiq məsafə, Core Motion isə addım hesablamasını təmin edir.

swift
let pedometer = CMPedometer()

guard CMPedometer
    .isStepCountingAvailable() else { return }

pedometer.startUpdates(from: Date()) { data, _ in
    guard let pedData = pedometerData else { return }
    print("Addımlar: \(pedData.numberOfSteps)")
    print("Məsafə: \(pedData.distance)")
}

// Altimetrə giriş
let altimeter = CMAltimeter()
altimeter.startRelativeAltitudeUpdates(
    to: OperationQueue.current()!
) { data, _ in
    print("Hündürlük: \(data?.relativeAltitude)")
}

Core Motion-un tətbiqə inteqrasiyası

Core Motion inteqrasiyası xüsusi icazələr və ya entitlement tələb etmir — sadəcə framework importu əlavə etmək və CMMotionManager nümunəsi yaratmaq kifayətdir. Lakin CMPedometer üçün iOS 11-dən etibarən CMStepCounter vasitəsilə avtorizasiya sorğusu və ya sistem dialoqu vasitəsilə icazə sorğusu ilə CMPedometer istifadəsi tələb olunur.

İnteqrasiya prosesi daxildir: CMMotionManager yaratmaq, sensorun əlçatanlığını isAccelerometerAvailable / isGyroAvailable / isDeviceMotionAvailable vasitəsilə yoxlamaq, yeniləmə intervalını təyin etmək və məlumat almağa başlamaq. Məlumat lazım olmadıqda stopAccelerometerUpdates vasitəsilə yeniləmələri dayandırmaq vacibdir — bu, enerji istehlakı üçün kritik əhəmiyyət daşıyır.

Addımölçən CMPedometer və altimetr CMAltimeter fon işi üçün əlavə parametrlər tələb etmir — onlar hərəkət koprosessorundan istifadə edirlər. CMMotionManager üçün fon işi mövcud deyil — məlumatlar yalnız tətbiq aktiv və ön planda olduqda toplanır. CMPedometer üçün yeganə şərt — tətbiq iOS-dan fon yeniləmələrinə abunəliyi işə salmaq üçün quraşdırmadan sonra istifadəçi tərəfindən ən azı bir dəfə işə salınmalıdır.

Enerji istehlakının optimallaşdırılması

Core Motion adaptiv sorğu tezliyini dəstəkləyir: tətbiqə real vaxt rejimində məlumat lazım deyilsə, 100 Hz əvəzinə 1–5 Hz interval təyin etmək kifayətdir. Fitnes tətbiqləri üçün optimal tezlik CMMotionManager üçün 10 Hz və CMPedometer üçün 1 Hz-dir. Apple tezliyi düzgün işləmə üçün minimal tələb olunan səviyyəyə endirməyi tövsiyə edir.

Əyilmə ilə idarə olunan oyunlar üçün reaksiyanın hamarlığını təmin etmək üçün 60–100 Hz tezliyi tələb olunur. Bu halda ayrıca növbə ilə startDeviceMotionUpdates istifadə etmək və məlumatları mümkün qədər tez emal etmək vacibdir. Apple-a görə, 60 Hz tezliyi 30 Hz-dən təxminən 2 dəfə çox enerji sərf edir.

Core Motion ilə işləyərkən cihaz uyğunluğunu nəzərə almaq vacibdir: giroskop iPhone 3GS və iPad 1-ci nəslində, maqnitometr isə hüceyrə modulu olmayan bütün iPad-lərdə yoxdur. Sensorların əlçatanlığını yoxlamaq üçün CMMotionManager sinfinin isAccelerometerAvailable, isGyroAvailable və isDeviceMotionAvailable statik metodlarından istifadə olunur. Simulyatorda Core Motion test məlumatları qaytarır — real sensorda debug üçün həmişə fiziki Apple cihazı lazımdır.

swift
// Fitnes tətbiqi üçün optimal konfiqurasiya
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()
    }
}

Tez-tez verilən suallar

Core Motion iPad və iPod touch-da işləyir?

Bəli, Core Motion lazımi sensorları olan bütün Apple cihazlarında işləyir. Akselerometr bütün iPhone, iPad və iPod touch-da var. Giroskop — bütün iPhone 4 və daha yenisində, iPad 2 və daha yenisində. Maqnitometr — yalnız iPhone-da, iPad-də yoxdur. Barometr — iPhone 6 və daha yenisində.

Core Motion batareyaya necə təsir edir?

Batareyaya təsir sorğu tezliyindən asılıdır. 100 Hz-də Core Motion saatda təxminən 5–7% batareya sərf edir. 10 Hz-də — saatda təxminən 1–2%. Hərəkət koprosessorunda CMPedometer 8 saat iş ərzində 1%-dən az sərf edir. Apple məlumat lazım olmadıqda həmişə yeniləmələri dayandırmağı tövsiyə edir.

Core Motion addımölçən yaratmaq üçün istifadə edilə bilər?

Bəli, CMPedometer akselerometrin xam məlumatlarını emal etmək zərurəti olmadan addımölçən üçün hazır həll təqdim edir. Sinif avtomatik olaraq addımları yerimədə təxminən 95% və qaçışda 90% dəqiqliklə tanıyır. Xüsusi addım detektoru üçün CMMotionManager öz alqoritmi ilə istifadə edilə bilər.

Core Motion Android-dəki hərəkət frameworkundan nə ilə fərqlənir?

Core Motion iOS səviyyəsində sistemə inteqrasiya olunub və aşağı enerjili emal üçün M-seriyası koprosessorundan istifadə edir. Android SensorManager-dan aparat drayverlərinə birbaşa girişlə istifadə edir, lakin ixtisaslaşmış koprosessora malik deyil, bu da fon izləmə zamanı enerji istehlakını artırır.

CMPedometer üçün xüsusi icazə lazımdır?

iOS 11 və daha yenisində CMPedometer üçün istifadəçi icazəsi tələb olunur. Sorğu CMPedometer yaradılarkən avtomatik yerinə yetirilir və sistem dialoqu çağırır. Info.plist-də tətbiqin hərəkət məlumatlarına girişə niyə ehtiyacı olduğunu izah edən NSMotionUsageDescription açarı əlavə edilməlidir.

Nəticə

  • Core Motion — akselerometr, giroskop və maqnitometrlə iş üçün iOS sistem frameworku.
  • CMMotionManager — cihazın bütün hərəkət sensorlarına girişi təmin edən mərkəzi sinif.
  • CMDeviceMotion filtrasiya olunmuş məlumatlar təqdim edir — userAcceleration, attitude və rotationRate.
  • CMPedometer minimal enerji sərfiyyatı ilə addımları hesablamaq üçün M-seriyası koprosessorundan istifadə edir.
  • CMAltimeter barometr vasitəsilə hündürlük dəyişikliyini 1 metr dəqiqliklə ölçür.
  • İnteqrasiya entitlement tələb etmir, lakin CMPedometer üçün NSMotionUsageDescription lazımdır.
  • M7–M11 koprosessoru 1 mW-dan az enerji sərfiyyatı ilə fon məlumat toplanmasını təmin edir.

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun