Представляю вниманию DIY сканер на базе Android смартфона. При проектировании и создании сканера, в первую очередь, интересовало сканирование крупных объектов. Минимум – фигура человека в полный рост с точность – хотя бы 1-2 мм. Данные критерии успешно достигнуты. Успешно сканируются объекты при естественном освещении (без прямого солнечного света). Поле сканирования определяется углом захвата камеры смартфона и расстоянием, на котором лазерный луч сохраняет достаточную для детектирования яркость (днем в помещении). Это фигура человека в полный рост (1.8 метров) с шириной захвата в 1.2 метров. Сканер был сделан из соображений «а не сделать ли что ни будь более или менее полезное и интересное, когда заняться нечем». Все иллюстрации – на примере «тестового» объекта (выкладывать сканы людей не корректно). Как показал опыт, для сканера такого типа ПО — это вторично и на него было потрачено меньше всего времени (на окончательный вариант. Не считая эксперименты и тупиковые варианты). Поэтому в статье особенностей ПО касаться не буду (Ссылка на исходные коды в конце статьи.) Цель статьи – рассказать о тупиковых ветках и проблемах, собранных на пути к созданию окончательной рабочей версии. Для сканера в окончательной версии используется:
- Телефон Samsung S5
- Красный и зеленый лазеры с линзой для линии (90 градусов линия) на 30 мВт со стеклянной оптикой (не самые дешевые).
- Шаговые двигатели 35BYGHM302-06LA 0.3A, 0.9°
- Драйверы шаговых двигателей A4988
- Bluetooth модуль HC-05
- Плата STM32F103C8t
Драйверы A4988, выставлены на half step, что с редуктором 15->120 дает 400*2*8 шагов на PI.
Выбор технологии сканирования.
Были рассмотрены следующие различные варианты.
LED Проектор.
Вариант был рассмотрен и просчитан. Даже дорогие проекторы не обладают нужным разрешением для достижения необходимой точности. А про дешевые даже говорить смысла нет.
Механическая развертка лазерного луча в сочетании с дифракционной решеткой.
Идея была проверена и сочтена годной. Но не для DIY исполнения, по причинам:
- Нужен достаточно мощный лазер, что бы после дифракции, метки были достаточно яркими (расстояние до объектива смартфона 1..2 метра). А глаза жалко. Лазер-точка уже с 30мВт не полезен.
- Требования к точности механической развертки в 2-х плоскостях – слишком высокие для DIY исполнения.
Стандартная механическая развертка лазер-линии на неподвижный объект сканирования.
В конечном итоге был выбран вариант с двумя лазерами разного цвета
- Разные цвета лазеров позволяют независимо детектировать их на одном кадре.
- Расположение лазеров по разные стороны камеры позволяет за один проход получить два скана.
- Два скана за раз позволяет объективно оценить качество юстировки сканера (сканы должны сойтись и наложиться друг на друга).
Как оказалось, последний критерий самый важный. Качество скана целиком определяется точностью измерения геометрических размеров и углов сканера. А наличие двух сканов от двух лазеров позволяет сразу оценить качество сканирования: Облака точек сошлись. Т.е. плоскости захваченные двумя лазерами сошлись на всей поверхности. Хотя с самого начала предполагал, что это тупиковый вариант, не обеспечивающий необходимой точности, я все равно его проверил c различными ухищрениями:
- Ось мотора зафиксирована подшипником.
- Добавлен элемент трения и стопор для выборки люфта редуктора.
- Попытка определения «точной позиции» фототранзистором, по засветке лазером
Повторяемость возврата на то же место линии лазера оказалась низка – 2-3 мм на дистанции 1.5 метра. При работе редуктора, несмотря на кажущуюся плавность, заметны рывки в 1-3 мм на расстоянии 1.5 метра. Т.е. 28BYJ-48 полностью не подходит для более или менее точного сканера крупных объектов.
Требования к развертке, исходя из моего опыта
Обязательным элементом развертки должен быть редуктор. Не стоит заблуждаться насчет режима 1/x шагов. Опыты показали, что в режиме 1/16 на A4988 микро шаги не равномерные. И на 1/8 эта неравномерность заметна на глаз. Самым оптимальным решением для редуктора оказалось использование ременной зубчатой передачи. Хотя она получилась довольно громоздкой, но простой в создании и точной. Точность позиционирования (точнее повторяемость позиционирования начальной положения лазеров для сканирования) лазеров оказалась около 0.5 mm для 5 мм ширины лазерной линии на 4 метра расстояния. Т.е. на расстоянии сканирования (1.2-1.8 метра) это вообще затруднительно измерить. Позиционирование – оптроны (китайский noname) на прорези в диске под лазерами.
Проблемы с передачей управляющих сигналов с телефона на модуль управления лазерами и шаговыми двигателями
Узким местом, с точки зрения скорости сканирования оказался управляющий канал. Поскольку это была DIY неторопливая разработка в собственное удовольствие, то были перепробованы все способы коммуникации со смартфоном.
Передача управляющих сигналов через Audio jack (phone Audio jack=> oscilloscope)
Самый тормозной способ для передачи данных в реальном времени. Да еще с плавающим временем. До 500 ms (!) от программной активации передачи аудио данных до фактического появления сигнала в Audio jack. Эта экзотика была проверена, поскольку, по работе приходилось иметь дело с мобильными ридерами чиповых карт.
Фотодиоды на экране смартфона (кусочек экрана телефона=>фототранзисторы+ STM32F103)
Был ради интереса опробован даже такой экзотический способ, как фототранзисторы матрицей 2×2 в виде прищепки на экран. Хотя этот способ выдачи информации с телефона оказался самым быстрым, но не настолько принципиально быстрее (10 ms vs 50ms) чем Bluetooth, что бы мирится с его недостатками (прищепка на экран).
IR канал (phone=>TSOP1736->STM32F103)
Практически проверен и способ передачи через IR канал. Даже некую реализацию протокола передачи данных пришлось сделать. Но IR так же оказался не очень удобен (фотодатчик крепить на телефоне неудобно), и не слишком быстрее чем Bluetooth.
WiFi модуль (phone=>ESP8266-RS232->STM32F103)
Результаты проверки этого модуля оказались совершенно обескураживающими. Время выполнения запрос-ответ (эхо) оказалась непредсказуемо плавающим в диапазоне 20-300 ms (в среднем 150 ms). Почему и что – разбираться не стал. Наткнулся только на статью где рассказывалось о неудачной попытке использовать ESP8266 для обмена данными в режиме реального времени с жесткими требованиями по времени запроса/ответа. Т.е. ESP8266 со «стандартной» прошивкой TCP -> RS232 не годится для подобных целей.
Выбранный вариант управляющего модуля и передачи сигналов
В конечном итоге, после всех экспериментов, был выбран Bluetooth (HC-05 модуль) канал. Дает стабильное (а это самое главное) время передачи данных запрос-ответ в 40ms. Время довольно большое и сильно влияет на время сканирования (половина от всего времени). Но лучшего варианта добиться не удалось. В качестве управляющего модуля широко распространенная плата c SM32F103C8T.
Методы детектирования линии на кадре.
Самый простой способ выделить линии лазере на кадре – это использовать вычитание кадра с выключенным лазером и кадра с лазером. В принципе, работает и поиск по кадру без вычитания. Но работает значительно хуже при дневном освещении. Хотя и этот режим был оставлен в ПО ради сравнительных тестов (фото режима ниже. Все остальные фотографии с режимом вычитания кадров). Практическая ценность варианта без вычитания кадров оказалась низка. Возможно и можно извлечь сигнал лазера из этой зашумленной информации. Однако возится не стал. Вариант с вычитанием кадров работает хорошо. Всякие эксперименты с попытками аппроксимации линии и обработкой всего кадра показали, что чем сложнее алгоритм, чем чаще он «ошибается» да еще и тормозит обработку «на лету». Самым быстрым (и простым) оказался алгоритм поиска лазера (лазерной точки) на горизонтальной линии:
- Для каждой точки линии считается сумма квадратов уровня цвета лазера (RGB) в окне, указанного в конфигурации (13 px – экспериментально оптимальная величина для окна)
- Точка лазера – середина окна с максимальным значением сумм уровней «цвета».
Время на обработку одного кадра поиском «зеленой» и «красной линии» — 3ms. Облака точек для красного и зеленого лазера считаются отдельно. При правильной механической юстировке сводятся с точностью < 1 мм.
Точность и юстировка
Точность оказалась в пределах 1 мм на расстоянии 1.2 метров. По большей части обусловлена разрешением камеры телефона (1920×1080) и шириной луча лазера. Очень важным для получения корректных сканов провести настройку статическую и динамическую. Точность/не точность настройки хорошо заметна при загрузке обоих облаков точек в MeshLab. В идеале облака точке должны сойтись, дополняя друг друга. Статически параметры, выставляются максимально точно один раз:
- Тангенс угла поля зрения камеры.
- Длинна «плеч» лазеров (от центра объектива до оси вращения).
Ну и конечно же максимальная фокусировка линз лазеров на заданное расстояние сканирования и «вертикальность» линий лазера. Динамический параметр фактического угла позиции лазеров относительно виртуальной плоскости кадра приходится подстраивать каждый раз заново при смешении телефона в креплении. Для этого сделан режим настройки в ПО. Сведением в центр экрана лазеров и подстройкой величины угла необходимо выставить расчетное расстояние максимально близко к истинному (измеренному) расстоянию для обоих лазеров. До подстройки: После подстройки:
Выводы
Такую конструкцию, пожалуй, может повторить любой. Я все детали вырезал из стеклотекстолита на ЧПУ. Конечно без ЧПУ фрезера сделать шкив под лазер затруднительно. Но с учетом того что нужен угол поворота максимум в 90 градусов, то при должном терпении шкив можно выпилить и надфилем. Но лучше все же делать на ЧПУ. Требования к осевому люфту поворотного узла высоки. Качество сканов на 100% определяется точностью изготовления и юстировки. Сканер делал в фоновом режиме. Временами с перерывами по паре месяцев. Поэтому оценить суммарную трудоемкость его создания не могу. Общая стоимость конструкции не слишком высока. Как показали мои эксперименты, хотя и до промышленных сканеров крупных объектов далеко, но вполне приличные сканы получить можно. На качество сканов в первую очередь влияет точность механической части. В этом смысле в DIY бороться с механикой созданной для промышленных сканеров сложно.Исходный код
Это важно! Личное обращение 4PDA к читателям
Привет. Мы редко обращаемся к каждому лично, но сейчас самое время это сделать. В очередной раз мы дружно оказались в сложной ситуации.В На этот раз страдает не только Россия, но и вся планета.В
В далее
HUAWEI представила в России компактные и мощные ноутбуки MateBook
Компания HUAWEI объявилаВ о начале приёма предзаказов в России на обновлённые ноутбуки MateBook X Pro и MateBook 13. Они получили новые процессоры Intel,В компактные размеры, экраны высокого разрешения с тонкими рамками, защиту с помощью сканера отпечатков пальцев и поддержку функции быстрого обмена данными между устройствамиВ HUAWEI Share.
В далее
Samsung придумала новый способ сделать смартфон безрамочным
Выпущенный в 2014 году Galaxy Note Edge был первым в мире смартфоном с изогнутым экраном. С тех пор это стало отличительной чертой флагманов Samsung и позже появилось у конкурентов. Похоже, что южнокорейский гигант намерен продолжить развивать данную концепцию, загнув дисплей сразу с четырёх сторон.
В далее
Xiaomi представила умные часы с 30-дневной автономностью за $21
Ассортимент носимой электроники Xiaomi дополнился новыми смарт-часами под брендом Haylou, входящим в экосистему вендора. Гаджет под названием Solar представлен в классическом дизайне с круглым циферблатом и примечателен длительным временем работы, защитой корпуса от воды и пыли, а также широким набором полезных функций.
В далее
Российский моддер отвязал Half-Life: Alyx от VR-устройства. Драйверы уже можно скачать
Недавно один из разработчиков Half-Life: Alyx с уверенностью заявил, что уже в скором времени для игры наверняка появится мод, внедряющий управление с помощью клавиатуры и мыши. Так и произошло: менее чем две недели спустя для скачивания стал доступен первый драйвер, позволяющий запускать игру без шлема виртуальной реальности.
В далее
Вместе с 3D-принтерами и сканерами появляется все больше программ и приложений, позволяющих создавать трехмерные модели для послойной печати. Конечно, 3D-сканер будет идеальным решением, но профессиональное оборудование – дорогое удовольствие. Что же делать, если необходимая техника отсутствует, а получить объемную модель необходимо здесь и сейчас? Ответ – подтянуть знания по основам фотосъемки и взять в руки фотоаппарат или смартфон.
Растущий спрос на послойную печать за последние несколько лет привел к разработке простых и дешевых методов сканирования с помощью подручных средств. Идея оказалась проста: для построения 3D-моделей достаточно нащелкать несколько десятков фото объекта, обработать их с помощью специализированных программ и получить готовую к послойной печати модель.
Обычный фотоаппарат
Для съемки можно использовать цифровые зеркальные камеры. Они позволяют сделать качественные универсальные фото. Причем для сканирования не потребуется покупка профессиональных моделей аппаратов. Так, с задачей справится и Nikon D5000 с разрешением матрицы 12,3 Мп. Более новые модели предложат и более качественные фото с высоким разрешением, но тогда придется пожертвовать временем обработки снимка. Кроме того, большинство цифровых камер имеют опцию сохранения изображений в формате RAW без сжатия, такой режим понадобится для более детального сканирования выбранного объекта.
В принципе для сканирования модели подойдут даже «мыльницы» и камеры смартфонов. Многие из них дают возможность съемки в ручном режиме, так что, если человек разбирается в азах съемки, можно использовать и менее продвинутые устройства.
Условия съемки
Что же можно легко сканировать? Такой объект должен быть устойчивым, не слишком блестящим, не очень большим (вокруг него придется ходить и снимать фото со всех возможных ракурсов), не слишком маленьким, не содержащим слишком много мельчайших деталей.
Объект лучше всего поместить на возвышение, это может быть стул или коробка. Так будет удобнее делать снимки. Главное здесь – добиться хорошего освещения. Если фотосессия проводится на улице, лучше дождаться пасмурного дня. Если съемка осуществляется внутри помещения, необходимо задействовать как можно больше источников света. Сам свет должен быть рассеянным.
Для этого лампы нужно направить на потолок, специальные экраны или зонтики. В идеале следует добиться наибольшей освещенности при минимальном количестве тени. Встроенная вспышка в данном случае не особо поможет. При ее использовании на фото будут появляться тени. Выходом может послужить применение внешних вспышек, опять же при условии, что они создают ровный рассеянный свет.
Базовые знания
Перед началом съемки необходимо ознакомиться с азами настройки камеры. В настоящее время в Интернете полно сайтов, где желающие могут самостоятельно подтянуть знания по основам работы фотографа. По большому счету, разобраться нужно с несколькими параметрами.
Светочувствительность (ISO), как следует из названия, определяет, насколько чувствительна камера к свету. Чем выше уровень светочувствительности, тем заметнее будут шумы (дефекты изображения); верна и обратная пропорциональность: чем ниже ISO, тем менее выражены шумы на фотографии. По словам специалистов, самые качественные изображения получаются тогда, когда съемка происходит на низких значениях ISO: 50, 100, 200. Верхний предел – ISO:400.
Следующий параметр – приоритет диафрагмы. Он представляет режим автоматического управления экспозицией фотоаппарата или видеокамеры, при котором автоматика бесступенчато выбирает выдержку затвора (время считывания кадра матрицей), в зависимости от установленной вручную диафрагмы. Для наиболее детального снимка выбор делается в сторону значения f11.
Наконец, последний основной параметр – скорость затвора или время, в течение которого затвор остается открытым и свет попадает на сенсор камеры. Если время выдержки невелико, можно «заморозить» движение.
Длинная выдержка позволяет получить «размазанное» движение (motion blur). Его часто применяют в рекламной фотографии автомобилей и мотоциклов, когда нужно передать ощущение скорости или движения автомобиля.
При выдержке более 1/60 камера чувствительна к сотрясению, и снимки могут получиться смазанными. Чтобы этого не произошло, при съемке с длинной выдержкой используется штатив.
Часто на камере в качестве значения выдержки бывает указан только знаменатель. Например, 125 означает скорость затвора 1/125 с. В значении выдержки знаменатель дроби должен, по меньшей мере, равняться фокусному расстоянию или быть больше него. Например, объективом 50 мм можно снимать с рук при выдержке не более 1/50 с, объективом 200 мм – не более 1/200 с.
Методика
Теперь, когда основные параметры выставлены, можно приступать непосредственно к съемке. Следует запомнить место, где делается первая фотография, можно даже его отметить. Здесь же будет и закончена фотосессия. Необходимо постараться, чтобы объект полностью заполнял кадр. В принципе, попавшие на снимок объекты на заднем плане не испортят процесса. Впоследствии они даже могут помочь программному обеспечению определить положение камеры.
Главное – качество 3D-модели будет напрямую зависеть от качества полученных снимков. Если на фото будет слишком много объектов на заднем плане, они попадут и в компьютерную модель.
Итак, съемку следует вести с разных ракурсов, перемещаясь вокруг объекта. Торопиться не следует, лучше сделать больше фото, чем потом столкнуться с их нехваткой и начинать процесс сначала. В зависимости от сложности объекта может потребоваться 40–100 снимков.
Программы для обработки
Далее получившиеся фото обрабатываются с помощью специального программного обеспечения. Оно бывает как платным, так и бесплатным в зависимости от функционала. К примеру, можно воспользоваться программой ReMake от компании Autodesk. Данное ПО позволяет конвертировать набор снимков в 3D-меши (полигональную сетку) высокого разрешения. Ячейки сетки можно редактировать, чинить, измерять, и оптимизировать. Так что, если при создании трехмерной модели на основе фото в ней появились огрехи, программа поможет устранить их до начала печати.
ReMake использует облачные вычисления, поэтому мощный компьютер для обработки фото конечному пользователю не потребуется. Единственное, нужно создать аккаунт на сайте Autodesk. Выполнив данный шаг, пользователь получит 5 Гб свободного места на 360.autodesk.com. ReMake использует этот ресурс для создания модели на основе снимков.
Убрать лишнее
Как показывает практика, при съемке в кадр попадают сторонние предметы, не относящиеся к нужному объекту. Программа позволяет избавиться от них до печати. Чаще всего получившаяся 3D-модель включает основу, на которой находился предмет при съемке. Чтобы очистить модель, нужно, запустив ReMake, выбрать инструмент lasso. Затем, удерживая левую кнопку мыши, выделяется ненужная область и нажимается delete на клавиатуре.
Иногда полностью убрать ненужные детали не получается. Инструмент lasso захватывает области на самом объекте. Во избежание этого с помощью правой клавиши мыши выбирается режим isolate selection (изоляция) и отмечается область, которую следует удалить с помощью инструмента lasso. Затем необходимо выйти из режима isolate selection, кликнув на соответствующую иконку. Модель почти готова для печати.
Программное обеспечение позволяет автоматически проверить модель на ошибки. Для этого нужно кликнуть по иконке 3D Print. Затем появится окно с предложением проанализировать объект на предмет ошибок. Пользователю остается только выбрать ответ Yes. Обработка данных займет от нескольких секунд до нескольких минут в зависимости от размера и сложности объекта.
В случае обнаружения ошибок на экране появится соответствующее окно, содержащее сообщение Unable to 3D print. Use analysis tools to fix the model (3D-печать невозможна. Используйте инструменты анализа для отладки). Далее нужно нажать кнопку Fix.
Появляется окно анализа, где выводятся данные о количестве «битых» ячеек. Также показывается их расположение на модели. Далее можно нажать кнопку Fix и отладить проблемные области одну за другой или же нажать кнопку Fix all holes, тогда программа преобразует все неправильные ячейки сразу. Различные инструменты программы позволяют вручную сгладить поверхность, удалить или добавить элементы. Для тех, у кого есть навык работы со снимками в Photoshop, редактирование модели в ReMake не должно вызвать трудностей.
Сканирование смартфоном
Создавать 3D-модели могут и приложения смартфонов, в частности Scann3D. Доступно оно для всех желающих в Google Play. Как и в случае с фотоаппаратом, пользователю предлагается сделать несколько десятков снимков с помощью смартфона, обойдя вокруг объекта, который нужно запечатлеть. В обучающем ролике фотографируется ствол дерева на улице. Программа обрабатывает изображения и выдает модель.
В качестве плюсов программы – интуитивно понятная работа приложения. Открыв его, пользователь видит три опции: создать новую модель, посмотреть существующие и продолжить. После того как был выбран вариант создать новую модель, запускается камера. Далее следует нащелкать снимков, неторопливо обойдя объект по кругу. Затем пользователь может просмотреть получившиеся фотографии и удалить ненужные или смазанные. Тапнув на галочку, владелец смартфона запускает процесс обработки снимков, по окончании которого и создается модель.
Трудности
На практике использование Scann3D сразу вызвало трудности. Первая попытка отсканировать сувенирного слона окончилась неудачей – модель вышла расплывчатой и напоминала слона отдаленно. Последующие сессии оказались чуть более удачными. Наконец, заменив объект съемки и приложив больше терпения, получить более-менее сносную модель все-таки удалось.
Для этого потребовался помощник, который стоял напротив камеры смартфона с листком белой бумаги. Это позволило отсечь фон. Всего было сделано 59 фотографий. Как выяснилось позже, нужно было еще штук пять для большей детализации морды фотографируемого игрушечного зверька.
На обработку изображений у не самого слабого смартфона (Samsung S6) ушло около 20 мин, иногда даже казалось, что аппарат завис. Тем не менее в конце концов модель была готова. Далее ее предлагалось экспортировать в различные форматы (obj, pcd, ply и stl) и распечатать на принтере. В общем, приложение оказалось неплохой альтернативой дорогим сканерам при условии, что большой точности конечного продукта не требуется.
Используемые источники:
- https://habr.com/post/412479/
- https://4pda.ru/2020/02/18/368064/
- https://abs-magazine.ru/article/kak-prevratit-fotoapparat-ili-smartfon-v-3d-skaner