我正在考虑为Android手机实施一个惯性导航系统,我意识到加速度计的准确性和读数的不断波动很难实现.
首先,我将手机放在一个平面上,并在X和Y方向上取样1000个加速度计读数(平行于工作台,因此没有重力作用于这些方向).然后我平均这些读数并使用该值来校准手机(从每个后续读数中减去该值).
然后我再次将它放在桌面上并在X和Y方向上采样5000个加速度计读数来测试系统.考虑到校准,我预计这些加速度应该在每个方向上加起来为0(大致).然而,情况并非如此,并且超过5000次迭代的总加速度远不及0(每个轴上平均大约10).
我意识到没有看到我的代码,这可能很难回答,但在更一般的意义上......
这只是移动电话(HTC Desire S)上加速度计读数不准确的一个例子,还是我在编码中出错的可能性更大?
在阅读了许多关于如何根据加速度数据测量距离的论坛旁边的研究和论文之后我发现了双重积分方法,但是这种方法的误差很大并且随着时间的推移而增加.另外我找到了一些建议卡尔曼滤波器的人我读了一些关于它的参考文献,但我不清楚如何使用它.还有一些人正在谈论融合传感器...但在阅读之后我没有得到任何新的想法.所以我仍然感到困惑,我没有找到正确的答案......抱歉这个漫长的介绍.
题
让我们考虑一下,我手里拿着9轴传感器,我向某个方向移动手,我怎样才能在空间找到我手的新位置?如何获取从初始点到新点的运动矢量我的意思是如何知道三个轴上的传递距离?
如果没有直接的答案...一些建议或参考将是伟大的或一些算法,提供准确的答案,我可以自己研究和使用它.非常感谢你
我开始考虑创建一个可以在公司大楼内使用的Android应用程序,以确定你所在的房间.显然我认为GPS和网络位置不够准确,无法实现这一目标.(更不用说内部GPS信号的不稳定性)我简要地看了一下通过加速度计计算距离,但它显然是高度不稳定的并且留下了很大的误差.我也考虑过某种来自路由器的三角测量,但你遇到了墙壁/微波和各种其他可能扰乱信号强度的问题.有没有人有任何可能的想法或方向尝试?
最近我做了一些研究,使用加速度计+陀螺仪来使用那些传感器在没有GPS帮助的情况下跟踪智能手机(参见这篇文章) 基于陀螺仪和加速度计的室内定位系统
为此我需要我的方向(角度(俯仰,滚动等))所以这里到目前为止我所做的:
public void onSensorChanged(SensorEvent arg0) {
if (arg0.sensor.getType() == Sensor.TYPE_ACCELEROMETER)
{
accel[0] = arg0.values[0];
accel[1] = arg0.values[1];
accel[2] = arg0.values[2];
pitch = Math.toDegrees(Math.atan2(accel[1], Math.sqrt(Math.pow(accel[2], 2) + Math.pow(accel[0], 2))));
tv2.setText("Pitch: " + pitch + "\n" + "Roll: " + roll);
} else if (arg0.sensor.getType() == Sensor.TYPE_GYROSCOPE )
{
if (timestamp != 0) {
final float dT = (arg0.timestamp - timestamp) * NS2S;
angle[0] += arg0.values[0] * dT;
filtered_angle[0] = (0.98f) * (filtered_angle[0] + arg0.values[0] * dT) + (0.02f)* (pitch); …
Run Code Online (Sandbox Code Playgroud) 我想开发一个应用程序,我需要知道我的设备在建筑物内的位置(设备当前所在的房间).GPS不在建筑物内工作.有没有办法在建筑物中找到设备的位置?如果有,怎么样?我可以使用位置或运动传感器或这些传感器的组合吗?
android ×4
acceleration ×1
calibration ×1
filter ×1
geolocation ×1
gps ×1
gyroscope ×1
physics ×1
position ×1
sensor ×1
tracking ×1