在iOS上如何获取相对于地理北极的俯仰角、横滚角和偏航角?

3

我发现可以从设备中检索到CMAttitude,并且从中读取3个值(俯仰角、翻滚角和偏航角)。

据我所知,这个CMAttitude对象由CoreMotion进行管理,它是一个传感器融合管理器,可以将罗盘、陀螺仪和加速度计等数据一起计算得出正确的结果(在Android上,它是SensorManager类)。

那么我的问题是:

  1. 这些值(俯仰角、翻滚角和偏航角)是否相对于地磁北极和重力?

  2. 如果以上是正确的,如何修改才能给出相对于地理北极的结果?

  3. 如果设备(例如iPhone 3GS)没有陀螺仪,我需要告诉管理器还是只需要告诉它基于其拥有的传感器(acc + gyro + compas OR acc + compas)给我设备的姿态?

1个回答

6
  1. 和2:

iOS 5.0简化了这个任务。CMMotionManager有一个新的方法:


- (void)startDeviceMotionUpdatesUsingReferenceFrame:(CMAttitudeReferenceFrame)referenceFrame

作为参考框架,您可以使用以下值:

  • CMAttitudeReferenceFrameXMagneticNorthZVertical用于磁北极,
  • CMAttitudeReferenceFrameXTrueNorthZVertical用于真北极。

如果您想在旧版iOS上实现此操作,很抱歉您必须使用当前用户位置自行校准。

请查看以下资源:

3. 如果设备没有陀螺仪,则 CMMotionManger 的 deviceMotionAvailable 属性将为“NO”(等同于 gyroAvailable 属性),您无法使用设备运动获取姿态。您唯一能做的是直接读取加速度计和磁力计数据。


谢谢回复。这意味着如果我设置ReferenceFrame CMAttitudeReferenceFrameXTrueNorthZVertical,我必须启用GPS,因为iOS会同时使用我的当前位置,是吗?1.和2.我想支持4.0 OS,所以我要弄清楚。 3.对我来说,不支持3GS也可以,或者只使用加速度计和指南针计算该设备的方向。因此,您会在我的代码中进行3个检查 1.是OS5-使用CMAttitudeReferenceFrameXTrueNorthZVertical 2.是OS4-校准 3.是3GS-我无法获得姿态,因此必须仅使用加速度计和指南针计算。 - vale4674
我刚刚完成了观看这两个视频,它解释得非常清楚,谢谢。 - vale4674
我已经研究了一段时间,但是找不到我想要的东西。那个关于iOS4的东西。你能告诉我如何在iOS4上获取这些值的一些提示或指南吗? - vale4674

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接