Пользователь
0,0
рейтинг
9 июня 2014 в 14:37

Разработка → Одно успешное внедрение iBeacon: 200 маячков для РИФ+КИБ 2014

По изначальной задумке, статья должна была называться «Легкий способ бросить спать», но кого сейчас этим удивишь? Итак, под катом вас ожидает небольшой рассказ о том, как наша команда внедряла indoor навигацию по iBeacon на территории РИФ+КИБ 2014, а также обо всех факапах и прочих приключениях, встреченных нами на этом пути.

Предисловие

В двух словах стоит рассказать о технологии. iBeacon — это небольшой bluetooth маячок, который может передавать окружающим устройствам информацию о своих идентификаторах (UUID, major, minor). Человек с установленным приложением подходит к маячку, смартфон получает данные о нем и отсылает к нам на сервер. Мы находим у себя в базе этот маячок и отправляем пользователю координаты на местности. Естественно, если пользователь находится в зоне видимости двух или трех маячков, мы можем определить его местоположение точнее.

Все вышеописанное очень удобно внутри помещений — там, где GPS не может обеспечить достаточно высокую точность для навигации.
Само собой, такая технология открывает массу потрясающих возможностей, и наша команда с огромным энтузиазмом взялась за разработку платформы и мобильного SDK для работы с маячками.

Часть 1. Подготовка

Наигравшись вдоволь с несколькими пробными образцами маячков, подготовив первые версии сервиса настройки и iOS SDK, мы почувствовали в себе силы сделать что-то большее. Был конец февраля, отличным вариантом для первого крупного запуска выглядела конференция РИФ+КИБ: до нее оставалось два месяца, а это ого-го, что угодно можно сделать за такой-то срок, верно?

Нужно было успеть:
  • понять, сколько маячков нужно, закупить и получить их;
  • найти или подготовить какой-то инструмент, который позволит пакетно настроить всю кучку биконов (выдать им правильные идентификаторы, указать мощность и частоту);
  • разработать iOS приложение для участников конференции;
  • существенно допилить веб-платформу;
  • и сущая мелочь — приехать на место и установить правильные маячки в правильные точки.


Пробные экземпляры маячков, бывшие в нашем распоряжении, были далеко не так хороши, как те, о которых так много сейчас пишут в сети: они били на расстояние 5-10 метров, а совсем не на 50, при этом работали все немного по-разному и не очень стабильно. Но их невысокая стоимость и наш оптимизм стали решающими факторами — для конференции было решено заказывать их же.

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

Проблемы начались тогда, когда обнаружилось, что архитектурный план, нарисованная карта мероприятия и вид на это же место в google maps похожи друг на друга лишь отдельными местами. Контуры, пропорции и размеры зданий были очевидно разными.
Получить более точную карту не представлялось возможным.

Конечно, лучшим решением было бы съездить туда примерно за месяц до конференции и самостоятельно прикинуть масштаб, вручную поправить карту, обдумать оптимальные точки для размещения маячков. Но в тот момент мы решили подсчитать необходимое количество маячков приблизительно и накинуть сколько-то сверху «про запас».

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

Подготовка самого мобильного приложения и веб-интерфейса для управления навигацией на РИФ продвигались идеально вплоть до последнего момента.

Часть 2. РИФ+КИБ

После нашего приезда в Москву за 2 дня до мероприятия, события развивались стремительно, каждые несколько часов открывая перед нами новые непредвиденные обстоятельства.

Обстоятельство 1

Оказалось, что собирать маячки из деталей сложно, а когда их 200 штук — еще сложнее. Детали корпуса плохо стыкуются друг с другом, печатные платы по форме не совсем соответствуют крышке, в которую их нужно вставлять.



В общем, пару часов мы были похожи на неопытных сотрудников подпольной китайской фабрики. Но дело было сделано: батарейки вставлены, печатные платы надежно вбиты в корпуса, передние и задние крышки соединены настолько, насколько это было возможно. Победа.

Обстоятельство 2

Вопреки нашим надеждам, выяснилось, что программа для пакетной настройки кучи маячков стабильно работает только в том случае, если размер кучи <= 10 шт. Но сдаваться мы не собирались.

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

Помня о том, что дальность действия маячков не так велика, мы всего лишь отнесли сумку с ними в соседнюю комнату и … были потрясены, обнаружив, что нынешняя партия работала значительно лучше той, что была у нас месяц назад. Сигнал оставался превосходным в любой точке квартиры.

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

