Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Определить положение устройства в пространстве
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Математика и Физика
barabek
Имеется кит с установленным на нем трехосевым магниторезистивным датчиком HMC5843 и также трехосевым акселерометром. Задача - определить положение устройства в пространстве. С одним датчикомзадача не решаема, хотя бы потому что невозможно определить вращение вокруг вектора ускорения (направления магнитного поля). На первый взгляд простейшая задача меня повергла в полное уныние sm.gif. Всю голову сломал. Задачу решу, если определю три угла вращения (в матрице поворота, например, http://ru.wikipedia.org/wiki/Матрица_поворота). Только матрица поворота это прямая задача, а у меня обратная. Мои данные с датчиков можно представить как два вектора в трехмерном пространстве. Взяв за основу какое-то начальное положение нужно определить поворот плоскости (а не вектрора!), построенной на этих векторах, относительно начала координат. Но как это сделать? Определить сперва вращение одного вектора, а затем определить вращение второго относительно первого? И можно ли решить более сложную задачу - кроме положения определить направление и величину линейного ускорения устройства?
@Ark
Цитата
На первый взгляд простейшая задача меня повергла в полное уныние...

Кто Вам сказал, что это просто? sm.gif
Вот посмотрите обсуждение в чем-то похожей задачи:
http://electronix.ru/forum/index.php?s=&am...st&p=350416
faa
Цитата(barabek @ Oct 9 2011, 09:10) *
Имеется кит с установленным на нем трехосевым магниторезистивным датчиком HMC5843 и также трехосевым акселерометром. Задача - определить положение устройства в пространстве.

Вот тут посмотрите - определяют, датчики такие же. Схемы, исходники есть.
UPD: Вот прямая ссылка на их инерциалку.
iiv
Пусть у вас система покоится (не ускоряется), положим, Вам надо получить обратную матрицу поворотов, запишем ее как H=(h_1, h_2, h_3), H \in \R^{3 \times 3}, h_i \in \R^3. Дополнительно потребуем, чтобы оси магнетометра и акселометра полностью совпадали. Положим, что Ваша система такова, что ось X направлена на север, Y - на восток, а Z - вверх. Тогда h_3=-m, h_1=a, где m - результат данных с магнетометра, a - результат данных с акселометра. Помня, что H - унитарная, и зная, что датчики безбожно врут, Вам надо будет перенормировать векторы h_3 и h_1, а, также возможно доортогонализовать их друг к другу, если есть ошибка измерения в датчиках (а она точно есть!!!) относительно положения осей магнетометра и акселометра. После того, как вы получите ортонормированные векторы h_3 и h_1, вычисление h_2 можно провести в виде векторного произведения h_3 и h_1. Сама же матрица поворота может быть вычислена из обратной H ее транспонированием.

К сожалению, все это красиво в теории, но на практике, Вы столкнетесь с большими ошибками измерений, перенастройкой систем координат между датчиками... Для устойчивого решения этой задачи я обычно использую несколько датчиков, по-разному развернутых друг относительно друга, но там уже совсем другая математика sad.gif
barabek
Спасибо всем, буду разбираться.
MrAlex
Цитата(barabek @ Oct 10 2011, 06:22) *
Спасибо всем, буду разбираться.


Несколько полезных документов:
http://www.st.com/internet/com/TECHNICAL_R.../CD00269797.pdf
http://cache.freescale.com/files/sensors/d...T=Documentation
http://cache.freescale.com/files/sensors/d...T=Documentation
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.