Свой собственный 3D-сканер

Original author: Dentroman765
  • Translation
Моя цель была сделать полнофункциональный сканер, который сможет делать компьютерные 3d модели.
При этом я не хотел тратить на всё это больше $20. Правда, я не считал стоимость материалов, но всё-равно получилось не дороже $100.

image

Подготовка


Для того, чтобы найти точки в 3D пространстве, существует несколько способов.

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

Другой способ — использовать 3 плоскости или плоскость и линию.

Как видите, проще всего пользоваться третьим способом, а потом привести его результат к первому.

Однако возникает вопрос, как найти плоскости и её точки?

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

Аппаратная реализация


image

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

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

Хотя многие используют для этого нахождение краёв тени, я решил пойти другим путём.

Я нашёл у себя очень яркий зелёный лазер (можно использовать лазер от обычной лазерной указки, если у вас нет такого).

Лазер я направил через цилиндрическую линзу, которая превращает его в линию. Эту линию я и использовал для нахождения плоскости. Это отлично работает, но имейте в виду, что размер вашего сканера будет сильно ограничен размерами объектива: мой объектив примерно в треть дюйма в диаметре, и я ограничен сканируемым пространством примерно 2' на 6" на 6". Линзы меньшего размера будут работать лучше, но мне это не нужно.

Корпус


image

Для начала нам нужно сделать ящик, в котором будет находиться сканер. Низ и задняя стенка ящика сделаны из меламина, боковые стороны из фанеры. После того, как всё было сделано, я решил, что меламин является ненужным: возьмите фанеру и закрасьте её белым цветом. Это сэкономит вам несколько долларов.

Установка лазера


image
image

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

Установка камеры


image

Камера должна быть установлена сбоку, выше объекта. Это гарантирует, что лазерная линия будет отклоняться должным образом.
Теперь можно поставить какой-нибудь объект. Я использовал гнома. Посмотрите на камеру, и убедитесь, что лазер заметно отклоняется над объектом. Посмотрите на фотографию ниже, чтобы получить представление о том, что я имею в виду.

image

Программное обеспечение



image

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

Выполняем сканирование


image

Пришло время испытать наш сканер!

Сейчас сканируется лишь одна часть объекта — та, которая направлена в камеру. Однако можно доработать сканер.

Дальнейшее развитие



Ещё некоторые идеи, которые можно реализовать.

  • Автоматизация. Matlab, возможно, не лучший выбор в данном случае. Можно написать своё ПО и добавить больше моторчиков.
  • Добавить поворот камеры. Наряду с автоматизацией, это позволит вам сделать полную 3d модель.
  • В идеале, программное обеспечение должно убирать шум.

