Страница 1 из 3

Создадим "народный" 3D сканер?

Добавлено: 25 апр 2011, 15:18
Trudogolik
Предлагаю совместными усилиями разработать объемный сканер.
Собственно механику я беру на себя и обязуюсь безвозмездно выложить все материалы
вплоть до эскизов, фотонграфий и всего что у меня будет.
Но поскольку не силен в программировании - требуется ваша помощь, причем если ктото сможет
создать вполне конкурентоспособную коммерческую программу, мне достаточно будет только
ограниченной демоверсии, "на попробовать".
Итак в чем замысел? Идея такая же как и у других сканеров, т.е. освещение плоскорельефного или объемного
объекта плоским лучом лазера или затемнение "нитью тени". Однако в отдличие например от того же Davida,
в этой идее не нужна задняя сетка или специальный фон.
Посмотрите на рисунки.
Изображение

Изображение

Объект освещается лазером строго перпендикулярно, камера установлена под
неким углом, так, чтобы из точки наблюдения был виден освещаемый рельеф. Линия света, проходящая по краям стола,
на который положен объекти или через центр подставки и нити подвеса являться нулем высоты и от нее можно
вести отсчет высоты рельефа.
Грубо говоря, задача сводиться к тому, чтобы сняв кадр изображения выделить центр линии рельефа и определить
расстояние точек рельефа от нулевой линии, т.е. построить координаты высоты рельефа.
После этого программа должна дать команду (шаг, импульс) на выход LPT или CОM порта в результате чего объект
поворачивается или, в случае, если лежит на столе - перемещается портал со всем закрепленным на нем "махараем"
на один шаг. Делается следующий стопкадр, преобразуется рельеф и так далее.
Полученный массив координат и будет файлом для дальнейшей обработки. В каком виде его удобнее делать можно обсудить.
Вот объяснил как смог...
Что касается демоверсии, то думаю можно ее ограничить пределом в 200 (400) шагов, чтобы будущий владелец
лицензионной версии смог опробовать сканер на полный обророт объекта в упрощенном варианте.
Конечно, поднутрения сосканировать в этой версии невозможно, да и не со всеми объектами может
быть получен хороший резултат, но тем не менее думаю, что многие будут рады и такому варианту.
Я готов приступить к практической реализации, для опытов имею 5-ти милливатный лазер с плоским лучом
и 8-ми мегапиксельную вебкамеру LogiTech С510HD. Станок и вращающийся столик тоже есть. :)
Готов обсудить нюансы конструкции.
Итак, программисты - отзовитесь!

Добавлено: 25 апр 2011, 15:49
logic777
а если взять лазерный дальномер.
оцифровывать его данные и считывать в файл расстояние от горизонтально плоскости для каждой точки?

Добавлено: 25 апр 2011, 16:00
Trudogolik
Не думаю что будет дешевле и быстрее, придется использовать растровое сканирование, т.е. перемещать дальномер на каждую точку механическим способом.
Это конечно быстрее, чем фрезеровать каждую точку, но все равно очень долго и будет зависеть от скорости работы станка.
Веб камера обеспечивает вывод строк 30 раз в секунду, если использовать для вращения шаговый двигатель, то 30 шагов в секунду он может сдалать даже с v r i -c n c контроллером. Если просто на валу шагового движка закрепить объект и вращать его в полушаговом режиме, то на скнирование объемной фигуры потребуется всего 13,33 секунды. Точность сканирования объекта диаметром 50 мм посаженого на вал шагового движка составит 0,4 мм.

Добавлено: 26 апр 2011, 09:28
logic777
резон.
для изготовления лазера с плоским пучком можно использовать цилиндрические линзы с объективов для советских кинопроекторов. там был объектив для звуковой дорожки. в нем 3 хорошие цилиндрические линзы. использовал с обычной указкой. можно на разборке найти с китайских электроинструментов (лобзиков и пр).

Добавлено: 26 апр 2011, 09:46
phill75
Вот что-то подобное http://wiki.makerbot.com/3d-scanner
Изображение

Добавлено: 26 апр 2011, 10:32
Trudogolik
Так это не народный, это ИНОродный :)
В апрельском журнале "Популярная механика"
http://www.netbook.perm.ru/pm.html
за этот год есть интересная статья "Кино из полосок" и в этом же журнале вложена пластинка с зачерненными полосками. Если приложить эту пластинку к непонятному рисунку на странице, то проявляется "зашифрованное" изображение, двигая пластинку можно получить анимацию.
А если осветить объект через эту пластинку, то можно получить сразу кадр с множеством рельефов, типа такого:
Изображение
И еще одно применение "полосатого фильтра", правда не по теме. Если расположить пластинку на ЖК мониторе, и специальным образом подготовить фотографию какого либо объекта, то при наблюдении фотографии через эту пластинку сразу видим изображение в 3D формате. Подобный принцип использован в 3D Nintendo, только там фильтр имеет шаг "сетки" равный размеру пиксела.
http://www.youtube.com/watch?v=UPPCvVmx5Ho

Добавлено: 27 апр 2011, 04:30
ChiS
Trudogolik, а можно сделать видео или (и) пару фотокадров с максимальным разрешением веб камеры, как лазер "отбивает" контур объекта. В кадре должна быть "нулевая высота"

Добавлено: 27 апр 2011, 11:07
furanium
logic777 писал(а):резон.
для изготовления лазера с плоским пучком можно использовать цилиндрические линзы с объективов для советских кинопроекторов. там был объектив для звуковой дорожки. в нем 3 хорошие цилиндрические линзы. использовал с обычной указкой. можно на разборке найти с китайских электроинструментов (лобзиков и пр).
Для давида использовал обычную стеклянную трубку (похожа на пипетку, но один конец запаян - такая уж нашлась :) запаянный конец не используется) и лазерную укзку. Чтобы получить тонкую линию пришлось подрегулировать указку. Первые опыты показали довольно не плохой результат.

Добавлено: 27 апр 2011, 11:13
Trudogolik
ChiS писал(а):Trudogolik, а можно сделать видео или (и) пару фотокадров с максимальным разрешением веб камеры, как лазер "отбивает" контур объекта. В кадре должна быть "нулевая высота"
Конечно можно, в выходные сделаю и видео.
В каком формате нужно?

Добавлено: 27 апр 2011, 15:17
ChiS
Trudogolik, в любом, лишь бы кодаки были. Чем меньше сжат/пережат, тем лучше. Под рукой нет лазера отбивающего линию. В принципе дал наводку студентам-программистам и пообещал хороший бонус за написанную программу, но у них сейчас близится сессия, а у меня самого начались заочники ровно на месяц. Чуток бы раньше.

Добавлено: 27 апр 2011, 16:15
ATM67
Что то подобное я начинал программировать на VB, но забросил.
Алгоритм пробовал такой:
1. Камера снимает кадр с лучом.
2. Второй снимок без луча.
3. Вычитаем из первого кадра второй и получаем кривую рельефа.
4. Вот здесь началась у меня засада, дело в том что кривая по "толщине" засвечивала несколько пикселей. Нужно было как то лишние отфильтровать. По цвету не получилось, по яркости?! :death:

Добавлено: 27 апр 2011, 16:18
Trudogolik
ChiS писал(а): Чуток бы раньше.
Не все сразу :) Идей много, но времени на их даже проверку, а не то что реализацию, у меня тоже не хватает.
Надеюсь не последний день живем, что нибудь успеем.

У кого есть пара светодиодов, дающих тонкую линию, можете реализовать уже проверенную идею, маркер-указатель точки обработки.
Все очень просто, два светодиода крепяться по бокам от шпинделя, под углом примерно 90 градусов относительно оси шпинделя и светят под фрезу. Линия обоих светодиодов должна проходить строго по оси фрезы, вертикально.
Тогда как бы вы ни поднимали и не опускали ось Z, перекрестие лучей всегда будет находиться строго под фрезой.
Изображение

Добавлено: 27 апр 2011, 16:34
Trudogolik
ATM67 писал(а):Что то подобное я начинал программировать на VB, но забросил.
4. Вот здесь началась у меня засада, дело в том что кривая по "толщине" засвечивала несколько пикселей. Нужно было как то лишние отфильтровать. По цвету не получилось, по яркости?! :death:
Так будеть всегда, наверное нужно поставить порог яркости и если выше этого порога подсвечивается несколько пикселей, выделить пиксель средины засвеченного участка.

Добавлено: 27 апр 2011, 16:57
ATM67
выделить пиксель средины засвеченного участка.
Такой метод пробовал, если их не четное количество получается "красиво", а вот с четным... или верхний или нижний?, не "красиво".
Надо придумать комплексный фильтр, чтоб по нескольким параметрам.

Добавлено: 27 апр 2011, 17:24
Trudogolik
ATM67 писал(а): Такой метод пробовал, если их не четное количество получается "красиво", а вот с четным... или верхний или нижний?, не "красиво".
Надо придумать комплексный фильтр, чтоб по нескольким параметрам.
А при любом фильтре, если ты упрешся в четное количество засвеченных пикселов, вынужден будешь выбирать или правый или левый или верхний или нижний, т.е разрешающая способность(точность) в любом случае не будет лучше чем размер одного пиксела.
Оттого я и взял камеру с разрешением 1280x720, чтоб точность была повыше, 640х480 уже не катит :)
Хотя в принципе на заготовке размером со стандартный лист 640 строк - это уже хорошо, точность получается лучше 0,5 мм, обрабатывать тоже такой же фрезой придется.

Добавлено: 27 апр 2011, 18:20
ATM67
Оттого я и взял камеру с разрешением 1280x720, чтоб точность была повыше, 640х480 уже не катит
Я тоже об этом думал,
3. Вычитаем из первого кадра второй и получаем кривую рельефа.
Эта кривая почти траектория движения инструмента по "Y" и "Z".
И чтобы не сильно загружаться математическими расчетами, хотел жестко привязать пиксель с физическим движением инструмента. Например расстояние между соседними пикселями равна 0,5мм для станка или 1мм. То есть меняя этот параметр можно изменять маштаб.
Естественно Истинные программисты, не то что я любитель, смогут решить эти проблемы корректнее или направить на путь истинный.

