Обнаружить вращение iPhone? - PullRequest
4 голосов
/ 19 января 2010

Я хочу, чтобы приложение могло определять количество вращений, когда пользователь поворачивает устройство iPhone. В настоящее время я использую Compass API для определения угла и пробую множество способов обнаружить вращение. Ниже приведен список решений, которые я пробовал: 1 / Создайте 2 угловые ловушки (фигура в полном раунде) в полном раунде, чтобы определить, прошел ли угол, который мы получаем от компаса, их или нет. 2 / Суммируйте все угловые расстояния между моментами обновления компаса (в функции updateHeading). Давайте попробуем разделить угол суммы на 360 => мы могли бы получить число спинов

Проблема в том, что когда телефон вращается слишком быстро, компас не может догнать скорость телефона, и он возвращает нам угол с последним временем (не непрерывно, как при реальном вращении).

Мы также пытаемся использовать акселерометр для обнаружения вращения. Однако этот способ не может работать при повороте телефона на плоской плоскости.

Если у вас есть решение или опыт по этому вопросу, пожалуйста, помогите мне.

Большое спасибо.

Ответы [ 3 ]

3 голосов
/ 04 сентября 2010

iPhone4 содержит гирокомпас MEMS, так что это самый прямой маршрут.

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

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

На более медленных скоростях вы увидите различную степень фиксированной задержки. По мере увеличения скорости запаздывание будет увеличиваться, пока не достигнет 180 градусов, после чего компас внезапно перевернется. На более высоких скоростях все, что вы увидите, это переворачивание, хотя может показаться, что оно не переворачивается, когда перевороты повторяются с тем же значением. На некоторых из этих более высоких скоростей может показаться, что компас вращается назад, противоположно направлению вращения.

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

Хорошим местом для начала будет местный механический цех: станки с ЧПУ легко могут сделать то, что нужно.

Как только вы получите данные о производительности компаса, вам нужно будет построить модель наблюдаемых показаний в зависимости от фактической ориентации и частоты вращения. Инвертируйте модель и примените ее к показаниям, чтобы получить предположение о фактических значениях.

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

Следующим шагом является создание списка «исправленных» показаний, где запаздывание известных фактических значений используется для создания обновленного значения, которое используется для создания обновленного значения, которое добавляется к последнему значению в «исправленный» список, и сохраняется как новейшее значение.

Когда кумулятивная коррекция (разница между последними значениями в фактическом и исправленном списке превышает 360 градусов, это означает, что мы в основном не знаем, куда указывает компас. Надеемся, что эта точка не будет достигнута, так как большинство вращательное движение обычно должно быть достаточно коротким.

Однако, поскольку ваша цель состоит только в подсчете оборотов, вы будете выключены менее чем на полный оборот, пока накопленная ошибка не достигнет существенно более высокого значения. Я не уверен, каким будет это значение, так как оно зависит как от фактической задержки компаса, так и от фактической скорости вращения. Но если вы заботитесь только о небольшом числе поворотов (5 или около того), вы сможете получить полезные результаты.

0 голосов
/ 06 октября 2010

Если вы используете iPhone 4, проблема была решена, и вы можете использовать Core Motion для получения данных вращения.

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

0 голосов
/ 21 января 2010

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

...