我希望制作一个 android 应用程序作为大学项目的一部分,该项目使用 android 手机中的传感器来获取距离。
在查看其他性质相似的问题后 1.和 2. ,有些人在玩弄代码,这个想法看起来毫无意义,因为加速度计数据真的很嘈杂。
问题
因为我正在寻找某种可行的演示。让该应用程序在地铁系统中运行是否可行?这样我就有了初始速度,也只需要处理线性运动。还是噪声仍然会使加速度计数据变得无用?
任何提示或建议都将非常适用。
最佳答案
如果您真的必须使用它们的加速度计,您可以通过查看数据中的 Activity 量(峰值)来进行天真的估计。
- 很少或没有峰值 = 没有移动
- 一些不同的峰值 = 步行速度
- 许多峰 = 运行速度
这可以通过简单地保存一个加速度计数据窗口并计算超过给定阈值的值的数量来完成。 或者更高级的方法,您可以对数据进行快速傅立叶变换以确定数据的频率,低频率:低 Activity ,反之亦然。
可以使用机器学习进一步改进这个想法,并可能融合更多传感器,例如陀螺仪或指南针。这将有助于更准确地确定 Activity ,但这是一个相当大的话题,需要大量的时间和精力。
Android 可以检测到一些用户 Activity ,但不是那么细粒度: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";
}
...
}
关于android - android中的加速度计精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22595038/