Сканер ландшафта для велосипедных прогулок

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

Инструменты и материалы:
-Нить для 3D-принтера;
-Эпоксидная смола;
-Ткань из углеродного волокна;
-Пленка формата А4;
-Крепеж;
-Raspberry pi 3B +;
— Raspi Camera v2;
-SD-карта 32Гб;
-Повербанк 20 Ач;
-USB-кабель для подключения пауэрбанка;
-Удлинительный кабель usb (для передачи видео, не открывая корпус);
-Датчик скорости на велосипед (геркон + магнит);
-3D-принтер;
-Компьютер;
-Паяльник;
-Отвертки, шестигранные ключи, плоскогубцы;
-Мультиметр;
-Термофен;

Шаг первый: об устройстве
Цель заключалась в том, чтобы иметь очень гибкую систему (где можно настраивать параметры для точной настройки рендеринга (отрисовка)), способную без проблем работать часами и без создания слишком большого количества данных.

По функционалу устройство похоже на камеру с линейной разверткой (или, по сути, на то, что делает режим панорамы на большинстве смартфонов).

Идея состоит в том, чтобы использовать Raspberry Pi и камеру, работать от батареи и создавать отдельные вертикальные кадры на основе скорости велосипеда.

Так же задача была, чтобы устройство выглядело красиво и было ударопрочным (гоночный велосипед без подвески, есть сильные вибрации). По этим причинам он сделал одну сторону корпуса из углеродного волокна (CFRP). При этом есть версия и без углеродного волокна.
С SD-картой 32 Гб должно быть достаточно места для записи около 700 км пути, а с аккумулятором на 20 А•ч — на запись в течении около 20 часов.

Изначально результат выглядит примерно как на фото ниже (изображение с высоким разрешением, здесь 16,000×1,800 пикселей):

В дальнейшем эти снимки можно обработать и улучшить.

Шаг второй: 3D-печать
Сначала нужно напечатать детали корпуса. Файлы для печати можно скачать ниже. Деталь Main_Body для версии с углеродным волокном. Деталь Main_Body_noCFRP для версии без углеродного волокна.
Для печати понадобится около 300 грамм нити и 38 часов.
Camera_Centering.stl
Camera_Circle.stl
Camera_Fixation.stl
Cover_Body.stl
Fixation_Battery.stl
Fixation_Raspi.stl
Fixation_Saddle.stl
Holder_Magnet_Sensor.stl
Holder_Screw_Wheel.stl
Main_Body.stl
Main_Body_noCFRP.stl

Шаг третий: заливка
Деталь из углеродного волокна и эпоксидной смолы изготавливается за 4 простых шага:
-подготовка 3D-печати к отливке
-подготовка ткани из углеродного волокна
-заливка первого слоя эпоксидной смолы
-установка углеродного волокна и всех опорных элементов и герметизация их вторым эпоксидным слоем

Подготовка 3D-принта заключается в заклейке нижней стороны пленкой.

Затем нужно обрезать ткань на 2-3 мм больше внутреннего размера корпуса.

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

Затем заливается первый слой эпоксидной смолы. После полимеризации смолы, укладывает ткань, размещает крепление для Рассбери и заливает второй слой.

Шаг четвертый: датчик скорости
К датчику нужно припаять провода. Затем закрепить его на вилку велосипеда. Магнит закрепляется на клапане велосипедной камеры. Теперь при каждом обороте колеса, будет срабатывать геркон.

Дальше подключает провода от датчика к контактам 1 и 12 Рассбери.

Шаг пятый: настройка Рассбери
Дальше нужно будет установить raspi со стандартной ОС:
Скачиваем образ (не распаковывая) с Raspberrypi.org на компьютер.
Устанавливаем SD-карту в компьютер
Загружаем и запускаем Balena Etcher с balena.io
Запускаем belena Etcher
Кликаем ‘Flash from file’.
Выбираем файл.
Нажимаем ‘Select target’.
Выбираем свою SD-карту.
Нажимаем «Flash».
Затем устанавливаем SD-карту в Raspi.
Подключаем к Рассбери дисплей, мышь, клавиатуру и загружаем систему.
Подключаемся к Интернету.
Из терминала (ctrl + alt + T) запускаем «sudo apt-get update», а затем «sudo apt-get upgrade», чтобы обновить Рассбери.
Если планируется запускать все скрипты на raspi, то понадобится opencv для python: «sudo apt-get install
python3-opencv «, но мастер рекомендует запустить его на своем настольном компьютере после передачи видеофайлов.
Теперь нужно будет загрузить скрипты для получения и обработки изображений из этого руководства.
Создаем папку на Pi, в которой будет выполняться проект, и копируем туда файлы.
Чтобы автоматически запустить скрипт python при загрузке, мастер следовал инструкциям отсюда. Сценарий, который должен запускаться при загрузке, — это «Autoscript.py», он должен запускаться с помощью python 3.
Read_video.py
Autostart.py
Fusion_images.py

