Как мне учесть гравитацию с помощью акселерометра wiimote? - PullRequest
9 голосов
/ 10 ноября 2010

Для проекта моя команда и я пытались отследить wiimote в трехмерном пространстве, используя встроенный акселерометр и гироскоп WiiMotion Plus.

Нам удалось отследить вращение и положение с помощью ODE (найдено на http://www.alglib.net/,), но мы столкнулись с проблемой удаления гравитационного компонента из акселерометра.

Мы рассмотрели Гравитационные компоненты акселерометра , которые имели формулу (реализовано в C # / XNA)

    private Vector3 RemoveGravityFactor(Vector3 accel)
    {
        float g = -1f;
        float pitchAngle = (Rotation.Z);
        float rollAngle = (Rotation.Y);
        float yawAngle = (Rotation.X);

        float x = (float)(g * Math.Sin(pitchAngle));
        float y = (float)(-g * Math.Cos(pitchAngle) * Math.Sin(rollAngle));
        float z = (float)(-g * Math.Cos(pitchAngle) * Math.Cos(rollAngle));

        Vector3 offset = new Vector3(x, y, z);

        accel = accel - offset;
        return accel;
    }

Но это не работает вообще. Для справки: ускорение идет прямо от акселерометра, а вращение измеряется в радианах после прохождения через ОДУ.

Кроме того, у нас возникают проблемы с пониманием того, как работает эта формула. Из-за того, что наше отслеживание учитывает все измерения, почему Yaw не учитывается?

Заранее благодарим за любой совет или помощь, которые предлагаются.

РЕДАКТИРОВАТЬ:

После обсуждения этого вопроса с моими товарищами по команде и начальником, мы пришли к выводу, что эта формула действительно будет работать, если мы будем правильно использовать X, Y и Z. Мы подошли к другому пню, хотя.

Проблема, с которой мы столкнулись, заключается в том, что используемая нами библиотека Wiimote возвращает относительные значения вращения, основанные на движении гироскопа. Другими словами, если кнопки направлены вверх, вращение wiimote влево и вправо - это рыскание, а если кнопки направлены на вас, рыскание такое же, когда оно ДОЛЖНО быть вращением всего wiimote.

Мы обнаружили, что углы Эйлера могут быть нашим ответом, но мы не уверены, как правильно их использовать. Если есть какие-либо предложения по этой новой разработке или любые другие предложения, пожалуйста, дайте им.

Ответы [ 2 ]

2 голосов
/ 10 ноября 2010

Держу пари, что ваш акселерометр не был откалиброван в невесомости, поэтому устранение эффекта гравитации будет, по крайней мере, затруднительным.

1 голос
/ 11 ноября 2010

Сначала я бы предложил не использовать отдельные компоненты для хранения вращения (блокировка кардана), матрица будет работать лучше.откалибруйте, удерживая его неподвижным и измеряя (это будет 1 г вниз).затем для каждого поворота умножьте матрицу вращения на него.затем вы можете сказать, какой путь вверх, и вычесть матрицу 1g вниз из вектора, представляющего ускорение.Я знаю, что это не имеет большого смысла, но я немного тороплюсь, добавляю комментарии, если у вас есть вопросы.

...