Проблема мониторинга состояния дорожного покрытия и своевременного ремонта дорог остается к настоящему времени весьма актуальной [1, 6, 7]. Для успешного решения данной проблемы необходимо разработать принципиально новую концепцию анализаторов дорог.
Одним из современных комплексов, применяемых для анализа качества покрытия, является программно-аппаратный комплекс видеопаспортизации дорог «СВПД». Этот комплекс обладает рядом преимуществ перед более ранними анализаторами, а именно: привязка к GPS, видеообработка, анализ рельефа, обработка в реальном времени. Тем не менее имеются два серьезных недостатка: высокая цена и отсутствие синхронизации видеокамеры с лазерным сканером рельефа дороги.
При создании перспективного программно-аппаратного комплекса, позволяющего анализировать качество дороги, сохранять результаты анализа в базу данных, а также представлять полученные результаты в наглядном виде, можно использовать в качестве сенсора устройство Kinect [1–3]. Анализ данных, приходящих от Kinect, осуществляется на стандартном офисном компьютере.
Сенсор Kinect удовлетворяет всем требованиям, предъявляемым к анализатору. Этот сенсор имеет стандартную видеокамеру, позволяющую снимать видео в формате вплоть до FULL HD. Стандартная видеокамера нужна для получения цветовых кадров, которые можно сохранять в базу данных для последующего отображения на карте. Определяющим фактором, из-за которого в качестве сенсора был выбран Kinect, является наличие так называемой камеры глубины, которая состоит из инфракрасного приемника и передатчика. Передатчик излучает уникальную инфракрасную матрицу, а приемник получает искаженное изображение и на основе искажений определяет расстояние до каждой конкретной точки. Более того, данные, поступающие от стандартной камеры, и данные камеры глубины синхронизированы. Синхронизация дает возможность найти расстояние до объектов, изображенных на кадре, полученном от обычной камеры.
Kinect закреплен спереди (на базе автомобиля) и направлен вниз (в сторону движения автомобиля). Для того чтобы начать процедуру анализа покрытия дороги, оператору необходимо нажать на компьютере одну кнопку, после чего двигаться со скоростью не более 40 км/ч. При большей скорости возрастает уровень шумов сенсора и, следовательно, вероятность ошибки. При этом оператору не нужно «специально» въезжать в ямы, так как комплекс анализирует кадры цвета и глубины, а не колебания сенсора.
Кадры глубины очень похожи на обычные цветовые фотографии. Единственным отличием является то, что цветовые фотографии задаются пикселями, каждый из которых имеет какой-либо цвет, а кадры глубины описываются пикселями, которые задаются расстоянием в сантиметрах до заданного объекта. Таким образом, кадр глубины представляет собой облако трехмерных точек, каждая из которых задается двумерными координатами пикселя на экране и третьей координатой расстояния до объекта. Инструменты разработчика, поставляемые вместе с Kinect, позволяют преобразовывать такие координаты в обычные трехмерные координаты. В этом случае система координат будет привязана к сенсору, ось Y направлена вверх, а ось Z совпадает с главным направлением Kinect (рис. 1).
Целью работы является нахождение оптимального метода обработки данных глубины для определения качества дорожного покрытия. Наиболее трудная часть задачи, которую предстояло решить, связана с увеличением скорости работы алгоритма. Данные требуется обрабатывать со скоростью 24 кадра в секунду. Такая скорость необходима для того, чтобы была возможность обрабатывать каждый кадр, приходящий от сенсора Kinect. Тривиальные алгоритмы (например, обработка каждой точки глубины для каждого возможного положения колеса) оказались недостаточно быстрыми, чтобы обрабатывать данные в режиме реального времени. В работе предложен подход, позволивший ускорить обработку данных и сделать временную сложность алгоритма линейной с малой скрытой константой. При этом можно обрабатывать данные в режиме реального времени. В результате появляется возможность не сохранять большой объем «сырых» данных, требующих последующей обработки.
Рис. 1. Система координат сенсора Kinect
Преобразование кадра глубины
Процесс обработки данных, приходящих от сенсора, состоит из получения кадра глубины, преобразования его в трехмерное облако точек и расчет числовой оценки, характеризующей качество дорожного покрытия. Обработка трехмерного облака точек требует нетривиальных алгоритмов. Кроме того, необходимо использовать оптимальный алгоритм с точки зрения скорости и точности.
Первая трудность, которую необходимо преодолеть, связана с произвольной ориентацией облака точек [4]. Можно утверждать, что облако точек будет с некоторым допуском находиться в пределах некоторой плоскости (идеально ровная поверхность), но нельзя гарантировать, что эта плоскость будет параллельна сразу двум осям координат. Этого невозможно добиться, поскольку Kinect закреплен спереди автомобиля и направлен не перпендикулярно вниз к плоскости дороги, а наклонен вперед, в сторону движения. Тем не менее сенсор закреплен горизонтально, что гарантирует параллельность поверхности к оси OX. Следовательно, чтобы облако точек оказалось сориентированным параллельно сразу двум осям, нужно повернуть пространство вокруг оси OX. При этом целесообразно сделать такой поворот, чтобы облако расположилось параллельно плоскости XOY.
Рис. 2. Проекция облака точек на плоскость YOZ
На рис. 2 изображена проекция на плоскость YOZ. Черными точками обозначено облако точек. Прямая, изображенная штриховым пунктиром, – это проекция идеальной поверхности, вдоль которой расположены точки. Пространство необходимо повернуть на такой угол, чтобы идеальная поверхность оказалась на месте прямой, изображенной точечным пунктиром.
Перед тем как осуществить поворот пространства, нужно вычислить положение идеальной поверхности. Для этого необходимо найти координаты пары ключевых точек A и B на плоскости YOZ. Эти координаты невозможно найти точно. В зависимости от метода вычисления координаты точек, а следовательно, и положение плоскости могут отличаться. Более того, важно учесть, что данные от сенсора содержат погрешности, в них присутствуют шумы. Таким образом, нельзя взять две произвольные точки из облака и считать их ключевыми. Чтобы избежать влияния шумов, можно вычислить координаты ключевой точки следующим образом:
1) из облака делается выборка точек с граничными значениями координаты Y;
2) вычисляется среднее арифметическое координат выбранных точек.
Посчитав координаты ключевых точек, можно вычислить угол, на который необходимо осуществить поворот пространства:
Чтобы осуществить соответствующий поворот пространства, применяется матрица поворота:
Алгоритм анализа качества покрытия
Выровняв облако точек по горизонтали, необходимо его проанализировать на дефекты и искривления. Методы, основанные на прямом анализе взаимного расположения точек трехмерного облака, не подходят для решения данной задачи, так как, во-первых, являются недостаточно быстрыми, а во-вторых, очень чувствительны к шумам Kinect, а также к узким ямам и трещинам на дороге, которые автомобиль проезжает практически незаметно. Рассмотрев различные способы анализа трехмерного облака точек, было принято решение использовать метод моделирования движения колеса (рис. 3) [5].
Рис. 3. Траектория движения колеса
Здесь траектория колеса изображена пунктирной линией. Этот метод имеет ряд существенных преимуществ и позволяет получить наиболее реалистичные оценки качества покрытия. Например, узкие «провалы» практически не повлияют на финальную оценку, так как траектория колеса не сильно меняется при этом. Более того, шумы, выдаваемые сенсором, также будут слабо влиять на оценку благодаря специфике метода.
При моделировании движения колеса важно учитывать следующий момент. Трехмерные точки облака расположены с различной плотностью в разных частях пространства. Там, где дорога была ближе к сенсору, плотность наивысшая, а там, где дальше – самая низкая. Из-за этого нельзя моделировать движение непосредственно по облаку точек, так как невозможно однозначно утверждать, какие точки принадлежат выбранной траектории движения. Точнее говоря, это невозможно сделать за 1/24 секунды. Дело в том, что от сенсора каждый раз приходит 640480 = 307200 трехмерных координат и обрабатывать их за квадратичное время, очевидно, нельзя. В данном случае подойдет алгоритм, работающий не медленнее O(n log(n)), где n – это количество точек.
Сначала необходимо построить по облаку точек карту высот колеса с заданной частотой дискретизации. В данном случае частота 5 см будет достаточной. Тогда для хранения такой карты высот будет достаточно двумерного массива размером 8080, так как область дороги, попавшая в поле зрения сенсора, будет не более 44 м.
Одно из простых решений с линейной сложностью предполагает следующие шаги:
1. Инициализация карты высот отрицательными значениями.
2. Для каждой трехмерной точки вычисляется, на какие положения колеса она влияет.
3. Для каждого положения колеса вычисляется высота, если бы колесо стояло на заданной точке.
4. В карте высот сохраняется максимальное значение высоты.
Несмотря на линейную сложность, этот алгоритм слишком медленный, так как содержит большую внутреннюю константу. Действительно, каждая точка может влиять на (20 / 5)(60 / 5) = 48 различных положений колеса при ширине колеса 20 см и диаметре 60 см. В результате сложность алгоритма составляет O(48n). Кроме того, нужно проанализировать карту высот, на что времени уже не остается.
Усовершенствовать данный алгоритм возможно благодаря следующей особенности. Рассмотрим движение колеса вперед. В любой момент времени колесо опирается не более чем на 2 точки. Оно может соприкасаться и с большим количеством точек, но в рамках рассматриваемой задачи этим можно пренебречь. Движение колеса представляет собой последовательные переходы между состояниями, когда колесо стоит на двух точках. Во время перехода колесо находится только на передней точке, которая после перехода становится задней. Исходя из этого можно сделать вывод, что если колесо во время движения в какой-то момент времени перестало лежать на заданной точке, то в дальнейшем оно никогда не будет лежать на ней.
Необходимо принять во внимание, что благодаря определенному расположению Kinect точки в облаке будут упорядочены по направлению движения. Другими словами, можно с уверенностью сказать, что точка, полученная с нижнего пикселя глубины, будет расположена ближе точки, полученной с верхнего пикселя. Это значит, что возможно обрабатывать облако точек последовательно вдоль (или против) направления движения. Последовательная обработка, в свою очередь, позволяет пересчитывать положения колеса только до тех пор, пока колесо еще может стоять на обрабатываемой точке. Если же в некотором положении колесо находится на уже обработанной точке и не опирается на текущую, то можно утверждать, что последующие положения колеса никак не могут опираться на текущую точку.
Проделав обработку облака точек вдоль и против направления движения, получаем точную карту расположения колеса с заданной частотой дискретизации. При этом среднее количество положений колеса, вычисляемое для каждой точки по оси движения, не будет превышать 4 в подавляющем большинстве случаев. В результате для каждой точки будет посчитано в среднем (20 / 5)4 = 16 положений.
Для того чтобы дополнительно ускорить алгоритм, можно вычислить заранее сдвиг колеса по высоте в зависимости от относительного расположения колеса и точки опоры (рис. 4).
В наших обозначениях нужно искать расстояние СН. Оно зависит от расстояния АН и вычисляется по следующей формуле:
Рис. 4. Положение колеса на смещенной точке опоры
Вычислив заранее СН для различных значений АН, можно не вычислять это расстояние каждый раз по формуле, а использовать соответствующее приближенное значение.
Выводы
В настоящей работе предложен метод обработки данных глубины, позволяющий анализировать дорожное покрытие, обрабатывая поступающие данные в режиме реального времени. Благодаря найденным закономерностям, удалось ускорить выполнение работы в три раза. Дополнительное ускорение работы можно получить при предварительном подсчете сдвигов по высоте. Кроме того, найденный метод обработки данных позволяет значительно уменьшить влияние шумов от Kinect. Это достигается за счет моделирования проезда колеса: траектория движения будет слабо изменяться из-за узких «провалов», вызванных неточностями входных данных.