Делегат didRangeBeaconsInRegion продолжает вызывать iBeacon iPhone sdk

я использую это руководство. iBeacons код в устройстве iPad4 в качестве маяка и iphone5 в качестве приемника. Я заметил две вещи с SDK

1) Несмотря на то, что я нахожусь в том же положении, метод делегата (didRaneBeaconsInRegion) часто вызывается с разными расстояниями. В основном он не становится стабильным, даже если пользователь находится в том же положении.

2) Когда я перемещаюсь с устройством, расстояние между маяком и приемником часто показывает неверные значения. Мне нужно знать, могу ли я полагаться на расстояние или полностью на близость?

Я буду очень признателен за любую помощь.


person Muhammad Saqib    schedule 02.10.2013    source источник


Ответы (3)


Похоже, вы говорите о нестабильности в области "точность". Несмотря на свое название, это оценка расстояния между iBeacon и устройством в метрах.

Как вы видели, в этом чтении много шума. Это связано с тем, что он основан на измеренном уровне сигнала Bluetooth (rssi), который по своей природе нестабилен. Как говорится в ответе Тимо. Справочник по классам Apple для CLBeacon не рекомендует полагаться на это поле как на абсолютное измерение расстояния.

Поле «близость» не говорит вам ничего, чего не говорит поле точности. Он просто помещает значение точности в одну из четырех областей (непосредственно, близко, далеко, неизвестно), поэтому оно не меняется так сильно. Но иногда вы все еще видите, как он меняется между двумя соседними значениями близости.

person davidgyoung    schedule 03.10.2013

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

точность: Указывает погрешность в одну сигму по горизонтали в метрах. Используйте это свойство, чтобы различать маяки с одинаковым значением близости. Не используйте его для определения точного местоположения маяка. Значения точности могут колебаться из-за радиопомех.

person Timo    schedule 02.10.2013
comment
Пожалуйста, добавьте ссылку на то, откуда вы взяли цитату. - person allprog; 02.10.2013

Чтобы ответить на ваши вопросы:

1) Дальность действия маяка основана исключительно на значениях RSSI, наблюдаемых от маяка. Расстояние, видимое атрибутом точности, является воспринимаемым расстоянием, а не фактическим расстоянием. Это во многом зависит от силы радиовещания. Самый простой способ поддерживать стабильный диапазон — скользящее среднее/скользящее среднее (http://en.wikipedia.org/wiki/Moving_average) значений RSSI при каждом вызове didRangeBeaconsInRegion.
Другой хороший способ сделать это описан в процессе калибровки из примера Apple Airlocate:

// Measured power is an average of the mid-80th percentile of RSSI samples.
                        NSUInteger outlierPadding = allBeacons.count * 0.1f;                    
                        [allBeacons sortUsingDescriptors:[NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"rssi" ascending:YES]]];
                        NSArray *sample = [allBeacons subarrayWithRange:NSMakeRange(outlierPadding, allBeacons.count - (outlierPadding * 2))];
                        measuredPower = [[sample valueForKeyPath:@"@avg.rssi"] integerValue];

2) Когда я перемещаюсь с устройством, расстояние между маяком и приемником часто показывает неверные значения. Мне нужно знать, могу ли я полагаться на расстояние или полностью на близость? Опять же, вы не можете полагаться ни на что из этого. Точность измеряется расстоянием, а близость определяется атрибутом измеряемой мощности, который представляет собой не что иное, как среднее значение RSSI с расстояния 1 м.

person Community    schedule 03.10.2013