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 пікселів. Коли користувач відкриває карту в браузері, завантажуються тільки ті тайли, які видно в даний момент, що прискорює відображення і економить трафік.

Шари накладаються один на одного, і ми отримуємо карту з станом доріг.

Рендерингом карт займається тайловый сервер. При запиті тайла сервер перевіряє його наявність у своєму кеші, якщо тайл знайдено — він повертається клієнту. Якщо тайл не знайдений, то здійснюється його рендеринг, після чого він зберігається в кеші і тільки після цього повертається клієнту.

Розробка мобільних додатків. Проект відрізнявся від усього того, що ми робили раніше. Повного опису бізнес-процесів, алгоритмів та принципів роботи програми просто не було. Та й наставника теж. Ми, по правді кажучи, першопрохідці у справі поєднання роботи акселерометра і GPS в контексті моніторингу доріг.

При розробці стояло завдання мінімізувати всі відволікаючі фактори, які виникають під час використання програми. Все-таки мова йде про дорогу і безпеки на ній.

В основу користувача версії лягла експериментальна версія. Був розроблений зручний UI і два алгоритми роботи з додатком — ручний і автоматичний. Робота автоматичного режиму залежить від багатьох факторів, одним з яких є потужність GPS-сигналу. Якщо сигнал поганий, користувач може скористатися ручним режимом. Також користувач може сам визначити, як відправляти треки, використовуючи Wi-Fi або мобільну мережу, вручну або автоматично.

Розробка проводилася одночасно під дві платформи, Android і iOS, з використанням нативного коду. Для зв'язку з RestFull API сервера в Android спочатку використовувалася бібліотека robospice, в процесі розвитку проекту вона була замінена на зв'язку Retrofit2.0 і OkHttp. В якості локальної бази для зберігання записаних треків був застосований SQLite (в планах замінити на Realm). Мінімальна підтримувана версія SDK — v9. Також додаток активно використовує Google Play Services, тому важливо, щоб на девайсі користувача була встановлена їх актуальна версія.

Таким чином, перша користувальницька версія програми мала тільки функціоналом для збору статистики.

Аналіз даних. Незабаром після релізу користувача версії ми отримали перші реальні дані від користувачів, підрахувавши кількість ям, які в результаті були зафіксовані. Команда взялася самотужки шукати підходи, які допомогли б усереднити значення, корелювати результати і, застосувавши шкалу, виведену в ході експериментів, нанести їх на карту у відповідній шкалі.

Першої завданням, яке яку треба було вирішити, була прив'язка GPS-треків, записаних користувачами, до наявних контурів доріг на карті. Так як точність електронних карт і датчиків, установлених на пристроях, не є ідеальними — просто з'єднати GPS-точки лініями і нанести поверх карти не вийде. Якщо так зробити, то при достатньо великому збільшенні отримаємо щось схоже на кардіограму поверх дороги.

Тому всі дороги на карті були поділені на сегменти по 30-50 м, а GPS-точки користувальницьких треків, які підходили сегменту за критерієм відстані і напрямку руху, зв'язувалися з ним і записувалися в базу для подальшого аналізу. Таким чином, ми отримали карту GPS-треків і базу з відсортованими точками разом з даними акселерометра. Це спрощений опис процесу, безліч критеріїв і підводних каменів опущено для простоти розуміння алгоритму прив'язки треків на карту.

Другий завданням став безпосередньо аналіз даних. Трохи абстрагировав, його можна розділити на кілька етапів:
— Валідація. Так як даними, які прийшли від користувача, довіряти на всі сто не можна, спочатку їх потрібно валідувати. Для цього використовується проста математична модель поведінки автомобіля на дорозі. Порівнявши послідовність з критеріями, які диктує нам модель, алгоритм визначає, чи є даний трек валідним і варто пропускати його на наступний етап статистичного аналізу.
— Статистичний аналіз. У його ході визначаються місця, в яких послідовності підпорядковуються певним закономірностям, вказує, що на даному відрізку дороги присутній дефект. Оцінюється ймовірність правдивості висновків щодо даного відрізка дороги і сили струсу, яку зафіксували датчики в цьому місці. Таким чином, ми отримуємо яму на карті. Оцінка завжди ґрунтується на даних, які мають певний період актуальності і достатній обсяг для статистичного аналізу.

