Получение угловой скорости по данным кватернионов (BNO055)

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

Я нашел функцию, которая делает это в хранилище Adafruit для датчика. Однако я не уверен, что переменная времени Дельта должна быть равна по отношению к частоте выборки. Может ли кто-нибудь посоветовать?

Вот код функции:

  Vector<3> toAngularVelocity(double dt) const {
    Vector<3> ret;
    Quaternion one(1.0, 0.0, 0.0, 0.0);
    Quaternion delta = one - *this;
    Quaternion r = (delta / dt);
    r = r * 2;
    r = r * one;

    ret.x() = r.x();
    ret.y() = r.y();
    ret.z() = r.z();
    return ret;
  }

А связь

, 👍2

Обсуждение

Всем спасибо за потраченное время. Я действительно ценю это., @Zhelyazko Grudov


1 ответ


Лучший ответ:

1

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

Функция, которую вы показываете, предполагает, что датчик начал работать в опорной ориентации (кватернион один), затем вращался с постоянной угловой скоростью до тех пор, пока не достиг текущей ориентации (кватернион *это), и это вращение происходило в течение времени dt.

Тогда dt-это время, необходимое для перехода от опорной ориентации к ориентации, описываемой кватернионом *this. Вероятно, вам следует ознакомиться со спецификацией датчика для получения более подробной информации о том, как обеспечивается ориентация.

,

Еще раз привет, Эдгар, и спасибо за твой ответ. Я проверю и уточню вопрос., @Zhelyazko Grudov