Core Motion: суштина, сензори покрета и обрада података

Аутор: IT Sectr Објављено: 2026-03-25 Време читања: 8 мин

Оквир Core Motion — системска компонента iOS-а која пружа приступ подацима акцелерометра, жироскопа, магнетометра и педометра на Apple уређајима. Према Apple Developer Documentation, 2025, оквир обрађује сирове податке сензора и претвара их у разумљиве метрике — убрзање, угаону брзину, оријентацију и број корака. Јединствени API за све сензоре покрета омогућава програмерима да креирају педометре, фитнес апликације и игре са управљањем нагибом уређаја.

Главни закључци

  • Core Motion — Apple-ов оквир за обраду података са сензора покрета iPhone-а и iPad-а.
  • CMMotionManager — централна класа за приступ акцелерометру, жироскопу и магнетометру.
  • CMAltimeter — класа за добијање података о релативној висини и промени притиска.
  • CMPedometer — класа за бројање корака, пређеног растојања и брзине кретања.
  • CMDeviceMotion — обједињени подаци са филтрацијом гравитације (userAcceleration).

Шта је Core Motion?

Core Motion — Apple-ов системски оквир, представљен у iOS 4 за рад са сензорима покрета уређаја. Пружа јединствени интерфејс за приступ акцелерометру, жироскопу, магнетометру и педометру, ослобађајући програмера потребе за радом са хардверским драјверима на ниском нивоу.

Кључна предност Core Motion-а је хардверска филтрација података. Оквир аутоматски комбинује очитавања акцелерометра и жироскопа за израчунавање чистог userAcceleration без гравитационе компоненте, а такође даје оријентацију уређаја у простору у облику кватерниона и Ојлерових углова.

Према Apple WWDC 2023, Core Motion се користи у више од 80% фитнес апликација из App Store-а. Оквир је оптимизован за потрошњу енергије — учесталост испитивања сензора се аутоматски смањује у одсуству претплатника, продужавајући време рада уређаја на батерији.

Важна архитектонска карактеристика — употреба копроцесора M-серије (Motion coprocessor), који обрађује податке сензора покрета независно од главног процесора A-серије. Почевши од чипа M7 (iPhone 5S), копроцесор непрекидно прикупља податке акцелерометра и жироскопа, омогућавајући CMPedometer-у и CMAltimeter-у да раде у позадини са закључаним екраном уз потрошњу мању од 1 mW. Ово је постало могуће захваљујући хардверској изолацији: копроцесор има сопствену неиспарљиву меморију и магистралу података, независну од главног система.

Архитектура Core Motion-а

Архитектура Core Motion-а изграђена је по синглтон моделу преко CMMotionManager-а. Апликација добија једну инстанцу менаџера и преко њега конфигурише учесталост ажурирања, покреће или зауставља прикупљање података са сваког типа сензора. Подаци се достављају путем блокова са одређеним интервалом.

Оквир користи два режима добијања података: pull (активно испитивање кроз startAccelerometerUpdates) и push (пасивно примање кроз startAccelerometerUpdatesToQueue). Push режим је пожељнији за UI апликације, јер се подаци достављају у одређени ред без блокирања главне нити.

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-а

Core Motion пружа приступ четири категорије сензора: акцелерометар мери линеарно убрзање дуж три осе, жироскоп — угаону брзину ротације, магнетометар — јачину магнетног поља за компас. Четврта категорија — обједињени подаци CMDeviceMotion-а, који укључују филтрирана очитавања свих сензора.

CMDeviceMotion — највреднија класа за развој. Пружа userAcceleration (убрзање без гравитације), rotationRate (брзину ротације), magneticField (вектор магнетног поља) и attitude (оријентацију уређаја у облику кватерниона или Ојлерових углова). За израчунавање attitude, Core Motion користи фузију података жироскопа и акцелерометра по алгоритму сличном комплементарном филтеру.

Магнетометар се користи за корекцију дрифта жироскопа. Чисти жироскоп временом акумулира грешку због температурног дрифта и шума — магнетометар и акцелерометар исправљају ову грешку, обезбеђујући тачност оријентације до 1–2 степена у статичком положају.

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

Педометар и алтиметар

CMPedometer — класа за бројање корака, пређеног растојања и темпа кретања. Користи податке акцелерометра са хардверском обрадом на копроцесору покрета M-серије (M7/M8/M9/M10/M11). Ово омогућава рад у позадини са минималном потрошњом енергије — око 1% батерије за 8 сати непрекидног праћења.

CMAltimeter — класа за одређивање релативне висине на основу барометра уграђеног у iPhone 6 и новије. Показује промену висине у односу на почетну тачку са тачношћу од око 1 метра. Користи се у фитнес апликацијама за бројање спратова и у навигационим апликацијама за одређивање висинских разлика.

Подаци CMPedometer-а су доступни са кашњењем не већим од 5 секунди за тренутна очитавања. За историјске податке доступан је избор из последњих 7 дана путем queryPedometerData. Педометар аутоматски препознаје ходање, трчање и вожњу — ови типови активности доступни су путем queryPedometerData са филтером по типу.

Тачност и ограничења