Добавлено: 27 апр 2011, 18:34
GFM
:) идея хорошая. Как выложите видео или фото-ряд попробую что нибудь напрограммировать. Хотя давно уже не занимался подобного рода проектами. Все в вычислениях, да в базах данных пишу.

Добавлено: 27 апр 2011, 18:36
Dj_smart
Линия обоих светодиодов должна проходить строго по оси фрезы, вертикально.

Тогда как бы вы ни поднимали и не опускали ось Z, перекрестие лучей всегда будет находиться строго под фрезой.
Trudogolik, спасибо за идею:).

Добавлено: 27 апр 2011, 19:49
Fyva
ATM67 писал(а):Такой метод пробовал, если их не четное количество получается "красиво", а вот с четным... или верхний или нижний?, не "красиво".
Надо предварительно увеличить разрешение распознаваемого изображения (кадра) раза в 2-а, используя подходящий метод интерполяции (надо подумать, какой здесь подойдёт лучше). Тогда при "попадании" луча на чётное кол-во пикселей можно высчитать положение середины луча более точно (ну, здесь уже определиться, в какую сторону смещаться в таком случае).

Добавлено: 27 апр 2011, 20:55
Trudogolik
Dj_smart писал(а): спасибо за идею:).
Нема за шо. Только я кажется нарисовал левую часть рисунка неправильно, чето сам понять не могу как оно у меня там светит....
Извиние, мне что за мольбертом стоять, что в балете танцевать, все одно, чтото мешает :)

Добавлено: 27 апр 2011, 22:50
VVChaif
мне что за мольбертом стоять, что в балете танцевать, все одно, чтото мешает
Точно не то что другим...
религия наверно :ggg:
пп за офтоп...

Добавлено: 28 апр 2011, 22:41
Fyva
Trudogolik, у Вас в изометрии перепутаны местами лазеры и лучи :tss: , а на виде сверху всё Ок.

Добавлено: 29 апр 2011, 09:05
ATM67
Светить лучом наверное надо не поперек фрезе, а вдоль строго по центру.

Добавлено: 29 апр 2011, 09:36
Trudogolik
Так я так и объяснил, а вот нарисовал ... Хорошо, что поняли....

Добавлено: 29 апр 2011, 10:18
Fyva
Во:
Изображение

Добавлено: 29 апр 2011, 14:45
Trudogolik
Спасибо! Так и надо.

Вот видео сканирования плоским лучом, правда снято камерой не с того места откуда надо, но зато на столе хорошо видны линии "нулевой высоты"...
http://www.youtube.com/watch?v=QMoCkaeL67s

Добавлено: 11 май 2011, 19:48
ChiS
В общем начал вечером эксперименты. Первый этап пройден, картинку с веб камеры беру, в принципе линию от лазера засекаю. Она в программе выделятся зеленым цветом. Лазер 650 нм
Изображение
Сама программа.
Скачать файл "3d.exe" с файлообменника cncfiles.su (530.5 кб)
Пара проблем конечно вылезла.
Синхронизировать веб камеру с шаговым будет невозможно. Точнее если привязаться к конкретной модели камеры, это можно в принципе сделать, если делать без привязки к марке веб камеры, то идет от неё поток, и нельзя её сказать, а "мне сейчас кадрик пожалуйста". Самое хреновое поток сильно запаздывает, и неравномерно. Так что о 25 кадрах в секунду можно забыть.
Веб камера имеет хреновое разрешение. Хотя на моей написано 2МП в режиме видео, больше 800*600 из неё не выжать. Кроме того веб камера очень сильно жмет картинку, часть спектра и часть разрешения теряется как раз, там где нам надо. => надо смотреть в сторону фотоаппаратов.
Лазер в <5 mW слабоват, можно работать только в тени. Линию из точки делаю с помощью круглой стекляшки, может затухание на ней сильное, но лазер с оптикой, отбывающего линию не встречался.

Добавлено: 13 май 2011, 15:25
ChiS
Интерес к теме ещё есть? Вывод сигналов step/dir и сохранение данных о "скане" дописывать? Если сохранять, то в каком формате?

Добавлено: 13 май 2011, 20:32
Trudogolik
Интерес есть, только меня почти нет, что-то текучка заела, дохнуть некогда....

Добавлено: 19 май 2011, 13:07
Alex64
Ув. Трудоголик, в прошлом году была моя ветка про сканер. Еще раз повторю - если задрать контрастность, нет необходимости заниматься особо вычислениями - импульс засветки в строке легко ловится компаратором микроконтроллера. микро контроллер также легко выделит кадры и строки. При камере расположенной под углом к плоскости сканирования временная отметка точки засветки от начала строки однозначно будет соответствовать высоте рельефа