В студенческие годы я увлекался робототехникой, делал небольшие проекты и имел успехи в этом деле. После окончания университета, сразу начал искать работу и проекты в этом направлении. Меня пригласили в один интересный проект, который был нацелен на помощь государственным органам в улучшении города. Идея проекта заключалась в устройстве, которое прикрепляется к машине, считывает ямы и трещины на дорогах, после чего эти данные вносятся в базу в режиме онлайн. В итоге мы знаем на каких трассах имеются неровности, которое поможет увидеть более ясную картину про состояние дорог и будет пригодна при планировании строительства и ремонта дорог.
Для начала, мы сделали мини модель устройства, прикрепили его на машинку на ДУ и погоняли по ковролину с ямами(дырками).
Вдохновившись тем, как оно работало, мы сделали полноценную модель устройства, которое прикреплялась к бамперу машины.
В статье постараюсь подробно рассказать про процесс разработки данного проекта.
Эта история не про успех, а про 1000 и 1 проблему, с которыми мы столкнулись при разработке. Надеюсь, эти знания и опыт помогут кому-то сэкономить время и силы.
Мини модель и проверка концепции проекта
Использовались дальномеры, которые стояли в ряд и смотрели вниз. Информация с них будет поступать в микроконтроллер для обработки и проверки того, является ли поверхность ровной или выявилась неровность. Были добавлены пьезодинамик (buzzer) и светодиоды для индикации при обнаружении ямы и все это крепилось на машину на Дистанционном Управлении.
Вначале, предполагалось, что мы узнаем дистанцию между датчиком и землей, и если показатель какого-либо датчика не является ему равным, будет считаться, что мы выявили яму.
После сборки, столкнулись с проблемой того, что дальномеры дают разные показатели.
Причина была в неравномерном расположении дальномеров. С помощью подручных средств мы не смогли добиться того, чтобы все дальномеры находились на одном уровне. Также, после езды по ямам, машину трясло и дальномеры слегка сдвигались.
Из-за этого было принято решение, что при запуске, машина будет стоять на ровной поверхности и микроконтроллер запишет показатели каждого дальномера и в дальнейшем сверка будет проходить по ним.
Это проблема заняла всего один абзац, но сколько дней и нервов ушло на его решение. Мы пытались установить все датчики равномерно, использовать более точные дальномеры, использовать один дальномер с сервоприводом и только потом додумались до решения проблемы.
Мы в итоге имели машину на ДУ, который натыкаясь на нервность пищит и мигает светодиодами. Успех!
Разработка полноценной модели
Концепция работала и мы приступили к разработке полноценной модели, которую можно было бы пристроить к машине и она фиксировала бы ямы.
Прибавилось количество дальномеров, GPS и модуль SD карты.
Вопросов по увеличению количества дальномеров думаю у вас не возникло.
GPS модуль использовался для определения местоположения ямы и модуль SD карты для записи информации по ямам.
В начале, хотели просто записывать показатели дальномеров и после уже на компьютере обрабатывать всю информацию. Так как данный способ оказался не совсем удобным, было решено обработку показателей дальномеров и определение размеров ямы делать через микроконтроллер и записывать информацию по яме с его координатами GPS на SD карту.
Определение размеров ямы
Определение ширины ямы было не сложным делом. Зная размер дальномера и дистанцию между ними можно легко вычислить ширину ямы.
(картинку можно сделать)
Когда речь пошла про длину ямы, мы понимали, что эту информацию мы не можем получить без дополнительных датчиков. Нам нужно было понять, на какой скорости едет машина.
Рассматривали разные варианты. Например, была идея прикрутить инкрементальный энкодер на колесо, с помощью которого можно было понять скорость колеса и соответственно, вычислить размер ямы. Но инкрементальный энкодер при его тестировании давал сбой даже при скорости колеса игрушечной машины на ДУ. Была идея на колесо установить магнит и с помощью датчика холла фиксировать один круг колеса. Это нам дало бы возможность вычислить скорость машины.
После, мы узнали, что GPS модуль может нам предоставить скорость передвижения.
Было решено использовать это, как оптимальный вариант.
Огромная проблема, которую мы пропустили
Мы все собрали, установили на машину и тестировали. Выяснилось, что при нашей скорости сканирования дороги и обработки данных (сейчас точные цифры уже не имею) для того, чтобы не пропускать ямы на дорогах, машина должна была передвигаться на скорости 10-20 км в час.
Сейчас постараюсь все объяснить. В теории, устройство должно было сканировать дорогу как сканер сканирует бумагу. Зеленые отметки это отсканированная часть дороги:
На деле все работало примерно так (при превышении скорости 20 км в час):
Ямы на дорогах могли быть частично или полностью не зафиксированы:
Сканер лидар
Теоретически можно было бы на этом остановиться и запустить проект с ограничениями. Но мы решили пойти дальше и искали пути решения этой проблемы.
Исследования привели нас к лидар сканеру. При этом, он должен был быть высокоскоростным и возможен для использования вне помещений (outdoor). Потому как, для сканера лидар, предназначенного для использования внутри помещений, солнечные лучи являются критичными и сканер не будет работать корректно. Собрав всю информацию и поговорив с руководством, мы пришли к решению, что для нас лидар сканер не подходит по нескольким причинам. Он был дорогим, стоимость сканера, который мог бы сканировать дорогу на скорости 60 км в час, была в пределах 2500. Много неопределенностей, многие мощные лидар сканеры нужно предварительно заказывать, при таких расценках любой промах в предварительных расчетах обходился бы дорого по цене и времени, была неопределенность, связанная с дополнительным железом - сможет ли, например, raspberry pi обрабатывать поступающую информацию или для него потребуется докупать что-то помощнее.
Камера
После некоторых размышлений, мы решили попробовать использовать камеру для фиксации ям и трещин на дорогах. Хотели, чтобы камера была направлена вниз на дорогу для более точной фиксации. Придумали как прикрепить камеру сзади машины, чтобы она смотрела на дорогу, объездили город, записывая на видео дорогу. Обновляли имеющиеся знания по компьютерному зрению, изучали существующую информацию и наработки в данном направлении, и разработали решение.
Снизу будут указано несколько минусов данного решения.
Мы планировали, что камера будет подключена к raspberry pi и весь алгоритм будет работать на нем, но разработанный алгоритм компьютерного зрения довольно медленно работал на компьютере. О его работе на raspberry pi не могло быть и речи.
Также, после разговора с представителями и экспертами национального оператора по управлению автомобильными дорогами, выяснилось, что предоставляемой информации с камеры является недостаточно. При фиксации трещин или ям критичным фактором является их глубина. В зависимости от их глубины, они решают на сколько срочно требуется ремонт или возможно полная замена дороги.
Им больше понравилось наше прежнее решение с датчиками дальномерами. Ошибкой с нашей стороны было то, что не был сделан полный сбор бизнес требований.
Заключение
После, несколько раз презентовали проект, но дальше он не развивался. Я был направлен на другой проект и на этом проект “Цифровая дорога” был приостановлен.
Этот проект меня многому научил. В последующих работах и проектах эти знания и опыт были для меня очень полезны. Я рад, что работал в данном проекте. Проект научил меня уделять больше внимания и времени не на саму разработку, а на сбор бизнес требований, особенно уточнить критичность каждого пункта, и на реализуемость.
Если кто-то будет заинтересован в проекте и имеются вопросы, или хотели бы использовать наработки, вы можете связаться со мной. Буду рад поделиться накопленными знаниями в этом деле.