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
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.
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.
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.
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! (;
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!
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?
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! (;
Good luck and thanks for sharing this!
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.
Keen to try some ML projects with a body-sized scanner.
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.
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'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).
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.
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).
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.
E.g. https://people.eecs.berkeley.edu/~jrs/papers/eigentalk.pdf
I'm a little surprised by the nema motors, as they look overdimensioned for the task. Is there a good reason? Stability/precision?
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?
Some static images would be nice.
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.
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.
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 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.
https://github.com/tlalexander/rover_video_scripts/blob/mast...
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.
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.