iOS5: низкая частота обновления показаний CLHeading -› переход на CoreMotion проблематичен

С iOS5 частота обновления чтения необработанных данных Compass, CLHeading, резко снизилась. Это сделало мое приложение дополненной реальности непригодным для использования, потому что оно зависит от считывания необработанных данных компаса, близкого к реальному времени.

Поэтому сейчас пытаюсь перейти на CoreMotion. Это обеспечивает более часто обновляемые данные магнитометра:

cmManager = [[CMMotionManager alloc] init];    
[cmManager startMagnetometerUpdates];

Затем я могу получить доступ к данным magneticField в любое время во время игры:

CMMagneticField magneticField = cmManager.magnetometerData.magneticField;

У меня проблема в следующем: данные в CMMagneticField находятся в другом блоке, чем данные CLHeading x/y/z.

Я хотел бы преобразовать данные CMMagneticField x/y/z в те же единицы, что и CLHeading / CLHeadingComponentValue, чтобы иметь возможность использовать мой существующий код AR.

Вот несколько чтений:

7.3     /  17.64 /  -39.58          CLHeadingComponentValue X/Y/Z
-103.12 /  88.51 /  -20.05          CMMagneticField 

-10.81  /  -34.9 /  -18.6          CLHeadingComponentValue X/Y/Z
-121.00 /   33.29 /  3.1           CMMagneticField    

-20.8  /  -38.0 /   -4.0          CLHeadingComponentValue X/Y/Z
-132.9 /   32.2 /  14.4           CMMagneticField

person fukus    schedule 25.10.2011    source источник


Ответы (1)


Единственная ссылка в документации, связанная с этим, заключается в том, что сообщаемое значение CLHeadingComponentValue нормализовано в диапазоне от -128 до +128. Но мне кажется, что применяется какая-то другая калибровка.

person adig    schedule 07.02.2012