Визуализация движения / жеста из данных ускорения

Я реализовал алгоритм обнаружения жестов, где пользователь может определять свои собственные жесты. Жесты определяются значениями ускорения, посылаемыми акселерометром.

Теперь мой вопрос: Можно ли визуализировать выполненный жест, чтобы пользователь мог определить, какой жест он выполнил?

Моей первой идеей и попыткой было просто использовать 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 миллисекунд.
Теперь мне интересно: что-то не так с моими расчетами? Может ли это даже работать таким образом? Есть ли библиотека, которая может это сделать? Любые другие предложения?

0

Решение

как человек, занимающийся теоретической физикой и симуляцией Монте-Карло, я думал о расхождениях, которые вы наблюдали. Вы писали, что «реальная» кривая жестов (3D) совсем не похожа на кривую вычислений. Возможно, вы захотите рассмотреть несколько аспектов проблемы под рукой. Во-первых, что мы знаем о «реальной» кривой жестов в пространстве. Мы, конечно, имеем в виду «некоторую» кривую, но это не должно сильно походить на «реальную» кривую, выполняемую рукой. Во-вторых, что мы знаем о качестве акселерометра, о его точности, о его задержке или других сложностях? Третий момент: что мы знаем о «измеренных» данных ускорения, соответствуют ли они «некоторой» красивой и плавной кривой, когда нарисованы в форме графика x-y? Если эта кривая на самом деле не очень гладко выглядит, то необходимо выполнить предположения о данных ускорения для выполнения линейного, или, лучше, сплайн-подгонки. После этого вы можете просто интегрировать с помощью аналитических формул. — Вы можете подумать с точки зрения электронной подписи, когда вас об этом спросит служба доставки посылок UPS, как выглядит ваша подпись на этом планшете? Это то, что, вероятно, происходит с вашей системой ускорения, без какого-либо «интеллектуального» алгоритма сглаживания кривизны. Надеюсь, мой комментарий может быть полезен так или иначе … С уважением, М.

0

Другие решения