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

2023-12-09

我正在开发一个增强现实应用程序,(目前)想要在表面上显示一个简单的立方体,并且能够在空间中移动(旋转和位移)以从所有不同的角度查看立方体。校准相机的问题在这里不适用,因为我要求用户将 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 秒的慢动作,不会有可接受的解决方案。如果您可以忍受一些限制,例如小距离(

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

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

请始终记住,即使是非常小的误差(例如

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

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

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

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

     vX *= 0.9;
}

`

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

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

干杯凯

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Core Motion 从加速度计数据获取位移 的相关文章

  • 应用程序打开时处理推送通知

    我正在运行推送通知 有用 我收到通知并使用 application didReceiveRemoteNotification 获取传入数据 然后将用户发送到必要的屏幕 问题是 如果您正在使用该应用程序并收到通知 它会跳转到目标屏幕 而不会发
  • 如何将相机中的图像保存到 iPhone 图库中的特定文件夹?

    嘿 我是 iPhone 新手 最近我一直在尝试制作一个应用程序 基本上 我想要做的是 如果用户将从相机捕获任何图像 那么它应该保存在设备库中 我知道如何将照片保存在图库中 它对我有用 但我无法将所有捕获的图像保存到设备图库中的特定文件夹 例
  • iPhone UINavigationBar 使用 [UINavigationBar 外观] 更改所有控制器的字体样式

    我知道我可以单独更改导航栏的字体 如本答案所述 更改导航栏的字体 https stackoverflow com questions 5832036 change the navigation bars font 目前我正在使用一种更全局的
  • iOS 中的 CSV 逐行解析

    我正在 Objective c 中解析 CSV 文件 该文件包含如下内容 line 40 Rising searches line 41 nabi avc Breakout line 42 stonewall 700 line 43 med
  • iphone NSDate 转换问题

    在我的 facebook 图表 Api 中 我正在获取这些数据 来自杰森 updated time 2011 05 17T14 52 16 0000 我正在使用此代码将其转换为有效的日期格式 NSDateFormatter df NSDat
  • Cocos2d - 将 GLImageProcessing 效果应用于 CCSprite

    苹果的oplenglGL图像处理 http developer apple com library ios samplecode GLImageProcessing Introduction Intro html加载图像并应用图像调整 亮度
  • 我如何获取用户的电子邮件? iPhone SDK

    我需要获取 Mail app 中使用的用户的电子邮件地址 如何使用 iPhone SDK 做到这一点 谢谢你 简短的回答 你不能 如果需要 您应该提示用户输入电子邮件地址
  • 在 swrevealcontroller 之前实现登录屏幕

    我刚刚开始学习 IOS 开发 我已经按照给定的在线教程成功实现了 SWRevealViewController 一切都按预期工作 然后 我决定添加一个登录屏幕 这将是应用程序运行时用户看到的第一个页面 我采取的步骤如下 将 UIViewCo
  • 如何检查 BOOL 是否为空?

    有没有办法在将值分配给 BOOL 之前检查该值是否为 NULL Nil 例如 我在 NSDictionary 中有一个值可以是 TRUE FALSE NULL mySTUser current user following results
  • 检索 iPhone 中的 Outlook 联系人

    我想通过应用程序导入所有 Outlook 联系人 有什么办法可以做到这一点吗 请告诉我 您可以通过实施 Microsoft Exchange 服务器协议来实现此目的 微软MSDN http msdn microsoft com en us
  • 在不同的捆绑包上测试 iPhone 应用内购买?

    我们有一组 iPhone 应用程序的 Beta 测试人员 最近 我们在应用程序中添加了应用内购买功能 在此之前 我们会使用单独的捆绑 ID 和名称向 Beta 测试人员发送临时版本 以便他们可以在手机上拥有商店版本和临时版本 然而 似乎我们
  • 防止UIScrollView的UIPanGestureRecognizer遮挡UIScreenEdgePanGestureRecognizer

    我有一个UIScrollView它填满了我应用程序的一页上的屏幕 但我希望允许用户从屏幕边缘平移以显示其后面的视图 问题是 UIScrollView 窃取了我的触摸UIScreenEdgePanGestureRecognizer在屏幕边缘
  • 如何适配iPhone 4屏幕分辨率?

    根据Apple http www apple com iphone specs html iPhone 4 拥有新的 更好的屏幕分辨率 3 5 英寸 对角线 宽屏多点触控显示屏960 x 640 像素分辨率 326 ppi 这个小细节对我们
  • iPhone 崩溃日志?

    我已经配置了一部 iPhone 并让用户安装了该应用程序 它失败 是否有崩溃日志可以让我看到 iPhone 上失败的原因 Ian 如果您可以使用 xcode 将 iPhone 连接到计算机 则在管理器窗口中它会显示每个应用程序崩溃的崩溃日志
  • 如何减少典型 iPhone 应用程序的启动时间?

    需要明确的是 这是一个普通的 iPhone 应用程序 而不是游戏 我在网上读过几次 一些开发人员提到他们正在努力改进 减少应用程序的启动时间 但从来没有提供任何关于如何做到这一点的良好背景信息 那么问题很简单 如何减少 iPhone 应用程
  • GMSMapView 中的倒多边形

    我必须在我的 iPhone 项目中使用 Google 地图 并且我正在使用 GMSPolygon 来绘制多边形 但是如何填充地图上除多边形内部之外的所有位置 就像下图一样 谢谢 我玩过你的问题 主要思想是用多边形填充整个地球 然后为您的特定
  • 用 UIView 像翻书一样翻页?

    我正在尝试在之间切换UIViews让它看起来就像你正在翻书的一页 The UIViewAnimationTransitionCurlUp如果我能让它向左或向右卷曲 那就非常接近了 这可能吗 我尝试过使用CATRansition但没有一种动画
  • 如何将 NSIndexpath 转换为 NSInteger 或简单的 int?

    我需要将 nsindexpath var 转换为 NsInteger 或简单的 int 例如 int rowIndex mGoogleBaseTable selectedRow mGoogleBaseTable is a NSTable t
  • PresentModalViewController 不执行任何操作

    我有一个 UIViewController parent 调用presentModalViewController与另一个 UIViewController child on viewDidLoad If parent没有 UINaviga
  • 对使用phonegap和钛的质疑[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 最近我听说了 PhoneGap 和 Titanium 移动网络应用程序的开发 我分析了这两个 Web 应用程序 并了解了如何使用它们以

随机推荐