ios加速计值在任何方向

加速度计值是根据设备方向提供的。

我的目标是获得这些值,而不考虑设备的位置。

在一个考虑的情况下,如果设备放置在车辆中,面朝上放置或水平放置,y轴上的加速度计值将指示车辆的加速度。

如果将设备随意放置在手套箱中,该怎么办? 我们可以获得滚动音高和偏航值,并将它们转换为度数,以获得设备从正常的面向上的定位位置的angular位移,但是在那个随机的定位时刻,我可以将加速度值转换成正常的面朝上定向位置值?

基本上,我所遵循的是:获取设备的angular位移 – >将在失真位置接收的加速度计值转换为正常的面向上位置 – >获取车辆的实际加速度,而不考虑设备的位置。

参考文献(第3.1点): http : //www.itsasiapacificforum2014.co.nz/files/3314/0194/4873/Abstract_-_Automatic_Accelerometer_Reorientation_for_Driving_Event_Detection_Using_Smartphone_by_Passakon_Prathombutr.pdf

实际上它非常简单,只需使用参考帧开始生成设备运动更新即可:

- (void)startDeviceMotionUpdatesUsingReferenceFrame:(CMAttitudeReferenceFrame)referenceFrame 

根据你想达到什么你可以select不同的选项之一

 typedef enum { CMAttitudeReferenceFrameXArbitraryZVertical = 1 << 0, CMAttitudeReferenceFrameXArbitraryCorrectedZVertical = 1 << 1, CMAttitudeReferenceFrameXMagneticNorthZVertical = 1 << 2, CMAttitudeReferenceFrameXTrueNorthZVertical = 1 << 3 } CMAttitudeReferenceFrame; 

例如,通过使用“CMAttitudeReferenceFrameXMagneticNorthZVertical”,无论设备位置如何(它们与前面的“重力”“北”)alignment,从加速度得到的读数将是恒定的。我不记得确切的参考位置但我相信“电话的顶部”指向北方,而“电话的屏幕”指向。