Первые 3D-принтеры, которые стоят дешевле игрового компьютера, стали обязательным атрибутом почти любого хакспейса или фаблаба (лабораторий технического творчества и электронного искусства). Теперь к ним присоединились 3D-сканеры. Студент МФТИ и сотрудник Политехнического музея Даниил Веловатый сам собрал трехмерный сканер из лазера, веб-камеры и подручных материалов. В рамках спецпроекта «Физтех. Читалка» он рассказал T&P о будущем сканирования реальности.

Даниил Веловатый
Даниил Веловатый

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

Лидар (от английского Light Detection and Ranging) — дорогое, но очень точное устройство. Оно позволяет с точностью до миллиметров строить 3D-модели объектов, размер которых можно сравнить с размерами здания. Из расшифровки аббревиатуры LIDAR следует, что им является любой дальномер, измеряющий расстояние при помощи света. Под это описание попадает невероятное количество устройств. Но чаще всего лидарами называют аппараты вроде этого:

Внутри аппарата размещена особая система зеркал. Здесь установлен фазовый лазерный дальномер, который измеряет расстояние при помощи лазера, а два зеркала служат для отклонения лазерного луча в двух плоскостях. Таким образом, луч пробегает определенный сектор пространства и строит его 3D-модель. Как можно догадаться, скорость такого сканера зависит от быстродействия дальномера и скорости вращения зеркал. А так как все это довольно сложное оборудование, требующее тонкой настройки, стоит оно довольно больших денег. Намного выгоднее бывает заказать сканирование, чем купить сам аппарат. Тем более что надо еще разбираться, как им пользоваться.

Технологии для землян

Так как устройства промышленного сектора были, мягко говоря, не по карману рядовому потребителю, а потребность сканировать реальность росла, появились дешевые настольные и ручные 3D-сканеры. Первые, как правило, имеют поворотный стол, на который помещается исследуемый объект. Спустя несколько минут после начала сканирования мы получим готовую модель. Конечно, качество сканирования и размер сканируемой области несравнимы с лидарами, зато стоят они на несколько порядков дешевле. Именно к такому классу устройств и относится разработанный нами сканер. Основная проблема этих сканеров в том, что сканируемый объект должен поместиться на поворотный стол, что сильно ограничивает область применения. Еще один существенный минус этих сканеров — неполнота сканирования и слепые зоны. Если вы, например, попытаетесь отсканировать вазу, то сканер увидит только ее внешнюю часть, а не полость внутри.

Второй тип сканеров — ручные 3D-сканеры. Их необходимо руками переносить вокруг объекта, но модель они строят с помощь камер. Алгоритм работы таких сканеров существенно сложнее, стоят они дороже, и качество результата хуже, зато они позволяют сканировать большие объекты и тратить на это меньше времени. Выглядят они примерно так:

Одно из основных преимуществ такого сканера — он не ограничен областью сканирования. Мы можем отсканировать, например, лицо человека без необходимости ставить его голову на поворачивающийся стол. При определенном усердии можно отсканировать даже целое помещение, если только точность позиционирования позволит это сделать. Чтобы повысить точность, можно наклеивать специальные метки, которые сканер находит и использует как реперные точки. Собственно, на фотографии выше так и сделано. Такой подход ограничивает область сканирования, но, к сожалению, здесь либо овцы целы, либо волки сыты.

В нашей лаборатории мы решили создать дешевый 3D-сканер, имеющий точность, сравнимую с точностью 3D-печати. Это был наш первый серьезный проект, поэтому мы допускали ошибки, многого не понимали и еще больше узнавали в процессе. Сначала мы построили простой лазерный дальномер из лазерной указки и веб-камеры. Чтобы понять, как 2D-камера позволяет измерять расстояние, придется подключить воображение. Представьте себе натянутую в воздухе нить, по которой ползет паук. Если мы стоим вплотную к веревке, то видим, как паук ползет строго на нас (не очень приятное зрелище). А если теперь мы посветим на всю эту конструкцию лампой сбоку, на полу мы увидим тень. Так как свет поступает сбоку, проекция паука будет двигаться по проекции нити. Измеряя расстояние от начала тени нити до тени паука, мы можем вычислить, сколько паук прополз, умножив на некоторый коэффициент, ведь мы создаем сжимающее отображение.

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

Чем дальше стенка, тем ближе к пунктирной ...

Чем дальше стенка, тем ближе к пунктирной линии будет точка pfc на матрице камеры

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

Сам сканер собран из фанерных деталей, которые были вырезаны лазером. Для поворота стола используется шаговый двигатель, которым управляет разработанная нами плата. Она же управляет яркостью лазера и подсветки.

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

Не пропустите следующую лекцию: