Hacker News new | past | comments | ask | show | jobs | submit login
Show HN: 3dasd – open-source DIY room-scale 3D scanner (3dasd.com)
248 points by dvoros on June 24, 2021 | hide | past | favorite | 63 comments



Taking a break from my software developer job, I've started to work on my first ever hardware project and with too much free time on my hands it quickly turned into something bigger than I've anticipated.

Working with a friend, we wanted to explore the use of 3D scanners on construction sites but quickly got stuck as no cheap hardware was available to fool around with. How hard can it be to build one I thought? I've already programmed Arduinos to blink LEDs before, this isn't that different... Then a few months into the project I've realized that I've spent way too much time on this to let it go to waste and started turning this into a community project.

At this point I've reached the first milestone of having a working 3D scanner with (hopefully) enough documentation to help others get started with building their own. I'm sharing this with you now to spread the word, get feedback and to invite you to contribute if you feel like it! (:

Kind Regards, Daniel


Great project Daniel! Really cool that you're venturing out of software land. Looks like you would have learned a lot about Arduino from this!

I've recently been playing around with 3D scanning, but using photogrammetry. You could record high res video or take high res photographs of a scene, and then use the program Meshroom or colmap to convert those photos (cut video in to 1fps stills) in to a 3D model. If you want to play around with dense scans that may be worth a try.

Doing it with a LIDAR is nice though because it is the correct scale, something photogrammetry inherently fails at without additional sensors.

I'm a very project oriented learner, and I'm always making things and learning stuff and then pivoting with my projects. I've been doing that for 20 years and it's great because I learn whatever the hell I want and after I get good at it I can get a job in that area. So keep up the hardware projects! This one looks great.


Thank you very much for the kind words and the recommendation! Adding a camera is probably the next step I'll take. Adding color information to the point cloud would be a huge plus. I haven't tried photogrammetry before but I assume it works best if things are captured from multiple angles so my current setup of taking measurements from a single point isn't the best fit. But maybe combining scans from different standpoints...


Yes probably best to experiment with photogrammetry separately and then think about how to integrate it. But it can be difficult to ensure you got 100% coverage so programming a full scan with your gimbal could be useful. You would want to do it from multiple locations. But I’ve found just handheld 4k video from a phone is a great place to start. You can extract frames from video easily with this script I wrote:

https://github.com/tlalexander/rover_video_scripts/blob/mast...


In my experience, photogrammetry had issues with transparent and reflective surfaces, so wooden floor or brushes metal kitchen appliances wouldn't work well.

As for the scale, you can always just bring a measurement stick and place it on the floor so that you have an object with known sizes to use to calibrate the scale after the 3d recognition.

The gold standard in my opinion is a laser pattern protector in combination with photogrammetry. That way, you can project a pattern onto objects that would otherwise be too uniform in color.


Lasers will also have problems with anything reflective, or transparent to the wrong wavelengths.


We've been working on using the new iOS devices and integrating their LiDAR data into our photogrammetry pipeline. We've also developed an app that gets good scale using only photogrammetry and AR functionality


Great project and excellent presentation!

I've been trying to build something similar for tracking birds / panoramas / photogrammetry while avoiding using non-printed parts as much as possible but haven't been very successful so far. Because of that I'm particularly interested in the printed gears you are using. Maybe you could help me with some of my questions and concerns.

It looks like the whole thing is designed to be stiff, which means that the gears are pretty much at a fixed distance from each other. Doesn't that lead to backlash / play if the gears are a little bit too far apart or vibrations if there is too much pressure pushing them against each other? I've been worried about this and experimented with mounting the stepper motors on flexing parts to keep the pressure consistent and allow for more imprecision in the prints but I never really tried whether I can get away without that, so I'd be interested about how well this is working for you.

Pictures on the flexible motor mount idea: https://imgur.com/a/mM1Uql9

I would also like to know if there are any signs of wear after using the thing for a few days and what materials were used. I couldn't find anything on the type of filament on your website (did I overlook something?). I've only ever printed PLA so far and found that the gears would turn more smoothly after being used for a while. I imagine that the effect of wear might be different on the design without flexing parts.

Is it correct that the upper part is resting / sliding on "base-2"? Or is the bearing doing most of the work? Does it wobble at all? That was another one of the problems I had.


Hey there, thank you for the feedback!

Yes, this is completely stiff, no flexible parts. I've experimented with a few gears and different distances between them. I've found that this herringbone gear works very well. I don't experience any visible backlash, but the gearing ratio also helps to suppress that.

I've printed everything from Hobbyking Premium PLA. Just as you've described, the rotation gets smoother after some wear. But even after 30-40 hours of use they still don't seem to become loose at all.

Securing everything on the bearing, there's no visible wobbling. I really recommend using a bearing if possible, it makes things so much easier. (:

Good luck with your project! (;


Thanks a lot for the answers. And for everything else, too!


if you really care about backlash, just measure it and then add a correction in your motor controller.

Another way to do this is to always move back to endstop zero, and only move forward. THis is very limiting.

The biggest problem I had was all my PLA prints melted in the direct sun!


> if you really care about backlash

At 1200 mm equivalent a picture is only about 1.15° high, so accuracy is important :)

> just measure it and then add a correction in your motor controller.

I think your first idea doesn't really work for tilting because there is little friction and the camera isn't going to be perfectly balanced (the center of gravity also changes with the focal length and even the focus). When gravity pulls the camera towards one direction backlash is less of a problem, but when it's near the tipping point it becomes really shaky and sensitive to disturbances. Past the tipping point it is biased towards the other direction.

Preloading might be an easy fix but at the cost of acceleration.

> Another way to do this is to always move back to endstop zero, and only move forward. THis is very limiting.

At least for panning in panoramas this isn't a bad solution at all. I think both your ideas are good for panning with planned paths.

> The biggest problem I had was all my PLA prints melted in the direct sun!

Was it white PLA? So far I've only had stuff bend out of shape in the car.


I've built a similar device to this (originally for a solar tracker that keeps the sun at high magnification in the middle of the frame, but it turns out to be ideal for panos as well).

It's a DSLR with crop sensor, 300mm lens, stepper+gear for azimuth and stepper+belt for altitude (with gearing to get more torque for both). I used this system with Hugin to assemble 180 degree x 180 degree, 5 degree azimuth and altitude steps (so, about 5X your resolution, I don't have the same zoom as you). Results are great- I can give this straight to hugin, update a PTO file with my known angles, and it assembles without any futher optimization. I do pan with a planned path.

If the belts are real tight, backlash is neglible (seems to be a lot smaller than any gear I could print). If you're having that much backlash on tilt (that it's shaky and sensitive) I think you might need to re-engineer the frame to be more stiff (which will cause the shakes to dissipate faster) or tune your motors (tuning velocity and acceleration). You might also be able to use a spring to keep the gear in place. I tried to get a 3D-printed worm gear working, but never made it compact enough to be practical for the altitude.

I had white PLA, in direct sunlight/90F ambient for hours, and it warped. I only noticed because I was inside watching the incoming images and the altitude staged started to "melt" causing massive positional losses.


Good results without optimization at 300 mm sounds pretty impressive. Maybe belts are the way to go. Thanks for taking the time to elaborate!


A great idea :)

I see that you've been using EasyEda. I myself are also doing a hardware project to get some more variation than the daily software grind. After trying out Altium and then being shocked by their recent price increase, I'm now using KiCAD.

But KiCAD doesn't have any autorouter. And the one in Altium failed for my FPGA board. I also tried ELECTRA and it failed, too.

Did you route things by hand? If not, what tool did you use? How did that work for you?


Thanks for the kind words!

I've started with EasyEDA and stuck with it as it worked okay so unfortunately I can't help with a comparison. I've tried the autorouter and it worked (=didn't fail) for earlier prototypes when the board wasn't so packed, but it couldn't do it (was hanging indefinitely) for the current layout so I did it manually. It wasn't that painful... (:

