DOU Проектор: «Дороги Украины» — сервис мониторинга дорог
В рубрике DOU Проектор все желающие могут презентовать свой продукт (как стартап, так и ламповый pet-проект). Если вам есть о чем рассказать — приглашаем поучаствовать. Если нет — возможно, серия вдохновит на создание собственного made in Ukraine продукта. Вопросы и заявки на участие присылайте на valentina@dou.ua .
Идея
Друзья, всем привет. Меня зовут Степан Танасийчук, я основатель и СЕО компании Stfalcon.com. Хочу рассказать о любимом детище нашей студии — «Дорогах Украины» — социальном стартапе, ориентированном на автомобилистов.
Около двух лет назад я решил реализовать такой сервис, чтобы как-то изменить ситуацию на дорогах Украины. Подвигла меня на это поездка за границу. Находясь в Германии, я не мог не заметить качество местных дорог. Хотя на дорогах и можно было видеть заплаты, однако впечатляющим было именно качество отремонтированных участков. Вернувшись домой, я сразу почувствовал разницу, сравнивая увиденное с состоянием отечественного дорожного покрытия. Наблюдал, как автомобили ехали по обочине, объезжая ямы, как трясло автобус по всей дороге... Тогда и возникла идея создать сервис.
С самого начала главная цель проекта «Дороги Украины» была следующей — общими усилиями вместе с водителями оценить дороги по всей Украине и определить самые удобные и безопасные дороги с наименьшим количеством ям. А в перспективе было бы круто с помощью сервиса уменьшить расходы из бюджета на мониторинг качества дорог, контролировать работу дорожных служб и качество ремонта дорог.
В Украине есть еще один проект оценки дорожного покрытия — Навизор. У нас с Навизором общая цель — строить маршруты лучшими дорогами, но пути достижения цели разные. Навизор использует ручное оценивание дороги, в то время, как «Дороги Украины» собирает данные автоматически, а для анализа данных использует математический алгоритм, который обрабатывает полученные данные на сервере в реальном времени.
Реализация
Проект состоит из:
— основного сайта, на котором отображается карта (front-end);
— системы обработки треков (back-end);
— инструментов для анализа (data science);
— сервиса для рендеринга карт (tile server);
— сервиса для прокладывания оптимального маршрута (OSRM).
Проект можно условно разделить на 2 части: навигацию и отображение состояния дорог на карте. Разумеется, все начинается со сбора данных, который, как я писал выше, автоматический, без каких либо действий водителя на дороге.
Сбор данных. В основе работы проекта лежит принцип фиксирования сотрясений с помощью мобильных устройств и их привязка к GPS-координатам. Сбор данных осуществляется автоматически с помощью приложения для Android, iOS или Windows Phone.
Водитель устанавливает приложение на свой смартфон и ездит как обычно. В это время приложение автоматически фиксирует сотрясения, сохраняет данные с акселерометра и GPS-координаты в трек, а также самостоятельно включается и выключается. При подключении к сети передачи данных или Wi-Fi статистика передается на сервер.
Карта состояния дорог. Мы используем картографические решения с отрытым исходным кодом:
— Карты OpenStreetMap (OSM) — для прокладывания маршрута;
— Инструментарий Mapnik — для рендеринга растровых карт из векторных данных;
— JS-библиотеку Leaflet — для отображения карты на мобильных и стационарных устройствах.
Карта на сайте проекта состоит из 2 основных слоев:
— Слой мира, который использует тайл-сервер OSM;
— Слой с состоянием дорог, который работает на собственном тайл-сервере.
Чтобы карту было удобно отображать, ее изображение разбивается на тайлы, которые представляют собой квадраты 256×256 пикселей. Когда пользователь открывает карту в браузере, загружаются только те тайлы, которые видны в данный момент, что ускоряет отображение и экономит трафик.
Слои накладываются друг на друга, и мы получаем карту с состоянием дорог.
Рендерингом карт занимается тайловый сервер. При запросе тайла сервер проверяет его наличие в своем кэше, если тайл найден — он возвращается клиенту. Если тайл не найден, то осуществляется его рендеринг, после чего он сохраняется в кэше и только после этого возвращается клиенту.
Разработка мобильных приложений. Проект отличался от всего того, что мы делали ранее. Полного описания бизнес-процессов, алгоритмов и принципов работы приложения попросту не было. Да и наставника тоже. Мы набили немало шишек и учились на собственных ошибках.
При разработке стояла задача минимизировать все отвлекающие факторы, которые возникают во время использования приложения. Все-таки речь идет о дороге и безопасности на ней.
В основу пользовательской версии легла экспериментальная версия. Был разработан удобный UI и два алгоритма работы с приложением — ручной и автоматический. Работа автоматического режима зависит от многих факторов, одним из которых является мощность GPS-сигнала. Если сигнал плохой, пользователь может воспользоваться ручным режимом. Также пользователь может сам определить, как отправлять треки, используя Wi-Fi или мобильную сеть, вручную либо автоматически.
Разработка проводилась одновременно под две платформы, Android и iOS, с использованием нативного кода. Для связи с RestFull API сервера в Android изначально использовалась библиотека robospice, в процессе развития проекта она была заменена на связку Retrofit2.0 и OkHttp. В качестве локальной базы для хранения записанных треков был применен SQLite (в планах заменить на Realm). Минимальная поддерживаемая версия SDK — v9. Также приложение активно использует Google Play Services, потому важно, чтобы на девайсе пользователя была установлена их актуальная версия.
Таким образом, первая пользовательская версия приложения располагала только функционалом для сбора статистики.
Анализ данных. Вскоре после релиза пользовательской версии мы получили первые реальные данные от пользователей, подсчитав количество ям, которые в итоге были зафиксированы. Команда принялась своими силами искать подходы, которые помогли бы усреднить значения, коррелировать результаты и, применив шкалу, выведенную в ходе экспериментов, нанести их на карту в соответствующей расцветке.
Первой задачей, которая которую предстояло решить, была привязка GPS-треков, записанных пользователями, к существующим контурам дорог на карте. Так как точность электронных карт и датчиков, установленных на устройствах, не являются идеальными — просто соединить GPS-точки линиями и нанести поверх карты не выйдет. Если так сделать, то при достаточно большом увеличении получим что-то похожее на кардиограмму поверх дороги.
Поэтому все дороги на карте были поделены на сегменты по
Второй задачей стал непосредственно анализ данных. Немного абстрагировав, его можно разделить на несколько этапов:
— Валидация. Так как данным, пришедшим от пользователя, доверять на все сто нельзя, сначала их нужно валидировать. Для этого используется простая математическая модель поведения автомобиля на дороге. Сравнив последовательность с критериями, которые диктует нам модель, алгоритм определяет, является ли данный трек валидным и стоит ли пропускать его на следующий этап статистического анализа.
— Статистический анализ. В его ходе определяются места, в которых последовательности подчиняются определенным закономерностям, указывающим, что на данном отрезке дороги присутствует дефект. Оценивается вероятность правдивости выводов относительно данного отрезка дороги и силы сотрясения, которую зафиксировали датчики в этом месте. Таким образом, мы получаем яму на карте. Оценка всегда основывается на данных, которые имеют определенный период актуальности и достаточный объем для статистического анализа.
Таким образом, имея постоянный поток GPS-треков от пользователей и алгоритм, который в реальном времени валидирует поступающие треки и добавляет их к общей статистике, мы получаем «живую» карту дорог — основанную на данных в реальном времени.
На точность полученных результатов влияют внешние факторы. К примеру, погрешность GPS мобильного устройства следующая — вероятность оказаться внутри окружности диаметра
Роутинг и навигация. Для того чтобы прокладывать оптимальный маршрут по хорошим дорогам, мы используем собственный сервис для роутинга (прокладывания маршрута). «Зачем же писать свой навигатор, если есть множество готовых и популярных решений, таких как Google и Яндекс?» — спросите вы. Оказывается, не все так просто. Для того, чтобы провести пользователя по максимально безопасному и удобному маршруту, нужно указать все промежуточные точки между пунктами отбытия и прибытия. К сожалению, ни один из больших популярных навигаторов не способен на это, ему важно лишь откуда и куда вы хотите попасть.
Однако с нуля разрабатывать приложения для этих целей — это сложная ресурсоемкая задача, но существуют уже готовые open source решения. Мы выбрали OSRM, который легко конфигурировать с помощью скриптового языка LUA.
Для OSRM мы используем собственный конфигурационный профиль на .lua, который при построении маршрута учитывает не только длину отрезка дороги (графа), а и тип отрезка, среднюю скорость и состояние дороги. База данных о состоянии дорожного покрытия обновляется каждый день. OSRM сервер работает по REST API. Клиент посылает запрос с координатами начала и конца маршрута, а сервер рассчитывает маршрут и отдает результат в виде JSON-объекта.
На данный момент наш навигатор работает, пользователю доступен минимальный функционал для навигации с точки А в точку Б. Работа на этом не прекращается, и в следующих версиях пользователи получат еще несколько важных для навигатора функций.
Монетизация. Менять социальную направленность я не планирую, но для развития сервиса необходимы средства, ведь без этого развивать проект и внедрять интересные и полезные функции невозможно.
Поэтому первую монетизацию уже реализовали через приложение Android, но не для того, чтобы заработать на этом денег, а чтобы вложить в дальнейшее развитие сервиса. Каждый пользователь приложения может «угостить разработчика» кофе, пончиком или пиццей в денежном эквиваленте. Приятно, что первые «угощения» уже есть, и, замечу, был случай, что один человек пополнил нашу копилку на 500 грн! Это нас поразило и придало больше веры в будущее проекта и его пользу.
Результаты
Мы запустили полностью обновленную карту с большим массивом данных, доделали приложение WP, а также вышли на международный уровень за счет легкой адаптации сервиса к условиям других стран.
Ежедневно «Дороги Украины» получают более 2000 треков от пользователей, которых сейчас уже более 67 000.
В планах:
— Усовершенствовать навигатор, присоединив функцию предупреждения о плохих участках дороги:
— Достучатся к властям, чтобы они использовали карту для мониторинга дорог и планирования ремонтов.
Более подробно с техническим аспектом проекта можно ознакомиться в блоге Stfalcon.com. Также есть страничка проекта в соцсетях.
Всегда рад вашим идеям и рекомендациям!