ПО для ДЛП

This entry was posted in Работа and tagged on by .

ПО для ДЛП

1. Введение

Постановка задачи была написать программное обеспечение для датчика линейного перемещения, устроенного согласно схеме, приведённой на рисунке 1. Вдоль длинной прямой балки A, свободно перемещается на роликах каретка B. Установленная на каретке камера C видит приклеенную к поверхности балки A шкалу от рулетки (рисунок 2). Установленная в каретке микросхема анализирует получаемое камерой изображение, используя его для отслеживания текущей координаты коретки. Текущая координата передаётся во внешнее устройство, использующее показания датчика.



Рис. 1. Схематичное устройство датчика.

Предполагаемые технические характеристики камеры: разрешение — 110×90 пикселей, скорость съёмки — 500 кадров в секунду. Каретка предполагается достаточно массивной, что не позволяет ей значительно изменять скорость за время, проходящее между съёмкой соседних кадров (оценка показывает, что при частоте съёмки 500 кадров в секунду ускорение каретки не должно превышать 40 м/c^2). Датчик должен автоматически согласовывать свою координату с истинной позицией при прохождении над маркером, расположеным на отметке 10 см.

Рис. 2. Шкала рулетки, прикреплённой к балке A.

2. Эмуляция аппаратной части датчика

Для разработки и тестирования алгоритмов датчика была создана программа, эмулирующая его работу. Она создаёт последовательности кадров, которые видит камера движущегося датчика. Кадры получаются из отсканированного изображения шкалы рулетки путём вырезания из него участков требуемого размера и огрубления разрешения до разрешения камеры. На рисунках 3a, 3b приведены примеры получаемых кадров.

Рис. 3a. Изображение, видимое камерой датчика.

Рис. 3b. Изображение, видимое камерой датчика.

Далее программа моделирует равноускоренное движение датчика вдоль шкалы и подготавливает серию кадров, видимых камерой. При этом, вводятся случайные ошибки в положение камеры в направлении, перпендикулярном направлению шкалы. Созданные кадры сохраняются в файл.

3. Работа алгоритма датчика

Обрабатывая новый кадр алгоритм располагает некоторой дополнительной информацией. Он знает время dt, прошедшее с момента приёма предыдущего кадра. Знает скорость (v_old) и позицию датчика (x_old) в момент анализа предыдущего кадра. Координата датчика (x_new), соответствующая новому кадру, приближённо определяется по формуле x_new = x_old + v_old * dt. Предположение о массивности каретки (ограничение на её максимальное ускорение в 40 м/с^2) гарантирует, что погрешность вычисленного таким образом x_new не превосходит расстояния между делениями шкалы (1 мм). Анализ нового кадра позволяет определить смещение штрихов относительно камеры и скорректировать возникшую ошибку. Скорректированное значение x_new используется для определения текущей скорости каретки по формуле v_new = (x_new – x_old) / dt.

Анализ нового кадра проводится с помощью Фурье анализа. Алгоритму приближённо известно число пикселей камеры между миллиметровыми отметками шкалы (для примера на рисунке 3 это значение равно 5 пикселей на миллиметр). Производя Фурье анализ для разных горизонталях кадра (рисунок 4) алгоритм определяет границы штрихов (A и B) (это легко, поскольку Фурье спектр для горизонтали кадра, проходящей по штрихам, имеет ярко выраженный максимум), точное значение частоты повторения штрихов в кадре и сдвиг центра камеры относительно штрихов. В примере, на рисунке 4, зелёный пик отвечает частоте w = 1.336. Период повторения штрихов в кадре равен T = 2 * pi / w = 4.70 пикселя / мм.

Рис. 4. Фурье анализ кадра.

Для захвата маркера, расположенного на делении 10 см, анализируется две области кадра, расположенные над верхней границей штрихов (рисунки 5a, 5b). Если эти области заполенны чёрным цветом — проверяется наличие зазора со штрихом между ними. В случае его обнаружения маркер считается опознанным и позиция штриха устанавливается равной 10 см. При предполагаемых технических характеристиках камеры, максимальная скорость каретки, при которой маркер должен быть опознан, оценивается в 2 м/с.

Рис. 5a. Поиск маркера.

Рис. 5b. Захват маркера.

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

4. Проверка работы алгоритма датчика

С помощью программы эмуляции аппаратной части датчика разработанный алгоритм был проверен. Ниже приведены результаты одного из испытаний. Каретка датчика равноускоренно движется с позиции x0 = 4 см с ускорением a = 20 м/сек^2 (красная линия на рисунке 6). В момент пуска алгоритм не знает истинной позиции датчика и полагает её равной 10 см, по умолчанию. При этом относительное смещение датчика относительно первоначальной позиции отрабатывается правильно (синяя линия на рисунке 6). В момент времени t_м = 0.077 cек каретка проходит позицию 10 см, на которой находится маркер. Скорость каретки в этот момент — v_м = 1.54 м/сек. Алгоритм засекает маркер и корректирует вычисляемую позицию. При дальнейшем движении каретки различие истинной и вычисленной позиций каретки различается не более, чем на 0.1 мм.

Рис. 6. Испытание алгоритма датчика.

Leave a Reply

Your email address will not be published. Required fields are marked *