Необходимо очень быстро прочитать датчики Android

Вопрос: –

  1. Я разрабатываю приложение, для которого требуется новое значение ускорения каждые 5 миллисекунд.

Мой подход: –

  1. Я создал удаленный сервис, который только считывает данные ускорения от SensorManager.
  2. Я также установил скорость чтения на «DELAY FASTEST» при инициализации SensorManager.
  3. Затем я использую IPC для связи с моим основным приложением, чтобы получить эти данные.

Проблема: –

  1. Если я ставлю журнал внутри события onSensorChange (), я получаю новые данные датчика каждые 20 мс. Но мне нужны данные каждые 5 мс.

Вопрос?

  1. Есть ли лучший способ быстрее читать данные senor.

  2. Есть ли способ, которым я могу опросить данные senor, а не ждать, пока обработчик события вызовет событие?

Пожалуйста, помогите мне найти лучшее решение для чтения данных за 5 мс или опросить данные ускорения.

Насколько я понимаю, акселерометр очень шумный и не подходит для быстрых операций. См. Разговор GoogleTech о слиянии датчиков по адресу http://www.youtube.com/watch?v=C7JQ7Rpwn2k для получения более убедительного объяснения и того, что вы можете с ним поделать. Краткое пояснение: используйте гироскоп для высокоскоростных событий и ускоритель для коррекции дрейфа.

Для людей, ссылающихся на это сообщение сегодня , в то время как я думаю, что @robinr имеет хорошую точку зрения и является очень верным, это не ответ, однако stackoverflow не позволит мне прокомментировать его напрямую.

Для ответов на первый вопрос ссылается Нативная активность . И. Android не гарантирует скорость передачи данных, он только гарантирует, что вы получите минимум (или максимум, если вы запрашиваете слишком много).

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

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

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

glhf

Что касается скорости Android SensorManager, я был бы более склонен подозревать скорость ввода / вывода файлов Android, которая генерирует ваш журнал. Вы можете попробовать тест своего кода считывания датчика, не записывая в журнал. Что-то вроде регистрации текущего времени в миллисекундах, затем выполняется 1,000,000 считываний датчиков, а затем регистрирует текущее время снова. Вам все равно придется использовать версию C для получения данных, но, по крайней мере, вы точно узнаете, где находится узкое место.

Я вижу несколько проблем. Во-первых, вы, скорее всего, собираетесь повредить всю оставшуюся часть системы, если попытаетесь быстро опросить данные датчиков. Если все, что вы делаете, это опросные датчики, которые могут быть в порядке, но если вы хотите любое взаимодействие с пользователем, я не уверен, что это сработает. Кроме того, почему вам нужны данные, которые быстро? Если вы взаимодействуете с людьми, то нет никакого способа заметить отставание даже в 100 мс.

Вы решили свою проблему? У меня есть аналогичный проект, чтобы получить образец, по крайней мере, каждые 10 мс (около 100 Гц). Но ничего не меняется в образцах, которые я получил, даже когда я установил setEventRate = 10 milisec.

Поэтому я думаю, что есть какое-либо ограничение по оборудованию, так как я прочитал техническое описание BMA220 (мое аппаратное обеспечение) только для 62,5 Гц для под-режима ориентации.