Угол гироскопа далеко на iOS

Когда я запускаю диспетчер движения, держа телефон практически неподвижно в руке, я получаю ошибочные значения отношения. Чтобы получить значение поворота, я использую объект CMAttitude:

CMDeviceMotionHandler motionHandler = ^(CMDeviceMotion *motion, NSError *error) {
    [self calculateNewPosition:motion];
    _rotationMatrix = [self rotationToMat:[motion attitude].rotationMatrix];
};

[_motionManager startDeviceMotionUpdatesUsingReferenceFrame:CMAttitudeReferenceFrameXArbitraryZVertical toQueue:_motionQueue withHandler:motionHandler];

Теперь я знаю, что в измерениях с крошечными гироскопами есть шум, и вектор гравитации, вероятно, нуждается в калибровке, но это кажется слишком большим. Через 0,5-1 секунду значение оборотов падает с 0 до более чем 20°?! Два примера для крена, тангажа и рыскания:

-1.001736 22.637596 -0.197573

-0.095075 29.075712 -0.014112

Если бы это был дрейф положения, когда я использую двойное интегрирование, я бы понял, но вращение идет непосредственно от датчиков?

У вас есть идеи, почему это происходит?


person aledalgrande    schedule 03.07.2014    source источник


Ответы (1)


Я только что понял, увидев изображения в этом вопросе: Gyroscope на iPhone и немного протестировал тем более, что при запуске гироскопа некоторое время значения равны нулю, затем, согласно моей настроенной системе координат (вертикаль Z), значения подстраиваются под текущее положение телефона.

Поэтому, если я начал с телефона в руке с шагом 20°, значение шага будет равно 0 в течение некоторого небольшого промежутка времени, а затем переключится на 20°. Это означает, что мне нужно дождаться, пока матрица вращения станет отличной от нуля, чтобы начать отслеживать вращения.

person aledalgrande    schedule 03.07.2014