В 2010 году я начал работать в одной небольшой компании по производству испытательных машин (машины для физико-механических испытаний на растяжение, сжатие), там я в основном занимался разработкой программного обеспечения для управления испытательными машинами, а также сбором и анализом полученных данных.
Где-то через пол - года, вникнув в суть работы, уже появились первые версии программ, под управлением которых, машины стали «оживать».
Стоит отметить, что в то время не у всех производителей подобной техники в России было управление с ПК, в основном это были пульты на микроконтроллере с маленьким LCD или в редком случае монохромным графическим дисплеем. К подобным пультам кроме приводов и датчиков можно было подключить только растровый принтер, протокол испытания тоже оставлял желать лучшего. Все бы ничего, но вот запросы клиентов стали расти, а функционала пульта стало не хватать, да и с разработчиками на микроконтроллерах все было довольно грустно. Поэтому пульт стал неким мостом между механикой и компьютером.
В некоторых типах испытаний для проведения более точного измерения линейной деформации при разрыве требовалась установка УИДа (устройство измерения деформации) на образец.
Механический УИД представлял из себя, два захвата в виде прищепок, установленных на образец в зоне удлинения. Прищепки соединялись с тросиками, проходящими через ролики на валах энкодеров. На концах тросиков был закреплен противовес чтобы нивелировать вес захватов и механические сопротивления в механизме УИДа.
Погружаясь более глубже в испытательную технику выяснилось, что существуют и бесконтактные устройства измерения деформации, к таким можно отнести видео и лазерные экстензометры. Про последний я мало что расскажу, а вот на видеоэкстензометре мы остановимся.
В общем меня зацепила идея создания своего устройства с адаптированным ПО под наши цели. Конечно же производимого в России я ничего не нашел, все что предлагалось это были перекупы зарубежных разработок. Начальство в лице директора как-то скептически отнеслось к этой идее, и не верил, что у меня может что-то получиться. Но интерес был настолько сильным что я занялся этим в не рабочее время, тем более было затронуто мое самолюбие.
Изначально хотелось проверить и посмотреть на сколько это вообще реализуемо с моим уровнем умения программировать. Программировал я в то время на Delphi (возможно кто-то еще помнит эту среду разработки) и не сказать, что сильно хорошо, но я учился.
Первым что я сделал, это написал простенькую программку для определения расстояния по фото в ручном режиме. В ней требовалось сначала произвести настройку, то есть указать какое расстояние соответствует одной точке, далее можно было загрузить фото с измеряемым образцом, указать две границы, между которыми необходимо произвести измерение и после чего получить результат. Это конечно баловство, но надо было с чего-то простого начать.
Конечно основная задача заключалась в том, чтобы получать расстояние между двумя метками в непрерывном видео потоке. Далее к этой программе надо было подцепить видео поток, и вот тут я столкнулся с первыми проблемами, как это реализовать. В итоге нашел одну библиотеку компоненты которой позволяли работать с видео. Прикрутил видео к своей программке, с эмитировал образец с метками, прописал простенький алгоритм покадрового поиска метки в кадре по RGB значениям. И в ходе испытаний программка стала подвисать, так как обрабатывал кадр попиксельно и даже при разрешении web камеры 640х480 точек все тормозило.
Через некоторое время стало понятно, что мне требуется что-то более адаптированное под мои задачи. Тогда я наткнулся на OpenCV, и возникла еще одна загвоздка, найденная библиотека и все примеры под нее были написаны на Си++. Так как интерес еще не утих, то я стал потихоньку вливаться в OpenCV, с готовыми примерами конечно это было сделать не очень сложно, так как основной задачей был поиск двух меток одинакового цвета. Данная библиотека с этим довольно хорошо справлялась.
Далее возникла необходимость эмитировать испытание. Для этого пришлось изготовить стенд, отдаленно напоминающий разрывную машину. В то время у меня появился небольшой станок с ЧПУ портального типа, на нем я нарезал детали из орг. стекла и собрал макет. Макет включал в себя возможность зажимать резиновый образец и растягивать его, а также платформу для установки веб камеры с возможностью перемещения с целью увеличения измеряемого диапазона и фокусного расстояния.
После сборки макета приступил к испытаниям и отладке программы. В итоге программа заработала, но ее испытания выявили пару основных проблем: Надо было подобрать тип меток наносимых на испытуемый образец. На тот момент я использовал кусочки цветной самоклеющейся пленки. Сейчас же в голову приходит использование перманентного маркера. Следующая проблема вышла из постоянной настройки поиска цветовой метки в зависимости от внешнего освещения. Метки могли бликовать при дневном свете из окна и оттенок немного менялся, или наоборот цвет метки был темнее в пасмурную погоду. Тут видится установка рядом с камерой направленной подсветки образца.
Стоит еще отметить тот факт, что вместо web камеры следует устанавливать борее специализированную камеру с хорошей оптикой, для настройки фокуса и угла обзора.
В целом алгоритм хоть и работал, но довольно нестабильно. Проект был еще сырой, но перспективный, как мне тогда казалось. Вскоре обстоятельства так сложились что мне пришлось уволиться и проект был заброшен.
Написание данной статьи спровоцировано случайно найденным скриншотом программы и фотографий макета.