Вдохновившись лазерным дальномером, установленном на пылесосе 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