我正在开发一个可以帮助残障人士使用计算机的应用程序。该应用程序从Arduino + MPU6050(位于头部上方)读取值,并将其转换为位置。串口的值类似于" x,y",此值的比例从-16000到+16000。
我在computemethod中处理这个值(我在这篇文章的底部报告)。一切正常,但我有一个问题。如果使用此软件/硬件的人员有某种类型的肌肉垃圾或抽搐,则该软件过于精确并会移动鼠标。我想消除这种慢性运动......我怎么能这样做?
这是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));
}
非常感谢
答案 0 :(得分:1)
我建议您在固件中使用运动伪像的数据处理。像帕金森症这样的疾病在1-20赫兹的频率下会发生震颤。您可以使用编程滤波器来适应确定的频率。
计算频率使用傅立叶变换加速度计和陀螺仪原始数据。
所以,一般来说你应该:
您可以尝试在winform app中的X,Y坐标上执行相同的操作。您将使用什么方式取决于您在每种特定情况下遇到的人工制品。您甚至可能需要不同的过滤器设置,以便为每位患者提供有意义的疾病或自学算法。
P.S。如果使用“math”(或类似)标记标记问题,您可能会收到更多答案。因为它不在C#或Arduino字段中。
更新
在编程之前,我建议你做一些研究工作。首先,你需要从一个有特定疾病的男人身上传感器上收集数据。您需要至少30-60秒的包含刻度线运动伪影的数据。将数据写入3列:
以ms为单位的时间| x位置|位置
然后转到labchart reader download page,下载并安装它。打开带有数据的文件并在X和Y上执行“频谱”命令/视图。这将为您提供有关存在的频率的信息(包括伪像和“良好”移动)。我认为运动伪影频率具有更大的幅度。记住那些频率。
然后做“数字滤波器” - > “带阻”命令。并切断上一步的频率。我希望在这个过程之后你会看到没有人工制品的好图表。
然后你可以做编程。实现FFT和数字滤波并不是很难。对于FFT,您可以使用Aforge.Math库。