从加速数据可视化运动/手势

Visualize motion/gesture from acceleration data

本文关键字:手势 运动 可视化 加速 数据      更新时间:2023-10-16

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

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

我的第一个想法和尝试只是使用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毫秒发送一次加速度数据。现在我在想:我的计算有什么问题吗?它甚至可以这样工作吗?有图书馆可以做这个吗?还有其他建议吗?

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