Таким чином, маючи постійний потік GPS-треків від користувачів і алгоритм, який в реальному часі валидирует надходять треки і додає їх до загальної статистики, ми отримуємо «живу» карту доріг — засновану на даних в реальному часі.

На точність отриманих результатів впливають зовнішні фактори. Наприклад, похибка GPS мобільного пристрою наступна — ймовірність опинитися всередині кола діаметра 5-40 м становить 60%. У визначенні швидкості руху похибка — близько 20%.

Роутинг і навігація. Для того щоб прокладати оптимальний маршрут по хорошим дорогам, ми використовуємо власний сервіс для роутінга (прокладання маршруту). «Навіщо ж писати свій навігатор, якщо є безліч готових і популярних рішень, таких як Google і Яндекс?» — запитаєте ви. Виявляється, не все так просто. Для того, щоб провести користувача з максимально безпечного і зручного маршруту, потрібно вказати всі проміжні точки між пунктами відбуття і прибуття. На жаль, жоден з великих популярних навігаторів не здатний на це, йому важливо лише звідки і куди ви хочете потрапити.

Однак з нуля розробляти додатки для цих цілей — це складна ресурсномістка завдання, але існують уже готові open source рішення. Ми вибрали OSRM, який легко налаштувати за допомогою скриптової мови LUA.

Для OSRM ми використовуємо власний конфігураційний профіль .lua, який при побудові маршруту враховує не тільки довжину відрізка дороги (графа), а і тип відрізка, середню швидкість і стан дороги. База даних про стан дорожнього покриття оновлюється щодня. OSRM сервер працює за REST API. Клієнт посилає запит з координатами початку і кінця маршруту, а сервер розраховує маршрут і віддає результат у вигляді JSON-об'єкта.

На даний момент наш навігатор працює, користувачу мінімальний функціонал доступний для навігації з точки А в точку Б. Робота на цьому не припиняється, і в наступних версіях користувачі отримають ще кілька важливих для навігатора функцій.

Монетизація. Змінювати соціальну спрямованість я не планую, але для розвитку сервісу необхідні кошти, адже без цього розвивати проект і впроваджувати цікаві і корисні функції неможливо.

Тому першу монетизацію вже реалізували через додаток Android, але не для того, щоб заробити на цьому грошей, а щоб вкласти у подальший розвиток сервісу. Кожен користувач програми може «пригостити розробника» кави, пончиком або піцою в грошовому еквіваленті. Приємно, що перші «частування» вже є, і, зауважу, був випадок, що один чоловік поповнив нашу скарбничку на 500 грн! Це нас вразило і додало більше віри в майбутнє проекту і його користь.

Результати

Ми запустили повністю оновлену карту з великим масивом даних, доробили додаток WP, а також вийшли на міжнародний рівень за рахунок легкої адаптації сервісу до умов інших країн.

Щодня «Дороги України» отримують більше 2000 треків від користувачів, яких зараз вже понад 67 000.

В планах:
— Удосконалити навігатор, приєднавши функцію попередження про поганих ділянках дороги:
— Достукатися до влади, щоб вони використовували карту для моніторингу доріг і планування ремонтів.

Більш докладно з технічним аспектом проекту можна ознайомитися у блозі Stfalcon.com . Також є сторінка проекту в соцмережах .

Завжди радий вашим ідеям і рекомендаціям!

Опубліковано: 30/08/16 @ 10:09
Розділ Блоги Сервіси

Рекомендуємо:

26 вересня — 6-тижневий онлайн-курс по React JS від Frontend Science
2 вересня — Майстер-клас "Основи AngularJS"
iOS дайджест №10: Що нового в Swift 3 та iOS 10, запитання для співбесід по Swift
Результати релокейт опитування: поїду, якщо зацікавите
20 вересня, Одеса — Запрошуємо отримати спеціальність за напрямком Java