android - 试图校准加速度计

标签 android accelerometer calibration

我正在编写一个应用程序,它将使用加速度计来计算手机上施加的平均 geforce。考虑这个问题,我得出结论,当手机静止时,将所有轴值加在一起会得到 +9.8(重力加速度)的答案。

我现在假设,如果我从所有轴的总和中减去 9.8,它会给出施加在手机上的合力,而不考虑重力。因此,如果手机处于固定位置,它将返回值 0。

现在,如果手机直接放在一个轴上,这确实是正确的,但如果手机以约 45 度角靠在某物上,它返回的值是 4-5(大约是重力)角度越接近轴,记录的力越小(继续并假设它是成比例的)

根据我的理解,这不应该发生,它应该返回 0,因为所有轴都会相互抵消,不是吗?因为手机是静止的,所以手机应该没有记录力,对吧?

最佳答案

4-5 m/s2 的值表示您的计算中存在小错误或硬件缺陷。你说你正在添加所有值,但是你是怎么做到的?您必须将幅度计算为 sqrt(x*x + y*y + z*z)。这是因为速度、位置等加速度是矢量,它们的 length是根据Pythagorean theorem计算的.

一般来说,这些传感器并不像您预期​​的那样精确。在 iPhone 上,我测得的重力值介于 9.75 和 9.87 之间。值取决于温度(将它放在冰箱中,你会得到较低的值 - 我检查过 ;-) 并且在改变方向时确实存在差异。我发现值增量为 0.3 m/s2。为了解决这个问题,您需要大量的数学运算(Kalman-Filter 或类似的东西),当然还有第二个传感器(陀螺仪,因为磁力计,即罗盘 react 太慢)。

关于android - 试图校准加速度计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6910457/

相关文章:

android - 资源条目 com.crashlytics.android.build_id 已定义 - Android Studio

android - IllegalStateException:当我第二次尝试显示 AlertDialog 时

accelerometer - 多个寄存器/设备的 i2c

android - 传感器的方向类型

android - 触摸屏校准值,在 Android/Kernel 中是如何完成的?

opencv - OpenCV-CirclesGridFinder的文档

android - 如何观察服务类中的实时数据

java - 错误: "The application has stopped unexpectedly. Please try again.'

event-handling - Windows 手机 : how to manage shake events?

c++ - 如何在样本中使用opencv的calibration.cpp(ubuntu opencv 2.4.12)