加速度计到相对位置

Posted

技术标签:

【中文标题】加速度计到相对位置【英文标题】:Accelerometer to relative position 【发布时间】:2011-05-02 16:49:30 【问题描述】:

在我重新发明***之前,我想看看是否有人可以分享以下代码或提示:

为了得到iPhone的相对位置,需要

设置加速度计读取速率 噪声过滤加速度计响应 将其转换为矢量 对矢量进行低通滤波以找到重力 从原始读数中减去重力以找出用户引起的加速度 过滤用户引起的加速度以获得您感兴趣的频率(可能是带通,具体取决于应用程序) 积分求相对速度 积分查找位置

所以我希望人们已经编写了上述部分或全部内容,并且可以提供提示或更好的代码。

几个我没有找到答案的问题:

iPhone 加速度计的频率响应是多少?加速度计和模数转换器之间存在哪些硬件滤波器?

在不重复读取值的情况下调用加速度计委托的最快读取速率是多少?

各种手机的上述差异?

对于设计过滤器有什么好的建议,例如分离重力和用户运动的截止频率?

集成步骤的任何代码或提示?有什么理由要整合到笛卡尔坐标系而不是矢量,反之亦然?

在实施之前应该知道的任何其他经验、提示或信息?

【问题讨论】:

附加说明:是的,这很难。是的,一个人无法获得绝对位置,只能获得相对运动。是的,漂移是一个大问题,尤其是在两个集成中。继续告诉我这些事情,特别是如果您有更多的细节和经验,但请不要在没有进一步解释和细节的情况下仅提交“无法完成”的答案。 最近运气好吗?我对这个想法很感兴趣。由于双重积分如此不精确,我想我必须结合相机数据和对象跟踪以获得更多细节。肯定有很多工作。如果您为此编写或找到任何有用的代码,我会对更新​​感兴趣。 @Qaz 不,但鉴于至少有一个应用程序可以通过将手机放在每面墙上来测量房间,我猜最新的设备可以做到这一点。 @AdamDavis 这期间有什么突破吗?目前正在解决这个问题。有趣的事情:正在开发您刚刚提到的应用程序... @DavidSeek 我已经很多年没有看过它了,所以我不知道更新的 ios 设备是否有更好的传感器或更好的 API 来读取它们。我试过其中一款房间测量应用程序,但它相当挑剔,所以我猜它还没有解决问题。 【参考方案1】:

当我找到信息时,我会在这个答案中收集它。

硬件

3GS 使用ST LIS331DL 3 轴±2g/±8g 数字加速度计。

iPhone 4 和 iPad 使用 ST LIS331DLH 3 轴 ±2g/±4g/±8g 数字加速度计。

它们都能够以 100Hz 和 400Hz 的频率读取,尽管在 iPhone 3G(iOS 4.1 下)上,即使 setUpdateInterval 设置为更快更新,加速计委托的调用频率也不会超过 100Hz。我不知道 API 是否允许在 iPhone 4 上进行更快的更新,而 Apple 的文档仅说明最大值由 iPhone 的硬件决定。 (待定)

A/D 转换器与 MEM 传感器位于同一硅片上,有利于抗噪性。

DL 版本是 8 位 (3GS) 而 DLH 版本是 12 位 (iPhone 4)。 DL 版本中的最大偏差(偏移量)是 DLH 版本(0.04g vs 0.02g)的两倍。

DLH 的数据表报告了加速度噪声密度,但 DL 数据表中并未报告该值。 DLH 的噪声密度相当低,为 218 μg/√Hz。

两种传感器都提供 100Hz 或 400Hz 的采样速度,没有自定义速率。如果 iPhone 没有以设定的采样率读取输出寄存器,传感器会丢弃值。

DL 传感器的“典型”满量程值为 ±2.3g,但 ST 仅保证至少为 ±2g。

温度对传感器的影响存在且可测量,但不是很显着。

待定:

硬件过滤器是否开启,过滤特性是什么? 加速度计的电源噪声有多大? (有人碰巧有 iPhone 的原理图吗?) 加速度计使用内部时钟为采样率和 A/D 转换提供时序。数据表并未说明此时钟的准确度、精度或温度敏感性。为了进行准确的时间分析,iPhone 必须使用中断来感知采样何时完成并在中断中记录时间。 (是否这样做是未知的,但这是获得准确计时信息的唯一方法)

API

请求低于 100Hz 的采样率会导致获得选定的样本,而丢弃其余样本。如果在软件中要求的采样率不是 100Hz 的因子,则实际传感器读数之间的时间间隔不可能是均匀的。即使使用 100 倍,Apple 也不保证采样率均匀。

API 似乎没有提供软件过滤。

API 确实将原始加速度计值缩放为表示 Gs 的双精度值。使用的比例因子是未知的,并且对于每部手机这是否不同(即,已校准)以及校准是否持续发生以解决传感器漂移也是未知的。在线报告似乎表明,当 iPhone 平放在表面上时,它有时会重新校准自身。

简单测试的结果表明,API 将 3GS 的传感器设置为 ±2g,这对于手持运动来说通常很好。

待定:

Apple 是否校准每个单元以使 UIAccelerometer 将 1G 报告为 1G? Apple 的文档特别警告不要将该设备用于敏感的测量应用。 报告的 NSTimeInterval 是否表示从加速度计读取值的时间,或者加速度计中断指示新值已准备好的时间?

【讨论】:

【参考方案2】:

我只是在处理同样的问题。您的方法的唯一区别是我不想依靠低通滤波器来找到重力。 (TBH 我看不出如何可靠地从加速度计读数中分辨出重力矢量) 正在尝试使用陀螺仪。

【讨论】:

欢迎来到 Stack Overflow 问答网站。 SO不是一个讨论论坛,这不是一个答案。你最好开始一个新的问题来引用这个问题。 @McDowell - 无意冒犯,但也许您应该先阅读问题。其中之一是:“设计过滤器的任何好的技巧,例如分离重力和用户运动的截止频率?”我的评论/答案是我使用了不同的方式 - 陀螺仪。 公平点,我也误认为这是一个我!“答案”。道歉! @Dave 您在这项技术上取得了进一步的成功吗?我也尝试用陀螺仪完成这个项目,虽然它有帮助(通过消除重力过滤的需要)我仍然无法获得合理的位移结果。

以上是关于加速度计到相对位置的主要内容,如果未能解决你的问题,请参考以下文章

在Android中计算罗盘方位/前往位置

使用加速度计和陀螺仪的 6DOF

相对于标准代码测试 simd 加速的正确方法是啥

捕获相对加速度计倾斜

硬件架构设计 | 惯性导航系统

在 Android 上查找指南针方向