2009-07-26 9 views
16

У меня есть акселерометр xyz и магнитометр. Теперь я хочу определить ориентацию устройства, используя оба. Проблема, которую я вижу, заключается в том, что в зависимости от ориентации устройства мне нужно будет использовать датчики в другом порядке.Как определить абсолютную ориентацию

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

Но если я поместил устройство горизонтально (т.е. поверните его на 90º, обращенное к потолку), то любое изменение вектора вверх (теперь горизонтально) не будет замечено, так как акселерометр не обнаружит никаких изменений. Теперь это можно обнаружить с помощью магнитометра.

Итак, вопрос в том, как определить, когда использовать тот или иной. Достаточно ли этого с обоими датчиками или мне нужно что-то еще?

Благодаря

ответ

1

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

+0

Спасибо. Похоже, я не совсем понял этот вопрос. Я хорошо знаю, что мне нужно использовать как ускоритель, так и магнитометр во всех случаях, проблема в том, что в некоторых случаях этого, похоже, недостаточно. –

+0

Позвольте мне снова использовать аналогичный пример: предположим, что у меня есть мобильный телефон по вертикали, с экраном, обращенным ко мне, «вверх», указывающим на потолок.Всякий раз, когда я наклоняюсь, акселерометр позволяет мне получить «вверх» векторную информацию. Проблема в том, что если я наклоняю устройство и поместил его горизонтально (экран теперь обращен к потолку, а «вверх» вектор указывает на противоположное, где я есть), тогда вектор вверх не обновляется, если я поворачиваю телефон горизонтально на столе. Это то, что отчетливо обнаруживается магнитометром. Итак, вопрос в том, когда нужно знать, где использовать acc или mag для каждого случая? –

1

Если я правильно вас понимаю, вам понадобится что-то, чтобы обнаружить подачу (наклонение) и ориентацию в соответствии с основными точками (север, восток, юг и запад).

Шаг можно считывать с акселерометра.

Ориентация по основным точкам может быть считана с компаса.

Сочетание вывода этих двух датчиков с правильной математикой в ​​вашем программном обеспечении, скорее всего, даст вам абсолютную ориентацию.

Я думаю, что это возможно.

Удачи.

17

Ключом является использование поперечного произведения двух векторов, гравитации и магнитометра. Перекрестное произведение дает новый вектор, перпендикулярный им обоим. Это означает, что он горизонтальный (перпендикулярно вниз) и на 90 градусов от севера. Теперь у вас есть три ортогональных вектора, которые определяют ориентацию. Это немного уродливо, потому что они не все перпендикулярны, но это легко исправить. Если вы затем пересечете этот новый вектор обратно с вектором силы тяжести, который дает третий вектор, перпендикулярный вектору силы тяжести и вектору плоскости магнита. Теперь у вас есть три перпендикулярных вектора, которые определяют вашу трехмерную координатную систему координат. Оригинальный вектор акселерометра (гравитация) определяет Z (вверх/вниз), а два вектора перекрестных продуктов определяют компоненты ориентации восток/запад и север/юг.

+0

Я думал о том же, скрещивая акселерометр (Z) и магнитометр (магнитный X), чтобы получить Y, затем пересекая Z и Y, чтобы получить локальный X. Интересно, почему никто не делает этого; Вместо этого все, похоже, полагаются на компенсацию наклона в плоскости X/Y. – sunside

+1

, потому что это сложно, как черт, и вы, ребята, говорите об этом и не говорите нам, почему может быть одной из причин. показать нам код. – SpaceDog

0

В случае, если вам по-прежнему нужна абсолютная ориентация, вы можете проверить эту разводную доску от Adafruit: https://www.adafruit.com/products/2472. Самое приятное в этом заключается в том, что у него есть процессор ARM Cortex-M0, который выполняет все вычисления для вас.