iPhone4 содержит гирокомпас MEMS, так что это самый прямой маршрут.
Как вы заметили, магнитометр имеет вялый отклик. Это можно уменьшить, используя предварительный алгоритм, который использует медлительность, чтобы дать обоснованное предположение о том, каково настоящее направление на самом деле.
Во-первых, вам необходимо определить фактические характеристики датчика. Для этого вам необходимо вращать его с определенной скоростью на каждой из нескольких скоростей вращения и записывать поведение компаса. Вращательная платформа должна иметь возможность прочитать мгновенное положение.
При более низких скоростях вы увидите разную степень фиксированного запаздывания. По мере увеличения скорости отставание будет расти до тех пор, пока оно не достигнет 180 градусов, и в этот момент компас внезапно перевернется. На более высоких скоростях все, что вы увидите, переворачивается, хотя может показаться, что он не переворачивается, когда повторы переворачиваются с одинаковым значением. На некоторых из этих более высоких скоростей компас может поворачиваться назад, напротив направления вращения.
Получение поворотного стола может быть затруднительным, и обеспечение его не влияет на локальное магнитное поле (превращение компаса в бесполезное) - задача. Идеальный стол будет сделан из алюминия, и если вам нужно использовать стальной стол (наиболее распространенный), вам нужно будет установить телефон на немагнитную платформу, чтобы как можно дальше от стали.
Местный магазин машин станет хорошим местом для начала: машины с ЧПУ легко способны выполнять то, что необходимо.
Как только вы получите данные об эффективности компаса, вам нужно будет построить модель наблюдаемых показаний против фактической ориентации и скорости вращения. Инвертируйте модель и примените ее к показаниям, чтобы получить представление о фактических показаниях.
Простая реализация алгоритма будет состоять в том, чтобы сохранить историю показаний и сохранить список различий между последовательными показаниями. Поскольку мы знаем, что есть отставание компаса, когда значение разности отличное от нуля, мы будем знать, что текущее значение имеет некоторую степень неточности из-за задержки.
Следующим шагом является создание списка «исправленных» показаний, в которых знаковое отставание от предыдущих фактических значений используется для создания обновленного значения, которое используется для создания обновленного значения, которое добавляется к последнему значению в «скорректированный» список и сохраняется как самое новое значение.
Когда кумулятивная коррекция (разница между последними значениями в фактическом и скорректированном списке превышает 360 градусов, это означает, что мы в основном не знаем, куда указывает компас. Надеемся, что эта точка не будет достигнута, поскольку большинство вращательных движений, как правило, должно быть довольно короткой.
Однако, поскольку ваша цель состоит только в том, чтобы считать вращения, вы будете выключены менее, чем полное вращение, пока накопленная ошибка не достигнет существенно более высокого значения. не уверен, что это за значение, так как оно зависит как от фактического запаса компаса, так и от фактической скорости вращения. Но если вы заботитесь только о небольшом числе вращений (5 или около того), вы должны иметь возможность получать полезные результаты.
Хотелось бы, чтобы я мог дать вам более одного взлета для такого всеобъемлющего ответа. –