2012-03-26 3 views
0

Я экспериментировал с CMDeviceMotion, и особенно с startDeviceMotionUpdatesUsingReferenceFrame. Значения магнитного поля в этом не кажутся мне верными.Свойство MagneticField CMDeviceMotion некорректно?

Например, если я делаю:

CMDeviceMotion *manager = [[CMDeviceMotion alloc] init]; 
manager.deviceMotionUpdateInterval = 0.1; 
[manager startDeviceMotionUpdatesUsingReferenceFrame:CMAttitudeReferenceFrameXArbitraryCorrectedZVertical toQueue:queue withHandler:^(CMDeviceMotion *motion, NSError *error) { 
    CMMagneticField fld = motion.magneticField.field; 
    NSLog(@"%5.1f %5.1f %5.1f", fld.x, fld.y, fld.z); 
    [self handleDeviceMotion:manager.deviceMotion]; 
}];  

это показывает вектор магнитного поля с размером около 50, но почти совпадает с действием силы тяжести. То есть, когда устройство лежит на столе, x и y близки к нулю, а z близко к -50, независимо от того, как я поворачиваю устройство.

50 будет правильным по размеру для магнитного поля Земли (согласно Wikipedia должно быть между 25 и 65 микро Тесла), но направление вектора кажется неправильным. Мне было интересно ли:

  • Это что-то особенное в моем месте только (Стокгольм, Швеция), или
  • Свойства магнитного поля показывает оставшееся магнитное поле без поля Земли, или
  • Это ошибка

У вас есть похожие впечатления от свойства magnetField?

+0

По крайней мере, для части вашего вопроса, [docs] (http://developer.apple.com/library/ios/DOCUMENTATION/CoreMotion/Reference/CMDeviceMotion_Class/Reference/Reference.html#//apple_ref/occ/ instp/CMDeviceMotion/magnetField) - ваш друг: «... дает вам полное магнитное поле в окрестности устройства без смещения устройства ... эти значения отражают магнитное поле Земли и окружающие поля, минус смещение устройства». – rickster

+0

Правда, но реальное поведение, похоже, не соответствует документам ... – fishinear

+1

Ваш вопрос заставлял меня поиграть с магнитометром себе ... Я пробовал этот код (не используя опорный кадр из вашего ответа, так как я 'm интересуется относительным направлением поля устройства), но все, что я вижу, - <0,0,0>. Мне что-то не хватает в вашей отрывке? – rickster

ответ

2

ОК, тайна решена.

Я использовал систему отсчета CMAttitudeReferenceFrameXTrueNorthZVertical, которая дает похожие результаты ... XArbirtraryCorrectedZVertical, который я использовал раньше. Затем я вычислил, как вектор магнитного поля позиционируется относительно силы тяжести, повернув его обратно к эталонному кадру с использованием данного отношения.

Оказывается, магнитный фильтр довольно устойчиво указывает на 5 градусов к востоку от настоящего севера, но с углом около 73 градусов в землю. И это точно согласно ожиданиям для моего местоположения в Швеции, согласно this map.

+0

Да. Они не учат вас в школе :-) Большая часть магнитного поля Земли указывает прямо на землю - по крайней мере, там, где я живу (в Британии). – Benjohn

Смежные вопросы