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

发布于 2025-01-06 10:12:36 字数 552 浏览 3 评论 0原文

我看到我可以从设备检索 CMAttitude 并从中读取 3 个值我需要的(俯仰、横滚和偏航)。 据我了解,这个 CMAttitude 对象由 CoreMotion 管理,它是一个传感器融合管理器,用于计算罗盘、陀螺仪和加速度计的正确结果(在 Android 上它是 SensorManager 类)。

所以我的问题是:

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

  2. 如果上述正确,我如何修改它以给出相对于地理北方的结果?

  3. 如果设备(例如 iPhone 3GS)没有陀螺仪,我是否必须告诉 Manager,或者我可以告诉它根据其拥有的传感器向我提供设备的姿态(acc + 陀螺仪 + compas OR acc + compas)

I see that I can retrieve CMAttitude from a device and from it I can read 3 values which I need (pitch, roll and yaw).
As I understand, this CMAttitude object is managed by CoreMotion which is a Sensor Fusion manager for calculating correct results from compass, gyro and accelerometer together (on Android it is SensorManager Class).

So my questions are:

  1. Are those values (pitch, roll and yaw) relative to the magnetic north and gravity?

  2. If above is correct, how can I modify it to give me results relative to the geographic north?

  3. If a device (such as iPhone 3GS) doesn't have an gyroscope, do I have to tell it to Manager or can I just tell it to give me the device's attitude based on the sensors it has (acc + gyro + compas OR acc + compas)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

物价感观 2025-01-13 10:12:36
  1. 2:

iOS 5.0 简化了这项任务。 CMMotion 管理器有新方法:


- (void)startDeviceMotionUpdatesUsingReferenceFrame:(CMAttitudeReferenceFrame)referenceFrame

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

  • CMAttitudeReferenceFrameXMagneticNorthZVertical 表示磁北,
  • CMAttitudeReferenceFrameXTrueNorthZVertical 表示真北。

如果你想在旧版 iOS 上执行此操作,恐怕你必须使用当前用户位置自行校准。

尝试查看以下资源:

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

  1. and 2:

iOS 5.0 simplifies this task. CMMotion manager has new method:


- (void)startDeviceMotionUpdatesUsingReferenceFrame:(CMAttitudeReferenceFrame)referenceFrame

As reference frame you can use this values:

  • CMAttitudeReferenceFrameXMagneticNorthZVertical for magnetic north,
  • CMAttitudeReferenceFrameXTrueNorthZVertical for true north.

If you want to do this with older iOS im afraid you have to calibrate this by yourself using current user location.

Try checkout this resources:

3.
If device has no gyro, the deviceMotionAvailable property of CMMotionManger will be "NO" (it is equivalent to gyroAvailable property) and you cannot get attitude using device motion. The only thing you can do is to read accelerometer and magnetometer data directly.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文