我希望能够在我的应用程序中使用一个相当简单的跌倒检测算法.在onSensorChanged()中,我得到当前x,x,z值的绝对值,并从中减去SensorManager.GRAVITY_EARTH(9.8 m/s).结果值必须连续10次大于阈值以设置表示加速度计已检测到下降的标志,阈值约为8m/s.
此外,我正在比较阈值已经通过时手机的方向和当阈值不再通过时它的方向,这设置了另一个标志,表示方位传感器已经检测到下降.
当两个标志都设置好后,就会发生一个事件来检查用户是否正确等等.我的问题在于阈值,当手机直接保持时,加速度计的绝对值约为9.8米/秒,但当我保持静止时在某个角度它可以超过15米/秒.这导致其他事件触发跌倒检测,如果我增加阈值以避免这种情况,则不会检测跌倒.
任何人都可以在这里给我一些建议,我应该使用哪些可能的值或如何改进我的方法?非常感谢.
我有两个时间序列的3D加速度计数据具有不同的时基(时钟在不同的时间开始,在采样时间内有一些非常轻微的蠕变),以及包含许多不同大小的间隙(由于与写入分开相关的延迟)闪光设备).
我使用的加速度计是便宜的GCDC X250-2.我正在以最高增益运行加速度计,因此数据具有显着的本底噪声.
每个时间序列具有大约200万个数据点(超过一小时,512个样本/秒),并且包含大约500个感兴趣的事件,其中典型事件跨越100-150个样本(每个200-300ms).许多这些事件都受到闪存写入期间数据中断的影响.
因此,数据不是原始的,甚至不是很漂亮.但我的眼球检查显示它清楚地包含了我感兴趣的信息.(如果需要,我可以发布情节.)
加速度计处于相似的环境中,但只是适度耦合,这意味着我可以通过眼睛判断哪些事件与每个加速度计匹配,但到目前为止我在软件中这样做是不成功的.由于物理限制,设备也安装在不同的方向,轴不匹配,但它们尽可能接近正交.因此,例如,对于3轴加速度计A和B,+ Ax映射到-By(上下),+ Az映射到-Bx(左右),+ Ay映射到-Bz(前后) .
我最初的目标是将纵向轴上的冲击事件关联起来,尽管我最终希望a)自动发现轴映射,b)关联映射的aces上的活动,以及c)提取两个加速度计之间的行为差异(例如扭曲或弯曲).
时间序列数据的本质使得Python的numpy.correlate()无法使用.我也看过R的动物园套餐,但没有取得进展.我已经在信号分析的不同领域寻求帮助,但我没有取得任何进展.
任何人都有我能做什么的线索,或者我应该研究的方法?
2011年2月28日更新:此处添加了一些显示数据示例的图表.
我用NDK更快地搜索了关于轮询加速度计的教程/答案,但还没找到求解器.刚刚在这里找到了androiddevelopers文档.
我需要的是轮询加速度大约每秒100个样本(100Hz),默认情况下我的设备(三星Galaxy SL i9003与姜饼2.3.5)默认SENSOR_DELAY_FASTEST只能获得大约60个样本persecond(60Hz).因此,我尝试通过生成.c文件,通过NativeActivity访问传感器,我试图基于sensor.h和looper.h制作.c文件:
#include <jni.h>
#include <string.h>
#include <android/sensor.h>
#include <android/log.h>
#include <android/looper.h>
#define TAG "accelerondk"
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO, TAG, __VA_ARGS__)
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, TAG, __VA_ARGS__)
#define LOOPER_ID 1
#define SAMP_PER_SEC 100 //i've changed to 120, even 10, but nothing happen
void Java_azka_web_ndk_AcceleroNDKActivity_startMonitoring(JNIEnv* env, jclass clazz) {
ASensorManager* sensorManager = ASensorManager_getInstance();
ALooper* looper = ALooper_forThread();
if(looper == NULL)
looper = ALooper_prepare(ALOOPER_PREPARE_ALLOW_NON_CALLBACKS);
ASensorRef accelerometerSensor = ASensorManager_getDefaultSensor(sensorManager,ASENSOR_TYPE_ACCELEROMETER);
LOGI("accelerometerSensor: %s, vendor: %s", ASensor_getName(accelerometerSensor), ASensor_getVendor(accelerometerSensor));
ASensorEventQueue* queue = ASensorManager_createEventQueue(sensorManager, looper, LOOPER_ID, …Run Code Online (Sandbox Code Playgroud) 当iPhone 4和第4代iPod Touch问世时,我正在玩Apple的Core Motion传感器融合算法,看看我是否可以获得任何有趣的结果,用于非常局部的航位推算(在几英寸或几英尺的范围内).鉴于MEMS传感器的规格相对较低,我没想到会有什么惊人之处.虽然Apple的CMDeviceMotion gravity财产使用了一种不错的(虽然是不透明的)传感器融合算法,但补充userAcceleration属性并不完全针对航位推算.尽管如此,我认为可能还有足够的乐趣.
iPhone 4,iPhone 5,第4代iPod Touch和第5代iPod Touch显然都使用STMicroelectronics LIS331DLH加速度计和L3G4200D陀螺仪.(实际上,我还没有看到iTouch-5陀螺仪的部件号,所以可能会有所不同.)
拆解:iPhone-4,iTouch-4,iPhone-5,iTouch-5
ST规格表明,加速度计可以在1000 Hz时采样,最高可达±8g.该陀螺仪可以800 Hz的频率采样,最高可达±2000 dps.
但是,使用我的第4代iPod Touch(iOS 5和iOS 6),我只能将采样率调高到100 Hz.如果我设置CMMotionManager deviceMotionUpdateInterval低于0.01,它会自动重置为0.01.同样的accelerometerUpdateInterval和gyroUpdateInterval.
此外,加速度计输出似乎总是限制在±2g左右.
我已经看到其他人对iPhone 4的类似界限发表评论.
这两个界限严重限制了我可以挤出设备的局部加速度计算(试验我的第四代iPod touch).我认为Apple已将这些限制设置为低,以降低功耗.虽然我不知道它们是设置在硬件中,还是设置在iOS中的某个地方.
有没有人在iPhone 5或第5代iPod Touch上使用这些加速度计和陀螺仪界限?(或任何iPad?)任何高于100赫兹的采样率?任何加速度计测量超出±2g的范围?
使用我的Android设备如何检测用户是走路,骑自行车还是开车?我查看了Google健身应用.它区分跑步,骑自行车和驾驶.我很困惑我应该用什么算法来区分这些活动.
我知道我必须使用加速计传感器.但我仍无法区分这些活动.
所以,我一直在努力解决这个问题,并且没有任何运气来利用互联网的智慧和相关的SO帖子.
我正在编写一个使用无处不在的加速度计的Android应用程序,但即使在休息时我似乎也得到了令人难以置信的"噪音",似乎无法弄清楚如何处理它,因为我的读数需要相对较高准确.我想也许我的手机(HTC Incredible)功能失调,但传感器似乎与我玩过的其他游戏和应用程序配合得很好.
我试图使用各种"过滤器",但我似乎无法围绕它们.我知道引力必须以某种方式处理,也许这就是我出错的地方.目前我已经尝试了这个,改编自SO答案,它引用了iPhone SDK的一个例子:
accel[0] = event.values[0] * kFilteringFactor + accel[0] * (1.0f - kFilteringFactor);
accel[1] = event.values[1] * kFilteringFactor + accel[1] * (1.0f - kFilteringFactor);
double x = event.values[0] - accel[0];
double y = event.values[1] - accel[1];
Run Code Online (Sandbox Code Playgroud)
海报上写着"玩"kFilteringFactor值(示例中为kFilteringFactor = 0.1f),直到满意为止.不幸的是,我似乎仍然得到很多噪音,所有这一切似乎都是让读数以微小的小数形式出现,这对我没有多大帮助,而且似乎只是让传感器不那么敏感.我的大脑的数学中心也因多年的疏忽而萎缩,所以我不完全理解这个过滤器是如何工作的.
有人可以详细解释如何从加速度计中获取有用的读数吗?一个简洁的教程将是一个令人难以置信的帮助,因为我没有找到一个非常好的教程(至少针对我的知识水平).我感到沮丧,因为我觉得所有这一切对我来说都应该更加明显.任何帮助或方向将不胜感激,当然,如果需要,我可以从我的代码中提供更多样本.
我希望我不是要求过多地用勺子喂食; 我不会问,除非我一直想把它弄清楚.看起来其他SO成员也有一些兴趣.
昨天,在关于iPad 2的新Garageband的演示中,Apple演示了一个有趣的功能:使用加速度计检测分接压力.(参见Garageband页面上的鼓部分.)
我想知道如果iPad平放在桌子上,那该怎么办呢.没有运动,没有可测量的加速度,没有?
据我了解,GPS的准确性有限.是否有可能为3D空间中的人获得更精确的位置?
我打算编写一个应用程序,用户可以在任何方向上移动手机,但只需要移动几英尺.是否有任何技术,可能使用加速度计和陀螺仪来实现这种精确度?
例如,用户将电话保持平坦(使得电话的底部与地板平行).屏幕上有一些东西,当人向前,向后和左右移动时,它不会随着屏幕移动.因此,对象看起来是不可移动的,并且只有通过将电话放在3D空间中的正确位置才能发现.
我不需要任何人编写一些代码,只要简单地了解一下,如果通过一些努力工作,这甚至是可能的.
谢谢!
德里克
我在两个不同的设备(Elocity A7和Archos 7 Home平板电脑)上测试加速度计输出,但传感器似乎给出了不同的结果.我将它编程为设置为横向模式,但x和y轴似乎是两个设备之间的对手.当垂直于地面并且Archos X轴返回0时,x轴返回10.Elocity平板电脑是android 2.2,Archos是2.1.有人能指出我正确的方向,如何从这两个设备之间的加速度计同步?
我正在开发一个Android应用程序,它可以计算设备在6个方向上的移动.我想我可以使用加速;
" x = at ^ 2 "但a不是常数.这就是问题所在.如何计算总运动?
accelerometer ×10
android ×6
gyroscope ×3
iphone ×3
ios ×2
sensor ×2
android-ndk ×1
calibration ×1
detection ×1
filter ×1
gps ×1
ios4 ×1
ipad ×1
ipod-touch ×1
java ×1
native ×1
noise ×1
numpy ×1
orientation ×1
python ×1
r ×1
uikit ×1