通过CMMotionManager获取的iOS加速度计数据原始度及校准情况问询
跨平台加速度计接口对应问题解答
问题描述
包含重力的加速度计数据可在安卓和iOS手机上获取:
- 在iOS系统中,原始加速度计数据可通过
CMMotionManager获取。 - 在安卓系统中可通过
SensorManager获取两类包含重力的不同数据:TYPE_ACCELEROMETER:沿x/y/z轴的加速度力(包含重力)。TYPE_ACCELEROMETER_UNCALIBRATED:无偏差补偿的X/Y/Z轴测量加速度值。
未校准加速度计传感器会上报设备沿三个传感器轴的加速度,无任何偏差校正(未校准测量值会应用出厂偏差和温度补偿),同时提供偏差估计值。
这就引出了问题:iOS的CMMotionManager API是否会进行偏差补偿?CMDeviceMotion API的文档说明其会移除重力,但未明确说明是否类似安卓API一样进行额外校准以消除潜在的传感器偏差。
检索已完成处理以消除环境偏差(如重力影响)的数据。
换言之,iOS的CMMotionManager加速度计数据应该对应安卓的TYPE_ACCELEROMETER_UNCALIBRATED还是TYPE_ACCELEROMETER?
解答
iOS通过CMMotionManager获取的原始加速度计数据,对应安卓的TYPE_ACCELEROMETER,具体依据如下:
- 苹果公开的
CMMotionManager原始加速度输出,已经过系统级基础校准,会自动消除传感器静态偏差,仅保留重力分量和设备受到的外部加速度,校准逻辑和安卓TYPE_ACCELEROMETER完全对齐。 - iOS目前没有对外提供类似安卓
TYPE_ACCELEROMETER_UNCALIBRATED的未校准加速度接口,所有原生可获取的加速度数据都已经过偏差校正。 - 注意不要和
CMDeviceMotion的输出混淆:CMDeviceMotion返回的用户加速度是已经移除了重力分量的结果,和上述两类包含重力的加速度数据都不对应。
内容的提问来源于stack exchange,提问作者Steven Jeuris
相关产品推荐
相关产品推荐

