Android中加速度计的精度

3

我正在寻找一种使用安卓手机中的传感器获取距离的方法,作为大学项目的一部分。

在查看了其他类似问题的解答1.2.后,并尝试了一些代码,我发现由于加速度计数据非常嘈杂,这个想法似乎毫无意义。

问题

我想要一个可行的演示版本。如果将应用程序制作成地铁系统的工作方式,是否可行?这样我就可以得到初始速度,并且只需要处理线性运动。或者,由于噪声仍然会使加速度计数据无用,这个想法还是不可行的吗?

如果您有任何提示或建议,将不胜感激。


假设你在户外,判断距离最好的方法是使用GPS系统,而不是加速度计。实际上,噪音会很快使加速度计失去作用。 - Gabe Sechan
1个回答

1
如果您真的必须使用加速度计,您可以通过观察数据中的活动量(峰值)来进行天真的估计。
- 几乎没有峰值 = 没有运动 - 一些和不同的峰值 = 步行速度 - 许多峰值 = 跑步速度
这可以通过简单地保存加速度计数据窗口并计算超过给定阈值的值的数量来完成。或者更高级的是,您可以对数据进行快速傅里叶变换以确定数据的频率,低频率:低活动度,反之亦然。
这个想法可以通过使用机器学习进一步改进,并可能与更多传感器(如陀螺仪或指南针)融合。这将有助于更准确地确定活动,但这是一个相当大的主题,需要大量的时间和精力。
Android 可以检测一些用户活动,但不是那么细致:http://developer.android.com/training/location/activity-recognition.html 尽管链接可以帮助确定何时打开加速度计,因为它能够确定用户何时在步行。
public class ActivityRecognitionIntentService extends IntentService {
...
/**
 * Map detected activity types to strings
 *@param activityType The detected activity type
 *@return A user-readable name for the type
 */
private String getNameFromType(int activityType) {
    switch(activityType) {
        case DetectedActivity.IN_VEHICLE:
            return "in_vehicle";
        case DetectedActivity.ON_BICYCLE:
            return "on_bicycle";
        case DetectedActivity.ON_FOOT:
            return "on_foot";
        case DetectedActivity.STILL:
            return "still";
        case DetectedActivity.UNKNOWN:
            return "unknown";
        case DetectedActivity.TILTING:
            return "tilting";
    }
    return "unknown";
}
...
}

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