Тачност CMPedometer-а износи око 95% при нормалном ходању и смањује се на 90% при трчању. На тачност утичу: положај телефона у џепу или ранцу, тип обуће и подлога. Apple препоручује коришћење CMPedometer-а у комбинацији са Core Location за одређивање удаљености на отвореном — GPS обезбеђује прецизнију удаљеност, а Core Motion — бројање корака.

swift
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-а у апликацију

Интеграција Core Motion-а не захтева посебне дозволе или entitlement — довољно је додати import оквира и креирати инстанцу CMMotionManager-а. Међутим, за CMPedometer од iOS 11 потребан је захтев за ауторизацију путем CMStepCounter-а или коришћење CMPedometer-а са захтевом за дозволу кроз системски дијалог.

Процес интеграције укључује: креирање CMMotionManager-а, проверу доступности сензора путем isAccelerometerAvailable / isGyroAvailable / isDeviceMotionAvailable, подешавање интервала ажурирања и покретање пријема података. Важно је зауставити ажурирања путем stopAccelerometerUpdates када подаци нису потребни — ово је критично за потрошњу енергије.

За рад у позадини, CMPedometer и CMAltimeter не захтевају додатна подешавања — они користе копроцесор покрета. За CMMotionManager рад у позадини није доступан — подаци се прикупљају само када је апликација активна и налази се у предњем плану. Једини услов за CMPedometer — апликација мора бити покренута бар једном од стране корисника након инсталације ради иницијализације претплате на позадинска ажурирања из iOS-а.

Оптимизација потрошње енергије

Core Motion подржава адаптивну учесталост испитивања: ако апликацији нису потребни подаци у реалном времену, довољно је подесити интервал од 1–5 Hz уместо 100 Hz. За фитнес апликације оптимална учесталост је 10 Hz за CMMotionManager и 1 Hz за CMPedometer. Apple препоручује смањење учесталости на минимално потребну за исправан рад.

За игре са управљањем нагибом потребна је учесталост од 60–100 Hz како би се обезбедила глаткоћа реакције. У овом случају важно је користити startDeviceMotionUpdates са одвојеним редом и обрађивати податке што је брже могуће. Према Apple-у, учесталост од 60 Hz троши приближно 2 пута више енергије од 30 Hz.

При раду са Core Motion-ом потребно је узети у обзир компатибилност уређаја: жироскоп недостаје на iPhone 3GS и iPad-у 1. генерације, магнетометар — на свим iPad-овима без ћелијског модула. За проверу доступности сензора користе се статичке методе isAccelerometerAvailable, isGyroAvailable и isDeviceMotionAvailable класе CMMotionManager. У симулатору Core Motion враћа тест податке — за отклањање грешака на стварном сензору увек је потребан физички Apple уређај.

swift
// Оптимално подешавање за фитнес апликацију
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 ради на iPad-у и iPod touch-у?

Да, Core Motion ради на свим Apple уређајима са потребним сензорима. Акцелерометар постоји на свим iPhone, iPad и iPod touch уређајима. Жироскоп — на свим iPhone 4 и новијим, iPad 2 и новијим. Магнетометар — само на iPhone-у, на iPad-у недостаје. Барометар — на iPhone 6 и новијим.

Како Core Motion утиче на батерију?

Утицај на батерију зависи од учесталости испитивања. На 100 Hz Core Motion троши око 5–7% батерије на сат. На 10 Hz — око 1–2% на сат. CMPedometer на копроцесору покрета троши мање од 1% за 8 сати рада. Apple препоручује да увек заустављате ажурирања када подаци нису потребни.

Може ли се Core Motion користити за креирање педометра?

Да, CMPedometer пружа готово решење за педометар без потребе за обрадом сирових података акцелерометра. Класа аутоматски препознаје кораке са тачношћу од око 95% при ходању и 90% при трчању. За прилагођени детектор корака може се користити CMMotionManager са сопственим алгоритмом.

По чему се Core Motion разликује од оквира за покрет на Android-у?

Core Motion је интегрисан у iOS на нивоу система и користи копроцесор M-серије за нискоенергетску обраду. Android користи SensorManager са директним приступом хардверским драјверима, али нема специјализовани копроцесор, што повећава потрошњу енергије при позадинском праћењу.

Да ли је потребна посебна дозвола за CMPedometer?

За CMPedometer у iOS 11 и новијим потребна је дозвола корисника. Захтев се извршава аутоматски при креирању CMPedometer-а и приказује системски дијалог. У Info.plist је потребно додати кључ NSMotionUsageDescription са описом зашто апликацији треба приступ подацима о кретању.

Закључак

  • Core Motion — системски оквир iOS-а за рад са акцелерометром, жироскопом и магнетометром.
  • CMMotionManager — централна класа која пружа приступ свим сензорима покрета уређаја.
  • CMDeviceMotion пружа филтриране податке — userAcceleration, attitude и rotationRate.
  • CMPedometer користи копроцесор M-серије за бројање корака уз минималну потрошњу енергије.
  • CMAltimeter мери промену висине са тачношћу до 1 метра помоћу барометра.
  • Интеграција не захтева entitlement, али за CMPedometer је потребан NSMotionUsageDescription.
  • Копроцесор M7–M11 обезбеђује прикупљање података у позадини са потрошњом мањом од 1 mW.

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође