Наш лидар предназначен для сбора точек для последующего построения 3D модели помещения. В дополнение к лидару была написана программа на С++, строящая 3D-модель по полученному облаку точек Lidar-Viewer.
Нашей основной задачей было создание недорогого лидара, способного сканировать не просто одну плоскость в 360 градусов, а полусферу, с большой скоростью (P.S. ни один существующий аналог не обладает всеми этими качествами).
Моторы крутят дальномер в двух плоскостях и по прерыванию мы собираем данные с дальномера и с моторов (дистанцию до точки и углы, на которые повернулся дальномер) и записываем их в файл. Мы получаем файл с данными в сферической системе координат, открываем файл в программе Lidar-Viewer и либо анализируем полученную 3D-модель в этой программе, либо конвертируем файл в объектный формат в этой программе и можем открывать его в любой другой программе.
- Arduino UNO – 2 шт
- Модуль датчика дальномера Benewake TFmini-S Lidar TOF – 1 шт
- Бесщеточный двигатель HT2205 – 2 шт
- Магнитный энкодер AS5048A - 2 шт
- Капсульное скользящее кольцо, 8-ми канальное, 8.5 мм в диаметре – 1 шт
- Капсульное скользящее кольцо, 18-ти канальное, 12.5 мм в диаметре – 1 шт
- Модуль Micro SD Card Reader – 1 шт
- Micro SD карта – 1 шт
- Регулятор бесколлекторного мотора – 2 шт
- Часы реального времени – 1 шт
- Аккумулятор на 12В – 1 шт
В ходе работы было изготовлено два прототипа.
Сначала был изготовлен прототип на основе шаговых моторов.

В результате работы этого лидара было получено 1000 точек и достаточно хорошая 3D-модель помещения. Основным минусом этого прототипа была скорость работы, а также большая масса.
В связи с этим было принято решение изготовить лидар на основе бесколлекторных моторов.

В ходе разработки наша команда столкнулась с проблемой невозможности подключения дальномера и энкодеров с моторами к одной Arduino. Поэтому мы были вынуждены использовать еще одну Arduino для подключения к ней дальномера. Это привело к еще одной проблеме: теперь две независимые Arduino нужно было внешне синхронизировать для того, чтобы получать данные с разных датчиков одновременно. Для этих целей было принято решение использовать модуль часов реального времени. Общение двух Arduino между собой было реализовано с помощью hardware serial-соединения.
В ходе тестирования полученного лидара была обнаружена большая проблема - нам не удавалось получать данные с дальномера и энкодеров в один момент, т.е. пока данные с дальномера доходят до Arduino, энкодеры уже посылают значения углов для другой точки. Это приводит к тому, что происходит постоянный сдвиг расстояния и углов, что в свою очередь приводит к неправильному облаку точек. Для упрощения тестирования системы мы были вынуждены переводить систему к механическому управлению: модуль часов реального времени был заменен на кнопку (и то, и то вызывает внешние прерывания системы). 
Изготовления каждого прототипа состояло из таких этапов как 3D моделирование корпусов и их печать, паяние компонентов, сборка всех компонентов воедино, написание кода, тестирование системы.
Также была написана программа на С++, строящая 3D-модель помещения по полученному облаку точек, а также конвертирующая файл, полученный с лидара в объектный файл (.obj) - Lidar-Viewer.

- Мы сделали два прототипа
- С помощью первого прототипа получилось построить хорошую 3D-модель помещения
- С помощью второго прототипа получилось собрать точки намного быстрее
- На основе этих точек не получилось построить 3D-модель помещения
- Написали программу для открытия файла с лидара и строющую эти точки
Мы пришли к выводу, что неправильно выбрали основной микроконтроллер (Arduino UNO) и в будущем хотим перейти на микроконтроллер от STM32. Это позволит разместить все датчики на одном микроконтроллере, что приведет к упрощению схемы, ненужности внешней синхронизации, а также уменьшению задержек при передачи информации. Это позволит получать данные с датчиков синхронно, а, значит, и получить хорошую 3D-модель при помощи нашего лидара.