Акселерометр в относительном положении - PullRequest
11 голосов
/ 30 октября 2010

Перед тем, как заново изобрести колесо, я хотел посмотреть, сможет ли кто-нибудь поделиться кодом или советами для следующего:

Чтобы получить относительную позицию iPhone, нужно

  • Шумовой фильтр отклика акселерометра
  • Преобразуйте его в вектор
  • Фильтр нижних частот вектора, чтобы найти гравитацию
  • Вычтите гравитациюиз необработанного чтения, чтобы найти пользователь вызвал ускорение
  • Фильтр пользователь вызвал ускорение, чтобы получить частоты, которые вас интересуют (вероятно, полосовой пропуск в зависимости от приложения)
  • Интегрировать, чтобы найти относительную скорость
  • Интегрируйся, чтобы найти положение

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

Несколько вопросов, на которые я не нашел ответа:

Какова частотная характеристика акселерометра iPhone?Какие аппаратные фильтры существуют между акселерометром и аналого-цифровым преобразователем?

Какова самая высокая скорость считывания, которую делегат акселерометра может вызвать без дублирования значений считывания?

Различия в приведенных выше для различныхтелефоны?

Какие-нибудь полезные советы по проектированию фильтров, такие как частота среза для разделения гравитации и движения пользователя?

Какой-нибудь код или советы для шагов интеграции?Есть ли какая-либо причина для интеграции в систему координат карт, а не как вектор, или наоборот?

Какие-либо другие опыты, советы или информацию, которые следует знать до реализации этого?

Ответы [ 2 ]

9 голосов
/ 30 октября 2010

По мере нахождения информации я буду собирать ее в этом ответе.

Аппаратное обеспечение

В 3GS используется ST LIS331DL 3-осевая ± 2g /Цифровой акселерометр ± 8 г.

В iPhone 4 и iPad используется ST LIS331DLH 3-осевая ± 2 г / ± 4 г / ± 8 г цифрового акселерометра.

Они оба способнысчитывание на частоте 100 Гц и 400 Гц, хотя на iPhone 3G (под iOS 4.1) делегат акселерометра вызывается не чаще, чем 100 Гц, даже если setUpdateInterval установлен для более быстрого обновления.Я не знаю, разрешает ли API более быстрые обновления на iPhone 4, а в документации Apple просто говорится, что максимум определяется аппаратным обеспечением iPhone.(TBD)

Аналого-цифровой преобразователь находится на том же кремнии, что и датчик MEM, что хорошо для помехоустойчивости.

Версия DL имеет 8 бит (3GS), а версия DLHсоставляет 12 бит (iPhone 4).Максимальное смещение (смещение) в версии DL вдвое больше, чем в версии DLH (0,04 г против 0,02 г).

Таблица данных для DLH содержит данные о плотности шума ускорения, но об этом значении не сообщаетсятаблица данных DL.Плотность шума достаточно низкая - 218 µ g / √Hz для DLH.

Оба датчика обеспечивают частоту дискретизации 100 Гц или 400 Гц без заданной частоты.Датчик сбрасывает значения, если iPhone не считывает выходной регистр с установленной частотой дискретизации.

«Типичное» значение полной шкалы для датчика DL составляет ± 2,3 г, но ST гарантирует, что оно по крайней мере± 2g.

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

TBD:

  • Включен ли аппаратный фильтр и чтохарактеристики фильтрации?
  • Насколько шумно питание акселерометра?(У кого-нибудь есть схема iPhone?)
  • Акселерометр использует внутренние часы для обеспечения синхронизации частоты дискретизации и аналого-цифрового преобразования.Таблица данных не указывает на точность, точность или температурную чувствительность этих часов.Для точного анализа времени iPhone должен использовать прерывание, чтобы определить, когда делается образец, и записать время в прерывании.(сделано это или нет неизвестно, но это единственный способ получить точную информацию о синхронизации)

API

Запрос частоты дискретизации ниже 100 Гц приводит к получению выбранных выборок, в то время какоткажитесь от всего остального.Если в программном обеспечении запрашивается частота дискретизации, не равная 100 Гц, временные интервалы между реальными показаниями датчиков не могут быть четными.Apple не гарантирует даже частоту дискретизации, даже если используется коэффициент 100.

Похоже, что API не обеспечивает программную фильтрацию.

API действительно масштабирует необработанное значение акселерометра в двойное представлениеGs.Используемый коэффициент масштабирования неизвестен, и отличается ли он для каждого телефона (т. Е. Откалиброван) и проводится ли калибровка на постоянной основе для учета смещения датчика, неизвестно.Похоже, онлайн-отчеты предполагают, что iPhone иногда самопроизвольно калибруется, когда лежит на поверхности.

Результаты простого тестирования показывают, что API устанавливает для датчика значение ± 2g для 3GS, что обычноотлично подходит для ручных перемещений.

TBD:

  • Калибрует ли Apple каждый блок, чтобы UIAccelerometer отображал 1G как 1G?Документация Apple специально предупреждает против использования устройства для чувствительных измерительных приложений.
  • Представляет ли NSTimeInterval, о котором сообщают, когда значения были прочитаны из акселерометра, или когда прерывание акселерометра указало, что новые значения были готовы?
0 голосов
/ 15 января 2011

Я просто имею дело с той же проблемой. Единственное отличие в вашем подходе состоит в том, что я не хочу полагаться на фильтр низких частот, чтобы найти гравитацию. (TBH я не вижу, как я могу надежно определить вектор силы тяжести из показаний акселерометра) Пробую сейчас с гироскопами.

...