Good luck with your project! (;


Congrats! Seems like a neat project. I just skimmed through the article and saw "it tries to be cheap". Maybe you can evaluate whether ultra-cheap steppers can give you acceptable results. They cost around 1/10 compared to the kind you're using. They are a lot slower and have less torque, but probably could give similar results.

Good luck and thanks for sharing this!


Sorry forgot to mention I'm thinking specifically of the 28byj-48 motors. I had an (unfinished) project making a motorized water sprinkler for watering lawns in non circular shapes, and these motors were up to the task. If you can achieve your goal with them, you'll probably shave a nice chunk of the cost (not only on the motors but also on the drivers). Cheers


Nice project! I did almost the same (Garmin v3 Lidar + steppers), but based on an ESP32 instead of raspi + arduino. The problem I have is the scanning speed vs resolution. The sensor is quite slow, so it takes a really long time to scan anything (hundred of hertz seems fast, but when you do the math you realize it's not fast at all).


Cool project! You could also have used a 2 Axis Brushless Gimbal Stabilizer for most of the mechanics stuff, coupled with either your Garmin Lidar Lite module, or a 360 degrees Lidar module.


Thank you for sharing and making in open. Awesome work.


This is really cool. I'm looking to build a body scanner so I can import a 3d model of my body. I can then use this model in Marvelous Designer to make shirts and pants and other clothes that will literally fit perfectly to my body.

I'm thinking of a platform on which you stand, with a rotating arm under it which holds the arduino which then scans up and down, the arduino relays the distance and both angles to a processor which turns the data into a point cloud and then into a 3d model.


Ask HN: If I have a budget of maybe ~$1000, what would be the best body scanner I can get? Happy with either DIY or for-purchase.

Keen to try some ML projects with a body-sized scanner.


Neat! Looks like the project uses the same LIDAR module (Garmin LIDAR-Lite v3) that's on the Ingenuity helicopter presently on Mars.


How does this improve on taking a video with your phone and feeding it to one of the OpenSource 3D reconstruction packages (such as e.g. MeshRoom [1])?

[1] https://alicevision.org/#meshroom


Meshroom definitely can't do 3D reconstruction from monocular video. But there are other algorithms that can. Just Google "3D reconstruction monocular" and you get loads of demos. E.g. https://youtu.be/TZ1eToXQwN0

Unfortunately I don't know of any that are open source and not research-project style code (i.e. weeks of work to maybe get working).

Matterport are the market leaders in this sort of thing but it's commercial.

https://matterport.com/


> Meshroom definitely can't do 3D reconstruction from monocular video.

It's quite possible we're not talking about the same thing here, but for my understanding of what "3D reconstruction from monocular video" means, Meshroom most certainly can do that.

To wit, I recently shot a video of a house with my drone, which happens to have just one camera. I then proceeded to extract the frames of the video and fed them to Meshroom.

I am now in possession of a full 3D textured model of said house.

[EDIT]: now that I've watched the video you posted, I see they do the reconstruction in real time, which is cool and which Meshroom can't do. However, if you aren't in a rush, the end result is the same.


I don't think it helps meshroom much because (afaict) there's no easy way to tell meshroom the angular information that's known from the stepper controller (I couldn't find anything obvious in the docs). If that worked, you could avoid the expensive and error prone initial orientation-determining step, which is absurdly slow.

I've done similar to this article but using Hugin as a panorama constructor. It speeds up the process signnificantly (because again you don't have to search for image orientations if you "know" them).


from my experience photogrammetry suites tend to produce results that are a lot more 'delusional' than measuring with an actual sensor, especially if you're photographing reflective/metallic/transparent surfaces.

Yeah, LIDAR is sensitive too, but usually the data is missing rather than random/delusional. Missing points tend to be less labor-intensive to clean up on the results than erroneous points that totally deform whatever mesh they're a member of.


I'm not familiar with the 3d scanning tech, but my first thought when looking at the examples is that they do not look really detailed. What is the max "resolution" of the machine? Can it scan objects with a higher number of particles?


