Мысль написать этот текст возникла после того как к нам пришел клиент, который хотел сделать брендированное мобильное приложение-рулетку. Мы не были уверены, что это возможно, и предложили изучить тему. Клиент заплатил за изучение. Важно помнить, что выводы имеют место при наличии достаточного количества различных измерителей расстояния в App Store и маркете Андроида.
Текст публикуется с разрешения клиента.
С миром мобильных устройств за всю его историю произошло два качественных преображения: сначала телефоны превратились в мультифункциональные устройства, а затем появился принципиально новый интерфейс, датчики (акселерометры, компас, и т.д.) и быстрый интернет.
Комбинации новых аппаратных возможностей и алгоритмов способны создать целый спектр killer applicatons, так что через несколько лет ни один житель города уже не сможет представить себе, как можно было жить с до-эппловскими интерфейсами без постоянного доступа в интернет. Примерно так же, как сейчас трудно представить себе жизнь без интернета.
В погоне за новыми идеями фантазия может завести слишком далеко — не все функции, кажущиеся на первый взгляд очевидными, могут быть реализованы. В этой и следующих статьях мы озвучим некоторые интересные идеи, которые могли бы стать основой нового killer app, и посмотрим, осуществимы ли они.
Идея первая — рулетки, линейки и дальномеры.
Многие из тех, кто задумывается над идеями для своего приложения, проходят через разочарование от невозможности использовать функции телефона для измерения коротких расстояний. Например, создать удобную и достаточно точную рулетку или измерять расстояние между двумя находящимися рядом телефонами, невозможно. Грустно, но, тем не менее, это правда.
В телефоне существует множество функций, которые можно потенциально использовать для измерения расстояний:
- GPS. Точность горизонтальных измерений зависит от массы внешних факторов, и в самых лучших случаях по порядку величины составляет несколько метров, а часто — несколько десятков, а то и сотен метров.
- Wi-Fi. Измерения можно проводить только при наличии рядом двух или более точек доступа Wi-Fi, а точность обычно находится на уровне нескольких десятков метров.
- 3G/EDGE — аналогично Wi-Fi, только рядом должны находиться базовые станции сотового оператора.
- Датчики-акселерометры. С помощью акселерометров можно измерять ускорение, с которым движется телефон по каждой из трех пространственных осей. Датчики используются для того, чтобы отследить короткие перемещения телефона: повороты, небольшие резкие смещения. Если телефон все время движется с ускорением, то рассчитать пройденное расстояние можно по простой формуле. Однако акселерометры бессильны, если телефон движется с постоянной скоростью. Более того, определение ускорения производится дискретно, поэтому пройденное расстояние будет результатом множества измерений, при этом накапливается существенная ошибка, в разы превышающая сам результат измерений.
- Bluetooth. Это самая интересная функция с точки зрения измерения расстояний между двумя телефонами. Измерить расстояние между двумя Bluetooth-устройствами можно было бы по мощности сигнала. Однако существующая спецификация Bluetooth-протокола, а также используемые в телефонах чипы, не позволяют измерять мощность сигнала так, чтобы это позволило провести хоть сколько-нибудь точные расчеты расстояния. Ошибка превышает результат измерений в разы. Однако, есть вероятность, что в будущих версиях протокола Bluetooth, мощность сигнала будет передаваться постоянно с достаточной точностью, и измерение расстояния хотя бы между двумя телефонами станет возможным.
- Камера. Довольно необычный способ измерить расстояние. Тем не менее, существуют приложения, позволяющие определить расстояние от телефона до предмета, предварительно откалибровав настройки по другим предметам, находящимся на известных расстояниях. Этот способ крайне ненадежный, т.к. основан на алгоритмах определения визуальных размеров предметов, и результат зависит от освещенности, цвета и многих других факторов.
- Микрофон. Если вам нужно измерить расстояние до комнатной стены, существует экзотический способ сделать это. Есть приложения, позволяющие определить расстояние по времени возврата отраженного звукового сигнала, однако, учитывая, что микрофон фиксирует не только звук, отраженный от нужной стены, но и от остальных, а также посторонние звуки, этот способ также ненадежен.
- Корпус телефона. На этом способе основаны все существующие приложения-рулетки. Смысл сводится к тому, чтобы измерить расстояние «в телефонах», примерно также как «в попугаях». Несмотря на абсурдность идеи, в некоторых случаях этим способом удается довольно точно измерить расстояние в несколько десятков сантиметров.
Вот, пожалуй, и все способы измерить расстояние между телефонами или от телефона до препятствия.
К сожалению, в обозримом будущем телефон вряд ли превратится в удобную рулетку (если только в него не станут встраивать лазерный дальномер), а вот определять расстояние между двумя телефонами, соединенными по Bluetooth в будущем — вполне реальная перспектива.
Оригинал публикации: http://itrackblog.livejournal.com/12361.html