Пробегав всю ночь с кучками маячков в ванную и обратно, к 5 утра мы закончили настройку.



Обстоятельство 3, кульминационное

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

Установив около 100 штук, мы решили проверить навигацию. Пока человек с сумкой маячков отбегал на несколько десятков метров от корпуса (казана и ванны для экранирования у нас под рукой не оказалось), другой должен был с телефоном пройтись по корпусу и проследить за работой навигации в приложении.

Результат был ужасающим. Приложение показывало, что пользователь все время топчется где-то в северной части здания. Это соответствовало ошибке в 5-10 метров и это было недопустимо.

Еще пара экспериментов — тот же результат.

Такую панику испытывает студент, вытащивший на важном экзамене незнакомый билет. Так чувствуют себя перед лицом практически неминуемого провала. Мы расположились в каком-то пустом помещении и стали думать. Один из разработчиков (grohman) наворачивал круги по залу, время от времени посматривая в приложение, пока не заметил простую вещь, которая нам почему-то сразу не пришла в голову. Координаты местоположения вычислялись правильно, но сама карта была сдвинута южнее реальных координат, что давало такое искажение в отображении локации.

Старым добрым методом «на глазок» мы подобрали поправку для всех передаваемых в приложение координат. Все встало на свои места.

Обстоятельство 4

Вскоре нас сменила другая часть команды (itruf, suprum). Отправив нас отдыхать, они собирались расставить оставшиеся маячки и окончательно все затестить. Спустя полтора часа они позвонили с плохой новостью: локация снова не работает, причем на этот раз искажения появляются и исчезают внезапно, ошибка составляет до нескольких десятков метров. Находясь на ногах уже почти двое суток, мы ошалело смотрели на монитор, наблюдая фантастические метания «булавки» локации по карте.

Разбирая тонны логов, удалось обнаружить удивительную вещь: в списке видимых устройству маячков время от времени попадался маячок #68, которого в том месте видно быть не должно. Вскоре закралось верное подозрение, и мы попросили ребят пойти в место, где должен быть установлен тот маячок и посмотреть, что с ним. Естественно, его на месте не оказалось.

Кто-то отклеил #68 от стены и ходил с ним в кармане, время от времени создавая для системы своеобразный «эффект присутствия».



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

Было внедрено следующее решение: у каждого маячка есть «соседи» — другие маячки, находящиеся на расстоянии <=N. Когда пользователь передает нам данные о видимых маячках и уровне сигнала (rssi), мы выбираем маячки с наибольшими rssi и проверяем, являются ли остальные маячки их соседями. Если мы обнаруживаем маячок, который соседом тут быть явно не должен, мы исключаем его из вычисления локации. Локация снова работала хорошо.

Итог

Потом было еще несколько срочных багфиксов, три дня конференции, масса интересных людей и событий. Несмотря на весь накал страстей в последние дни подготовки, мы смогли запустить indoor навигацию с помощью BLE маячков, продемонстрировали (да что уж там, убедились сами), что она работает. Для себя мы смогли сделать несколько выводов:

  • тестирование «в миниатюре» никогда не заменит тестирования в боевых условиях. Проверить навигацию на нескольких маячках даже в просторном помещении — недостаточно для того, чтобы быть уверенными, что навигация заработает с двумя сотнями маячков на 1000 кв.м
  • экономия сил и времени на планировании — очень плохой вариант экономии. Если бы мы уделили больше внимания вопросам точности карты с самого начала, нам не пришлось бы подгонять координаты вручную в последний вечер.
  • крепить маячки на двусторонний скотч — недостаточно надежно
  • несколько бессонных ночей — не такая большая плата за возможность реализовать первый в стране настолько масштабный проект навигации по BLE маячкам. Мы получили интересный и необычный опыт и надеемся, что скоро расскажем о новых проектах внедрения indoor навигации и не только.


В комментариях будем рады ответить на вопросы о деталях реализации.
Liny_li @Liny_li
карма
36,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (49)

  • –1
    А как будете мониторить маячки?
    • 0
      Мониторить — в каком именно смысле? По большому счету, мы их уже мониторим:
      — получаем от пользователей информацию о видимых им маячках (можем заметить, если какой-то из маячков появился в странном месте или наоборот, пропал)
      — время от времени API запрашивает у приложения информацию об уровне заряда батареи маячков
      Это покрывает практически все потребности в отслеживании маячков. По крайней мере, пока.
      • 0
        А во время когда нет пользователей? наличие и заряд как планируете контролировать?
        • +1
          Если мы не получаем новости от маячка больше N дней, это повод задуматься: он или установлен в каком-то очень неудачном месте, или его там больше нет. В любом случае, нужно идти и проверять, что там.
          Наверное, можно было бы немного проапгрейдить маячки, чтобы они сами нам что-то отправляли, но это было бы существенно дороже.

      • 0
        — получаем от пользователей информацию о видимых им маячках


        То есть по сути вы отслеживаете перемещения пользователей?
        • +1
          Имеем такую возможность, при условии, что пользователь
          — установит приложение
          — включит bluetooth
          — будет ходить там, где стоят маячки с определенными UUID (это обычно очень ограниченная территория, например, один торговый центр).
          Естественно, все данные деперсонализированны. Это, однако, все равно дает большие возможности для получения статистики: можно узнать, какими маршрутами ходят посетители, где они задерживаются и т.п.
  • +1
    А в итоге нашли, кто украл номер 68?)
    • +6
      нет, но батарейка еще не должна была сесть, мы не теряем надежды случайно встретить негодяя )
  • 0
    А не поделитесь чуть более подробной информацией — примерный диапазон цен на маячки, был ли брак (неработающие маячки, работающие но не отвечающие), как долго ожидается работа от батарейки, насколько маячки умные (можно ли их «будить» сигналом из режима сна, например)?

    Тема очень интересная, поскольку эти маячки отличная альтернатива для RFID меток в вопросах навигации и разнообразной выездной инвентаризации, поскольку не требует специального оборудования (ноутбуки и смартфоны почти всегда снабжены блютусом).
    • +2
      Диапазон цен довольно большой. Начинаются цены от 1$ за штуку (без батарейки). И потолок цены — около 80$, но это уже не маячок, а гораздо более продвинутая штуковина, там бывают всякие дополнительные датчики (например, освещенности и температуры) и др. В нашем случае все эти излишества были не нужны, поэтому обошлись одним из самых доступных вариантов.
      С батарейкой тоже по-разному. Большинство производителей утверждают, что маячок работает от одной батарейки до двух лет. Но, во-первых, это зависит от батарейки, а во вторых, от настроек мощности маячка. У нас пока не было возможности подождать два года, но месяца два уже маячки работают на одной батарейке и на максимальной мощности. Будем следить за развитием событий)
      Наши маячки никогда не спят, поэтому необходимости будить их не было. По поводу других моделей сказать не могу. В принципе, возможно с мобильного приложения убрать мощность на минимум или выставить на максимум. Можно там же поменять кое-какие другие настройки. Ну и в остальном они не очень умные.
      • +2
        Про брак забыла написать.
        На партию чуть больше 200 маячков было 3 бракованных. Два не работали, а один не поддавался настройке. Ну и была масса маячков с немного погнутым отделением под батарейку. Их было сложновато собирать, но на их работе это не сказывалось
      • 0
        А где найти по 1$ за шт.? Дешевле 15$ найти не могу.
  • +5
    Есть готовая практическая статья про техническую часть реализации работы с iBeacon'ами в черновиках. Стоит выкладывать? Нужно ли это кому-нибудь?

    P.S. сами недавно работали с этой технологией
    • +3
      Было бы очень интересно, выкладывайте!
    • +3
      Выкладывайте, конечно, это интересно!
    • +1
      Выкладывайте!
    • 0
      Конечно выкладывайте!!!
    • 0
      да интересно почитать :) как раз сделали проект с биконами — завтра идет в лайв на территории Ирландии :) Тоже были грабли, тоже их решали :) Вообще интересная технология
      • 0
        Рассказывайте о своих граблях тоже! )
    • +1
      habrahabr.ru/post/226037/ — Выложил! :)
  • 0
    //Промахнулся
  • +1
    А что делать когда батарейки всё же сядут? Не менять же 200 штук снова… Может есть какие-то другие модели маячков, с блоками питания например?
    • +1
      Да, бывают модели, питающиеся от розетки, но это сколько же нужно розеток! Если батарейка будет садиться не чаще, чем раз в полгода-год, то нет проблемы пройтись и заменить эти батарейки.
      Еще есть модели, которые питаются от двух пальчиковых батареек и живут подольше, чем те, которые мы использовали (они питаются от «таблеток» cr2032). Но они довольно громоздкие. Так что сложный вопрос, какое из зол тут меньшее.
  • 0
    Это только для iOS?
    • 0
      На тот момент (дело было в конце апреля), мы работали только с iOS, но сейчас у нас уже практически готова первая версия SDK под Android, возможности те же, что и с iOS. До виндофона доберемся тоже, но потом.
    • 0
      Есть, например, такое решение под Android. Причём, что на сайте относится к платной версии, распространяется под Апачем на гитхабе :)
  • +2
    Спасибо за статью.

    Маячки можно изолировать в микроволновой печи, т.к в закрытом состоянии она представляет собой Клетку Фарадея.

    Мы с m0rg0t сделали открытый проект iBeacon Maps — карту глобального расположения биконов с API для нанесения и получения информации, приложением локатором для Android. Для наглядности работы, большая часть данных сейчас импортирована с сайта конкурентов wikibeakon.org)
    • 0
      Игорь, вы бы заопенсорсили проект — тогда был бы действительно открытый :) Кстати — может вам с Байрамом перетереть и заодно выложить ссылки на их sdk?
  • 0
    Алексей, спасибо за комментарий! «Открытый» — не зависимый от производителя маяков или проприетарного SDK. Открыть код проблем нет, вопрос в том, а есть ли желающие участвовать в разработке кроме нас. Если хотя бы один человек найдется — откроем.
  • 0
    А не бывает ли пассивных маячков, которые активируются сигналом приемника? Чтобы избавиться от элементов питания на самих метках.
    • +1
      RFID
  • 0
    На сколько точно получается определить местоположение девайса?
    Если я правильно понимаю, сама технология не предоставляет определение местоположения. Только отдаленность от конкретного маячка. Расположение в пространстве сами делали или использовали какое-то существующее решение?
    • 0
      Точность зависит от количества установленных маячков (если быть точнее, то чем ближе девайс к маячку, тем точнее можно определить расстояние), поэтому там, где девайс видит 3 маячка на расстоянии по 1-2 метра, точность около 30 см. Но расставлять такое количество маячков довольно дорого, поэтому маячки ставили не так плотно и получили точность около метра, когда избавились от проблем, описанных в посте.
      Определение местоположения делали сами, по rssi от маячков.
      Есть еще много подводных камней в определении локации, это будет темой следующего поста, более технического, чем этот.
      • 0
        В догонку :)
        Какую площадь вы покрыли? Как часто ставили маячки?
        • 0
          Больше 1000м², маячки ставили не очень равномерно (где-то просто не было удобного места для маячка, где-то были перегородки и приходилось ставить больше). В целом, между маячками было от 2 до 7 метров. На улице до 10-12 м где-то. Точнее не скажу, сначала мы планировали по маячку на 5-7 метров, но уже на месте пришлось немного корректировать планы.
          • 0
            Видимо просто так я от вас не отстану :)
            Как вы определяете, что нужно мониторить маячки? Определяете местоположение (примерное) и начинаете искать маячки или есть привязка к вайфай точкам?
            Что придумали дабы не жрать сильно батарейку?
            Спасибо за ваши ответы :)
            • +1
              С удовольствием отвечаю :)
              К WiFi пока не привязываемся, хотя не исключаем это в дальнейшем. GPS координаты частично учитываем, но это дает очень примерную картину, если человек в помещении. Что касается мониторинга маячков, если bluetooth включен, iOS7 сама постоянно их ищет, даже если об этом никто не просит. Естественно, если в зоне видимости ничего нет, то и на сервер ничего не отправляется. Самостоятельно управлять включением/выключением BT нет возможности. Практика показывает, что сейчас очень у многих людей BT включен постоянно: беспроводные наушники, фитнес-браслеты, прочие гаджеты подключены к смартфону, и поиск маячков тут особо ничего в эту картину не добавляет.
              Ну и кроме того, маячки используют BLE, который гораздо меньше сажает батарейку, чем обычный bluetooth, это отчасти решает проблему.
              • 0
                Мы сейчас тоже тестируем данную технологию, поэтому поток вопросов к вам не прекращается :)
                1. Беконы какой фирмы вы использовали?
                2. Стабильно ли они выдают сигнал, по которому определяется расстояние?
                3. Расположение вычисляли по наилучшему сигналу трех точек? Или более сложная формула?
                Мы используем беконы компании April Brother. Некоторые наши беконы выдают нестабильный сигнал с большой погрешностью.
                • 0
                  Сигнал нестабильный и с большой погрешностью, поэтому только триангуляции недостаточно. Хотя в основе, конечно, лежит именно такая технология. Дальше уже производится всякая интересная магия, чтобы избавиться от проблем, связанных с нестабильным сигналом и другими артефактами. Думаю, в обозримом будущем напишу отдельную статью об этих проблемах и их решениях.
  • 0
    Мне не дает покоя вопрос — а зачем?
    Следить за передвижениями людей с смартфонами? А зачем за ними следить?
    Или просто так? Просто хотелось попробовать iBeacon?
    • 0
      Человек может открыть у себя приложение и посмотреть, где он находится, какие выставки проходят рядом с ним и т.д. Если бы это было не внутри помещений, то можно было бы это же реализовать с GPS, но для помещений Bluetooth маячки дадут бОльшую точность.

      Что касается отслеживания перемещений пользователей с нашей стороны, то в этом проекте мы особо и не ставили перед собой такой цели. Если переносить эту технологию на работу с магазинами, например, то там это может быть очень полезно для аналитики поведения посетителей (чем люди интересуются, куда идут в первую очередь и т.п.).
      • 0
        Плакаты с надписями не имеют проблем с совместимостью, не используют батарейки и не сажают аккумулятор телефона.
        Да, есть небольшая проблема с обновлением информации, но и она решаема.
        • +2
          Ну и вместо приложения с картами google можно носить с собой справочник «дороги России».
          Не думаю, что тут можно всерьез о чем-то спорить. Кому удобно — ставит приложение и пользуется. Кому не очень удобно — использует что угодно другое, тут нет никакого принуждения.
  • 0
    Скажите, по каким параметрам выбирали маячки, были ли четко они определены? Или просто смотрели что есть на рынке и оценивали по соотношению цена/дальность?
    Прошло несколько месяцев — используете ли сейчас все или часть маячков? Что говорит статистика (отказность, разряд батарей и пр....)?
    На какие типы конструкций вы крепили маячки на конференции? Бетонные стены, гипрок, металл и пр… ощущалась ли разница в сигнале и вычисляемой точности?
    Спасибо за ваш опыт!
    • 0
      При покупке первой партии действовали почти наугад, сейчас уже лучше разбираемся в вопросе, конечно.
      Маячки используем до сих пор и в ноябре сделаем еще один довольно крупный проект, о котором надеюсь рассказать здесь. С батарейками достаточной статистики не накопили: некоторые разряжались за пару недель, некоторые продержались несколько месяцев.
      Крепили на все подряд. Разница между материалами существенная, причем очень сложно вывести какие-то стандартные показатели для разных перегородок: играет роль и толщина, и материал и черт знает что еще. В целом, любая перегородка существенно снижает силу сигнала. Но сложнее работать не с самими перегородками, а с людьми: если маячок загорожен кем-то, сигнал ослабевает, что влияет на точность позиционирования. А так как люди постоянно ходят, заранее просчитать подобные ситуации практически невозможно.
      • 0
        Идеальным было бы класть маячки за фальш-потолок Армстронга. Панели не экранируют, предметы не загораживают, маячки спрятаны и легко кладутся/достаются. Правда, не везде такие потолки. Наверняка, на выставке были другие.

        image
        • 0
          Интересная идея, но есть свои сложности.
          Уже не помню, какие там были потолки, честно говоря. Часто в экспоцентрах и вообще больших залах они высоковаты для такой установки. Там, где это возможно, мы старались клеить их на уровне чуть выше человеческого роста (например, по верхнему краю выставочных стендов). Где-то наклеили близко к потолку, и этот маячок стал виден девайсам на этаж выше. Не такая уж большая проблема, но пришлось учесть этажи в подсчетах локации.
  • 0
    Главный вопрос, по-моему, остался открытым. Какая в итоге получилась точность определения местоположения?
    • 0
      Тогда точность была 2-3 метра, сейчас уже все намного лучше.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.