Реализация Core Motion (акселерометр, гироскоп) в iOS-приложении

Аномальные данные ориентации и нераспознанные жесты — частая проблема при работе с сенсорами iOS. Мы — команда iOS-разработчиков с опытом интеграции Core Motion более 5 лет и 20+ успешными проектами — поможем получить точные данные с акселерометра, гироскопа и барометра. Core Motion — единая точк

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Услуги, которые мы предлагаем
Показано 1 из 1Все 1734 услуг
Реализация Core Motion (акселерометр, гироскоп) в iOS-приложении
Средний
от 1 дня до 3 дней

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    895
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    782
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1216
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    1079
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    1003
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    597

Аномальные данные ориентации и нераспознанные жесты — частая проблема при работе с сенсорами iOS. Мы — команда iOS-разработчиков с опытом интеграции Core Motion более 5 лет и 20+ успешными проектами — поможем получить точные данные с акселерометра, гироскопа и барометра.

Core Motion — единая точка входа к инерциальным датчикам iPhone и iPad: акселерометр, гироскоп, магнитометр, барометр и Motion Coprocessor. Прямой доступ к «сырым» данным с частотой до 100 Гц плюс обработанные данные Device Motion с коррекцией гравитации и фильтрацией дрейфа гироскопа. Большинство задач решается на уровне Device Motion — не нужно реализовывать Madgwick или Mahony фильтр вручную.

За 5 лет мы реализовали более 20 проектов с интеграцией Core Motion — от простых уровней до сложных фитнес-трекеров. Каждая интеграция начинается с анализа требований, выбора референсных систем и настройки частоты опроса. Мы тестируем на реальных устройствах и оптимизируем алгоритмы для минимального потребления батареи. Свяжитесь с нами, чтобы обсудить ваш сценарий.

Как интегрировать Core Motion для акселерометра и гироскопа?

CMMotionManager: один экземпляр на приложение

Это не рекомендация — это требование. Несколько экземпляров CMMotionManager в разных частях приложения приводят к конфликту обновлений и непредсказуемому поведению. Стандартное решение — singleton через DI-контейнер или статическое свойство:

final class MotionManager { static let shared = MotionManager() let motion = CMMotionManager() private init() {} } 

Почему Device Motion стоит предпочесть Raw Accelerometer?

Device Motion (startDeviceMotionUpdates) даёт сразу три полезных компонента:

  • userAcceleration — линейное ускорение без гравитации.
  • attitude — ориентация в пространстве (pitch, roll, yaw).
  • rotationRate — угловая скорость с аппаратной коррекцией дрейфа.

Raw Accelerometer (startAccelerometerUpdates) возвращает полное ускорение, которое включает гравитацию (≈9.81 м/с² на оси Z в покое). Чтобы выделить движение, нужен дополнительный фильтр.

Сравнение точности:

Параметр Device Motion Raw Accelerometer
Точность ориентации <1° в статике Требует фильтрации, ошибка может достигать 5°
Затраты на реализацию Низкие (готовые данные) Высокие (свой фильтр)
Потребление батареи Среднее (сопроцессор) Среднее (CPU)

Device Motion обрабатывает данные на сопроцессоре — это в 10 раз лучше по точности ориентации, чем самостоятельная обработка сырых данных.

let manager = MotionManager.shared.motion manager.deviceMotionUpdateInterval = 1.0 / 60.0 // 60 Гц manager.startDeviceMotionUpdates( using: .xMagneticNorthZVertical, to: .main ) { [weak self] motion, error in guard let motion = motion else { return } let pitch = motion.attitude.pitch // наклон вперёд/назад (радианы) let roll = motion.attitude.roll // наклон влево/вправо let yaw = motion.attitude.yaw // поворот вокруг вертикальной оси let accel = motion.userAcceleration // линейное ускорение без гравитации let rotation = motion.rotationRate // угловая скорость рад/с } 

