Съдържание:
- Стъпка 1: Вдъхновение
- Стъпка 2: Инструменти и части
- Стъпка 3: Дизайн на високо ниво
- Стъпка 4: Хардуер
- Стъпка 5: Електроника
- Стъпка 6: Софтуер
- Стъпка 7: Интеграция
- Стъпка 8: Резултати
- Стъпка 9: Ресурси
Видео: Лазерен скенер Raspberry Pi: 9 стъпки (със снимки)
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:51
Лазерният скенер е вградено системно устройство на Raspberry Pi, способно да дигитализира обекти в.obj мрежести файлове за възпроизвеждане с помощта на 3D печат. Устройството прави това, като използва линеен лазер и интегриран PiCam за извършване на компютърно зрение. Лазерът е позициониран на 45 градуса наклонено от лазера и проектира яркочервена линия върху една вертикална част от обекта. Камерата открива разстоянието на среза от центъра, за да даде отрязък на окото. Обектът се върти върху въртящата се тава и процесът се повтаря, докато целият обект не бъде сканиран. Генерираният.obj файл най -накрая се изпраща по имейл до потребителя, което прави системата напълно самостоятелна и вградена.
Този Instructable ще разгледа как е построено устройството, някои резултати и бъдещи стъпки.
Стъпка 1: Вдъхновение
Като запален производител, от няколко години се занимавам с 3D печат и солидно моделиране. Работил съм с много различни инструменти за прототипиране от CNC рутери до лазерни фрези до 3D принтери. Едно устройство, което местният производител все още не е купил, беше 3D скенер - и мога да ви кажа защо.
По -евтините (няколкостотин долара) бяха ненадеждни, изискваха перфектни условия и все пак дадоха доста окаяни резултати. Скъпите бяха … е, скъпи, вариращи до няколко хиляди долара, което прави функцията му не си струва в много случаи. На всичкото отгоре повече пъти решавам да правя измервания и да проектирам модел от нулата, отколкото да се занимавам с повърхностната мрежа, генерирана от сканиране.
Поради това исках да създам бюджетен самостоятелен скенер, за да видя колко добре мога да сканирам обект, използвайки компоненти от рафта.
След като направих известно проучване, видях, че много 3D скенери използват въртяща се платформа и след това множество различни сензори за измерване на разстоянието от центъра, за да се изгради ротационен модел. Много от тях използват двойни камери, подобни на тези на Kinect. В крайна сметка попаднах на Yscanner, който е скенер с ниска разделителна способност, използващ лазер. Поглеждайки към простотата и осъществимостта, тази лазерна техника, при която лазер се излъчва офсетно спрямо камерата, за да се измери разстоянието от центъра, изглеждаше като ясен път напред.
Стъпка 2: Инструменти и части
Части:
- Raspberry Pi $ 35.00
- Raspberry Pi Camera V2 $ 30,00
- LED, резистори и проводници
- Нишка за 3D печат
- 12x12x0.125 дървени листове
- Хардуер M3
- Стъпков двигател - $ 14
- Line Laser - $ 8
- Драйвери за стъпкови двигатели LN298 - 2,65 долара
- Метален бутон - $ 5
Инструменти:
- Поялник
- Лазерен нож
- 3D принтер
- Отвертка
- Клещи
Стъпка 3: Дизайн на високо ниво
Централният компонент в този дизайн е линейният лазер, който се проектира върху вертикална част от обектите. Тази проекция може да бъде заснета на пикамера, да бъде коригирана перспективата и след това да се филтрира преди обработката на изображението. При обработката на изображения може да се събере разстоянието между всеки сегмент на линията от центъра на обекта. В радиални координати тази картина би дала и r и z компонентите. Третото измерение, then, след това се постига чрез завъртане на обекта към нова част. Тази концепция е показана на първата фигура.
За да извърша описаните по -горе действия, използвах Raspberry Pi като наш централен изчислителен блок. Свързах стъпков двигател и драйвер на двигателя към Pi, захранван от външно 5V захранване и управляван от GPIO щифтовете на Pi. Линеен лазер беше поставен на линията 3.3 V на Pi и PiCam беше прикрепен към входа на камерата на Pi. И накрая, беше инсталиран обикновен бутон надолу и светодиод за състоянието, който показва на потребителя в какво състояние е системата. Пълната система е обобщена в системна блокова диаграма.
От самото начало беше планирано да се помести електрониката в лазерно изрязана кутия, държана заедно с Т-слотове и хардуер M3. Електрониката ще бъде скрита от погледа в долното отделение, а капакът ще позволи лесен достъп до поставянето на обекти върху въртящата се табла. Този капак е необходим, за да се сведе до минимум количеството светлина, което прониква в системата, тъй като тази външна светлина може да предизвика шум при окончателното сканиране.
Стъпка 4: Хардуер
Както се вижда по -горе, преди да започна лазерно рязане или 3D печат, използвах Autodesk Fusion 360, за да направя подробен 3D модел на нашия дизайн. Като преглед устройството е обикновена кутия с капак с лазерно изрязани панти. Има два основни слоя на устройството: леглото с електроника и основното легло, с отвори за проводници, които да преминават между двата слоя.
По -голямата част от нашата кутия е произведена с лазерен нож, като дизайните са произведени във Fusion 360 и са нарязани на лазерна резачка Epilog Zing 40 W. Нашите дизайни са показани на фигурите по -горе. От горе вляво, движещи се вдясно, парчетата са основното легло, леглото с електроника, две части за капака, задната част, предната част и двете странични части. В основното легло има три основни изреза: един за монтиране на стъпков двигател, един за насочване на проводници от лазера и един за прокарване на широкия кабел на PiCam. Леглото има монтажни отвори за закрепване на Pi, чертеж и драйвер на двигателя и по -голям изрез за достъп до стъпковия двигател. Парчетата на капака се сглобяват просто, за да образуват триъгълното парче, видяно по -горе, а пантите са просто екструдиране, което е ширината на диаметъра на отвора на страничните дъски. Задната част и една от страничните части имат слотове отстрани, така че портовете на Pi (HDMI, USB, Ethernet, Power) да могат да бъдат достъпни лесно. Предната част е просто парче, което в крайна сметка направих дупки с ръчна бормашина за монтиране на бутона и светодиода. Както се вижда на всички части, нашите части се държат заедно от хардуер M3, използвайки Т-съединения и слотове. Това е метод за държане на лазерно нарязани парчета ортогонално и сигурно. Перките на парчетата се подреждат с прорезите на други парчета, а Т-образният разрез по ръбовете дава място за забиване на гайка М3 в тях, без да се върти. Това ни позволява след това да използваме винт M3, за да заключим парчетата заедно с много малко място за размахване, без да е необходимо монтажът да бъде напълно постоянен.
Избрах да направя по -голямата част от нашите парчета с лазерен нож поради неговата скорост и лекота. Все пак трябваше да отпечатам 3D на парчета поради тяхната 3D геометрия, които биха били по -трудни за създаване на фрезата. Първото парче беше линейният лазерен държач. Това парче трябваше да бъде монтирано на основното легло на 45 градуса от гледката на камерата и да има отвор, така че лазерът да може да се впие плътно в триенето. Също така трябваше да създам монтиране на мотор, тъй като валът на двигателя беше толкова дълъг. Триенето на монтажа се вписва в лазерно изрязаните парчета и понижава равнината, към която е прикрепен двигателят, така че въртящата се платформа да е в едно ниво с основното легло.
Стъпка 5: Електроника
Хардуерът за окабеляване на този проект беше много прост, тъй като 3D скенерът не изискваше твърде много периферни устройства. Двигател, бутон, LED, лазер и камера трябваше да бъдат свързани към Pi. Както е показано, уверих се, че резисторите се свързват последователно с всеки пин, който използвахме, за да защитим щифтовете. Един GPIO щифт беше посветен на контрола на светодиода за състоянието, който щеше да светне, когато устройството е готово за използване, и да пулсира с PWM, когато устройството работи. Друг GPIO щифт беше свързан към издърпан бутон, регистриращ ВИСОК, когато бутонът не е натиснат, и НИСКИ, когато бутонът е натиснат. И накрая, посветих четири GPIO пина за управление на стъпковия двигател.
Тъй като двигателят ни трябваше само да стъпва до известна степен, без да изисква контрол на скоростта, ние избрахме по -прост драйвер за стъпков двигател (L298N), който просто засилва контролните линии, за да се подава към входовете на двигателя. За да научим как да управляваме стъпковите двигатели на много ниско ниво, се позовахме както на информационния лист L298N, така и на библиотеката Arduino. Стъпковите двигатели имат магнитно ядро с изпъкнали пръсти с променлива полярност. Четирите проводника са увити, за да контролират два електромагнита, които захранват всеки друг пръст в двигателя. По този начин, чрез превключване на полярността на пръстите, ние сме в състояние да натиснете стъпката с една стъпка. С тези познания за това как степерите работят от хардуерно ниво, успяхме да контролираме стъпките много по -лесно. Избрахме да захранваме нашия стъпков двигател от 5V захранване в лабораторията, а не от Pi, поради максималното му потребление на ток от около 0,8 A, което е повече, отколкото Pi може да осигури.
Стъпка 6: Софтуер
Софтуерът за този проект може да бъде разделен на четири основни компонента, които взаимодействат заедно: Обработка на изображения, Управление на двигателя, Създаване на мрежа и Вградени функции.
Като обобщение на софтуера можем да разгледаме първата фигура. Докато системата се зарежда,.bashrc автоматично влиза в Pi и започва да изпълнява нашия python код. Системата свети индикатора за състоянието, за да уведоми потребителя, че е стартиран правилно и изчаква натискането на бутона. След това потребителят може да постави елемента за сканиране и да затвори капака. След натискане на бутона светодиодът пулсира, за да уведоми потребителя, че устройството работи. Устройството ще се върти между обработката на изображението и управлението на двигателя, докато пълното завъртане завърши и всички данни за обекта бъдат събрани. И накрая, мрежата се създава и файлът се изпраща по имейл до предварително избран имейл. Това рестартира цикъла и машината е готова да извърши друго сканиране с натискане на бутон.
Обработка на изображение
Първото реализирано нещо беше обработката на заснето изображение, за да се извлече информацията, съхранена в изображението, във форма, която може да се използва за създаване на масив от точки в пространството. За да направя това, започнах, като направих снимка на обекта на платформата заедно с целия фонов шум, създаден от лазера, който свети на гърба на кутията и се разпръсква. Тази картина имаше два основни проблема в суровия си вид. Първо, обектът се гледаше под ъгъл с повишена перспектива и второ, имаше много фонов шум. Първото нещо, което трябваше да направя, беше да отчета този ъгъл на видимост, защото използването на снимката такава, каквато е, няма да ни позволи да определим постоянна височина на обекта. Както се вижда на втората фигура, височината на обърнатата надолу форма „L” е постоянна; въпреки това, тъй като едната страна е по -дълга от другата, изглежда, че имат различни височини на ръба, най -близо до зрителя.
За да поправя това, трябваше да трансформирам работното пространство в изображението в правоъгълник от трапецовидната форма, в която беше по -рано. За да направя това, използвах кода, предоставен от тази връзка, който, когато получава изображение и четири точки, изрязва изображението между четирите точки и трансформира изрязаното изображение, за да компенсира перспективата. Тази трансформация използва четирите точки, за да създаде правоъгълник вместо форма на трапец, както се вижда на третата фигура.
Следващият проблем, който трябваше да бъде решен, беше този на фоновия шум под формата на външна светлина и светлината, отразена от самия лазер. За да направя това, филтрирах светлината с помощта на функцията inRange () на OpenCV. Зададох прага да улавя само червена светлина на определено ниво. За да получа правилната стойност, започнах с мек праг и продължих да увеличавам нивото на прага, докато единствената светлина, която се улавя, беше лазерната светлина на сканирания обект. След като имах това изображение, намерих най -яркия пиксел във всеки ред, за да вземете линия от един пиксел на ред, граничеща с най -лявата страна на лазерната линия. След това всеки пиксел се преобразува във връх в 3D пространство и се съхранява в масив, както е описано в раздела за създаване на мрежа. Резултатите от тези стъпки могат да се видят на четвъртата фигура.
Моторен контрол
След като успях успешно да обработя едно изображение, за да получа парчето на обекта, трябваше да мога да завъртя обекта, за да направя нова снимка с различен ъгъл. За да направя това, контролирах стъпковия двигател под платформата, върху която се намира сканираният обект. Изградих основата на нашата стъпкова функция, като създадох променлива за проследяване на състоянието на двигателя и микростепване чрез превключване на всеки от четирите входа на двигателя.
Създаване на мрежа За да създам мрежа от всички обработени изображения, първо трябваше да конвертирам всеки бял пиксел в обработеното изображение във върха в 3D пространството. Тъй като събирам отделни резени на обекта с цилиндрична симетрия, имаше смисъл да започна да събирам цилиндрични координати. Това имаше смисъл, тъй като височината на картината може да представлява оста z, разстоянието от центъра на въртящата се маса може да представлява оста R, а въртенето на стъпковия двигател може да представлява тета оста. Въпреки това, тъй като съхранявах нашите данни в цилиндрични координати, трябваше да преобразувам всеки от тези върхове в декартови координати.
След като тези върхове са създадени, те се съхраняват в списък и споменатият списък се съхранява в друг списък, който съдържа списъците с върхове, създадени за всяко заснето изображение. След като всички изображения бяха обработени и преобразувани във върхове, трябваше да избера върховете, които всъщност исках да бъдат представени в последната мрежа. Исках горният връх и долният връх да бъдат включени и след това въз основа на разделителната способност избрах равномерно разположен брой върхове, които да се използват за всяко изображение. Тъй като не всички списъци с върхове бяха с еднаква дължина, трябваше да ги изравня, като намеря списъка с най -малък брой върхове и премахна върховете от всички останали списъци, докато всички те са четни. създайте мрежа. Избрах да форматирам нашата мрежа по стандарт.obj файл, тъй като тя е проста и 3D за печат.
Вградена функция
След като устройството беше функционално, го полирах, като добавих пълна вградена функционалност. Това означаваше премахване на клавиатурата, мишката и монитора и безжичното ни изпращане на.obj файла след приключване на обработката. За начало промених кода.bashrc, за да се регистрирам автоматично и да стартирам основната програма на python при стартиране. Това беше направено чрез използване на sudo raspi-config и избор на „Автоматично влизане в конзолата“и чрез добавяне на реда „sudo python /home/pi/finalProject/FINAL.py“към /home/pi/.bashrc. В допълнение към това, аз също добави бутон и светодиод за състоянието за потребителски вход и изход. Бутонът ще позволи на потребителя да каже на устройството кога да започне сканирането, а светодиодът ще информира потребителя за състоянието на машината. Ако светодиодът свети, устройството е готово да започне ново сканиране. Ако светодиодът пулсира, устройството в момента сканира. Ако светодиодът е офис, има софтуерна грешка, изискваща рестартиране на системата. И накрая, разреших на устройството да изпраща.obj файла по имейл. Това беше направено с помощта на smtplib и имейл библиотеки. Тази възможност за изпращане на имейли ни даде много удобен и безжичен начин да доставим произведения файл на потребителя за достъп до много различни платформи.
Стъпка 7: Интеграция
След като изработих различните части на устройството, го сглобих заедно. Фигурата по -горе показва по ред:
а) сглобена кутия отвън
б) сглобена кутия вътре с камера и лазер
в) изглед отвътре на леглото с електроника
(г) отзад на Pi с достъп до Pi портове и 5V вход на двигателя
(д) бутон с LED пръстен и индикатор за състоянието в предната част на устройството
Стъпка 8: Резултати
Лазерният 3D скенер успя да сканира обекти с прилична прецизност. Характеристиките на обектите са различни и разпознаваеми, а частите бяха много лесни за 3D отпечатване с помощта на софтуер за нарязване като Repetier. Фигурите по -горе показват някои примерни сканирания на парче дърво и гумена патица.
Едно от най -големите ни открития и успехи, които открих по време на тестването, беше консистенцията на устройството. По време на множество опити на един и същ обект, скенерът успя да създаде.obj файл, който всеки път беше много много подобен, дори ако леко променихме разположението на обекта. Както се вижда в трите отделни сканирания, всички те изглеждат много сходни, улавяйки едни и същи детайли и същото количество детайли. Като цяло бях много впечатлен от последователността и здравината на нашата система.
Една от променливите, които наистина успях да настроя, е разделителната способност на сканирането. Тъй като в стъпката има 400 стъпки, мога да избера колко голям всеки ΔΘ да диктува ъгловата разделителна способност. По подразбиране ъгловата разделителна способност е зададена на 20 итерации, което означава, че всеки кадър, моторът се върти с 20 стъпки (400/20 = 20). Това беше избрано главно в интерес на времето - отнема около 45 секунди, за да завършите сканирането по този начин. Ако обаче искам много по -качествено сканиране, мога да увелича броя на итерациите чак до 400. Това дава много повече точки за конструиране на модела, което прави много по -подробно сканиране. В допълнение към ъгловата разделителна способност, мога също да регулирам вертикалната разделителна способност или колко различни точки избирам да оправя по лазерната част. За подобен интерес във времето, аз имам тази настройка по подразбиране на 20, но мога да я увелича за по -добри резултати. Играейки с тези параметри на ъгловата разделителна способност и пространствената разделителна способност, успях да събера резултатите от различни сканирания по -долу на последната фигура. Всеки етикет е форматиран така, че да е ъгловата разделителна способност x пространствената разделителна способност. Както се вижда в настройките за сканиране по подразбиране, характеристиките на патицата са разпознаваеми, но не са подробни. С увеличаването на разделителната способност обаче започват да се показват отделни точни характеристики, включително очите, клюна, опашката и крилата на патицата. Сканирането на изображението с най -висока разделителна способност отне около 5 минути. Виждането на това високо ниво на постижима резолюция беше много голям успех.
Ограничения
Въпреки успешните резултати от проекта, все още има няколко ограничения при проектирането и изпълнението. С използването на лазера възникват много проблеми с това как светлината се разсейва. Много обекти, които се опитах да сканирам, които бяха полупрозрачни, лъскави или много тъмни, се оказаха обезпокоителни с това как светлината се отразява от повърхността. Ако обектът беше полупрозрачен, светлината щеше да се абсорбира и разпръсне, което прави много шумно четенето на филийки. В лъскави и тъмни обекти светлината или ще се отрази, или ще се абсорбира до точката, от която би било трудно да се вдигне. Освен това, тъй като използвам камера за заснемане на характеристиките на обектите, нейното усещане е ограничено от линията на видимост, което означава, че вдлъбнатите обекти и острите ъгли често се блокират от други части на обекта. Това е показано в нашия пример за гумена патица, тъй като опашката понякога ще загуби кривината си при сканирането. Камерата може също да открива само повърхностни структури, което означава, че дупки или вътрешни геометрии не могат да бъдат заснети. Това обаче е често срещан проблем, който имат и много други решения за сканиране.
Следващи стъпки
Въпреки че бях доволен от резултатите от нашия проект, имаше няколко неща, които биха могли да бъдат приложени, за да го подобрим. Като начало, в текущото състояние, разделителната способност на сканирането може да бъде променена само чрез промяна на кодираните променливи в нашия код. За да се направи проектът по -вграден, потенциометър за разделителна способност може да бъде включен, така че потребителят да може да променя разделителната способност, без да се налага да включва монитор и клавиатура към скенера. В допълнение, скенерът създава изображения, които понякога могат да изглеждат назъбени. За да се поправи това, могат да се приложат техники за изглаждане на мрежата, за да се изгладят неравностите и суровите ъгли. И накрая, открих, че пикселните координати не се мащабират добре в реалния свят. Създадените от мен мрежи бяха 6 до 7 пъти по -големи от действителния обект. В бъдеще би било изгодно да се приложи начин за мащабиране на мрежите, така че те да са по -точни спрямо реалния размер на обекта.
Стъпка 9: Ресурси
Включих кода, STL файловете за печат и DXF файловете за изрязване за целия проект.
Първа награда в конкурса Raspberry Pi 2020
Препоръчано:
Електрическа брава за врата със скенер за пръстови отпечатъци и RFID четец: 11 стъпки (със снимки)
Електрическо заключване на врата със скенер за пръстови отпечатъци и RFID четец: Проектът е проектиран, за да се избегне необходимостта от използване на ключове, за да постигнем целта си, използвахме оптичен сензор за пръстови отпечатъци и Arduino. Има обаче хора, които имат нечетлив пръстов отпечатък и сензорът няма да го разпознае. След това мислене за
Как да използвате RPLIDAR 360 ° лазерен скенер с Arduino: 3 стъпки (със снимки)
Как да използвам RPLIDAR 360 ° лазерен скенер с Arduino: Аз съм голям фен на изграждането на сумо роботи и винаги съм в търсене на нови интересни сензори и материали, които да използвам за изграждането на по -добър, по -бърз и по -умен робот. Разбрах за RPLIDAR A1, който можете да получите за $ 99 на DFROBOT.com. Казах, че имам намерение
Инфрачервен лазерен етикет с Raspberry Pi Zero: 6 стъпки (със снимки)
Инфрачервен лазерен етикет с Raspberry Pi Zero: Този Instructable ще премине през процеса за създаване на игра с инфрачервен лазерен етикет, използвайки базов сървър компютър и нула Raspberry Pi за всеки играч. Проектът до голяма степен разчита на Wifi връзка за комуникация със сървъра, което прави
Мини CNC лазерен гравер за дърво и лазерен нож за хартия .: 18 стъпки (със снимки)
Мини CNC лазерен гравьор за дърво и лазерен нож за хартия. Това е инструкция за това как направих лазерна CNC гравираща машина на базата на Arduino и тънка резачка за хартия, използвайки стари DVD устройства, 250mW лазер. Площта за игра е максимум 40 мм х 40 мм. Не е ли забавно да правите собствена машина от стари неща?
3D скенер за тяло с помощта на Raspberry Pi камери: 8 стъпки (със снимки)
3D скенер за тяло, използващ Raspberry Pi камери: Този 3D скенер е съвместен проект в BuildBrighton Makerspace с цел да направи цифровите технологии достъпни за групи от общността. Скенерите се използват в модната индустрия, за персонализиране на дизайна на дрехи, в индустрията на игрите за