Преобразовать данные акселерометра в пространство объекта - PullRequest
0 голосов
/ 09 октября 2018

Для контекста: я разрабатываю встроенную систему со встроенным акселерометром. Это устройство подключено к смартфону и передает данные (включая значения акселерометра).Теперь устройство может быть присоединено в любой ориентации к транспортному средству / велосипеду / ...

Проблема: Когда я получаю данные акселерометра от устройства, я хотел бы преобразовать их в «пространство автомобиля»,То, что я выяснил до сих пор, необходимо:

  • Вектор, направленный вниз, в «пространстве устройства» (в основном гравитация)
  • Вектор вперед, в «пространстве устройства» (указывая в прямом направлении транспортного средства)

В моем приложении вычислены оба этих вектора, однако теперь я немного застрял в части математики / реализации.

То, что я мог найти решение, это Изменение основы , однако я не смог

  • Найти подтверждение того, что этот является способомсделать это
  • Как это сделать в коде / псевдокоде

Я не хочу включать толстую математическую библиотеку для такой "маленькой" задачи и скорее поймуматематика за этим сама.


Текущее решение в моей голове, которое основано на моих давних воспоминаниях из университета-математики и для которых у меня нет доказательств: (псевдокод)

val nfv = normalize(forwardVector)
val ndv = normalize(downwardVector)

val fxd = cross(nfv, ndv)
val rotationMatrix = (
    m11: fxd.x, m12: fxd.y, m13: fxd.z, 
    m21: ndv.x, m22: ndv.y, m23: ndv.z, 
    m31: nfv.x, m32: nfv.y, m33: nfv.z
)

// Then for each "incoming" vector
val transformedVector = rawVector * rotationMatrix

Вопрос: Это правильный способ сделать это?

...