От переводчика: Если вам нужны исходные коды, то напишите автору оригинального текста.
Share post
AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 68

    +18
    Кое-как рассмотрел гнома.
      0
      А я очень долго пытался что-то рассмотреть, но получилось увидеть только колпак, и только при сравнении впритык с оригиналом.
        0
        Наверное он специально взял тёмного, чтобы был контраст с белым фоном.
          +39
          Скажите, а всех устраивает то, что раздел DIY превращается в переводную рубрику сайта instructables?

          DIY — вроде всегда был разделом, где автор постит то, что сделал "своими руками".
            +3
            Пожалуй, вы правы.
            Сейчас как раз думаю над тем, чтобы сделать кое-какую штучку самому.
            Скоро напишу о ней на Хабе, если сделаю.
              +2
              А куда, в таком случае, публиковать интересные переводные статьи для вдохновения (и в качестве предложения к реализации), где авторы делают что-то своими руками?
                +6
                А какой в этом смысл?
                Основная соль любой diy-статьи — это картинки и видео.
                Английский текст в instructables почти всегда очень примитивный и будет понятен любому технарю.

                Перевод любой diy-статьи — это на 80% копипаста картинок.
                Но хабр вроде как пытается быть сообществом именно авторов и избегать копипасты.

                Мое мнение, что лучше никуда не публиковать, чем так.

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

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

                Кстати, очень показателен пример вашего перевода про принтер из cdrom.
                Сначала люди восторженно думают «Вау, девушка сделала такую крутую штуку!» А потом заходят в комментарии и читают, что она всего лишь перевела статью и вставила картинки с другого сайта. Разочарование.

                Совсем идеально было бы, если бы Вы, вдохновившись статьей с instructables, попробовали бы повторить их опыт и описали бы его. Со своим текстом и своими картинками.
                  0
                  Быть может, ХабраХабру имеет смысл выделять автора оригинального текста?
                  К тому же каждый топик-перевод имеет специальный значок перед заголовком, так что в заблуждение никто не вводится.
                    +5
                    Я прекрасно понимаю ваше негодование по поводу переводов. Но, не имея намерения вас обидеть, отмечу, что это поверхностный взгляд на вопрос. Даже скорее вот так: первое, что приходит на ум при подобном стечении обстоятельств. Попробуйте не предвзято оценить мое мнение по этому вопросу, которое я изложу ниже.

                    На мой взгляд, DIY должен быть неким хранилищем оригинальных идей, которые желающие могут воплотить в жизнь. Ведь даже название блога говорит о его основном предназначении: «сделай сам». Отмечу, что сформулировано именно как «сделай сам», а не «сделал сам». То есть это именно предложение читателям вдохновиться статьей и сделать подобную штуку для собственного удовольствия. Вот вы предложили: «вдохновившись статьей с instructables, попробовали бы повторить их опыт и описали бы его. Со своим текстом и своими картинками». Мне кажется, что это не совсем правильно. Ведь оригинальная идея не будет принадлежать автору подобной статьи. С таким же успехом можно купить в каком-нибудь магазине радиоаппаратуры набор для робота, собрать его и выложить. Но что тут будет оригинального и интересного? Риторический вопрос.
                    Не зря на Хабре предусмотрена возможность публикования именно перевода. Чтобы люди могли поделиться чем-то интересным с зарубежных ресурсов на своем родном языке. В конце концов, многие учили в школе немецкий. Да, было бы дурным тоном публиковать статью от своего имени, но ведь подобные переводы оформляются в соответствии с правилами, с указанием автора и ссылкой на источник. Даже в названии перевода присутствует характерный значок «Z->Я». Вот вы упоминали опубликованный мною перевод. Но из текста его абсолютно не следует, что автор поделки — девушка. На эту тему можно сделать предположение лишь ознакомившись с ником опубликовавшего. Но ведь в практически 2-х миллиметрах от ника опубликовавшего стоит ник автора идеи и ссылка на источник. Другой вопрос, что читатели этого не замечают. Тут вспоминаются слова Пушкина: «Я сам обманываться рад». Конечно, это не вина читателя, переводчика или интерфейса хабра. Просто таково свойство психики человека.

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

                      А Вы и коллега по цеху твердите о том, что они опубликованы в соответствии с правилами хабра.

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

                      А вы отвечаете, что мол все такие люди «никто» (слова вашего коллеги) и «сами обманываться рады» (ваши слова).

                      В чем суть этого препирательства?
                        +1
                        Вообще, я подозревала, что это не «препирательство», а обмен конструктивными мнениями в поисках истины. Как известно, в споре рождается истина.

                        >Я говорю о том, что неплохо более явно указывать в тексте, что это перевод.
                        С вашего позволения, повторюсь: «Вот вы упоминали опубликованный мною перевод. Но из текста его абсолютно не следует, что автор поделки — девушка. На эту тему можно сделать предположение лишь ознакомившись с ником опубликовавшего. Но ведь в практически 2-х миллиметрах от ника опубликовавшего стоит ник автора идеи и ссылка на источник.»

                        Собственно, в данном случае автор идеи и автор перевода указаны одинаково явно. Другой вопрос, что:

                        >часть читателей этого не понимают
                        Части читателей надо быть внимательней. Обращаю внимание на ваше же слово «часть». Это не поголовное помешательство.

                        Более того отмечу, что вы элегантно умолчали на счет целесообразности публикования в DIY переводов. Вы либо солидарны с моими выводами на счет этого вопроса, либо ваше негодование на сий счет настолько велико, что даже писать об этом «язык не поворачивается». Все-таки хотелось бы прийти к консенсусу на эту тему.
                          +5


                          И не было никаких проблем…
                            +1
                            Да, солидарна. В таком исполнении было бы лучше.
                            Думаю, подобную идею стоит предложить разработчикам интерфейса для Хабра.
                              0
                              Можно написать на support@habrahabr.ru, но вряд ли они будут что-то исправлять. Возможно, что это даже в их интересах вводить читателей в заблуждение.
                            +1
                            Я прочитал и вроде понимаю все ваши аргументы, просто мне их недостаточно, чтобы поменять мнение.

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

                            Какую-то аргументацию (как мне казалось) я приводил, но повторяться и напирать на нее бессмысленно. Т.к. блог создан для читателей, а не для меня лично.

                            Тем более, опрос показывает, что читателям в среднем все равно — автор пишет сам, или это перевод. Мне казалось будет по-другому.

                            За сим самоудаляюсь из этого спора :). Пусть переводы будут.
                          0
                          При чтении статьи про принтер из СД-рома тоже первая мысль была — «Ого. Девушка-самоделкин». ;)
                  0
                  А можно ссылку на оригинал?
                    +1
                    Сорри, затупил
                    +5
                    1. 3D сканер
                    2. 3D принтер
                    3.…
                    4. PROFIT!!!
                      +14
                      3D PROFIT!!!
                        +2
                        3D копир же!
                          +1
                          А дальше 3d факс
                          0
                          3д ксерокс?
                            0
                            Представляю, если кто-то на него случайно сядет и включит…
                              –4
                              Ксерокс это фирма такая, устройство называется копир.

                              В Казахстане кстати кенон стал именем нарицательным для копира.
                                0
                                Интересно, если у нас в народе говорят «отксерить», то у них говорят «откенить», так чтоли? :)
                        +2
                        А если попробовать какой-нибудь лазерный дальномер использовать, с которого данные снять можно?
                          +1
                          Я когда начал читать, подумал было, что он и используется, но, как оказалось, нет.

                          Можно попробовать сделать примерно так: установить лазерный дальномер на поворотной штуке, которая будет «сканировать» объект по линиям с определенным шагом. «Отсканировать» объект с одной стороны, формируя на выходе массив из координат точек границы, основанных на разнице между расстоянием до задней стенки и расстоянием до точки. Таким образом отсканировать объект с четырех сторон света + сверху (хотя не уверен, что нужно сверху), потом уже программным методом построить модели по полученным точкам, почему-то в голову для этого приходит тот же маткад, в котором можно строить такие диаграммы объемные, хотя можно написать и какой собственный аналог, чтоб было более Ъ, ну а в конце уже соотнести полученные модели друг с другом относительно центральной оси. В идеале мы должны получить трехмерную модель сканируемого объекта.
                            0
                            Обычный лазерный дальномер(например для строителей) стоит хороших денег, да ещё и не позволяет снимать с себя информацию в реальном времени не разбирая девайс.
                              0
                              Старшие модели Leika Disto оборудованы bluetooth и по нему отдают данные после замера. Но вы правы, слишком дорого получается.
                            –1
                            Это же идеальные глаза для робота!
                              +13
                              Люди будут немного недовольны, когда им будут слепить зелёным лазером в глаза.
                                0
                                Можно взять ИК.
                                  0
                                  ИК вроде тоже вред глазам наносят.
                                    0
                                    То есть при нажимании на кнопочку пульта, на него лучше не смотреть?
                                      +3
                                      Не, там слабый луч.
                                      А вот на ИК лазер помощнее смотреть не стоит
                                +1
                                не совсем идеальные, в робототехнике есть термин SLAM, так вот там как раз и используются лазеры чаще всего.

                                Но есть одна сложность, для получения высокой скорости и точности измерения, замеряется время прохождения луча лазера до объекта и обратно, а это дорого. Подобные дальномеры я дешевле $1k не видел, а чаще всего они стоят более $5k! :(

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

                                Можете поискать в гугле по «laser rangefinder».

                                Второй вариант, это использование триангуляции, примерно как в стереофотографии, это намного дешевле (якобы можно уложиться даже в $30, реально есть девайсы стоимостью около $100). Такой метод используется в роботе-пылесосе Neato XV-11.
                                0
                                Год назад была статья на рендер.ру про похожий метод: www.render.ru/books/show_book.php?book_id=584
                                  0
                                  Там используется тень.
                                  А автор этой статьи пишет:
                                  Хотя многие используют для этого нахождение краёв тени, я решил пойти другим путём.
                                  +4
                                  Все уже украдено придумано до нас. www.david-laserscanner.com/
                                  Программа + лазер + web камера. На сайте можно найти много инфы о выборе лазера и т.д.
                                    0
                                    еще вроде Kinect-том подобные штуки можно делать
                                      0
                                      Именно на этом и основана работа сенсора Kineсt, насколько я знаю. Поправьте меня, если я не прав…
                                        0
                                        Более чем и софт/библиотеки уже и на Win написан
                                          0
                                          Нет, кинект работает по другому принципу: объект освещается ик-светодиодами, а затем CMOS-сенсор получает картинку в ик-спектре. Чем ближе объект — тем он ярче. Немного похоже на то, как выглядит тёмная комната, освещённая одной тусклой лампой. Ну или съемка в ночном режиме видеокамерой.
                                            +1
                                            Разве? Мне кажется, что kinect в инфракрасном диапазоне создает сетку точек, а камера фиксирует именно положение этих точек. Тоесть киннект не всю картинку использует, а именно эти свои яркие инфракрасные точки, и решение о позиции точки в 3д пространстве принимается в основном исходя из её положения на картинке, а не яркости. Поправьте, если не прав.
                                              +1
                                              Поправим. Там не сетка, а проектор, с высокой частотой стреляющий по одной точке в разные стороны, а расстояние замеряется простой тригонометрией за счёт смещения этой точки на изображении с ИК матрицы. Но в целом верно.
                                                0
                                                Хм, буду знать. Вывод про сетку сделал исходя из фотографий комнаты с работающим kinect камерой в режиме ночной сьемки.
                                        0
                                        > Добавить поворот камеры. Наряду с автоматизацией, это позволит вам сделать полную 3d модель.

                                        вращать объект уже не модно? :)
                                          +1
                                          Есть даже вариант как сделать: выдрать из микроволновки излучатель и спилить коробку)
                                          +1
                                          Автор, вполне возможно что твоя мечта сбылась бы и без лазера.
                                          Используя лишь один фотоаппарат. С помощью метода фотометрия.
                                          1. Open source PhotoSynthToolkit от visual-experiments.com. И ещё 2 от того же автора на www.visual-experiments.com/demos/. Давно пробовал, основная проблема тогда была в невозможности простого создания текстур в MeshLab.
                                          2. AgiSoft PhotoScan
                                          3. Autodesk готовит свой 123catch, в девичестве PhotoFly. К сожалению из России пока он недоступен, пишет всё время ошибку.
                                          4. Очень интересный форум об этом называется www.pgrammetry.com/forum/index.php, там полный список аналогичных программ, как платных, так и бесплатных, оффлайн и онлайн. Например, оттуда я узнал о бесплатном веб-сервисе www.hypr3d.com, где всё максимально просто.
                                            0
                                            Фотограмметрия дает очень плохое качество на сложных объектах. Разрешающая способность лазера или проектора на текущем уровне технологии получается много выше.
                                              0
                                              123catch работает в России. Результат еще из PhotoFly grabcad.com/library/cow
                                              в obj формате и пару фото. Все исходные фото я уже удалил. Если поборю лень, то напишу статью про этот сервис.
                                                0
                                                К сожалению у меня 123catch не доступен, что полгода назад, что сейчас, пишет что сервер недоступен.
                                                  0
                                                  Я столкнулся с двумя проблемами:
                                                  1) Нужно обязательно синхронизировать время на ПК с интернетом.
                                                  2) Очень не любит кириллицу в путях (папка установки и папка с исходными фото). Например: «c:\Мои фото\girl\» — будет ошибку выдавать в процессе обработки фото.
                                              +21
                                              Результат в 3D:
                                                0
                                                можно сетку глянуть?
                                                  0
                                                  www.david-laserscanner.com/

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

                                                    Только самые культурные когда увидели картинку и прочитали первый коммент — прочитали это слова как Гном:)
                                                      0
                                                      По идее можно использовать простой фотоаппарат => несколько снимков и соответствующий софт. Я хотел написать аналогичную программу для курсовой, но не осилил, поэтому поменял тему (уж больно там математики много).
                                                        0
                                                        Да, такие есть программы.
                                                        0
                                                        Думаю было бы интересно, если кто-то перевёл вот это:
                                                        lcamtuf.coredump.cx/25d/

                                                        Но похоже это незавершенная статья, и никто уже давно не думает о её завершении =(
                                                          0
                                                          У меня одного по ссылке гневный котик с надписью «you missed again.»?
                                                        +1
                                                        Пожалуйста, при переводе статей переводите футы и дюймы в сантиметры.

                                                        Only users with full accounts can post comments. Log in, please.