Core Motion: essência, sensores de movimento e processamento de dados

Autor: IT Sectr Publicado: 2026-03-25 Tempo de leitura: 8 min

O framework Core Motion é um componente do sistema iOS que fornece acesso aos dados do acelerômetro, giroscópio, magnetômetro e pedômetro em dispositivos Apple. De acordo com a Apple Developer Documentation, 2025, o framework processa dados brutos dos sensores e os converte em métricas compreensíveis — aceleração, velocidade angular, orientação e número de passos. Uma única API para todos os sensores de movimento permite que desenvolvedores criem pedômetros, aplicativos de fitness e jogos com controle de inclinação do dispositivo.

Pontos principais

  • Core Motion — framework da Apple para processar dados dos sensores de movimento do iPhone e iPad.
  • CMMotionManager — classe central para acessar acelerômetro, giroscópio e magnetômetro.
  • CMAltimeter — classe para obter dados de altitude relativa e mudança de pressão.
  • CMPedometer — classe para contar passos, distância percorrida e velocidade de movimento.
  • CMDeviceMotion — dados combinados com filtragem de gravidade (userAcceleration).

O que é Core Motion?

Core Motion é um framework de sistema da Apple, apresentado no iOS 4 para trabalhar com sensores de movimento do dispositivo. Ele fornece uma interface unificada para acessar o acelerômetro, giroscópio, magnetômetro e pedômetro, liberando o desenvolvedor da necessidade de trabalhar com drivers de hardware em baixo nível.

A principal vantagem do Core Motion é a filtragem por hardware de dados. O framework combina automaticamente as leituras do acelerômetro e do giroscópio para calcular a userAcceleration pura sem o componente gravitacional, e também fornece a orientação do dispositivo no espaço na forma de quatérnions e ângulos de Euler.

De acordo com a Apple WWDC 2023, o Core Motion é usado em mais de 80% dos aplicativos de fitness na App Store. O framework é otimizado para consumo de energia — a frequência de consulta dos sensores diminui automaticamente quando não há assinantes, prolongando a vida útil da bateria do dispositivo.

Uma característica arquitetural importante é o uso do coprocessador da série M (Motion coprocessor), que processa dados dos sensores de movimento independentemente do processador principal da série A. A partir do chip M7 (iPhone 5S), o coprocessador coleta continuamente dados do acelerômetro e giroscópio, permitindo que CMPedometer e CMAltimeter funcionem em segundo plano com a tela bloqueada consumindo menos de 1 mW. Isso foi possível graças ao isolamento de hardware: o coprocessador tem sua própria memória não volátil e barramento de dados independente do sistema principal.

Arquitetura do Core Motion

A arquitetura do Core Motion é baseada em um modelo singleton através do CMMotionManager. O aplicativo obtém uma única instância do gerenciador e através dela configura a frequência de atualização, inicia ou interrompe a coleta de dados para cada tipo de sensor. Os dados chegam através de blocos de fechamento no intervalo especificado.

O framework usa dois modos de obtenção de dados: pull (consulta ativa via startAccelerometerUpdates) e push (recepção passiva via startAccelerometerUpdatesToQueue). O modo push é preferível para aplicativos de UI, pois os dados são entregues na fila especificada sem bloquear a thread principal.

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

Sensores do Core Motion

Core Motion fornece acesso a quatro categorias de sensores: o acelerômetro mede a aceleração linear em três eixos, o giroscópio mede a velocidade angular de rotação e o magnetômetro mede a intensidade do campo magnético para a bússola. A quarta categoria são os dados combinados do CMDeviceMotion, que incluem leituras filtradas de todos os sensores.

CMDeviceMotion é a classe mais valiosa para o desenvolvimento. Ela fornece userAcceleration (aceleração sem gravidade), rotationRate (velocidade de rotação), magneticField (vetor do campo magnético) e attitude (orientação do dispositivo como um quatérnion ou ângulos de Euler). Para calcular a attitude, o Core Motion usa a fusão de sensores do giroscópio e acelerômetro usando um algoritmo semelhante a um filtro complementar.

O magnetômetro é usado para a correção de deriva do giroscópio. Um giroscópio puro acumula erros ao longo do tempo devido à deriva térmica e ruído — o magnetômetro e o acelerômetro corrigem esse erro, fornecendo precisão de orientação de 1 a 2 graus em posição estática.

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

Pedômetro e altímetro

CMPedometer — classe para contar passos, distância percorrida e ritmo de movimento. Ela usa dados do acelerômetro com processamento por hardware no coprocessador de movimento da série M (M7/M8/M9/M10/M11). Isso permite que funcione em segundo plano com consumo mínimo de energia — cerca de 1% de bateria por 8 horas de rastreamento contínuo.

CMAltimeter — classe para determinar a altitude relativa com base no barômetro instalado no iPhone 6 e versões posteriores. Mostra a mudança de altitude em relação ao ponto inicial com precisão de cerca de 1 metro. É usado em aplicativos de fitness para contar andares e em aplicativos de navegação para determinar mudanças de elevação.

Os dados do CMPedometer estão disponíveis com um atraso de no máximo 5 segundos para leituras atuais. Para dados históricos, há uma consulta de até 7 dias através do queryPedometerData. O pedômetro reconhece automaticamente caminhada, corrida e ciclismo — esses tipos de atividade estão disponíveis através do queryPedometerData com filtragem por tipo.

Precisão e limitações

A precisão do CMPedometer é de aproximadamente 95% durante a caminhada normal e diminui para 90% durante a corrida. A precisão é afetada por: posição do telefone no bolso ou mochila, tipo de calçado e superfície. A Apple recomenda usar o CMPedometer em combinação com o Core Location para determinação de distância ao ar livre — o GPS fornece distância mais precisa enquanto o Core Motion lida com a contagem de passos.

