Основное движение с яв постоянно меняется

StackOverflow https://stackoverflow.com//questions/11665510

  •  11-12-2019
  •  | 
  •  

Вопрос

У меня есть основной менеджер по движениям в моем приложении iOS:

motionManager = [[CMMotionManager alloc] init];
motionManager.deviceMotionUpdateInterval = 1.0 / 60.0;
if ([motionManager isDeviceMotionAvailable]) {
    [motionManager startDeviceMotionUpdates];
}
.

и в процессе обновления (я использую cocos3d, но не имеет значения), я получил это:

-(void) updateBeforeTransform:(CC3NodeUpdatingVisitor *)visitor
{
    if (motionManager.deviceMotionActive)
    {
        CMDeviceMotion *deviceMotion = motionManager.deviceMotion;
        CMAttitude *attitude = deviceMotion.attitude;

        NSLog(@"%f, %f, %f", attitude.yaw, attitude.pitch, attitude.roll);

    }
}
.

Я положил устройство на стол и начните смотреть значения, высоты высоты и ролики, а рысь постоянно меняется!Он меняется на 10 градусов через пару минут, и он абсолютно недопустимо в моем приложении.В чем причина этого изменения и как я могу избежать этого?Я начал думать, что это происходит из-за вращения Земли, но скорость слишком много :)

Спасибо заранее!

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

Решение

Позвольте мне попробовать выстрел в темноте. С помощью данных IOS 5 магнитометра являются частью алгоритма Fusion датчика сервера основного датчика. Для многих приложений, таких как игры, нет необходимости или лучше, является опасным из-за повышенного потребления энергии и возможна необходимость калибровки компаса, принудительного пользователя сделать это 8 как движение.

Поэтому я предполагаю, что данные компаса рассматриваются в пределах сенсорного слияния, только если явно заявлено с использованием CMMotionManager's StartDevicemotionUpdateSUsingRefectionSience вместо StartDevicemotionUpdates . Попробуйте CMAttitudereferenceFramexmagnethnethralthzvertical и проверьте, уменьшается ли эффект дрейфующего эффекта.

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

Что вы испытываете, это что-то называемое дрейфом, и вы не можете многое делать об этом.

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

Если устройство происходит, имеет датчик, который может измерять мгновенные ориентации, такие как магнитометр, то алгоритм слияния датчика может исправить дрейфу, сравнивая / комбинируя входные данные датчика, поэтому вариант эталонной рамки Apple.

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

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