Подтвердить что ты не робот

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

Выпуск: -

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

Мой подход: -

  • Я создал удаленную службу который только считывает ускорение данные от SensorManager.
  • Я также установил скорость чтения "DELAY FASTEST" при инициализации SensorManager.
  • Затем я использую IPC для связи основное приложение для получения этих чтение.

Проблема: -

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

Вопрос?

  • Есть ли лучший способ для чтения сеньор быстрее.

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

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

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

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

glhf

Ответ 3

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

Ответ 4

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

Ответ 5

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

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