gpt4 book ai didi

ios - 使用磁力计和加速度计计算准确的偏航

转载 作者:行者123 更新时间:2023-11-30 12:17:49 24 4
gpt4 key购买 nike

我目前正在使用 CMMotionManager 姿态来获取横滚、俯仰和偏航。然而,运行几分钟后,偏航开始漂移并且变得不准确。

我读到有一种方法可以使用加速度计和磁力计的组合来计算偏航,该方法可以通过补偿恒定漂移来保持偏航准确,但是,我还没有找到可行的公式。

这是我用于获取运动更新的代码的一小部分。

motionManager.deviceMotionUpdateInterval = 0.1
motionManager.showsDeviceMovementDisplay = true
motionManager.startDeviceMotionUpdates(using: .xMagneticNorthZVertical, to: OperationQueue.current!)
{ deviceManager, error in

if let deviceManager = deviceManager {
let roll = deviceManager?.attitude.roll
let pitch deviceManager?.attitude.pitch
let yaw = deviceManager?.attitude.yaw // Get drifted over time
...

有什么想法吗?

更新

我可以使用以下公式补偿偏航漂移:

使用磁力计创建初始引用点(固定世界坐标系引用):

m_w = (m_x,m_y,m_z)

使用磁力计获取当前磁力点(也是固定的世界坐标系引用):

n_w = (n_x,n_y,n_z)

将投影读数转换为角度

a = atan2(m_z,m_x)
b = atan2(n_z,n_x)

偏航漂移计算如下

y_d = (a-b) * 180 / PI

现在从当前加速度计偏航中扣除结果。

瓦拉!

最佳答案

你不是说环游吗? MotionManager 有一种混合 3 个输入的模式:加速度计、陀螺仪和磁力计。

为此,您必须将其设置为“设备运动”

Device motion. Call the startDeviceMotionUpdates(using:) or startDeviceMotionUpdates() method to begin updates and periodically access CMDeviceMotion objects by reading the deviceMotion property. The startDeviceMotionUpdates(using:) method (new in iOS 5.0) lets you specify a reference frame to be used for the attitude estimates.

https://developer.apple.com/documentation/coremotion/cmmotionmanager

但是,您必须意识到这会大大增加电池消耗。

关于ios - 使用磁力计和加速度计计算准确的偏航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45182585/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com