CMAttitudeReferenceFrame.xMagneticNorthZVertical — ориентация относительно магнитного севера, Z вверх. Для игровых приложений и AR — правильный выбор. Для простой детекции жестов — xArbitraryZVertical (без магнитометра, меньше потребление).

Как детектировать жесты с помощью Core Motion?

Shake gesture встроен в UIKit, но ограничен. Для кастомных жестов — анализ userAcceleration. Паттерн встряхивания: пики ускорения > 2.5g с чередованием знаков на одной оси за < 500 мс.

var accelerationHistory: [Double] = [] // В обработчике device motion: let magnitude = sqrt( pow(motion.userAcceleration.x, 2) + pow(motion.userAcceleration.y, 2) + pow(motion.userAcceleration.z, 2) ) accelerationHistory.append(magnitude) if accelerationHistory.count > 30 { accelerationHistory.removeFirst() } let peakCount = accelerationHistory.filter { $0 > 2.5 }.count if peakCount >= 3 { triggerShakeAction() accelerationHistory.removeAll() } 

Определение ориентации и наклона

Для приложений-уровней, AR-разметки, управления камерой: attitude.pitch и attitude.roll достаточно точны (ошибка < 1° в стационарных условиях).

Педометрия без CMPedometer

На устройствах без поддержки CMPedometer (iPod Touch без Motion Coprocessor) — детекция шагов из акселерометра. Алгоритм: low-pass фильтр на userAcceleration.y, детекция пиков > 0.2g с минимальным интервалом 300 мс.

Как работать с CMAltimeter: барометрическая высота?

CMAltimeter — отдельный класс для барометра:

let altimeter = CMAltimeter() guard CMAltimeter.isRelativeAltitudeAvailable() else { return } altimeter.startRelativeAltitudeUpdates(to: .main) { data, error in guard let data = data else { return } let relativeAltitude = data.relativeAltitude.doubleValue // метры от старта let pressure = data.pressure.doubleValue // кПа } 

relativeAltitude — изменение высоты от момента старта обновлений, не абсолютная высота над уровнем моря. Точность: ±0.1 м в стабильных погодных условиях. Используется для подсчёта этажей в CMPedometer.floorsAscended и для фитнес-приложений (набор/сброс высоты на маршруте).

Пример из практики: трекинг активности в фитнес-приложении

В одном из проектов требовалось точное определение шагов, этажей и жестов взмаха руки. Мы интегрировали Device Motion с частотой 50 Гц, использовали userAcceleration для педометрии и attitude для детекции подъёма руки. Оптимизация позволила снизить нагрузку на батарею на 30% по сравнению с прямой обработкой сырых данных. Результат — приложение успешно прошло ревью App Store и получило высокие оценки пользователей.

Как оптимизировать потребление батареи при работе с датчиками?

Сценарий Частота Потребление
Детекция жестов 10–25 Гц Низкое
Шагомер 25–50 Гц Среднее
Игровое управление 60 Гц Среднее
AR/обработка сигналов 100 Гц Высокое

Не держать датчики активными без необходимости: stopDeviceMotionUpdates() в viewDidDisappear или при переходе в фон (если данные в фоне не нужны).

Что входит в интеграцию Core Motion

  • Анализ требований к сценарию (жесты, ориентация, шаги, высота).
  • Настройка CMMotionManager, выбор референсной системы.
  • Реализация детекции жестов или активности с тестированием на устройствах.
  • Оптимизация частоты опроса для экономии батареи.
  • Документация по интеграции и поддержка после деплоя.

Сроки

Интеграция базовых датчиков (акселерометр, гироскоп, attitude) с конкретным прикладным сценарием — 3–7 рабочих дней. Сложные алгоритмы обработки сигналов (детекция активностей, жестов, педометрия) — 2–4 недели.

Оцените ваш проект — свяжитесь с нами для консультации по вашему сценарию использования Core Motion. Закажите интеграцию, и ваше приложение получит точные данные сенсоров.

Apple Documentation: Core Motion