gpt4 book ai didi

iphone - 使用 Core Motion 从加速度计数据获取位移

转载 作者:行者123 更新时间:2023-12-03 18:19:50 24 4
gpt4 key购买 nike

我正在开发一个增强现实应用程序,(目前)想要在表面上显示一个简单的立方体,并且能够在空间中移动(旋转和位移)以在所有不同的角度查看立方体角度。校准相机的问题在这里不适用,因为我要求用户将 iPhone 放置在他想要放置立方体的表面上,然后按下按钮重置姿态。使用陀螺仪和 Core Motion 找出相机旋转非常简单。我这样做:

if (referenceAttitude != nil) {
[attitude multiplyByInverseOfAttitude:referenceAttitude];
}

CMRotationMatrix mat = attitude.rotationMatrix;

GLfloat rotMat[] = {
mat.m11, mat.m21, mat.m31, 0,
mat.m12, mat.m22, mat.m32, 0,
mat.m13, mat.m23, mat.m33, 0,
0, 0, 0, 1
};

glMultMatrixf(rotMat);

这个效果非常好。无论如何,当我试图找出加速期间空间中的位移时,更多的问题出现了。使用 Core Motion 的 Apple Teapot 示例只是将加速度向量的 x、y 和 z 值添加到位置向量。这(除了没有多大意义之外)具有使物体在加速后返回到原始位置的结果。 (因为加速度从正变为负,反之亦然)。他们是这样做的:

translation.x += userAcceleration.x;
translation.y += userAcceleration.y;
translation.z += userAcceleration.z;

如何根据某个瞬间的加速度找出位移? (已知时差)。看看其他一些答案,似乎我必须积分两次才能从加速度获得速度,然后从速度获得位置。但代码中没有任何示例,我认为这确实没有必要。另外,还有一个问题是,当 iPhone 仍在飞机上时,加速度计值不为空(我认为存在一些噪音)。我应该对这些值进行多少过滤?我应该过滤它们吗?

最佳答案

酷,有人正在努力解决同样的问题,所以值得花一些时间:-)

我同意 westsider 的说法,因为我花了几周时间尝试不同的方法,但最终结果不佳。我确信对于较长距离或持续超过 1 或 2 秒的慢动作,不会有可接受的解决方案。如果您可以忍受一些限制,例如小距离(< 10 厘米)和给定的运动最小速度,那么我相信可能有机会找到解决方案 - 完全不能保证。如果是这样,您将花费大量的时间进行研究并遭受很多挫折,但如果您得到它,那将非常非常酷:-)也许您会发现这些提示有用:

首先,为了让事情变得简单,只需查看一个轴,例如 x,但同时考虑左 (-x) 和右 (+x) 以获得可表示的情况。

是的,你是对的,你必须积分两次才能得到时间函数的位置。为了进一步处理,您应该存储第一次积分的结果(==速度),因为您将在稍后阶段需要它来进行优化。一定要非常小心,因为每一个微小的错误都会在短时间内导致巨大的错误。

请始终记住,即使是非常小的误差(例如 <0.1%),在进行两次积分后也会迅速增大。如果您将加速度计配置为 50 Hz,即处理 50 个刻度,并且微小的可忽略误差将超出“真实”值,那么在一秒钟后情况会变得更糟。我强烈建议不要依赖梯形法则,而至少使用辛普森或更高阶的牛顿柯茨公式。

如果您做到了这一点,您将必须注意设置正确的低通滤波。我无法给出一般值,但根据经验,尝试 0.2 到 0.8 之间的过滤因子将是一个很好的起点。正确的值取决于您需要的业务案例,例如什么类型的游戏、对事件使用react的速度……

现在您将拥有一个在某些情况下和短时间内运行良好的解决方案。但几秒钟后你就会遇到麻烦,因为你的物体正在漂移。现在您将进入解决方案中我最终未能在给定时间范围内处理的困难部分:-(

一种有希望的方法是引入我称之为“合成力”或“虚拟力”的东西。这是一种针对几种不良情况使用react的策略,这些情况会触发物体漂移,尽管设备在您手中保持固定(?没有母语人士,我的意思是没有移动)。最麻烦的是速度大于 0 而没有任何加速度。这是误差传播不可避免的结果,可以通过人为减慢来处理,这意味着即使没有真正的对应物,也要引入虚拟减速度。一个非常简单的例子:

if (vX > 0 && lastAccelerationXTimeStamp > 0.3sec) {

vX *= 0.9;
}

`

你需要结合这些条件来驯服这头野兽。需要进行大量的尝试和错误才能找到正确的方法,这将是问题的难点。

如果您成功破解了代码,请告诉我,我很好奇这是否可能一般:-)

干杯凯

关于iphone - 使用 Core Motion 从加速度计数据获取位移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4449565/

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