Главная » Компьютерная электроника
Призовой фонд
на май 2017 г.
1. Тестер компонентов MG328
Паяльник
2. Осциллограф DSO138
Паяльник
3. Регулируемый паяльник 60 Вт
Паяльник
4. 100 руб.
От пользователей

Лазерный дальномер из web камеры

В продаже, есть большое количество, дешёвых, датчиков – дальномеров, в их числе ультразвуковые и инфракрасные. Все эти устройства работают хорошо, но из – за значительного веса, не подходят для летающих роботов. Миниатюрный робот вертолет, например, может нести около 100г полезной нагрузки. Это даёт возможность использовать, для поиска препятствий и предотвращения столкновений с ними, машинное зрение, используя веб-камеры (или другие миниатюрные, беспроводные камеры с подключением к компьютеру через USB). А еще лучше, установить две камеры, что обеспечит роботу, стерео зрение, таким образом, благодаря информации о глубине изображения, улучшится обход препятствий. Недостатком этой идеи, является, добавление веса второй камеры.

В этой статье описывается, как маленькая лазерная указка, вместе с одной web камерой, может обеспечить моно машинное зрение, с большим диапазоном информации.

Этот проект основан на статье найденной здесь.

Принцип работы

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

Итак, вот как это работает. Лазерный луч проецируется на объект в поле зрения камеры. Этот луч должен быть идеально параллелен оптической оси камеры. Лазерная точка захватывается   вместе с остальной сценой. Простой алгоритм ищет на изображении яркие пиксели. Предполагая, что точка лазера является яркой на фоне более тёмной обстановки (я использовал обычную лазерную указку купленную в магазине за доллар), изначально положение точки в кадре не известно. Затем нам нужно рассчитать дальность до объекта, основываясь на том, где вдоль оси Y находится лазерная точка, чем ближе она к центру изображения, тем дальше находится объект.

Как мы видим из рисунка выше, расстояние (D) может быть рассчитано по формуле:

Конечно, для решения этого уравнения, вы должны знать, h- фиксированное расстояние между лазерной указкой и камерой. Знаменатель высчитывается так:

Соединив два предыдущих уравнения, мы получим:

Итак, количество пикселей от центра плоскости изображения до лазерной точки может быть просто рассчитано с картинки. А как насчет других параметров в этом уравнении? Для их получения мы должны выполнить калибровку.

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

Данные калибровки

пикселов от центра

фактический D (см)

103

29

81

45

65

58

55

71

49

90

45

109

41

127

39

159

37

189

35

218

Используя следующее уравнение, мы можем вычислить угол наклона в зависимости от значения h, а также фактическое расстояние до каждой точки.

Теперь у нас есть расчётные значения, мы можем придумать отношения, что позволяет нам рассчитывать, дальность, зная количеством пикселей от центра изображения. Я использовал линейную зависимость.

Зная калибровочные данные, я подсчитал:

Используя калибровочные данные и данные предварительного расчёта, я подсчитал процент ошибки:

Фактические и расчётные данные

пикселов от центра

действительный D (см)

расчётный D (см)

Ошибка(%)

103

29,84

29

2,88

81

41,46

45

-7,87

65

57,55

58

-0,78

55

75,81

71

6,77

49

93,57

90

3,96

45

110,85

109

1,70

41

135,94

127

7,04

39

153,27

159

-3,60

37

175,66

189

-7,06

35

205,70

218

-5,64

Компоненты

Для сборки дальномера требуется не так много деталей. Для соединения лазерной указки и камеры я вырезал раму – основание из картона.

Собранный дальномер выглядит следующим образом:

Программное обеспечение

Я написал программу обработчик на двух языках: Visual C + + и Visual Basic. Вы, вероятно, подумаете, что программа на Visual Basic проще, чем на VC + + в плане кода, но во всём есть компромисс. Код на VC + + можно собрать бесплатно (при условии, что у вас есть Visual Studio), в то время как код VB требует приобретение программных пакетов сторонних производителей (в дополнение к Visual Studio).

Visual basic

Написанная мною программа на  Visual Basic доступна в нижней части страницы под именем vb_laser_ranger.zip    

Чтобы этот код работал, необходимо установить на вашем компьютере VideoOCX -компонент ActiveX

Скриншоты из этой программы можно увидеть ниже:

Visual C++

Полный код этого проекта доступен в виде пакета с именем LaserRange.zip в нижней части страницы.  

Обратите внимание, чтобы запустить исполняемый файл, вам необходимо иметь на компьютере qcsdk и qc543 драйвера.

Ниже приведены два примера лазерного дальномера. Обратите внимание, что во втором примере мы видим две лазерные точки. Это "рассеянный свет" вызванный внутренними отражениями в камере. Отражённая в камере точка теряет интенсивность, и не вмешивается в алгоритм определения ярких пикселей на изображении.

Дальнейшая работа

Одним из конкретных улучшения, которые могут быть внесены в этот дальномер, является проекция горизонтальной лазерной линии, вместо точки. Таким образом, мы сможем вычислять расстояние до цели, для каждого ряда пикселов на изображении.

В будущем

Я получал большое количество писем от людей, которые пытались дублировать этот дальномер. Пожалуйста, имейте в виду, что этот проект впервые был сделан до 2004 года (старыми методами). Если вы будите повторять эту работу, то лучше использовать для захвата и обработки изображения с камеры, библиотеку компьютерного зрения OpenCV.

Оригинал статьи

Прикрепленные файлы:

Теги:

Опубликована: 0 0
Я собрал 0 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Комментарии (3) | Я собрал (0) | Подписаться

0
Виталий #
Подробности программ изучим.
На первый взгляд поиск точки от лазера облегчится выключением и включением с расчетом разницы. Подавая на CJM порт серию нулей после фильтрации можно получить сигал для управления лазером.
Ответить
0
Андрей #
У меня вопрос: "Как посчитать радиан на пиксель и компенсацию?".
Ответить
0
Юрий #
Вроде не дурак. Но как только не считал pfc и ro описанные в статье на ин.язе не получил
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется напряжение?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

USB-реле (2 канала)
USB-реле (2 канала)
Паяльная станция Hakko 936 Набор для сборки - LED лампа
вверх