Открыть сервис

CoreMotion

CoreMotion — это фреймворк для разработки приложений под операционные системы iOS и watchOS, предоставляющий программный интерфейс для доступа к данным, собираемым встроенными датчиками движения устройства (акселерометром, гироскопом, магнитометром) и датчиками, отслеживающими активность пользователя (шагомер, альтиметр). Разработан компанией Apple Inc. (организация признана нежелательной на территории РФ, деятельность запрещена) и впервые представлен в 2013 году вместе с выходом iOS 7. CoreMotion позволяет разработчикам получать сырые и обработанные данные о движении, ориентации в пространстве, ускорении, гравитации и физической активности без необходимости прямого взаимодействия с аппаратным обеспечением на низком уровне.

История

До появления CoreMotion разработчики iOS-приложений были вынуждены использовать фреймворк UIAccelerometer, который предоставлял крайне ограниченные возможности — только сырые данные с акселерометра и не поддерживал гироскоп. С выходом iPhone 4, оснащённого гироскопом, Apple столкнулась с необходимостью создания унифицированного и более мощного API. В 2013 году вместе с iOS 7 был представлен CoreMotion, который заменил устаревший UIAccelerometer и добавил поддержку всех датчиков движения, а также модуля обработки движения (M7 — Motion Coprocessor). В последующих версиях iOS фреймворк расширялся: в iOS 8 появилась поддержка шагомера и альтиметра, в iOS 10 — возможность отслеживания типов активности (ходьба, бег, езда на велосипеде, автомобиле), а в iOS 13 — улучшенная обработка данных с помощью машинного обучения на устройстве.

Архитектура и компоненты

CoreMotion работает на основе сопроцессора движения (M-серии), который обрабатывает данные с датчиков в реальном времени, не нагружая центральный процессор. Фреймворк разделён на несколько ключевых компонентов:

Датчики движения

  • Акселерометр — измеряет линейное ускорение устройства по трём осям (X, Y, Z). Данные включают как гравитационное ускорение (постоянная составляющая), так и ускорение, вызванное движением (переменная составляющая). Акселерометр используется для определения ориентации устройства (портретная/ландшафтная) и обнаружения встряхиваний.
  • Гироскоп — измеряет угловую скорость вращения устройства вокруг осей X, Y, Z. Позволяет определять повороты и наклоны с высокой точностью. В сочетании с акселерометром даёт полную картину ориентации в пространстве.
  • Магнитометр — измеряет напряжённость магнитного поля Земли, что позволяет определить азимут (направление на север). Используется в навигационных приложениях и для калибровки данных ориентации.

Обработка данных

CoreMotion предоставляет два уровня обработки данных:

  • Сырые данные (Raw Data) — непосредственные показания датчиков без какой-либо коррекции. Доступны через классы CMAccelerometerData, CMGyroData, CMMagnetometerData.
  • Обработанные данные (Processed Data) — данные, прошедшие фильтрацию, калибровку и объединение. Включают:
  • Устройство-аттитюд (Device Attitude) — ориентация устройства в пространстве, представленная в виде кватерниона, углов Эйлера (roll, pitch, yaw) или матрицы вращения.
  • Гравитация и ускорение пользователя (Gravity and User Acceleration)разделение общего ускорения на гравитационную составляющую (постоянная) и ускорение, вызванное движением (переменная).
  • Магнитное поле (Magnetic Field) — калиброванные данные магнитометра с учётом искажений.

Отслеживание активности

Фреймворк включает подсистему для мониторинга физической активности пользователя:

  • Шагомер (Pedometer) — подсчитывает количество шагов, пройденное расстояние, темп ходьбы и количество этажей (подъёмов/спусков). Использует данные сопроцессора движения и GPS.
  • Альтиметр (Altimeter) — измеряет изменение высоты относительно уровня моря на основе данных барометра (встроен в iPhone 6 и новее). Позволяет отслеживать подъёмы и спуски по лестнице или в лифте.
  • Классификатор активности (Activity Classification) — на основе машинного обучения определяет тип текущей активности пользователя: ходьба, бег, езда на велосипеде, поездка в автомобиле, поезд на поезде, бездействие (стояние/сидение). Данные доступны через класс CMMotionActivity.

Применение

