Моя цель была сделать полнофункциональный сканер, который сможет делать компьютерные 3d модели.
При этом я не хотел тратить на всё это больше $20. Правда, я не считал стоимость материалов, но всё-равно получилось не дороже $100.
![image](https://habrastorage.org/r/w780q1/getpro/geektimes/post_images/c1c/8c6/fe6/c1c8c6fe6d3539eafd1d871631339d8a.jpg)
Для того, чтобы найти точки в 3D пространстве, существует несколько способов.
Простейший из них — это использовать 3 числа, чтобы описать позицию одной точки по отношению к другой.
Этот способ используется большинством компьютерных моделей.
Другой способ — использовать 3 плоскости или плоскость и линию.
Как видите, проще всего пользоваться третьим способом, а потом привести его результат к первому.
Однако возникает вопрос, как найти плоскости и её точки?
Как оказалось, первое реализуется аппаратной частью, а второе программным обеспечением.
![image](https://habrastorage.org/r/w780q1/getpro/geektimes/post_images/df2/25b/931/df225b931e0b553248b8624f62b954d1.jpg)
Сначала я люблю объяснить основную идею, а затем переходить к реализации. Это поможет вам находить свои собственные решения.
Итак, нам нужно найти плоскость и как-то записать, где эта плоскость находится, чтобы компьютер смог составить модель.
Хотя многие используют для этого нахождение краёв тени, я решил пойти другим путём.
Я нашёл у себя очень яркий зелёный лазер (можно использовать лазер от обычной лазерной указки, если у вас нет такого).
Лазер я направил через цилиндрическую линзу, которая превращает его в линию. Эту линию я и использовал для нахождения плоскости. Это отлично работает, но имейте в виду, что размер вашего сканера будет сильно ограничен размерами объектива: мой объектив примерно в треть дюйма в диаметре, и я ограничен сканируемым пространством примерно 2' на 6" на 6". Линзы меньшего размера будут работать лучше, но мне это не нужно.
![image](https://habrastorage.org/r/w780q1/getpro/geektimes/post_images/afe/670/e5d/afe670e5d02827335ee6c6b979eaa0ac.jpg)
Для начала нам нужно сделать ящик, в котором будет находиться сканер. Низ и задняя стенка ящика сделаны из меламина, боковые стороны из фанеры. После того, как всё было сделано, я решил, что меламин является ненужным: возьмите фанеру и закрасьте её белым цветом. Это сэкономит вам несколько долларов.
![image](https://habrastorage.org/r/w780q1/getpro/geektimes/post_images/22c/c7c/1d7/22cc7c1d7453656a3a8656010d46a5be.jpg)
![image](https://habrastorage.org/r/w780q1/getpro/geektimes/post_images/4f1/605/ca9/4f1605ca90c56491c1a3320e845f78a2.jpg)
Следующим шагом является установка и крепление лазера.
Я использовал старый кусок дерева. Ролики установлены таким образом, что лазер катится по рельсам в верхней части окна. Там лазер и объектив монтируется так, чтобы плоскость света падала перпендикулярно верхней и нижней части окна.
![image](https://habrastorage.org/r/w780q1/getpro/geektimes/post_images/ca1/ffb/713/ca1ffb7131e5177197c1b431cfb0fd7a.jpg)
Камера должна быть установлена сбоку, выше объекта. Это гарантирует, что лазерная линия будет отклоняться должным образом.
Теперь можно поставить какой-нибудь объект. Я использовал гнома. Посмотрите на камеру, и убедитесь, что лазер заметно отклоняется над объектом. Посмотрите на фотографию ниже, чтобы получить представление о том, что я имею в виду.
![image](https://habrastorage.org/r/w780q1/getpro/geektimes/post_images/c1c/8c6/fe6/c1c8c6fe6d3539eafd1d871631339d8a.jpg)
![image](https://habrastorage.org/r/w780q1/getpro/geektimes/post_images/e44/00f/c36/e4400fc36340f66f23dfabca36ffb877.jpg)
Идея, лежащая в основе программного обеспечения, также довольно проста. Есть ряд точек, каждая из которых соответствует пикселю на камере. Фокус в том, чтобы узнать, как перевести точки между двумя пространствами. Как оказалось, это сводится к довольно простым уравнением.
![image](https://habrastorage.org/r/w780q1/getpro/geektimes/post_images/69d/e94/132/69de94132ce69eeb925a49462478ea9c.jpg)
Пришло время испытать наш сканер!
Сейчас сканируется лишь одна часть объекта — та, которая направлена в камеру. Однако можно доработать сканер.
Ещё некоторые идеи, которые можно реализовать.
От переводчика: Если вам нужны исходные коды, то напишите автору оригинального текста.![](http://st.habrate.ru/pixel.gif)
При этом я не хотел тратить на всё это больше $20. Правда, я не считал стоимость материалов, но всё-равно получилось не дороже $100.
![image](https://habrastorage.org/getpro/geektimes/post_images/c1c/8c6/fe6/c1c8c6fe6d3539eafd1d871631339d8a.jpg)
Подготовка
Для того, чтобы найти точки в 3D пространстве, существует несколько способов.
Простейший из них — это использовать 3 числа, чтобы описать позицию одной точки по отношению к другой.
Этот способ используется большинством компьютерных моделей.
Другой способ — использовать 3 плоскости или плоскость и линию.
Как видите, проще всего пользоваться третьим способом, а потом привести его результат к первому.
Однако возникает вопрос, как найти плоскости и её точки?
Как оказалось, первое реализуется аппаратной частью, а второе программным обеспечением.
Аппаратная реализация
![image](https://habrastorage.org/getpro/geektimes/post_images/df2/25b/931/df225b931e0b553248b8624f62b954d1.jpg)
Сначала я люблю объяснить основную идею, а затем переходить к реализации. Это поможет вам находить свои собственные решения.
Итак, нам нужно найти плоскость и как-то записать, где эта плоскость находится, чтобы компьютер смог составить модель.
Хотя многие используют для этого нахождение краёв тени, я решил пойти другим путём.
Я нашёл у себя очень яркий зелёный лазер (можно использовать лазер от обычной лазерной указки, если у вас нет такого).
Лазер я направил через цилиндрическую линзу, которая превращает его в линию. Эту линию я и использовал для нахождения плоскости. Это отлично работает, но имейте в виду, что размер вашего сканера будет сильно ограничен размерами объектива: мой объектив примерно в треть дюйма в диаметре, и я ограничен сканируемым пространством примерно 2' на 6" на 6". Линзы меньшего размера будут работать лучше, но мне это не нужно.
Корпус
![image](https://habrastorage.org/getpro/geektimes/post_images/afe/670/e5d/afe670e5d02827335ee6c6b979eaa0ac.jpg)
Для начала нам нужно сделать ящик, в котором будет находиться сканер. Низ и задняя стенка ящика сделаны из меламина, боковые стороны из фанеры. После того, как всё было сделано, я решил, что меламин является ненужным: возьмите фанеру и закрасьте её белым цветом. Это сэкономит вам несколько долларов.
Установка лазера
![image](https://habrastorage.org/getpro/geektimes/post_images/22c/c7c/1d7/22cc7c1d7453656a3a8656010d46a5be.jpg)
![image](https://habrastorage.org/getpro/geektimes/post_images/4f1/605/ca9/4f1605ca90c56491c1a3320e845f78a2.jpg)
Следующим шагом является установка и крепление лазера.
Я использовал старый кусок дерева. Ролики установлены таким образом, что лазер катится по рельсам в верхней части окна. Там лазер и объектив монтируется так, чтобы плоскость света падала перпендикулярно верхней и нижней части окна.
Установка камеры
![image](https://habrastorage.org/getpro/geektimes/post_images/ca1/ffb/713/ca1ffb7131e5177197c1b431cfb0fd7a.jpg)
Камера должна быть установлена сбоку, выше объекта. Это гарантирует, что лазерная линия будет отклоняться должным образом.
Теперь можно поставить какой-нибудь объект. Я использовал гнома. Посмотрите на камеру, и убедитесь, что лазер заметно отклоняется над объектом. Посмотрите на фотографию ниже, чтобы получить представление о том, что я имею в виду.
![image](https://habrastorage.org/getpro/geektimes/post_images/c1c/8c6/fe6/c1c8c6fe6d3539eafd1d871631339d8a.jpg)
Программное обеспечение
![image](https://habrastorage.org/getpro/geektimes/post_images/e44/00f/c36/e4400fc36340f66f23dfabca36ffb877.jpg)
Идея, лежащая в основе программного обеспечения, также довольно проста. Есть ряд точек, каждая из которых соответствует пикселю на камере. Фокус в том, чтобы узнать, как перевести точки между двумя пространствами. Как оказалось, это сводится к довольно простым уравнением.
Выполняем сканирование
![image](https://habrastorage.org/getpro/geektimes/post_images/69d/e94/132/69de94132ce69eeb925a49462478ea9c.jpg)
Пришло время испытать наш сканер!
Сейчас сканируется лишь одна часть объекта — та, которая направлена в камеру. Однако можно доработать сканер.
Дальнейшее развитие
Ещё некоторые идеи, которые можно реализовать.
- Автоматизация. Matlab, возможно, не лучший выбор в данном случае. Можно написать своё ПО и добавить больше моторчиков.
- Добавить поворот камеры. Наряду с автоматизацией, это позволит вам сделать полную 3d модель.
- В идеале, программное обеспечение должно убирать шум.
От переводчика: Если вам нужны исходные коды, то напишите автору оригинального текста.
![](http://st.habrate.ru/pixel.gif)