2010-01-19 5 views
4

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

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

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

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

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

ответ

0

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

3

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

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

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

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

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

Местный магазин машин станет хорошим местом для начала: машины с ЧПУ легко способны выполнять то, что необходимо.

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

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

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

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

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

+0

Хотелось бы, чтобы я мог дать вам более одного взлета для такого всеобъемлющего ответа. –

0

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

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