Yes, you're right, this is extremely low resolution, compared to commercial scanners. This is mostly the result of using a point-by-point scanner. One thing I have on my plate is exchanging that for a field-of-view scanner (probably a Livox Mid-40).

One interesting feature of the current setup is the ability to "zoom in" on details. With the microstepping mode of the stepper motors, one can take 2/4/8 times as dense measurements of an area if necessary. The limiting factor here is time. A single scan takes around 40 minutes with the current resolution (1800*300).


You could half it with a double header (one forward, one backward scanning at the same time)


quart it with a quadruple header!


Max resolution are the steps of the stepper motor per activation. (1.8° step-angle) https://datasheetspdf.com/pdf/1260602/Schneider/NEMA17/1

It could be increased by adding multiple distance measurement sensors in parallel per scan direction.

It could also be made more precise by adding a "sub-gear" that only turns within the frame of the step. But this would lengthen the scan process considerably.

To shorten that again, one could add the same scan head into the opposite direction.

At the moment the resolution is depending on the distance from the scanning device. Meaning the larger the distance, the more the angling distributes the points on a surface.

There are no real ways to mitigate that with a stationary device. Density can be improved though with rescans, using the noise to increase, although there the noise blurs the points along the line to the degree.


Stepper motors can be microstepped (typically up to 1/32 or 1/64). In my experience, this works poorly as the microsteps are not evenly spaced. I find gearing works better.


I wonder if it would be possible to use the same module or moving and interface with with the lidar/camera of the iphone 12. The project could be even cheeper and probably the accuracy increase.


Bookmarked. Looks like a great project. A bit off topic but semi related as this requires 3D printed parts. What’s a HN recommended 3d printer?


Regards your specific question, many start with an Ender 3 series. I did, no regrets. It performs well out of the box while you become aware of what the possibilities are. Some expensive printers will have features costing more than an Ender 3, so this is worthwhile learning.

If you have the $$$ to skip this step then you can. But I don't know what bigger/better printer to go for as I have not the budget/space for one.

Other thoughts:

1. 3D model considerations take significant time. Even trying to minimise effort in modelling, many models are not printable without at least some tweak.

2. There is much to be gained from using less material. Reduced cost/wastage and increased speed for end results. Software does support this of course but the details will take time.

3. Different printing techs need different approaches to the model. IE Resin printing may need drainage to let unhardened resin leak out. FDM printing may need supports.

TL;DR there is plenty to learn, budget time accordingly whatever $ you have.

Would I do it again? Absolutely.

Edit: concision, realisation may not desire a budget approach.


My boss got me hooked on Markforged. (Caveat, my next home printer is probably a Prusa.)

They are ridiculously expensive compared to alternatives, but the printed parts are on a whole other level, as they are a carbon-reinforced Nylon: They are much more fracture resistant and mechanically stable than PLA or ABS. They're a U.S. company and are very responsive to support requests. The printer build quality is good, I rarely had parts warp or detach, and the ability to print without deformation at a 60 degree overhang and 50 micron layer allowed printing parts pretapped for machine screws. The cloud software keeps a good catalog of your .STLs and allows some degree of slicer tinkering. Also, you can start a print remotely, which is awesome when you want to go home, finish a part, start it at night, and it's already on the build platform when you show up the next day. (The pricier models show photos remotely, so you can abort a failed job from home. The top-of-the-line model can laser scan specific layers and does its calibration automatically.)

At that job, we had printers of wildly different price category and technology---Form 2, uPrint, Carbon 3d, NanoDimension, ProJet MJP 5600, Fortus---and the workhorse for getting decent parts out quickly was overwhelmingly the Markforged.

-----

With all that in mind, I would never buy a Markforged for my home because I don't print enough to justify the cost. If I ran a general purpose printing lab, it would be my absolute first choice. I also wouldn't buy a non-European/non-American printer as a personal, moral preference. So, I'm waiting until the end of November to buy a Prusa, because that seems to be the only time they are discounted.


The Creality Ender 3 is probably the best entry-level 3D printer you can get. It does need a tiny bit of tinkering in some case, but it can print incredibly well, for a pretty low price.

If you just want to print as well but without any risk, a Prusa i3 pre-assembled is the best bet, but it does cost 4x+ the price of an Ender 3.


I've started with a Creality CR-10S, and later on get a Prusa MK3S, meanwhile my brother took the old CR-10S, and get two Ender 3s.

I have to admit, that the CR-10S, and the Ender 3 is a lot of printer for the amount of money they sell them for - though, of course, you need to be prepared to fiddle with the printer more. But if you dial it in, and you gain experience, there aren't a lot of things you couldn't do.

I built my own Prusa, I think it's a fun experience, if you like building. My CR-10S came in two parts, I needed to screw them together... my MK3S came like a car after a crash test. But since put together, I haven't had to touch it, it operates like a wonder.

Of course a Prusa's price tag is much steeper compared to an Ender's. Prusa is an European product, the construction in my opinion is better, and they take a lot of care of the hardware and software. I don't want to go into nationalistic battles, but I was happy that I could buy a local product. Our Ender 3 didn't have a bootloader installed, so when we wanted to update the firmware to a more up-to-date Marlin, we had to take apart the machine, and flash a bootloader on the AVR, which is... troublesome for somebody who doesn't know about microcontroller flashing too much.

Regardless, I think for a beginner, the Ender has an extremely good value, and perfect to get into 3D printing, as it opens so many possibilities. I could print parts for the household, which I wouldn't ever find anywhere else. I've fixed multiple household appliances. The freedom that if I need something special, I can make it.


Thanks for all the replies everyone. I will do some more research on the Ender and Prusa.


Author should look into surface reconstruction algorithms.

E.g. https://people.eecs.berkeley.edu/~jrs/papers/eigentalk.pdf


Thank you for the recommendation!


Will this work with small 5cm objects? For ages I am trying to find a good (and cheap) scanner able to scan small objects mostly used in cars. Had mixed results with tools like meshroom. I would immediately bi It a scanner when less than 1000usd.


This is for scanning larger things (rooms, buildings). For smaller objects, there's another open-source project that you might find useful: openscan.eu


Thanks. I ordered one :)


Cool project, and as an amateur tinkerer, I love to see these things open sourced and documented as there is so much to learn.

I'm a little surprised by the nema motors, as they look overdimensioned for the task. Is there a good reason? Stability/precision?


I could justify that with being so standard that it's available everywhere but TBH that's just what my local electronics store had. (: I've also realized that it's probably overkill for the job and added a note in the documentation.


I think that's a good enough justification :) I was more curious if it came as a result of actually needing it. Btw, great job on the website and examples.


Awesome work!

How long does it take to scan a room? And when scanning something like an apartment with multiple scans, how do you piece them together / automatically offset the points collected in the next scan?


Thanks for the feedback! A single scan takes around 40 minutes. The multi-scan example took me an afternoon to take. (: I've tried Meshlab but then ended up using CloudCompare for combining the point clouds. That was done completely manually.


Sweet work! If you are interested in 3D reconstruction, have a look at http://www.open3d.org.


On Android if you have a powerful enough phone (or better, built in Lidar) then the "3D Live Scanner" app by Lubos Vonasek Programmierung is something to checkout.


This is really cool. I'm looking to build something similar


Hi! Nice job! How much time does it take to perform a full scan?


Around 40 minutes.


Awesome work! How long does it take to finish this project?


Here's a very rough estimate. This is how long it'd take for someone who's familiar with the steps. E.g. if you've never tried soldering, it could take much longer. - Days/weeks of waiting for components to arrive. (: - ~20 hours of 3d printing - 1 hour of soldering - 4 hours of cable assembly (worst part) (: - 4 hours of assembly - 4 hours of installing software


Hmm no gallery of scans?



Doesn't work on (my) mobile phone.

Some static images would be nice.


Yeah, it's weird on mobile. I had to drag a very narrow column from the very left side to the right to make the point cloud visible. Thanks for the feedback, I'll add some images!




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: