Вопрос

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

С использованием CMMotionManager и это CMDeviceMotion объект (motionManager.deviceMotion), Я получаю CMAttitude объект. Поправьте меня, если я ошибаюсь (пожалуйста), но вот что я выводил из CMAttitude объекты yaw Собственность (мне не нужно pitch ни roll Для моих целей):

  • yaw варьируется от 0 к PI Когда телефон указывает вниз (как указано deviceMotion.gravity.z) и качается против часовой стрелки и 0 к -PI Когда качалось по часовой стрелке
  • Когда устройство указывает вверх, yaw варьируется от -PI к 0 а также PI к 0, соответственно
  • и из данных компаса (я использую locationManager.heading.magneticHeading), Я вижу, что компас дает значения от 0 к 360, со значением увеличения ценности при качании по часовой стрелке

В порядке, поэтому, используя всю эту информацию вместе, я могу получить значение, которое я звоню horizontal что, независимо от того, указывает ли устройство вверх или вниз, даст значения из 0 к 360 и увеличить, когда устройство качается по часовой стрелке (хотя у меня все еще есть проблемы, когда deviceManager.gravity.z вокруг 0 - то yaw Значение увидит на этом gravity.z стоимость).

Мне кажется, что я мог бы «синхронизировать» horizontal а также magneticHeading значения, используя рассчитанный horizontal значение, которое отображает magneticHeading, и «синхронизировать» horizontal ценность magneticHeading Когда я чувствую, что компас «поймал».

Так что мои вопросы:

  • Я на правильном пути с этим?
  • Я использую данные гироскопа из CMDeviceMotion Правильно и предположения, которые я перечислил выше правильно?
  • Почему может yaw утомительно, когда gravity.z вокруг 0?

Спасибо большое. Я с нетерпением жду, чтобы услышать ваши ответы!

Это было полезно?

Решение

Просто пытаюсь ответить ... поправьте меня, если я не прав ..

1. Да, вы находитесь на правильном пути

2. Освета в CM уже «изолирована» от пользовательского гравитации (гравитация, вызванная ускорением пользователя), вот почему есть два гравитации, «гравитация» и «UserAcceleration» его на документацию Apple CM // Примечание: не совсем изолированные //

3. Если у вас есть гравитация 0, это означает, что соответствующая ось перпендикулярна гравитацией. Gravity.z - это экран iPhone, вот почему он -9.82M / S2, если вы надеваете на стойку с помощью экрана в вертикальном положении, актуально его трудно получить 0 или максимальное значение гравитации из-за шума датчика (нормально, все датчик имеет Шум особенно дешевый датчик).

Что я делаю в своих приложениях, я переключу свой эталонную ось на другую ось (в вашем случае может быть x или y) для определенных ограничений, как стратегия зависит от цели, или какая сторона ваша ссылка.

Другое, что Gyro быстро, но не стабилен, вам нужно повторно откалибровать значение на несколько интервалов. В моем случае каждые 5 секунд. У меня экспериментирую с гироскопом для расчета угла между двумя плоскостью, я стараюсь по-прежнему на 90 градусов правителя, и она даст ошибку примерно на 0,5 градусов каждую секунду попытку и продолжать увеличиваться, но это моя, может быть, у других есть лучший способ избежать ошибка.

ниже мои шаги »

  1. В этом
  2. Читать гравитацию XYZ -> XG YG ZG
  3. Проверьте, если XG <0,25, если true Try yg, то ZG // Примечание 1 = 1G = 9,82 м / с ^ 2
  4. Читайте компас и гиро
  5. Настройте и откалибруйте гироскоп, используя компас и калалируют на основе какой оси, которую я использую в пункте 3.
  6. Если 5 секунд - проход, то перекалибровать, прочитайте компас
  7. Если разница с чтением гироскопа составляет> 5 градусов пропустить рекалибгартирование гироскопа.
  8. Если разница с чтением гиросков составляет <5 градусов, откалибруйте гироскоп, используя значение компаса

ПРИМЕЧАНИЕ. Для номера 7: необходимо проверить, влияет ли телефон с магнитным полем или вблизи огромной стали такой или высоковольтной электрической линии или в шумной и тяжелой оборудовании на заводе завода.

Вот все ... Надеюсь, это может помочь вам ... и извините за мой английский ..

Другие советы

Вот пример приложения для iPhone, где компас получают компенсацию гироскопом. Код и проект можно увидеть здесь:http://www.sundh.com/blog/2011/09/stabalize-compass-of-iphone-with-gyroscope/

Направление вектора оси яу не определено, когда в нулевой гравитации (или свободном падении или достаточно близко).

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

Ответ на вопрос 1 - да, вопрос 2 Вы находитесь на правильном пути, но вы можете использовать имя переменной, который не «горизонтальный», вопрос 3 отвечает HotPAW2, а также ярус в чоппере или вертолете в ближайшей нулевой высоте будет предупрежден Пилот с тревоги. Существует временное отставание, потому что часть программного обеспечения является локальной, в то время как есть другие факторы, которые могут замедлить его, включая доступ к датчику для обнаружения магнитных волн, положения устройства и направления устройства, подготавливая графический вывод для дисплея компаса, вычисления и вывода. Данные из гироскозоля и датчиков через относительно медленный интерфейс, используя портативное устройство общего назначения, не настраиваемые, предназначенные для его задачи.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top