Чемпионат мира по программированию задания. Программисты университета итмо – семикратные чемпионы acm icpc! — Как проходил чемпионат

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

Так вот, сделать 3D сканер вполне возможно, для этого понадобятся:

  • Веб-камера (от ее качества, и минимального количества помех будет зависеть качество модели);
  • Лазерный уровень (или любой другой линейный лазер, и чем тоньше луч, тем более четким будет съем данных);
  • Несколько не сложных приспособлений (крепления, калибровочный угол);
  • Компьютерная программа для обработки снимков.

У нас на форуме вы можете познакомиться с примером .

Без соответствующей программы вы не сможете создать цифровую модель. Для этого вы можете воспользоваться программами TriAngles или DAVID-laserscanner. Чтобы воспользоваться продуктом TriAngles, вам понадобиться основание способное равномерно вращаться. При этом существует дополнительное ограничение – форма объекта должна быть сферической или цилиндрической.

А вот David-laserscanner – платная программа, но имеется бесплатная тестовая версия, в которой можно работать неограниченное время, правда с сохранением результатов в очень плохом качестве.

Для начала нам понадобится подготовить калибровочный угол, для этого достаточно распечатать шаблон идущий с программой и разместить его в конструкции с углом ровно в 90°.

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

Затем мы проводим калибровку камеры. В программе имеются режимы автоматической и ручной настройки, в нормальных условиях вам понадобится только автоматический. Ручной же используется когда в помещении плохое освещение или используется некачественно выполненный калибровочный угол. Чтобы улучшить результат калибровки – может понадобиться стереть ластиком (программным инструментом) лишние темные области на изображении.

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

Требуется отключить в настройках камеры любые режимы автокорректировки, а в настройках программы выбрать цвет вашего лазера. Затем нажимаем кнопку «Старт», включаем лазер и плавно, кистевым движением, водим его лучом по объекту, при этом желательно сохранять одинаковое положение руки. Это относится к одному циклу сканирования. Для съема состояния с точек куда не доставал лазер нужно менять его положение – располагать выше или ниже линии камеры. Луч лазера обязательно должен падать на сам предмет и на фоновые поверхности как слева так и справа от него.

На экране, в окне с результатами сканирования вы сможете наблюдать текущие состояние процесса.

Добившись достаточного заполнения вы сможете посмотреть на результат в трехмерном виде, для чего нужно нажать кнопку «Показать 3D»

Кстати, при данном сканировании, не обязательно пользоваться лазером, возможен вариант с проецированием на объект линии тени. Для этого нужен яркий источник цвета и, например, шнур.

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

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

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

Эти действия выполняются в приложении 3D Shape Fusion, которое позволяет качественно выравнивать и объединять 3D слои созданные с разных ракурсов. При склеивании можно указывать в каком режиме вы крутили предмет при сканировании – произвольно, вокруг вертикальной или горизонтальной оси, со случайным или фиксированным углом поворота, программа довольно-таки качественно объединяет сканы, но при этом у вас имеется возможность очистить изображения от лишних элементов.

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

Полученная после сшивания модель уже готова для дальнейшего использования – вы можете или распечатывать её или заняться редактированием в каких-либо сторонних программах.

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

В очередной раз магазин предложил взять на обзор что-нибудь. Поскольку меня давно интересовал вопрос применения данной штуки для нужд декоративной 3d-печати - я выбрал сканер.

Итак, сам сканер был разработан испанской компанией BQ, которая в настоящее время прекратила его поддержку (якобы из-за китайских подделок, но сомнительно. Сейчас данным сканером торгует и американская CowTech. Исходники для 3d печати частей сканера - лежат в свободном доступе на (там же ссылки на софт и электронику).

В комплекте имеем вот такую «рассыпуху»:

Сборка незамысловата, однако есть несколько моментов:
1. Спешить затягивать все гайки не стоит - придётся еще подстраивать геометрические размеры - сходимость лазеров в центре площадки, расстояния до поворотной платформы.
2. В моей стойке камера чуточку «болталась», на доли миллиметра - но этого хватило для перекоса картинки. Устранил подкладыванием вспененного материала.
4. Поворотная платформа была прозрачной и не имела покрытия (как в оригинале) - я покрасил ее plastidip-ом.
5. Проверяйте шаблоны калибровочной «шахматки». Не знаю как печатали ту, которая из моего комплекта - но пропорции квадратиков были нарушены. Взял из интернета и перепечатал сам.
6. Фокус камеры не настроен на расстояние до платформы. Снял крышку и подкрутил фокус по месту.











Как видим, «мозгами» сканера является обычная Arduino Uno в связки шилдом ZUM Scan и драйвером шагового двигателя A4988. Управляется хозяйство «родным» софтом Horus от BQ.

После сборки, сканер прошел калибровочные процедуры в родном софте Horus.

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

Подобрав «кандидатов» для проб, я приготовился.

Требования к объекту заявлены такие:
1. Объект должен быть больше 5х5 см, но меньше чем 20х20см
2. Объект должен быть непрозрачным и неподвижным
3. Объект должен весить не больше 3 кг

Затруднительно сканировать:
1. Блестящие, светящиеся объекты
2. Слишком темные объекты
3. Объекты с размытой поверхностью (например, мягкие игрушки)

Результатом сканирования является облако точек в формате PLY (которые потом необходимо преобразовать в поверхность). Вот здесь и подготовки STL-файла.

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



Ничего путного по данному поводу кроме попытки откалибровать настройки вебкамеры (они не калибруются при работе мастера калибровки) найти не удалось (чувак по имени Иисус из саппорта BQ - давно не отвечает на вопросы). Для этого необходимо наделать несколько снимков с различными положениями калибровочной таблицы. Наделал. Положение улучшилось, но не до конца.
Пришлось ручками править калибровочный файл (calibration.json в папке Horus-a) и методом проб ошибок, сканируя цилиндрический предмет - добиваться совпадения облаков.
И вот вроде все ок:



Но нет - на сложных предметах фрагменты облаков все равно порой не совпадают, к тому же образуется много «слепых» зон:





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

Можно, конечно продолжать экспериментировать со сканированием отдельными лазерами и попытками в стороннем софте совместить все это хозяйство, а потом попытаться приводить в жизнеспособный для STL вид.

Все это напоминает один анекдот с корабликами в бутылках.

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


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

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

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

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

Товар предоставлен для написания обзора магазином. Обзор опубликован в соответствии с п.18 Правил сайта.

Планирую купить +9 Добавить в избранное Обзор понравился +101 +156

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

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

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

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

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

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

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

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

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

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

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

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

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

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