在重新发明轮子之前,我想看看是否有人可以分享以下内容的代码或提示:
为了获得 iPhone 的相对位置,需要
- 设置加速度计读取速率
- 对加速度计响应进行噪声过滤
- 将其转换为向量
- 对矢量进行低通滤波以找到重力
- 从原始读数中减去重力即可找到用户引起的加速度
- 过滤用户引起的加速以获得您感兴趣的频率(可能是带通,具体取决于应用程序)
- 积分以确定相对速度
- 整合以找到位置
所以我希望人们已经编写了上述部分或全部内容,并且可以提供提示,或者更好的代码。
有几个问题我还没有找到答案:
iPhone 加速计的频率响应是多少?加速度计和模数转换器之间存在哪些硬件滤波器?
在不重复读取值的情况下可以调用加速度计委托(delegate)的最快读取速率是多少?
上述内容对于不同手机有何不同?
设计滤波器有什么好的技巧,例如分离重力和用户运动的截止频率吗?
有关集成步骤的任何代码或提示吗?有什么理由集成到笛卡尔坐标系中而不是作为向量,反之亦然?
在实现此操作之前,还有其他应该了解的经验、技巧或信息吗?
最佳答案
当我找到信息时,我会将其收集到这个答案中。
硬件
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 与 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 的 double 值。使用的缩放因子是未知的,并且每个电话的缩放因子是否不同(即校准)以及校准是否持续进行以解决传感器漂移也是未知的。在线报告似乎表明,当 iPhone 平放在表面上时,它有时确实会重新校准。
简单测试的结果表明,API 将 3GS 的传感器设置为 ±2g,这通常适合手持移动。
待定:
- Apple 是否会校准每个单元,以便 UIAccelerometer 将 1G 报告为 1G? Apple 的文档特别警告不要将该设备用于敏感测量应用。
- 报告的 NSTimeInterval 是否代表从加速度计读取值的时间,或者加速度计中断指示新值准备就绪的时间?
关于iphone - 加速度计相对位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4056973/