Как сделать дальномер для охоты
Самодельный сканирующий лазерный дальномер
В этой статье я расскажу о том, как я делал самодельный лазерный сканирующий дальномер, использующий триангуляционный принцип измерения расстояния, и об опыте его использования на роботе.
Зачем нужен сканирующий дальномер?
На сегодняшний день в робототехнике не так уж и много методов навигации внутри помещений. Определение положения робота в пространстве с использованием лазерного сканера — один из них. Важное достоинство этого метода — он не требует установки в помещении каких-либо маяков. В отличие от систем, использующих распознавание изображения с камер, обработка данных с дальномера не так ресурсоемка. Но есть и недостаток — сложность, и соответственно, цена дальномера.
Традиционно в робототехнике используются лазерные сканеры, использующие фазовый или времяпролетный принцип для измерения расстояния до объектов. Реализация этих принципов требует довольно сложной схемотехники и дорогих деталей, хотя и характеристики при этом получаются приличные — используя эти принципы, можно добиться высокой скорости сканирования и большой дальности измерения расстояния.
Но для домашних экспериментов в робототехнике такие сканеры мало подходят — цена на них начинаются от 1000$.
На помощь приходят дальномеры, использующие триангуляционный принцип измерения расстояния. Дальномер такого типа впервые появился в роботах-пылесосах Neato:
Довольно быстро любители расшифровали протокол этого дальномера, и начали использовать его в своих проектах. Сами дальномеры в качестве запчастей появились на ebay в небольших количествах по цене около 100$. Через несколько лет китайская компания смогла выпустить сканирующий дальномер RPLIDAR, который поставлялся как полноценный прибор, а не запчасть. Только цена этих дальномеров оказалась достаточно высокой — 400$.
Самодельный дальномер
Как только я узнал о дальномерах Neato, мне захотелось собрать самому аналогичный. В конце концов, мне это удалось, и процесс сборки я описал на Робофоруме.
Первая версия дальномера:
Позже я сделал еще одну версию дальномера, более пригодную для использования на реальном роботе, но и ее качество работы не полностью устроило меня. Настало время третьей версии дальномера, и именно она будет описана далее.
Устройство сканирующего триангуляционного лазерного дальномера
Принцип измерения расстояния до объекта основан на измерении угла между лазерным лучом, попадающим на объект, и объективом дальномера. Зная расстояние лазер-объектив (h) и измеренный угол, можно вычислить расстояние до объекта — чем меньше угол, тем больше расстояние.
Принцип хорошо иллюстрирует картинка из статьи:
Таким образом, ключевые оптические компоненты такого дальномера — лазер, объектив и фотоприемная линейка.
Так как дальномер сканирующий, то все эти детали, а так же управляющая электроника устанавливаются на вращающейся головке.
Тут может возникнуть вопрос — зачем нужно вращать оптику и электронику, ведь можно установить вращающееся зеркало? Проблема в том, что точность дальномера зависит от расстояния между объективом и лазером (базового расстояния), так что оно должно быть достаточно большим. Соответственно, для кругового сканирования понадобится зеркало диаметром, большим базового расстояния. Дальномер с таким зеркалом получается достаточно громоздким.
Сканирующая головка дальномера при помощи подшипника закрепляется на неподвижном основании. На нем же закрепляется двигатель, вращающий головку. Также в состав дальномера должен входить энкодер, предназначенный для получения информации о положении головки.
Как видно, дальномеры Neato, RPLIDAR и мои самодельные сделаны именно по этой схеме.
Самое сложное в самодельном дальномере — изготовление механической части. Именно ее работа вызывала у меня больше всего нареканий в ранних версиях дальномера. Сложность заключается в изготовлении сканирующей головки, которая должна быть прочно закреплена на подшипнике, вращаться без биений и при этом не нее нужно каким-то образом передавать электрические сигналы.
Во второй версии дальномера первые две проблемы я решил, использовав части старого HDD — сам диск использовался как основание сканирующей головки, а двигатель, на котором он закреплен, уже содержал качественные подшипники. В то же время, при этом возникла третья проблема — электрические линии можно было провести только через небольшое отверстие в оси двигателя. Мне удалось сделать самодельный щеточный узел на 3 линии, закрепленный в этом отверстии, но получившаяся конструкция получилась шумной и ненадежной. При этом возникла еще одна проблема — линии, чтобы пробросить сигнал энкодера, не было, и датчик энкодера в такой конструкции должен быть установлен на головке, а диск энкодера с метками — на неподвижном основании. Диск энкодера получился не жестким, и это часто вызывало проблемы.
Фотография второй версии дальномера:
Еще один недостаток получившегося дальномера — низкая скорость сканирования и сильное падение точности на расстояниях больше 3м.
Именно эти недостатки я решил устранить в третьей версии дальномера.
Электроника
Однако купить ее оказалось непросто. У основных поставщиков электроники этих линеек просто нет.
Первая линейка, которую я смог купить на Taobao, оказалась нерабочей. Второю я купил на Aliexpress (за 18$), она оказалась рабочей. Обе линейки выглядели паянными — обе имели облуженные контакты и, судя по маркировке, были изготовлены в 2007 году. Причем даже на фотографиях у большинства китайских продавцов линейки именно такие. Похоже, что действительно новую линейку ELIS-1024 можно купить только напрямую у производителя.
Светочувствительная линейка ELIS-1024, как следует из названия, содержит 1024 пикселя. Она имеет аналоговый выход, и достаточно просто управляется.
Еще более хорошими характеристиками обладает линейка DLIS-2K. При сходных размерах, она содержит 2048 пикселей и имеет цифровой выход. Насколько мне известно, именно она используется в дальномере Neato, и возможно, в RPLIDAR. Однако, найти ее в свободной продаже очень сложно, даже в китайских магазинах она появляется не часто и дорого стоит — более 50$.
Так как я решил использовать линейку с аналоговым выходом сигнала, то микроконтроллер дальномера должен содержать достаточно быстрый АЦП. Поэтому я решил использовать серию контроллеров — STM32F303, которые, при относительно небольшой стоимости, имеют несколько быстрых АЦП, способных работать одновременно.
В результате у меня получилась такая схема:
Сигнал с линейки (вывод 10) имеет достаточно высокий уровень постоянной составляющей, и ее приходится отфильтровывать при помощи разделительного конденсатора.
Далее сигнал нужно усилить — для этого используется операционный усилитель AD8061. Далеко расположенные объекты дают достаточно слабый сигнал, так что пришлось установить коэффициент усиления равным 100.
Как оказалось в результате экспериментов, даже при отсутствии сигнала, на выходе выбранного ОУ по какой-то причине постоянно присутствует напряжение около 1.5В, что мешает обработке результатов и ухудшает точность измерения амплитуды сигнала. Для того, чтобы избавится от этого смещения, мне пришлось подать дополнительное напряжение на инвертирующий вход ОУ.
3D рендер разведенной печатной платы:
Плату разводил двухстороннюю, сделать такую плату в домашних условиях качественно довольно сложно, так что заказал изготовление плат в Китае (пришлось заказать сразу 10 штук):
В этом дальномере я использовал дешевый объектив с резьбой M12, имеющий фокусное расстояние 16мм. Объектив закреплен на печатной плате при помощи готового держателя объектива (такие используются в различных камерах).
Лазер в данном дальномере — инфракрасный (780 нм) лазерный модуль, мощностью 3.5 мВт.
Изначально я предполагал, что излучение лазера нужно будет модулировать, но позже оказалось, что с используемой линейкой в этом нет смысла, и поэтому сейчас лазер включен постоянно.
Для проверки работоспособности электроники была собрана вот такая конструкция, имитирующая сканирующую головку дальномера:
Уже в таком виде можно было проверить, какую точность измерения расстояния позволяет обеспечить дальномер.
Для анализа сигнала, формируемого линейкой, были написаны тестовые программы для микроконтроллера и ПК.
Пример вида сигнала с линейки (объект на расстоянии 3 м).
Изначально схема была не совсем такая, как приведена выше. В ходе экспериментов мне пришлось частично переделать изначальную схему, так что, как видно из фотографий, некоторые детали пришлось установить навесным монтажом.
Механическая часть
После того, как электроника была отлажена, настало время изготовить механическую часть.
В этот раз я не стал связываться с механикой из HDD, и решил изготовить механические детали из жидкого пластика, заливаемого в силиконовую форму. Эта технология подробно описана в Интернете, в том числе и на Гиктаймс.
Уже после того, как я изготовил детали, стало понятно, что изготовить детали на 3D принтере было бы проще, они могли выйти тверже, и возможно, можно было бы сделать одну деталь вместо двух. Доступа к 3D принтеру у меня нет, так что пришлось бы заказывать изготовление детали в какой-либо компании.
Фото одной из деталей сканирующей головки дальномера:
Эта деталь является основой головки. Она состоит из втулки, на которую позже надевается подшипник, и диска. Диск предназначен для крепления второй детали башни, кроме того, на него снизу наклеивается диск энкодера.
Втулка и диск содержат сквозное отверстие, в которое вставляется покупной щеточный узел на 6 линий — его видно на фотографии. Именно те провода, что видны на фотографии, могут вращаться относительно корпуса этого узла. Для повышения стабильности работы для передачи сигналов GND и UART TX используется 2 пары линий щеток. Оставшиеся 2 линии используются для передачи напряжения питания и сигнала энкодера.
Силиконовая форма для отливки этой детали:
Вторая деталь сканирующей головки была изготовлена тем же способом. Она предназначена для крепления печатной платы и лазера к диску. К сожалению, фотографий изготовления этой детали у меня не сохранилось, так что ее можно увидеть только в составе дальномера.
Для крепления сканирующей головки к основанию дальномера используется шариковый подшипник. Я использовал дешевый китайский подшипник 6806ZZ. Честно говоря, качество подшипника мне не понравилось — ось его внутренней втулки могла отклонятся относительно оси внешней на небольшой угол, из-за чего головка дальномера тоже немного наклоняется. Крепление подшипника к детали с диском и основанию будет показано ниже.
Основание я сделал из прозрачного оргстекла толщиной 5 мм. К основанию крепится подшипник, датчик энкодера, двигатель дальномера и маленькая печатная плата. Само основание устанавливается на любую подходящую поверхность при помощи стоек.
Вот так выглядит основание дальномера снизу:
Печатная плата содержит регулируемый линейный стабилизатор напряжения для питания двигателя, и площадки для подключения проводов узла щеток. Сюда же подводится питание дальномера.
Как и в других дальномерах, двигатель вращает сканирующую головку при помощи пассика. Для того, чтобы он не сваливался с втулки, на ней имеется специальное углубление.
Как видно из фотографии, подшипник закреплен в основании при помощи трех винтов. На сканирующей головке подшипник удерживается за счет выступа на втулке и прижимается к ней другими винтами, одновременно удерживающими щеточный узел.
Энкодер состоит из бумажного диска с напечатанными рисками и оптопары с фототранзистором, работающей на отражение. Оптопара закреплена при помощи стойки на основании так, что плоскость диска оказывается рядом с ней:
Сигнал от оптопары через щетки передается на вход компаратора микроконтроллера. В качестве источника опорного напряжения для компаратора выступает ЦАП микроконтроллера.
Для того, чтобы дальномер мог определить положение нулевого угла, на диск энкодера нанесена длинная риска, отмечающая нулевое положение головки (она видна справа на фотографии выше).
Вот так выглядит собранный дальномер:
Вид сверху:
Разъем сзади дальномера используется для прошивки микроконтроллера.
Для балансировки сканирующей головки на нее спереди устанавливается крупная гайка — она практически полностью устраняет вибрацию при вращении головки.
Собранный дальномер нужно отюстировать — установить лазер в такое положение, чтобы отраженный от объектов свет попадал на фотоприемную линейку. Обе пластмассовые детали содержат соосные отверстия, располагающиеся под пазом лазера. В отверстия вворачиваются регулировочные винты, упирающиеся в корпус лазера. Поворачивая эти винты, можно изменять наклон лазера.
Наблюдая в программе на компьютере форму и амплитуду принятого сигнала и изменяя наклон лазера, нужно добиться максимальной амплитуды сигнала.
Также триангуляционные дальномеры требуют проведения калибровки, о чем я писал ранее:
Для того, чтобы при помощи датчика можно было измерять расстояние, нужно произвести его калибровку, т.е. определить закон, связывающий результат, возвращаемый датчиком, и реальное расстояние. Сам процесс калибровки представляет собой серию измерений, в результате которых формируется набор расстояний от датчика до некоторого объекта, и соответствующих им результатов.
В данном случае калибровка представляла собой серию измерений расстояний до различных объектов самодельным дальномером и лазерной рулеткой, после чего по полученным парам измерений выполняется регрессионный анализ и составляется математическое выражение.
Получившийся дальномер имеет существенный недостаток — из-за отсутствия модуляции излучения лазера он некорректно работает при любой сильной засветке. Обычное комнатное освещение (даже при использовании мощной люстры) не влияет на работу дальномера, но вот расстояние до поверхностей, прямо освещенных Солнцем, дальномер измеряет неправильно. Для решения этой проблемы в состав дальномера нужно включить интерференционный светофильтр, пропускающий световое излучение только определенной длины волны — в данном случае 780 нм.
Эволюция самодельных дальномеров:
Габаритные размеры получившегося дальномера:
Размер основания: 88×110 мм.
Общая высота дальномера: 65 мм (может быть уменьшена до 55 при уменьшении высоты стоек).
Диаметр сканирующей головки: 80 мм (как у mini-CD диска).
Как и у любого другого триангуляционного дальномера, точность измерения расстояния этого дальномера резко падает с ростом расстояния.
При измерениях расстояния до объекта с коэффициентом отражения около 0.7 у меня получились примерно такие точностные характеристики:
Как сделать дальномер для охоты
Дальномеры применяются при фотосъемках, когда требуется определить расстояние от фотоаппарата до снимаемого предмета, для того чтобы правильно настроить аппарат.
Для его постройки придется купить лишь маленькое карманное зеркало, которое должно быть хорошего качества и возможно более тонкое.
Схема устройства дальномера показана на рис. 1, а на рис. 2 показан общий вид прибора.
Как видно на рисунках, одно из зеркал устанавливается неподвижно, а второе может вращаться на оси. Неподвижное зеркало с оборотной стороны, со стороны лака и амальгамы, разделяется двумя линиями на три полоски равной ширины. Линии надо процарапать острием стальной иглы, а затем с помощью лезвия бритвы соскоблить со средней полоски лак и амальгаму.
Оба зеркала укрепляются затем с помощью жестяных скобок на деревянной планке. Для неподвижного зеркала скобка делается по рис. 3 и прикрепляется к основанию с помощью двух гвоздиков или шурупов.
Скобка для подвижного зеркала делается по рис. 4. К задней стенке скобки, точно по средней вертикальной линии, припаивается ось из булавки.
Снизу на эту ось насаживается длинный тонкий рычажок, который также припаивается к оси, но спайку эту надо произвести позже, когда будет точно определен угол между плоскостью скобки и рычагом. Для вращения оси в деревянном основании сверлится маленькое отверстие.
Кроме этих деталей, надо сделать эксцентрик, диск и пружину (рис. 1 и 2).
Неподвижное зеркало укрепляется у одного конца основания, подвижное — у другого. В середине между зеркалами сверлится отверстие, в которое вставляется ось. С одной стороны на эту ось надевается эксцентрик, а с другой—’ диск. Обе эти детали припаиваются к оси так, чтобы они вращались с некоторым трением. Полезно для этого подложить под диск пружинную шайбочку.
Укрепив эксцентрик и диск, их ставят в положение рис. 1. Теперь укрепляют пружинку, с помощью которой рычаг прижимается к ребру эксцентрика. Не сдвигая деталей, точно промеряют положение неподвижного зеркала. Оно должно стоять под углом 45° к ребру основания. Подвижное зеркало ставят точно под тем же углом к ребру основания так, чтобы плоскости обоих зеркал были параллельны.. Заметив положение рычага, его припаивают к оси подвижного зеркала.
Крышку дальномера можно сделать из дерева, картона, жести (рис. 2). В одной из длинных стенок крышки, точно против центра неподвижного зеркала, прорезается круглое окошко для наблюдения диаметром 4—5 мм. Точно против этого окошка в противоположной стенке прорезается квадратное окошко, равное по размерам зеркалу. Такое же квадратное окошко прорезается напротив подвижного зеркала. В верхней стенке крышки сверлится отверстие для верхнего конца оси подвижного зеркала.
Прибор берут в руки и подносят к глазу. Глядя сквозь окошко для наблюдения, направляют прибор на какой-нибудь отдаленный предмет, например на далеко стоящий дом (расстояние должно быть не менее 80—100 м), и начинают вращать диск. Изображение дома примет вид, показанный на рис. 5 слева. Тогда, вращая диск, следят за изображением и, когда вертикальные линии дома сольются и дои будет виден, как показано на рис. 5 справа, вращение прекращают и прибор переворачивают диском вверх. Осторожно, чтобы не сдвинуть диск, на него наносят первое деление и рядом с ним ставят значок бесконечности (рис. 6).
Теперь поворачивают диск точно на полокружности и наносят второе деление. Снова приставив прибор к глазу, направляют его на какой-либо близкий предмет. Не сдвигая диска, начинают приближаться к наблюдаемому предмету, следя за совпадением в дальномере. Отыскав такой момент, когда линии сольются, точно измеряют расстояние до предмета и наносят его на диск. Допустим, что это расстояние получилось равным 1 м. Это значит, что прибор будет давать показания в пределах от 1 и до бесконечности.