Оценка эксплуатационного состояния дорог имеет решающее значение для эффективного содержания улиц и дорог. Ключевым аспектом этого является мониторинг дорожного покрытия для выявления участков, имеющих неровности и требующих внимания. Для проведения такого мониторинга используются различные методы.
Одним из основных является визуальный осмотр дорожного полотна обученным персоналом. Данный метод позволяет быстро оценить состояние дорожного покрытия и не требует больших затрат. Однако он не является точным, так как во многом зависит от человеческого фактора.
Другим методом для обнаружения неровностей дорожного покрытия является использование различных аппаратных средств. В исследовании [1] заключается, что технология лазерного сканирования поверхности обладает высокой точностью, что делает ее хорошо подходящей для оценки ровности дороги, помогая определить участки, требующие обслуживания.
Использование акселерометров и их наличие в мобильных устройствах делает такой способ для обнаружения неровностей дорожного покрытия наиболее доступным. Исследования [2–4] показали перспективные результаты относительно способности смартфона точно распознавать неровности дорожного покрытия с помощью данных акселерометра. Однако факторы, такие как размещение и ориентация мобильного устройства, могут влиять на точность измерений акселерометра.
Еще одним эффективным методом обнаружения неровностей дорожного покрытия является использование георадара. Георадар работает путем излучения электромагнитных импульсов в землю и измерения отраженных сигналов, которые отталкиваются от подповерхностных слоев. Анализируя эти отражения, можно определить наличие трещин, пустот и других неровностей [5].
В работе [6] описано использование метода фотограмметрии и обработки данных с системы стереокамер для обнаружения дефектов дорог. Также отмечается, что затраты являются умеренными с учетом стоимости системы камер и сопутствующей обработки данных.
Достаточно простым методом является получение отзывов участников дорожного движения, включая водителей, велосипедистов и пешеходов. Отзывы участников дорожного движения могут быть собраны в режиме реального времени по различным каналам, например через мобильные приложения, такие как FixMyStreet. Очевидно, что этот метод может служить только дополнительным подходом, а не единственной основой для оценки дорожного состояния.
Можно выделить следующие характеристики для сравнения существующих методов обнаружения неровностей дорожного покрытия: Используемая технология/методика; Необходимость в дополнительном оборудовании; Стоимость; Точность результатов; Потенциал масштабируемости.
В рамках данной работы подход на основе акселерометра был выбран в качестве предпочтительного метода. Использование смартфонов, которые уже оснащены встроенными датчиками, устраняет необходимость в специализированном оборудовании. Кроме того, широкое распространение мобильных устройств среди водителей позволяет осуществлять крупномасштабный сбор для получения информации о дорожных условиях в различных регионах страны.
Целью данной работы является разработка клиентской части iOS-приложения, использующего акселерометр и GPS мобильных устройств, для обнаружения неровностей дорожного покрытия.
Для достижения цели поставлены две основные задачи: 1) обоснование выбора инструментов разработки; 2) проектирование и тестирование приложения по обнаружению неровностей дорожного покрытия на заранее выбранных участках.
Инструменты разработки
На рынке мобильных приложений доминируют две основные операционные системы: iOS и Android, каждая из которых обладает своими уникальными характеристиками. В данной работе представлен опыт разработки для платформы iOS.
Для нативной разработки программ на платформе iOS основными языками программирования являются Objective-C и Swift. Выбор Swift обусловлен его повышенной производительностью и безопасностью. Использование опционалов и вывод типов позволяет отлавливать ошибки во время компиляции. Также Swift остается актуальным и соответствует последним возможностям операционной системы iOS.
Двумя популярными вариантами интегрированных сред разработки для создания iOS-приложений, поддерживающих язык программирования Swift, являются Xcode и AppCode. Однако с выходом новой версии AppCode 2022.3 компания разработчик JetBrains сообщила в конце 2022 г. о прекращении выпуска продукта и технической поддержки до 31 декабря 2023 г. Официальная IDE Xcode предлагает необходимую функциональность и полный набор инструментов для разработки приложений на iOS.
Для построения пользовательского интерфейса существуют два фреймворка SwiftUI и UIKit. SwiftUI – относительно новый инструмент, выпущенный в 2019 г., из-за чего поддерживается начиная с iOS 13 и выше. В отличие от UIKit, который следует императивному подходу, SwiftUI предоставляет декларативный синтаксис для написания кода. При использовании UIKit есть возможность создавать интерфейсы с помощью конструктора интерфейса Storyboard или программно, без использования Storyboard. Было принято решение использовать UIKit с помощью программного подхода, так как вся логика, связанная с интерфейсом, записывается непосредственно в коде, что облегчает ее понимание, модификацию и контроль.
Тремя основными фреймворками для мобильного приложения на iOS, использующего данные акселерометра и GPS, являются Core Location, Core Motion и Combine. Core Location позволяет получать необходимые данные GPS для отслеживания местоположения и перемещения пользователя. Core Motion предназначен для сбора и обработки данных о движении, полученных с помощью акселерометра устройства. Combine обеспечивает обработку асинхронных событий. В данном случае Combine будет использован для работы с потоками данных, получаемых от Core Location и Core Motion.
При выборе подходящего картографического сервиса для приложения были рассмотрены различные варианты, включая MapKit, Google Maps SDK, Yandex MapKit и 2GIS Mobile SDK. Выбор Google Maps SDK обусловлен широким распространением среди пользователей и разработчиков.
Для установки внешних зависимостей, таких как Google Maps SDK, необходимо выбрать подходящий менеджер пакетов. При разработке iOS-приложений существует несколько популярных менеджеров пакетов, такие как Swift Package Manager (SPM), Carthage и CocoaPods. Официальная документация для Google Maps SDK рекомендует использовать CocoaPods в качестве менеджера пакетов. Соответственно, учитывая, что Google Maps SDK не поддерживает SPM и что Carthage сложен в настройке, выбор был сделан в пользу CocoaPods.
Проектирование приложения
По результатам анализа возможностей встроенных датчиков смартфонов [2] определен набор следующих функциональных требований к мобильному приложению:
1. Приложение должно получать данные датчиков акселерометра и GPS мобильного устройства и использовать их для обнаружения неровностей.
2. Приложение должно обеспечивать визуальное отображение местоположений обнаруженных неровностей на карте с цветовой градацией, которая будет отражать уровень неровности.
3. Приложение должно работать в фоновом режиме.
4. Приложение должно предоставлять пользователю возможность просматривать карту с неровностями в режиме реального времени во время совершения поездки.
Проект в целом построен по архитектуре «клиент-сервер», где клиентской частью является разрабатываемое iOS-приложение (рис. 1). Клиентская часть приложения использует архитектурный паттерн MVC (Model-View-Controller). Данный паттерн позволяет разделить логику приложения на три ключевых компонента: Модели, Представления и Контроллеры.
Серверный компонент решает такие задачи, как обработка неровностей и их классификация в зависимости от значений и хранение информации в базе данных. Клиентская часть приложения взаимодействует с сервером, используя стандартные методы HTTP, такие как GET и POST запросы.
Рис. 1. Шаблон архитектуры приложения
Описание общего алгоритма работы мобильного приложения представлено в работе [7]. Акселерометр измеряет ускорение мобильного устройства в трех проекциях. Когда движущийся автомобиль наезжает на неровность, то происходит сравнение текущего и предыдущего значения акселерометра с привязкой геопозиции. Неровность обнаруживается, если полученное значение больше установленного. Затем данные неровностей отправляются на сервер. В приложении составляется актуальная карта состояния автомобильных дорог. При разработке приложения было использовано 18 различных классов.
Прецедент использования (Use case) должен включать такие действия, как просмотр карты неровностей, предоставление обратной связи и изменение настроек.
Разработка приложения по обнаружению неровностей дорожного покрытия
Рассмотрим основные разработанные модули, которые обеспечивают функциональность мобильного приложения. Каждая компонента является частью микросервисной архитектуры.
Для работы с данными акселерометра мобильного устройства был создан сервис AccelerometerService, использующий фреймворки CoreMotion и Combine. После проверки доступности датчика и единственности экземпляра сервиса данные акселерометра начинают публиковаться. Интервал обновления для получения данных составляет 0,5 с.
Сервис LocationService предназначен для предоставления доступа к данным геолокации, работы с местоположением и скоростью устройства. При этом используется фреймворк CoreLocation. У сервиса есть 3 объекта-издателя: coordinatesPublisher для публикации координат геолокации, deniedLocationAccessPublisher для отправки статуса разрешения на доступ к геопозиции и speedPublisher для издания значения скорости. Скорость измеряется в метрах в секунду, для удобства следует перевести скорость в километры в час.
За обнаружения неровностей дорожного покрытия и отправки их данных на сервер отвечают два класса BumpManager и BumpWorker соответственно. Здесь реализован алгоритм распознавания выбоин на дорогах. Обработка потока данных позволяет фиксировать неровности (вычисленное значение коэффициента более 1,9) синхронизируя данные по локации и скорости (более 30 км/ч). Если неровность получена, она добавляется в массив и выводится сообщение, указывающее на обнаружение неровности. Когда количество фиксированных неровностей в одном и том же месте достигает определенного количества создается объект класса Bumps.
Для установки необходимых зависимостей проекта с Google Maps использовался менеджер пакетов CocoaPods. Использование фреймворка Google Maps требует генерации API-ключа. За отображение карты и загрузки обнаруженных неровностей из сервера отвечает класс-контроллер MapVC, импортирующий фреймворк GoogleMaps. Загрузка точек на карту и отображение их маркерами различных цветов в зависимости от типа достигается использованием нескольких функций (loadPoints, updateMarkers).
В проекте используется БД Mongo DB. Были созданы два основных вида сущности: Bumps и Points. Первые представляют собой первоначальные данные (грязные), которые после обработки преобразуются в чистые данные – Points. Для обеспечения работы приложения с сервером используются следующие URL:
1. /api/Point/GetPoints. Параметры: latitude, longitude, maxDistance, minDistance. Результат: массив JSON-объектов (список неровностей).
2. /api/Bump/InsertBumps. Параметры: массив JSON-объектов (список неровностей).
3. /api/Review/InsertReview. Параметры: email, phone, name, text.
При запуске приложения, во время проверки доступности и работоспособности встроенных датчиков, на начальном экране отображается анимированный логотип сервиса. Согласно политике конфиденциальности, полноценное функционирование приложения доступно после получения доступа к данным геопозиции пользователя. Также при первом подключении к сервису на экране появляется слайдер для ознакомления с функционалом приложения (рис. 2).
Рис. 2. Экраны при первом запуске
Перед началом использования приложения пользователю доступны следующие опции: выбор типа транспортного средства и выбор типа просмотра (водитель или наблюдатель).
На главном экране приложения есть две панели вкладок: карта и настройки. На вкладке «Карта» приложения представлена карта, на которой отображены точки неровностей с цветовой градацией. Когда пользователь наезжает на неровность во время движения, на экране появляется toast-сообщение с текстом «Найдена неровность».
На вкладке «Настройки» пользователь может изменить тип просмотра и тип автомобиля. Кроме того, он может написать отзыв, чтобы оставить свое мнение или поделиться своим опытом работы с приложением. При оставлении отзыва на вкладке «Настройки» пользователь должен заполнить следующие поля: имя, номер телефона, электронная почта, сообщение.
Для оценки работоспособности и последующей наладки приложения был проведен комплекс тестов с использованием различных моделей iPhone на разных версиях iOS. Приложение было установлено на тестовые устройства через кабельное подключение c запущенной программой Xcode, при котором требовалось разрешение на доверие разработчику. Тестирование проводилось по заранее определенному маршруту в г. Якутске. Результаты показали довольно высокий уровень обнаружения (93 %) и отметки неровностей вдоль дорог, которые были задействованы на маршруте. Точки на карте с цветовой градацией отмечались на местах, принятых предварительно за явные дефекты. Разница в точности определения геолокации неровности в зависимости от модели устройства (iPhone 8 и iPhone 13 Pro) была минимальной.
Заключение
На данном этапе развития проекта разработано MVP – мобильное приложение, обладающее минимальным, но достаточным начальным потребительским функционалом. В ходе выполнения исследовательской части работы изучены аппаратные и программные возможности iOS для обнаружения неровностей дорог. Для дальнейшего развития проекта необходимо продолжить исследования по улучшению выработанного алгоритма и проведение более массового тестирования продукта. Возможность учета регистрации пользователей, внедрения функции предупреждения о приближающейся неровности изучаются и рассматриваются в призме интеграции с другими сервисами.