Как использовать матрицу для поворота системы отсчета вектора относительно другого? - PullRequest
2 голосов
/ 24 сентября 2010

Реальный случай (помогает понять вопрос)

Я создаю устройство, которое может свободно вращаться вокруг своей оси (x, y, z) и оснащено:

  • акселерометр (A), который дает мне вектор, указывающий на центр Земли (Va)
  • 3D магнитометр (М), который дает мне направление магнитного поля Земли (Вм)

Два вектора используют одну и ту же систему отсчета (x, y, z), но мне интересно найти вектор, указывающий на север относительно поверхности Земли [представьте себе руку компас: я хочу найти, куда должна указывать стрелка].

В этом видео показан «шариковый компас», который работает почти так же, как и мое устройство, которое должно воспроизводиться электронным способом.

Кодовый вопрос

Я провел небольшое исследование, и мне кажется, что я должен использовать 3D матрицы вращения , выполнив следующие два шага:

  1. поверните систему отсчета Vm от R до R ' таким образом, чтобы y' была параллельна Va,
  2. "сгладить" вектор Vm , установив для его компонента y значение 0

К сожалению, я все еще не понимаю, как мне действовать в конкретных терминах (у меня нет предыдущего опыта работы с векторами и матрицами). Одна из вещей, которая меня смущает, это то, что большая часть материала, который я мог найти в Google, говорит с точки зрения углов, но данные, которые я получаю от обоих датчиков, имеют форму V (Vx, Vy, Vz) где Vz, Vy и Vz являются компонентами V вдоль системы отсчета.

Так что мой вопрос действительно сводится к: Какую матрицу я должен использовать для преобразования которой на шаге 1?

Заранее благодарим вас за ваше время и знания.

Ответы [ 2 ]

1 голос
/ 24 сентября 2010

Один простой ответ, который приходит на ум, - это использовать перекрестные продукты.

вы можете найти восток с V e = V a ⨉ V m и затем на север с V n = V a ⨉ V e

(на самом деле это может быть юг, не подумал о вручении)

0 голосов
/ 06 декабря 2010

Я не совсем уверен, что вы хотите сделать, но я предполагаю:

вы начинаете в некоторой контрольной точке с единичными векторами i = (1,0,0) j =(0,1,0) k = (0,0,1)

Я думаю, что вы заинтересованы только в том, чтобы сделать y 'параллельным' a ', которое вы получаете

, поэтомуa будет иметь некоторое значение (x, y, z), и вы захотите найти углы theta и phi, где theta дает угол a, смещенный относительно плоскости xz, а phi - смещение от плоскости xy, затем используйтематрицы вращения R_x (theta) и R_z (phi)

Извините, если это не слишком ясно, но я бы лучше объяснил с помощью одной или двух картинок

...