swift
let pedometer = CMPedometer()

guard CMPedometer
    .isStepCountingAvailable() else { return }

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

// Acesso ao altímetro
let altimeter = CMAltimeter()
altimeter.startRelativeAltitudeUpdates(
    to: OperationQueue.current()!
) { data, _ in
    print("Altitude: \(data?.relativeAltitude)")
}

Integração do Core Motion no aplicativo

A integração do Core Motion não requer permissões especiais ou entitlements — basta adicionar a importação do framework e criar uma instância do CMMotionManager. No entanto, para o CMPedometer a partir do iOS 11, é necessária autorização através do CMStepCounter ou usando o CMPedometer com um diálogo de permissão do sistema.

O processo de integração inclui: criar um CMMotionManager, verificar a disponibilidade do sensor através de isAccelerometerAvailable / isGyroAvailable / isDeviceMotionAvailable, configurar o intervalo de atualização e iniciar a coleta de dados. É importante parar as atualizações através de stopAccelerometerUpdates quando os dados não forem mais necessários — isso é crítico para o consumo de energia.

Para operação em segundo plano, CMPedometer e CMAltimeter não requerem configuração adicional — eles usam o coprocessador de movimento. Para CMMotionManager, a operação em segundo plano não está disponível — os dados são coletados apenas quando o aplicativo está ativo e em primeiro plano. A única condição para o CMPedometer é que o aplicativo deve ter sido iniciado pelo menos uma vez pelo usuário após a instalação para inicializar a assinatura de atualizações em segundo plano do iOS.

Otimização do consumo de energia

O Core Motion suporta frequência de consulta adaptativa: se o aplicativo não precisar de dados em tempo real, basta definir o intervalo para 1–5 Hz em vez de 100 Hz. Para aplicativos de fitness, a frequência ideal é de 10 Hz para CMMotionManager e 1 Hz para CMPedometer. A Apple recomenda reduzir a frequência ao mínimo necessário para o funcionamento correto.

Para jogos com controle de inclinação, é necessária uma frequência de 60–100 Hz para garantir uma resposta suave. Neste caso, é importante usar o startDeviceMotionUpdates com uma fila separada e processar os dados o mais rápido possível. Segundo a Apple, 60 Hz consome aproximadamente 2 vezes mais energia do que 30 Hz.

Ao trabalhar com Core Motion, é importante considerar a compatibilidade do dispositivo: o giroscópio está ausente no iPhone 3GS e iPad de 1ª geração, o magnetômetro está ausente em todos os iPads sem módulo celular. Os métodos estáticos isAccelerometerAvailable, isGyroAvailable e isDeviceMotionAvailable da classe CMMotionManager são usados para verificar a disponibilidade dos sensores. No simulador, o Core Motion retorna dados de teste — para depuração em um sensor real, um dispositivo Apple físico é sempre necessário.

swift
// Configuração ideal para aplicativo de fitness
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()
    }
}

Perguntas frequentes

O Core Motion funciona no iPad e iPod touch?

Sim, o Core Motion funciona em todos os dispositivos Apple com os sensores necessários. O acelerômetro está disponível em todos os iPhone, iPad e iPod touch. O giroscópio está em todos os iPhone 4 e posteriores, iPad 2 e posteriores. O magnetômetro está disponível apenas no iPhone, não no iPad. O barômetro está no iPhone 6 e posteriores.

Como o Core Motion afeta a duração da bateria?

O impacto na bateria depende da frequência de consulta. A 100 Hz, o Core Motion consome cerca de 5–7% de bateria por hora. A 10 Hz — cerca de 1–2% por hora. O CMPedometer no coprocessador de movimento consome menos de 1% em 8 horas de operação. A Apple recomenda sempre parar as atualizações quando os dados não forem necessários.

Posso usar o Core Motion para criar um pedômetro?

Sim, o CMPedometer fornece uma solução pronta para pedômetro sem a necessidade de processar dados brutos do acelerômetro. A classe reconhece automaticamente passos com cerca de 95% de precisão ao caminhar e 90% ao correr. Para um detector de passos personalizado, você pode usar o CMMotionManager com seu próprio algoritmo.

Como o Core Motion difere do framework de movimento do Android?

O Core Motion é integrado ao iOS no nível do sistema e usa o coprocessador da série M para processamento de baixa energia. O Android usa o SensorManager com acesso direto aos drivers de hardware, mas não possui um coprocessador especializado, o que aumenta o consumo de energia durante o rastreamento em segundo plano.

É necessária permissão especial para o CMPedometer?

Para o CMPedometer no iOS 11 e versões posteriores, é necessária permissão do usuário. A solicitação é feita automaticamente ao criar um CMPedometer e exibe um diálogo do sistema. No Info.plist, é necessário adicionar a chave NSMotionUsageDescription com uma descrição de por que o aplicativo precisa de acesso aos dados de movimento.

Resumo

  • Core Motion é um framework do sistema iOS para trabalhar com acelerômetro, giroscópio e magnetômetro.
  • CMMotionManager é a classe central que fornece acesso a todos os sensores de movimento do dispositivo.
  • CMDeviceMotion fornece dados filtrados — userAcceleration, attitude e rotationRate.
  • CMPedometer usa o coprocessador da série M para contagem de passos com consumo mínimo de energia.
  • CMAltimeter mede a mudança de altitude com precisão de até 1 metro usando o barômetro.
  • Integração não requer entitlements, mas o CMPedometer precisa de NSMotionUsageDescription.
  • Coprocessador M7–M11 permite coleta de dados em segundo plano com consumo inferior a 1 mW.

Vamos desenvolver um aplicativo móvel chave na mão

A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.

Discutir o projeto

Leia também