我正在开发一个应用程序,可以帮助残疾人使用计算机。应用程序从Arduino+MPU6050 (位于头部上方)读取值,并将其转换为位置。来自串行端口的值类似于"x,y",并且这个值的比例从-16000到+16000。
我在计算方法中处理这个值(我在本文末尾报告)。一切都很好,但我有问题。如果使用此软件/硬件的人有某种类型的肌肉垃圾邮件或抽搐,该软件太精确,并移动鼠标。我想消除这个慢性movement...how,我能这样做吗?
这是computePosition的代码。
public void computePosition()
{
data = connection.readSeriaLine();
words = data.Split(',');
yaw = words[0];
pitch = words[1];
Int32.TryParse(pitch, out posiY);
Int32.TryParse(yaw, out posiX);
posiX = posiX / headSensitivity;
posiX = posiX - globalPosiX;
posiY = posiY / headSensitivity;
posiY = posiY - globalPosiY;
int signX = Math.Sign(posiX);
int signY = Math.Sign(posiY);
int positionX = Cursor.Position.X;
int positionY = Cursor.Position.Y;
Cursor.Position = new Point(positionX + (signX * movementSensitivity), positionY + (signY * movementSensitivity));
} 非常感谢
发布于 2016-04-22 19:04:44
我建议您在固件中使用移动手工艺品的数据处理。疾病,如帕金森病,在1-20赫兹频率有震颤.您可以使用程序滤波器,并根据确定的频率进行调整。
频率计算采用傅里叶变换对加速度计和陀螺原始数据进行处理。
因此,一般来说,你应该:
在winform应用程序中,您可以尝试在X,Y坐标上做同样的操作。你将以何种方式使用取决于你在每一特定案件中所遇到的艺术品。你甚至可能需要不同的过滤器的设置,为各种疾病,或自学习算法为每个病人。
如果用“数学”(或类似的)标签标记这个问题,你可能会得到更多的答案。因为它不在C#或Arduino字段中。
更新。
在进行编程之前,我建议您做一些研究工作。首先,你需要从一个患有某种疾病的人身上佩戴的传感器上收集数据。你需要至少30-60秒的数据,包含蜱,运动,手工艺品。将数据写入3列:
时间在ms \x位置_y位置
然后转到Lab图表阅读器下载页面,下载并安装它。用数据打开文件,并在X和Y上做“光谱”命令/查看。这将给你提供关于存在频率的信息(包括手工艺品和“好的”动作)。我认为运动伪像频率有较大的振幅。记住那些频率。
然后执行“数字滤波器”->“波段停止”命令。切断前一步的频率。我希望经过这一过程,你会看到好的图表,没有人工制品。
然后你就可以编程了。实现FFT和数字滤波并不难。对于快速傅立叶变换,您可以使用Aforge.Math库。
https://stackoverflow.com/questions/36798952
复制相似问题