繁体   English   中英

通过加速度数据可视化运动/手势

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM