Акселерометр в относительное положение

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

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

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

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

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

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

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

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

Любые хорошие советы для проектирования фильтров, такие как частота среза для разделения силы тяжести и движения пользователя?

Любой код или советы для шагов интеграции? Любая причина для интеграции в систему координат cartesion, а не как векторный, так и наоборот?

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

Ответ 1

Как только я узнаю информацию, я буду собирать ее в этом ответе.

Оборудование

3GS использует ST LIS331DL 3-осевой & plusmn; 2g/& plusmn; 8g цифровой акселерометр.

iPhone 4 и iPad используют ST LIS331DLH 3-осный & plusmn; 2g/& plusmn; 4g/& plusmn; 8g цифровой акселерометр.

Они оба могут считываться с частотой 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 мкг /& radic; Гц для DLH.

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

"Типичное" значение полной шкалы для DL-датчика равно & plusmn; 2.3g, но ST гарантирует, что оно не менее & plusmn; 2g.

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

TBD:

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

API

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

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

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

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

TBD:

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

Ответ 2

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