【问题标题】:Visualize motion/gesture from acceleration data从加速度数据中可视化运动/手势
【发布时间】:2014-08-17 19:18:45
【问题描述】:

我已经实现了一种手势检测算法,用户可以在其中定义自己的手势。手势由加速度计发送的加速度值定义。

现在我的问题是:是否可以将执行的手势可视化,以便用户识别他执行的手势?

我的第一个想法和尝试只是使用 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);
    }

我使用 0.01 的 deltaTime,因为我的加速度计每 10 毫秒发送一次加速度数据。 现在我想知道:我的计算有问题吗?它甚至可以这样工作吗?有没有图书馆可以做到这一点?还有其他建议吗?

【问题讨论】:

    标签: c++ opengl data-visualization gesture


    【解决方案1】:

    作为理论物理学和蒙特卡罗模拟人,我考虑过您观察到的差异。您写道,“真实”的手势曲线(3D)与计算曲线完全不同。您可能需要考虑手头问题的几个方面。首先,我们对空间中的“真实”手势曲线了解多少。我们当然确实想到了“一些”曲线,但这并不一定看起来很像用手执行的“真实”曲线。其次,我们对加速度计的质量、准确性、延迟或其他复杂性了解多少?第三点,我们对“测量的”加速度数据了解多少,当以 x-y 绘图形状绘制时,它们是否符合“一些”漂亮而平滑的曲线?如果该曲线看起来不是很平滑,则需要对加速度数据进行假设以执行线性或更好的样条拟合。之后,您可以简单地通过解析公式进行积分。 -- 当 UPS 包裹服务要求您进行电子签名时,您可能会想到,您的签名在那个垫子上是什么样子的?如果没有一些“智能”曲率平滑算法,您的加速系统可能会发生这种情况。希望我的评论能以某种方式对您有所帮助...问候,M.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-25
      • 1970-01-01
      • 2019-01-29
      相关资源
      最近更新 更多