[英]Visualize motion/gesture from acceleration data
我已经实现了一种手势检测算法,用户可以在其中定义自己的手势。 手势由从加速度计发送的加速度值定义。
现在我的问题是: 是否可以可视化所执行的手势,以便用户可以识别他所执行的手势?
我的第一个想法和尝试就是仅使用Verlet Velocity Integration(如Verlet Velocity Integration)(如此处的描述: http : //lolengine.net/blog/2011/12/14/understanding-motion-in-games )来计算相应的位置并将其用于在OpenGL中形成线带。 渲染有效,但结果完全与执行的手势看起来不一样。
这是我的代码:
float deltaTime = 0.01;
PosData null;
null.x = 0.0f;
null.y = 0.0f;
null.z = 0.0f;
this->vertices.push_back(null);
float velX = 0.0f;
float velY = 0.0f;
float velZ = 0.0f;
for (int i = 0; i < accData.size(); i++) {
float oldVelX = velX;
float oldVelY = velY;
float oldVelZ = velZ;
velX = velX + accData[i].x * deltaTime;
velY = velY + accData[i].y * deltaTime;
velZ = velZ + accData[i].z * deltaTime;
PosData newPos;
newPos.x = vertices[i].x + (oldVelX + velX) * 0.5 * deltaTime;
newPos.y = vertices[i].y + (oldVelY + velY) * 0.5 * deltaTime;
newPos.z = vertices[i].z + (oldVelZ + velZ) * 0.5 * deltaTime;
this->vertices.push_back(newPos);
}
我使用的deltaTime
为0.01,因为我的加速度计每10毫秒发送一次加速度数据。 现在我想知道:我的计算是否有问题? 它甚至可以这样工作吗? 有图书馆可以做到这一点吗? 还有其他建议吗?
作为理论物理学和蒙特卡罗模拟的人,我考虑过您观察到的差异。 您写道,“真实”手势曲线(3D)与计算出的曲线完全不同。 您可能需要考虑当前问题的几个方面。 首先,我们对空间中的“真实”手势曲线了解多少。 我们当然确实要记住“一些”曲线,但是这看起来不必像一个人的手执行的“真实”曲线。 其次,我们对加速度计的质量,准确性,延迟或其他复杂性了解多少? 第三点,我们对“测得的”加速度数据了解多少,以xy-plot形状绘制时,它们是否适合“一些”优美而平滑的曲线? 如果该曲线看起来不是很平滑,则需要对加速度数据进行假设,以执行线性或更佳的样条拟合。 之后,您可以简单地通过分析公式进行集成。 -当UPS包裹服务要求您进行电子签名时,您可能会想到您在该键盘上的签名是什么样的? 如果没有某些“智能”曲率平滑算法,这可能就是您的加速系统发生的情况。 希望我的评论可以以某种方式有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.