"Атлас" - разработанный проект, требующий доработок.

FabScan — это опенсорсный, сделанный своими руками лазерный 3d сканер. Я собрал свой из листов МДФ и различных подручных средств и в качестве примера решил выложить для вас процесс создания.

Шаг 1: Что вам понадобится




Для официального сканера FabScan необходимы:

  • Ардуино УНО
  • Шаговый двигатель A4988
  • Модуль лазерного 3д сканера FabScan-Shield для Ардуино
  • Модуль красного лазера 5mW
  • Блок питания 12V — 1A
  • Веб-камера Logitech C270

Для создания коробки вам понадобится 4 листа МДФ размером 600*300*5 мм.

В своём проекте я использовал:

  • Ардуино УНО
  • Биполярный шаговый двигатель — NEMA 17 (200 шагов)
  • Шаговый двигатель A4988
  • Модуль красного лазера 5mW
  • Блок питания 12V — 2A
  • Веб-камера Logitech C270

Так как мы будем использовать ПО FabScan, то я рекомендую держаться их списка деталей, всю документацию по эталонному 3 д сканеру FabScan вы легко найдёте в интернете.

Шаг 2: Собираем коробку-галерею для 3D-сканера




Показать еще 4 изображения





Для сборки короба для сканера я использовал Дремель и своё воображение. Это не так-то просто, ведь для того, чтобы получить корректное 3Д-изображение камера, лазер и шаговый двигатель должны находиться на правильных позициях. Если вы не хотите заморачиваться, то можно просто купить готовые части, но это обойдётся недешево .

Шаг 3: Соединяем модули


Сборка железа довольно проста:
Соедините модуль FabScan с Ардуино, а двигатель A4988 установите на своё первое положение шага. Соедините двигатель с выходными пинами, а модуль лазера с аналоговым пином A4. Наконец, подключите блок питания и кабель USB.

Если вы решили собирать сканер по моему списку деталей:
Тогда вам нужно подключить двигатель A4988 к пинам 10, 11, 9, 8 на Ардуино (при желании пины можно поменять), а модуль лазера подключить к пину A4. В конце также подключите блок питания и кабель USB.

Шаг 4: Код для Ардуино

Мы будем использовать официальный код от FabScan. Загрузите его на Ардуино и всё готово.

Если у вас установлен плагин Codebender, то можно залить код на Ардуино, перейдя по этой ссылке .

Если вы собираете сканер по моему списку деталей, то нажмите кнопку Edit и сделайте следующее:

  • Добавить строки #include const int stepsPerRevolution = 200;//поменяйте на кол-во шагов вашего двигателя Stepper myStepper(stepsPerRevolution, 10, 11,8,9);
  • Замените функцию step() следующей: void step() { myStepper.setSpeed(1); myStepper.step(1); }

Шаг 5: Софт для компьютера






Мы будем использовать образ «FabScan Ubuntu Live DVD». Вы можете скачать его . В этом образе софт FabScan уже предустановлен. Образ можно записать на флэшку, как это сделать можно найти в интернете.

Важная заметка: Если вы выбрали опцию «Try Ubuntu», то сохраните ваши файлы перед выключением компьютера!

Смотрите на приложенные фото и следуйте пунктам:

  • Выберите порт в SerialPort
  • Выбериет камеру в Camera
  • File — Control Panel
  • Кликнете на detect laser (не кладите ничего в сканер на данном этапе) и выберите ‘enable’
  • Кликните на «Fetch Frame» и убедитесь, что синяя горизонтальная линия касается верхушки вращающегося стола, а желтая горизонтальная линия касается его нижней части. Вертикальная желтая линия должна проходить через центр вращающегося стола. Незакреплённая камера может стать причиной искаженных сканов!

После настройки закройте окно панели управления, поместите объект в сканер, и нажмите на кнопку начала сканирования (start scan).

Сохранение 3D изображения:
Когда процесс сканирования завершится, можно сохранить 3Д объект в файл в форматах.pcd или.ply. Можно сохранить его также в формате stl, но он поддерживается не всеми платформами. Также можно открыть ранее отсканированный объект, выбрав File — OpenPointCloud.

Что делать с 3Д файлами?
Можно открыть их в MeshLab и напечатать на 3Д-принтере.
Для печати объектов в MeshLab:

  • Сохраните объект в формате.ply
  • Откройте файл в MeshLab
  • В MeshLab рассчитайте нормали (Filters/Point Set/Compute normals for point sets)
  • Реконструируйте поверхность при помощи реконструкции пуассонов (Filters/Point Set/Surface Reconstruction: Poisson)
  • Готово

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

Первый прототип

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

Камеру видно сразу, а лазер - это тот латунный цилиндрик над ней. Для вращения платформы мы применили два шаговых двигателя, которые в свою очередь были подключены к плате управления на микроконтроллере Atmega32. К ней же подключался лазер. Сама плата соединялась с компьютером посредством USB->UART переходника. Программа на компьютере делала снимки, обрабатывала их, заносила координаты полученных точек в файл и отсылала команды плате управления.

Результат был интересный. Да, мы находили расстояние. Да, мы могли «нацелиться» на любую точку в полусфере над сканером. И радости нашей не было предела. Но когда мы провели оценку времени сканирования этой полусферы, то оно оказалось равным 48 часам. И дело не в камере. И даже не в Java. А в том, что установка была настолько хлипкой, что колебалась после каждого поворота в течение пяти секунд. Приходилось делать измерение, поворачиваться и ждать пять секунд, пока она не перестанет качаться. А вдобавок библиотека для камеры перед каждым снимком включала ее, а затем выключала. На это уходило 1-2 секунды. Но летняя школа заканчивалась, и переделывать было некогда: это была уже ночь перед сдачей проекта. Вернее утро. На следующий день мы представляли наш проект на конкурсе перед научным жюри и неожиданно выиграли. Наверное, именно из-за этой победы мы решили продолжить нашу работу над этим проектом.

Версия два

На самом деле лето закончилось, а учебный год начался. Желание работать пропало. Установку планировали закончить к следующему конкурсу, до которого был целый месяц. Месяц. А потом внезапно три дня. Но за месяц мы решили изменить установку. Собрать ее крепкой, установить на лазерную указку линзу, которая будет создавать лазерную линию. Это позволило бы сканировать сразу 720 точек (в сканере стояла HD камера). Вот только три дня внесли свои коррективы:

Собран второй сканер из визирных пластиковых линеек, клея, малярного скотча и держится только благодаря синей изоленте. Вместо линзы стоит пробирка. На эту пробирку светит зеленый лазер. Отразившийся луч создает на экране более-менее равномерную лазерную полоску. Дальномер закреплен лишь на одном моторе, который вращает его в горизонтальной плоскости. Плату управления заменили на STM32VLDiscovery. Просто STM32 я знаю лучше, да еще и Atmega сгорела, а программатор был давно утерян. Выглядит не очень, зато работает! Колебания уменьшились, а скорость соответственно увеличилась. Но не сильно. Тут был обнаружен очень интересный подвох - китайская лазерная указка включалась не сразу, а плавно увеличивала свою мощность в течение секунды. Таким образом, секунда на колебания, секунда на прогрев лазера, секунда на снимок, а их два. Вот и получаем 4 секунды. Но за одно измерение мы находим расстояние до 720 точек! Выглядел процесс сканирования приблизительно так:

А результат так:

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

А что собственно конкурс? А вот ничего! Мы закончили сканировать все подряд в 4 часа ночи, а в 9 утра на стенде обнаружили, что лазер сгорел. Как оказалось, пока мы несли его из гостиницы к стенду, в него попал дождь, и при включении он сгорел. А выглядит она в нерабочем состоянии так, что поверить в слова «оно работало 5 часов назад» сложно. Мы расстроились. Желание продолжать улетучилось с дымком из лазера. Но все же была собрана…

Третья версия

И собрана она была опять же к конкурсу. Причем к нему мы готовились долго и основательно. Больше недели. И вот результат:

Первое что бросается в глаза - это то, что теперь мы сканируем не область вокруг сканера, а объект, который вращается на платформе. А так же мы достали нужную линзу, собрали все нормально, переписали программу, а еще заменили отладочную плату на самодельную. И еще теперь мы делаем только один снимок на измерение. Лазер достаточно мощный, а линза достаточно хороша для того, чтобы однозначно находить лазер на фотографии. Благодаря этому мы не дожидаемся прогрева лазера - он всегда включен. А еще камеру теперь включаем только один раз. То есть время тратится по большей части на поворот платформы и обработку изображения. В программе добавили меню выбора точности. Время сканирования - от двух до десяти минут. В зависимости от выбранной точности. При максимальной точности получается, что платформа за шаг поворачивается на 0,5 градуса, а расстояние определяется с точностью 0,33 мм. Платформа приводится в движение шаговым мотором через редуктор. Собственно платформа - большой диск, а резиновый валик на валу мотора - маленький. Мотором и лазером управлял микроконтроллер STM32F050F4 через полевые транзисторы. В самом начале статьи как раз скан игрушки, полученный с помощью этого сканера. Так как сканер выдает облако точек в формате.obj, то после триангуляции мы можем напечатать отсканированный объект на 3D принтере, что и видно на той же фотографии. На экране мы можем видеть модель после триангуляции. Никакой ручной работы над моделью не проводилось.

На конкурсе мы победили. А он давал проход на международный конкурс Intel ISEF. А потому мы начали работать над следующим сканером.

Четвертая версия

На данный момент это последняя версия сканера, которую мы собрали. Для сравнения на платформе стоит вторая версия. К разработке четвертого сканера мы постарались подойти со всей основательностью, с какой только могли. Установка была начерчена в САПРе, детали вырезаны лазером, все покрашено, ничего лишнего снаружи не торчит. Изменения: теперь платформа действительно является шестерней. Она вырезана из оргстекла и по краям у нее 652 зубчика. Это решает проблему, которая сильно портила сканы в предыдущем сканере: резиновый валик немного проскальзывал, из-за чего платформа часто поворачивалась не на 360 градусов. Сканы были либо с «вырезанным кусочком», либо с перекрытием. Здесь же мы всегда точно знали насколько повернута платформа. Мощность лазера сделали регулируемой программно. Благодаря этому можно было на ходу менять мощность лазера, избегая засветки ненужных частей при малой освещенности помещения. Для управления всей электронникой решили не разводить новую плату, а просто применить отладочную F401RE-Nucleo. На ней установлен ST-LinkV2.1, который работает отладчиком и USB->UART адаптером.

Точность получилась потрясающая: Угловое разрешение 0.14 градуса. По расстоянию 0,125 мм. Область сканирования представляет собой цилиндр высотой 20 см и диаметром 30 см. Цена всех деталей и резки лазером на момент его создания (май 2014) составляла менее 4000 рублей.

В процессе использования мы всего один раз ставили максимальную точность. Сканирование длилось 15-20 минут. Получили почти 2 миллиона точек. Ноутбук отказался рассчитывать модель из облака точек. Эксперимент больше не повторяли.

Заключение

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

Спасибо всем, кто дочитал до конца!

UPD:
Коллега нашел видео о работе сканера, которое мы снимали на ISEF:

Да, большая часть видео не интересная, но в конце моделька на ноутбуке.

А еще вот примеры отсканированных объектов. Но все они относятся к третьей версии сканера.
Dropbox
В файле model.obj хорошо видно, что получается при проскальзывании этого резинового валика на моторе - у собаки три глаза. Сканирование остановили, из-за чего получился вырез. Все файлы - это облака точек. Открывать можно при помощи MeshLab. Модели не обрабатывались руками. Полностью сырые данные. Сверху видно «белые пятна» - участки без точек. Их не видит камера. Так же белые пятна можно заметить и в других местах. Они появляются либо на слишком темных участках, либо при перекрытии поверхностей. Например в файле stn_10.obj рога козла перекрывают друг друга, из-за чего внутренняя поверхность рогов не отсканировалась.

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

Многие сегодняшние «кулибины» поставили перед собой задачу собрать требуемое 3D-оборудование самостоятельно из подручных и доступных по цене элементов, имеющихся в торговой сети, либо в списанном офисном оборудовании.

Таким образом появились в Интернете проекты и советы о том, как можно оказывается собрать 3д сканер собственными руками и затратить при этом не более $30.

Как сделать 3D-сканер самому

Материал необходимый для начала сборки

Что же может потребоваться тому, кто решил испытать себя и свои руки в благом деле - создании 3D-сканера из подручного материала?

Перечень достаточно небольшой и вполне доступный:

  • обязательна и очень важна качественная веб-камера, чтобы исключить помехи, которые могут возникать из-за ее низкого уровня;
  • линейный лазер – например, лазерный уровень или любое приспособление, испускающее лазерный луч. Причем чем тоньше он будет, тем качественнее будут отсканированные данные;
  • потребуются различные крепления, угол для калибровки и еще некоторая мелочь, которая оказывается нужна лишь в процессе сборки;
  • естественна потребность в специальном ПО для работы с отсканированным материалом и снимками.

Этапы сборки 3D-сканера

Нужно учесть, что без наличия соответствующего ПО цифровую модель того или иного объекта создать просто невозможно.

При этом нужно учесть, что, например, TriAngles или DAVID-laserscanner , являющиеся базовыми для работы потребуют наличия вращающейся поверхности.

  • Первое, что потребуется сделать – это создание калибровочного угла. Для этого распечатывается шаблон, который обязательно входит в комплект программы. Размещается он так, чтобы создать угол в 90°. Распечатывая нужно правильно все отмасштабировать, воспользовавшись калибровочной шкалой, все можно точно измерить и задать полученные параметры в самой программе.
  • Калибровка камеры – можно использовать автомат или ручной вариант, что предусмотрено программой.
  • Само сканирование потребует размещения предмета в калибровочном углу перед камерой. Нужно добиться, чтобы размещение пришлось точно по центру изображения на экране. Сбоку должны четко определяться элементы от угла калибровки.
  • Нужно обратить внимание на настройки, которые имеются у камеры. В них требуется отключить все автокорректировки и установить цвет лазерного луча. При нажатии «Старт» нужно начинать совершать плавные движения кистью, обводя лучом объект со всех сторон. Так проходит один цикл сканирования объекта. Чтобы охватить точки не обработанные в первый цикл изменяется положение лазера – выше или ниже и обеспечивается очередной цикл обработки.
  • По окончании всех процессов потребуется остановить сканирование и в программе выбрать режим «Показать в 3D».

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

Только в программе необходимо изменить настройки на соответствующие параметры.

3d сканер своими руками из двух камер

Вариант 3D-сканера с двумя камерами наиболее эффективен, когда требуется высокая точность соответствия оцифровки. Он наиболее прост в применении.

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

3d-сканер с двумя камерами сократит время на эти вычисления и сразу позволит оперировать всеми необходимыми параметрами, получая данные с 2-х камер.

Является аналогом известного лазерного сканера FabScan, который разработал Франциск Энгелманн. В качестве бокса для такого сканера автор использовал МДФ, что касается начинки, то она также немного отличается от оригинала.

Оригинальной является программа для Arduino, она была взята с оригинального проекта.

Материалы и инструменты для создания сканера:

4 листа МДВ 600Х300 мм, толщина 5 мм (они нужны для создания корпуса);
- шаговый двигатель (NEMA 17 на 200 шагов);
- драйвер для шагового двигателя L298N;
- модуль лазера мощностью 5 мВт (используется от производителя Red Line);
- для питания устройства нужен источник 12 В - 2 А;
- веб-камера модели Logiteck C270.






В оригинальной самоделке используется драйвер шагового двигателя A4988, а что касается шагового двигателя, то это также NEMA 17. В остальном элементы самоделки точно такие, как и в оригинальной версии.

Процесс изготовления сканера:

Шаг первый. Делаем корпус
Весь процесс создания корпуса для сканера можно увидеть на фото. Самое главное в этом деле - точность. Модуль лазера шаговый двигатель и веб-камера должны находится четко на нужных местах, в соответствии с проектом.













Шаг второй. Подключаем электрооборудование


Есть два способа подключения оборудования, это с шилдом и без него. Рассмотрим подробнее каждый из этих вариантов.

Подключение без шилда
Если принято решение собирать устройство без использования шилда, то выводы шагового двигателя L298 подключаются к контактам Arduino под номерами 10, 11, 9, 8. В принципе, можно использовать и другие контакты, но при этом нужно будет вносить изменения в скетч.
Что касается модуля лазера, то его нужно подключить к пину А4 на контроллере Arduino. После этого можно будет подключать USB-кабель и питание.

Подключение с шилдом
Нужно установить шилд FabScan на Arduino. Что касается драйвера шагового двигателя, то его нужно установить на рельсы, которые для этого предусмотрены. Контакты шагового двигателя подключают к соответствующим контактам на шилде.
Модуль лазера нужно подключить к пину А4 на Arduino. Вот и все, после этого подключается питание и USB-кабель.

Шаг третий. Установка скетча
Теперь нужно скачать и установить официальный скетч для FabScan. Чтобы прошить Arduino, нужно скачать плагин Codebender и затем нажать кнопку "Run on Arduino". При этом скетч можно будет установить прямо через браузер с официального сайта.


Если не использовался шилд, то нужно нажать кнопку Edit и затем добавить такие строки:

const int stepsPerRevolution = 200; // измените этот параметр, чтобы настроить количество шагов на поворот вала вашего шагового мотора

Stepper myStepper(stepsPerRevolution, 10, 11,8,9);
Замените функцию step():

myStepper.setSpeed(1);

myStepper.step(1);

Шаг четвертый. ПО для сканера
Для установки программы нужно скачать образ «FabScan Ubuntu Live DVD», после установки появится программное обеспечение FabScan.

В программе нужно произвести некоторые настройки:

Сперва нужно выбрать SerialPort;
- далее выбираем Camera;
- после этого File - Control Panel;
- затем жмем detect laser и выбираем «enable» (при этом ставить никаких объектов перед лазером не нужно);
- ну а теперь жмем «Fetch Frame», при этом синяя горизонтальная линия должна касаться нижней части вращающегося стола. Желтая линия должна быть по центру стола. Если камера будет установлена неправильно, то изображение будет плохого качества.












Вот и все, программа настроена. Теперь можно ставить в сканер какой-то объект, и после этого нажимаем кнопку Start Scan.

Шаг пятый. Сохраняем изображение
После того как сканирование объекта будет завершено, изображение можно будет сохранить в формате.pcd или же.ply. Еще можно сохранить в формате stl, но это уже зависит от используемой платформы.
Чтобы открыть объект, который был сохранен ранее, нужно выбрать File - OpenPointCloud.

FabScan - это open-source, DIY 3D лазерный сканер.

Начало проекта было положено во время разработки бакалаврского проекта Франциска Энгелманна. Официальная страница проекта находится .

На основании этого проекта, разработан аналог, который и рассмотрен в статье. Для бокса используется мдф. Электронная начинка тоже несколько отличается.

Программа для Arduino взята с оригинального проекта. Так что спасибо команде FabScan за отличный open-source 3D сканер!

Итак, приступим.

Необходимые компоненты

Детали и узлы для оригинального проекта FabScan:

  • Драйвер шагового двигателя A4988;
  • Шилд FabScan;
  • Биполярный шаговый двигатель NEMA 17 (200 шагов);
  • Источник питания 12 В - 1 А;
  • Веб-камера Logitech C270.

Для корпуса надо 4 листа из МДФ. Размеры - 600 мм на 300 мм. Толщина - 5 мм. Более детальная информация .

Детали и узлы, которые используются в этой инструкции:

  • (200 шагов);
  • Драйвер шагового двигателя L298N;
  • Модуль лазера на 5 мВт - производитель Red Line;
  • Источник питания 12 В - 2 А;
  • Веб-камера Logiteck C270.

То есть мы просто не станем использовать шилд FabScan и используем другой модуль драйвера шагового двигателя

Разработка корпуса для 3D сканера

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

Сборка 3Д сканера







1. С шилдом .

Установите FabScan шилд на Arduino. Драйвер шагового двигателя A4988 устанавливается на предусмотренные рельсы. Шаговый двигатель подключается к соответствующим контактам на шилде. Модуль лазера подключается к аналоговому пину A4. После этого можете подключать питание и USB кабель. Более детальная иструкция находится .

2. Без шилда .

Если вы решили собрать сканер без использования шилда, подключите драйвер шагового двигателя L298 к контактам 10, 11, 9, 8 на Arduino (в принципе, эти контакты можно изменить с соответствующими правками в скетче). Модуль лазера подключается к пину A4 на Arduino . Все. Можно подключать питание и USB кабель.


Скетч для Arduino

Важное примечание! Если вы используете опцию "Try Ubuntu", убедитесь, что вы сохранили файлы перед тем как выключить персональный компьютер!

Следуйте инструкции, фотографии к которой приведены ниже:

  • Выберите SerialPort;
  • Выберите Camera;
  • File - Control Panel;
  • Нажмите detect laser (пока что не устанавливайте никаких объектов перед сканером) и выберите "enable";
  • Нажмите "Fetch Frame" и убедитесь, что синяя горизонтальная линия касается вершины вращающегося стола, а желтая горизонтальная линия касается нижней части вращающегося стола. Кроме того, желтая вертикальная линия должна совпадать с центром вращающегося стола. Если камера установлена некорректно, результат сканирования будет не четким!

После настройки закройте окно, установите объект в 3 D сканере и нажмите кнопку Start Scan.

Примечание: дополнительные материалы по настройке Файла configuration.xml изложены в этом гайде .

Сохранение 3D изображения

Когда процесс 3Д сканирования завершится, вы сможете сохранить сканированный 3D объект с расширением.pcd или.ply. Можно сохранить и в формате 3D stl файла, но эта возможность доступна не на всех платформах. Открыть сканированный и сохраненный ранее объект можно, выбрав File - OpenPointCloud.

Что дальше?

Вы можете использовать MeshLab для обработки сканированного 3Д объекта и распечатать его на 3D принтере!

При обработке файла в MeshLab:

1. Убедитесь, что вы сохранили объект как.ply файл.

2. Откройте файл с помощью MeshLab.

3. В MeshLab рассчитайте нормали (Filters/Point Set/Compute normals).

4. После этого перестройте поверхность, используя Poisson reconstruction (Filters/Point Set/Surface Reconstruction: Poisson)

Окончательно собранная конструкция приведена на фото ниже.


Видео работы оригинального FabScan 3-Д сканера:

Огромное спасибо команде FabScan за потрясающий open-source сканер на Arduino!!!

Оставляйте Ваши комментарии, вопросы и делитесь личным опытом ниже. В дискуссии часто рождаются новые идеи и проекты!