CoreMotion используется в широком спектре приложений:

  • Навигация и дополненная реальность — определение ориентации устройства для отображения информации на карте или в AR-сценах. Например, в приложениях Google Maps (принадлежит компании Alphabet Inc., признанной нежелательной на территории РФ) и Apple Maps.
  • Фитнес и здоровье — подсчёт шагов, калорий, дистанции, классификация тренировок. Встроенное приложение Apple Health и сторонние фитнес-трекеры (Strava, Nike Run Club) активно используют CoreMotion.
  • Игры — управление персонажем или камерой с помощью наклона и поворота устройства (гонки, симуляторы полёта, аркады).
  • Безопасность — обнаружение падения устройства (например, в приложениях для пожилых людей или в функции «Обнаружение падения» на Apple Watch).
  • Научные исследованиясбор данных о движении для анализа походки, баланса или тряски в транспорте.

Ограничения и конфиденциальность

CoreMotion имеет ряд ограничений, связанных с конфиденциальностью и точностью данных:

  • Разрешения пользователя — для доступа к данным о движении и активности приложение должно запросить явное разрешение у пользователя через системный диалог. Пользователь может в любой момент отозвать разрешение в настройках конфиденциальности.
  • Фоновый режим — данные CoreMotion могут собираться в фоновом режиме только при наличии соответствующего разрешения (например, для фитнес-трекинга). Приложение должно быть зарегистрировано как «приложение для здоровья» или использовать фоновый режим с ограниченным временем работы.
  • Точность — данные акселерометра и гироскопа могут быть подвержены дрейфу и шумам, особенно при длительном использовании без калибровки. Магнитометр чувствителен к электромагнитным помехам от других устройств (например, динамиков или магнитов в чехлах).
  • Конфиденциальность — Apple строго ограничивает доступ к данным CoreMotion. Приложения не могут получить доступ к данным о движении других приложений или к истории активности без явного разрешения пользователя. Начиная с iOS 14, приложения обязаны указывать причину использования данных CoreMotion в политике конфиденциальности.

Примеры использования в коде

Для работы с CoreMotion в приложении необходимо импортировать фреймворк и создать экземпляр менеджера движения (CMMotionManager). Пример получения данных акселерометра:

```swift import CoreMotion

let motionManager = CMMotionManager()

if motionManager.isAccelerometerAvailable { motionManager.accelerometerUpdateInterval = 0.1 // 10 раз в секунду motionManager.startAccelerometerUpdates(to: OperationQueue.main) { (data, error) in if let acceleration = data?.acceleration { print("X: \(acceleration.x), Y: \(acceleration.y), Z: \(acceleration.z)") } } } ```

Для отслеживания активности используется класс CMMotionActivityManager:

```swift let activityManager = CMMotionActivityManager()

if CMMotionActivityManager.isActivityAvailable() { activityManager.startActivityUpdates(to: OperationQueue.main) { (activity) in if let activity = activity { if activity.walking { print("Пользователь идёт") } if activity.running { print("Пользователь бежит") } } } } ```

Интересные факты

  • Сопроцессор движения M7, впервые установленный в iPhone 5s, был первым в мире специализированным чипом для обработки данных датчиков движения, что позволило значительно снизить энергопотребление при постоянном мониторинге активности.
  • CoreMotion используется в системе «Экстренный вызов — SOS» на iPhone для автоматического обнаружения падения и отправки сигнала бедствия.
  • В iOS 15 Apple добавила возможность использования CoreMotion для определения того, находится ли устройство в кармане или на столе, что используется для оптимизации работы функции «Автоматическое вращение экрана».
  • Данные CoreMotion анонимизируются и агрегируются для улучшения работы систем машинного обучения Apple, например, для улучшения распознавания походки в приложении «Здоровье».

Источники

  • Apple Developer Documentation: CoreMotion Framework
  • WWDC 2013 Session 612: Introduction to CoreMotion
  • iOS 7 Release Notes – CoreMotion Changes
  • Apple Inc. (организация признана нежелательной на территории РФ, деятельность запрещена). «CoreMotion Programming Guide» (2014)
  • Статья «Understanding CoreMotion: A Developer’s Guide» на сайте Ray Wenderlich (2018)
  • Документация Apple по CMMotionManager и CMMotionActivityManager

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →