加速度计到相对位置的转换

11

在我重复造轮子之前,我想看看是否有人能分享以下代码或技巧:

为了获取 iPhone 的相对位置,需要进行以下操作:

  • 设置加速度计读取速率
  • 降噪加速度计响应
  • 将其转换为矢量
  • 低通滤波矢量以查找重力
  • 从原始读数中减去重力以查找用户产生的加速度
  • 过滤用户产生的加速度以获得感兴趣的频率(根据应用程序可能是带通)
  • 积分以查找相对速度
  • 积分以查找位置

所以我希望有人已经编写了上述其中一些或全部,并能提供技巧或者最好的情况是代码。

我还没有找到答案的一些问题:

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

加速度计委托可以调用的最快读取速率是多少,而不会复制读取的值?

上述不同手机之间的区别?

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

在卡西尼坐标系中以矢量或反之积分有任何原因吗?

在实施此操作之前应该了解的任何其他经验、提示或信息?


1
附加说明:是的,这很困难。是的,我们无法获得绝对位置,只能获得相对运动。是的,漂移是一个大问题,特别是在两个积分之间。如果您对此有更多详细经验,请告诉我这些事情,但请不要仅提交“无法完成”而没有进一步的解释和细节。 - Adam Davis
@Qaz 不是的,但考虑到至少有一款应用程序可以通过将手机放在每个墙上来测量房间大小,我猜测使用最新设备是可能的。 - Adam Davis
@AdamDavis 最近有什么突破吗?我正在解决那个问题。有趣的是:我正在开发你刚提到的应用程序... - David Seek
嗯,你提到的那个“roomscan”做得非常好。我已经试用了20次,它的准确度非常高...这就是为什么我在寻找可能的解决方案... - David Seek
@DavidSeek 好的,请告诉我们你学到了什么! - Adam Davis
显示剩余2条评论
2个回答

9

随着我了解信息,我将在此回答中收集它。

硬件

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进行更快的更新,苹果的文档仅说明最大值由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的因数,苹果也不能保证均匀的采样率。

似乎API没有提供软件滤波功能。

API会将原始加速度计值缩放为表示G的双精度数值。使用的缩放因子未知,不清楚每个手机是否不同(即是否校准),以及校准是否在持续进行以解决传感器漂移问题。在线报告似乎表明,iPhone在平放在表面上时会重新校准自己。
简单测试的结果表明,API将3GS的传感器设置为±2g,这通常对手持运动来说是可以接受的。
待定:
- Apple是否校准每个设备,使UIAccelerometer报告1G为1G?Apple的文档明确警告不要将设备用于敏感测量应用。 - 报告的NSTimeInterval是否表示从加速度计读取值的时间,还是表示加速度计中断指示新值已准备好的时间?

0

我也在处理同样的问题。与你的方法唯一的不同之处在于,我不想依赖低通滤波器来找到重力。(说实话,我不知道如何可靠地从加速度计读数中确定重力向量) 现在正在尝试使用陀螺仪。


欢迎来到 Stack Overflow 问答网站。SO 不是一个讨论论坛,这也不是一个答案。你最好开一个新问题并引用这个问题。 - McDowell
1
@McDowell - 没有冒犯的意思,但或许你应该先阅读问题。其中一个问题是:“有没有设计滤波器的好建议,例如分离重力和用户动作的截止频率?”我的评论/答案是我使用了不同的方法-陀螺仪。 - Dave
公正的观点,我把这个错误地看成了“我也是!”的回答。非常抱歉! - McDowell
@Dave,你在这个技术方面有进一步的成功吗?我也尝试使用陀螺仪完成这个项目,虽然它有所帮助(通过消除对重力的过滤需求),但我仍然无法得到合理的位移结果。 - Adam Davis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接