gpt4 book ai didi

iphone - 当 iPhone 垂直时,CMDeviceMotion 偏航值不稳定

转载 作者:技术小花猫 更新时间:2023-10-29 10:35:02 24 4
gpt4 key购买 nike

在 iOS 原型(prototype)中,我结合使用了 CMDeviceMotion.deviceMotion.yaw 和 CLHeading.trueHeading 来制作响应迅速且准确的稳定罗盘航向。这在 iPhone 平放时效果很好,我有一个图形箭头指向稳定的罗盘航向。

当 iPhone 在纵向模式下垂直握持时会出现此问题。 UIDeviceOrientation 不断从 UIDeviceOrientationFaceDown 变为 UIDeviceOrientationFaceUp 并返回。这使得偏航值根据俯仰的微小变化来回跳跃 +/-180 度。是否可以将设备锁定到一个提供稳定偏航值的方向,预测无故障的变化或以其他方式计算陀螺仪偏航(或在该方向上滚动)?

这个可怜的家伙有同样的问题,没有答案。双倍积分可能的人! :) https://stackoverflow.com/questions/10470938/euler-angle-yaw-not-working-when-iphone-orientation-changes

最佳答案

我只是在寻找这个问题的答案。看到你在一年多前发布这个消息,我有点伤心,但我想也许你或其他人可以从这个解决方案中受益。

问题是万向节锁。当俯仰约为 90 度时,偏航和横滚匹配,陀螺仪失去一定的自由度。四元数是避免万向节锁定的一种方法,但老实说,我不想全神贯注于此。相反,我注意到偏航和滚动实际上是匹配的,可以简单地相加来解决问题(假设您只关心偏航)。

解决方案:

    float yawDegrees = currentAttitude.yaw * (180.0 / M_PI);
float pitchDegrees = currentAttitude.pitch * (180.0 / M_PI);
float rollDegrees = currentAttitude.roll * (180.0 / M_PI);

double rotationDegrees;
if(rollDegrees < 0 && yawDegrees < 0) // This is the condition where simply
// summing yawDegrees with rollDegrees
// wouldn't work.
// Suppose yaw = -177 and pitch = -165.
// rotationDegrees would then be -342,
// making your rotation angle jump all
// the way around the circle.
{
rotationDegrees = 360 - (-1 * (yawDegrees + rollDegrees));
}
else
{
rotationDegrees = yawDegrees + rollDegrees;
}

// Use rotationDegrees with range 0 - 360 to do whatever you want.

我希望这对其他人有帮助!

关于iphone - 当 iPhone 垂直时,CMDeviceMotion 偏航值不稳定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10692344/

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