roboforum.ru

Технический форум по робототехнике.

Сканирующий лазерный дальномер

Сканирующий лазерный дальномер

citizen » 13 окт 2012, 23:58

Вдохновившись лазерным дальномером, установленном на пылесосе Neato http://robocraft.ru/blog/robots/725.html, захотел себе подобный. Ну а поскольку все знают, сколько стоит дальномер, то остается один выход - собрать самому!

Проще всего сделать дальномер, работающий по тому же принципу, что и в вышеуказанном пылесосе. Это триангуляционный метод, он упоминается здесь: http://roboforum.ru/forum4/topic2001.html, а принцип работы описан здесь https://sites.google.com/site/todddanko/home/webcam_laser_ranger.
Получившаяся конструкция достаточно проста.
Самая труднодоставаемая часть - это светочувствительная линейка. Все что я смог найти - TSL1401, с довольно низким разрешением (128 пикселей). Покупал на ebay, за 15 долларов. Фокусирующая линза (f' = 13 мм) - из окуляра микроскопа. Поскольку разрешение маленькое, приходиться использовать большое базовое расстояние - 10 см. Также на контроллере производится математическая обработка сигнала, позволяющая повысить разрешение до 1/10 пикселя.
Микроконтроллер - STM32F100C4.
Лазер - из DVD привода, так как мощности обычного лазерного модуля на 3 мвт не хватило. Мощность лазера в своем дальномере определить не могу, скажу только, что при постоянно работающем лазере через него идет ток 70 ма. Лазер включается на время, за которое конструкция поворачивается на 1/3 градуса, 2/3 он выключен.
Связь с компьютером организована при помощи bluetooth модуля.
Характеристики дальномера - 3 оборота в секунду, 360 измерений на оборот, точность определения расстояния - на 1 м примерно 1 см, на 3 м примерно 10 см. Минимальное измеряемое расстояние - 16 см.
Из-за того, что скорость вращения двигателя постоянно меняется, приходится постоянно корректировать скорость измерений, и для измерения скорости пришлось установить энкодер из мыши.

Фотографии готового устройства:
Изображение
Двигатель из старого HDD использован как опора для вращающейся части - в двигателе хорошие подшипники, нет люфтов, и есть отверстия с резьбой для крепления. В оси двигателя было отверстие, в которое я вставил стержень. На конце стержня - металлическая площадка, провод от которой проходит сквозь ось. Стержень и площадка служат для передачи питания на основную часть дальномера. Позже я установил на стержень энкодер от мыши, так что энкодер неподвижен относительно доски. На фотографии виден скользящий контакт, позже я его убрал.

Изображение
Вид на управляющую плату. Подстроечный резистор служит для регулировки тока через лазер.

Изображение

Изображение
Общий вид дальномера. Хорошо виден модуль лазера. Юстировка производится двумя винтами, лазер снизу подпружинен. Сразу скажу, что юстировка не отличается особой сложностью, так как при приближении препятствия к лазеру растет размер пятна, что компенсирует погрешности юстировки. Так что юстировка производится один раз на большом расстоянии.

Изображение
Вид спереди. В центре фотографии виден диск энкодера из мыши.

Результаты работы:
Изображение
Такую картинку дает дальномер, установленный в комнате.

Изображение
Изображение
Сама комната.
Как видно, дальномер смог обнаружить стул, но это удается ему только на близком расстоянии. На белом шкафу видны вспышки лазера.

В коридоре:
Изображение
Изображение
Изображение

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

Демонстрация работы дальномера.


Основная задача теперь - обработка полученной информации, то есть определение положения робота в комнате. Подумываю об использовании ROS.

Разработана новая версия дальномера и выложена инструкция по сборке - смотреть тут: http://roboforum.ru/post278930.html#p278930 и тут forum10/topic12095-285.html#p281288
Там же выложена схема и исходный код.
Изображение

Разработана 3 версия дальномера (OpenLidar):
https://geektimes.ru/post/275442/
Изображение

Разработана 4 версия дальномера (OpenSimpleLidar):
post380962.html#p380962
Изображение
Последний раз редактировалось citizen 25 фев 2018, 19:26, всего редактировалось 13 раз(а).

Re: Сканирующий лазерный дальномер

MD23 » 14 окт 2012, 00:22

Хм не плохо...

Re: Сканирующий лазерный дальномер

legion » 14 окт 2012, 12:32

Это не неплохо, это офигенно.

Re: Сканирующий лазерный дальномер

elmot » 14 окт 2012, 12:50

Реально круто... Но вот сразу проблема параллаксных(или как их назвать?) дальномеров - с трудом находит небольшие предметы. Сканировать надо?

Re: Сканирующий лазерный дальномер

citizen » 14 окт 2012, 13:22

Сканировать что?
По поводу небольших предметов - на небольших расстояниях довольно мелкие детали видно (думаю, робот увидеть ножки стула и выбраться из под него). На больших расстояниях мелкие детали не видно за счет потери точности, но там и не так важно видеть мелкие детали.

Re: Сканирующий лазерный дальномер

elmot » 14 окт 2012, 13:32

Горизонталь, ну вы собственно и сканируете, я плохо вчитался. На форуме кто-то(кажется Nesenin) только что брался за такой же дальномер на основе вебкамеры. Там получается совсем бюджетно и неплохо по разрешению.

Re: Сканирующий лазерный дальномер

citizen » 14 окт 2012, 13:36

Однако камера 360 градусов охватить не может, и у нее довольно низкий FPS. А еще здесь лазер модулируется, что позволяет работать в большом диапазоне освещенностей.

Re: Сканирующий лазерный дальномер

legion » 14 окт 2012, 13:37

На фотографии с большой выдержкой видно, что точки замера накладываются друг на друга с каждым оборотом. Может, давать смещение с каждым оборотом? Или замерять через угол, к которому 360 не будет кратно?

Re: Сканирующий лазерный дальномер

citizen » 14 окт 2012, 13:48

А про какое место на фотографии вы говорите? На самом деле ничего накладываться не должно, так как время включения лазера определяется по датчику нуля (оптопара, торчит рядом с камерой), и энкодеру. Проблема в том, что по энкодеру определяется скорость, а не положение, так что к концу оборота ошибка накапливается. Это приводит к смещению на 1 точку захвата в правой части изображения (дальномер вращается против часовой стрелки).

Re: Сканирующий лазерный дальномер

legion » 14 окт 2012, 14:03

Я к тому, что хорошо бы на первом круге брать замеры 0°, 1°, 2°,... , на втором 0.33°, 1.33°, 2.33°,... и т.д.

Re: Сканирующий лазерный дальномер

citizen » 14 окт 2012, 14:07

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

Re: Сканирующий лазерный дальномер

legion » 14 окт 2012, 14:38

Да, хотим больше данных - ждем, не хотим - не ждем и читаем один круг, ничего не теряя про сравнению с текущим вариантом. Вдали должна быть разница же. На трех метрах шаг замера 26 мм, или 9 мм, например. Дальность обнаружения стула должна возрасти, в теории.

Re: Сканирующий лазерный дальномер

citizen » 14 окт 2012, 15:00

Только картинка мигать будет - то есть стул, то нет.

Re: Сканирующий лазерный дальномер

elmot » 14 окт 2012, 15:09

Кстати, если делать дальномер на камерах, то можно воткнуть целую пачку разноцветных лазеров со смещением, получим в теории 3-4 замера за каждые 2 кадра.

Re: Сканирующий лазерный дальномер

citizen » 14 окт 2012, 15:43

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


Rambler\'s Top100 Mail.ru counter