Шаг шестой: протокол SSH
Чтобы получить легкий доступ к raspi, мастер подключается к нему через SSH. Это позволит иметь доступ к файлам, не открывая корпус.
Для настройки протокола делаем следующее:
настраиваем Wi-Fi на Pi
подключаем его к домашнему Wi-Fi
записываем IP-адрес Рассбери

Затем нужно активировать SSH на Рассбери. Как только это будет сделано, подключаемся к Рассбери по сети.

Теперь можно редактировать код, удалять или копировать файлы по своему усмотрению. Пока ваш велосипед находится в пределах досягаемости домашнего Wi-Fi, включаем систему и подключаемся к ней.
После завершения выключаем пи следующим образом:

Шаг седьмой: установка устройства на велосипед
Теперь нужно установить устройство под сиденье велосипеда. Наружу выводится USB-кабель для переноса данных на компьютер и кабель для подключения повербанка.

Шаг восьмой: запись
Теперь можно прокатиться и просканировать местность.
Подключите USB-вход питания Рассбери к блоку питания. Pi загрузится и автоматически запустит скрипт для записи видео.
Чем стабильнее езда на велосипеде, тем лучше будут снимки.
Когда пользователь резко увеличивает или уменьшает скорость, камера будет генерировать
немного «неправильные» изображения, поскольку частота кадров обновляется только каждый оборот колеса. Точно так же, когда пользователь поворачивает на велосипеде, изображения будут сканироваться со скоростью велосипеда, даже если во время поворота скорость объекта, который сканируется, отличается.
На прямой, с близким к постоянному расстоянию до сканируемого объекта и с низкими вибрациями / раскачиванием велосипеда, можно получить хорошие изображения.

Шаг девятый: обработка изображений
После записи видео копируем его на USB-накопитель и переносим на компьютер.
Затем нужно будет преобразовать видео из формата .h264 во что-то, доступное для чтения opencv, например формат mp4. Для преобразования можно использовать любой удобный конвертер.
Мастер делает это в Линукс. Запускает команду: sudo apt-get update sudo apt-get install gpac
Затем переходит в папку с сырыми видео «.h264». Запускает следующую команду, которая преобразует все файлы «h.264» в текущей папке в mp4:
"for i in *.h264; do MP4Box -add $i "${i%.h264}.mp4"; done"

Теперь нужно извлечь каждый кадр из видео в формате «.mp4». Для этого запускаем скрипт «Read_video.py». Изменяем переменную «NumberVideosToProcess» на количество видеофайлов, которые нужно обработать.
Отдельные кадры будут сохранены в папке «Frames», которую нужно создать раньше внутри папки, в которой находятся видео.
Далее запускаем скрипт «Fusion_images.py».
Здесь можно изменить «FusionRatio» (int), который определяет коэффициент перекрытия для градиентного слияния двух соседних изображений (от 0 до 0,5).
Можно изменить «FotoWidth» (int), который представляет собой размер середины каждого кадра, используемого для слияния (от 1 до 64).
«NumberFotoPerFrame» (int), определяет количество кадров, объединенных в одно изображение.
Нужно изменить переменную NumberImageToProduce (int) на самую большую (int).
Результаты изображения будут сохранены в папке «Результат», которую нужно создать раньше, также внутри папки, в которой находятся видео.

В дальнейшем мастер предполагает расширить проект. В планах установить несколько камер сканирующих, в том числе и небо. Обработка видео до 3D, регистрация скорости велосипеда, добавление небольшого экрана и т.д.

Источник

Если вам понравилась статья, поделитесь ей в соц.сетях !