Когда я запускаю диспетчер движения, держа телефон практически неподвижно в руке, я получаю ошибочные значения отношения. Чтобы получить значение поворота, я использую объект 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
Если бы это был дрейф положения, когда я использую двойное интегрирование, я бы понял, но вращение идет непосредственно от датчиков?
У вас есть идеи, почему это происходит?